라벨이 개발인 게시물 표시

아두이노 프로젝트 폴더 설명.

 v. Arduino IDE 2.3.6 폴더 이름 주 사용 위치 IDE/빌드 시스템 동작 주 용도 src 스케치 / 라이브러리 컴파일 대상에 포함 핵심 소스 코드 (.h, .cpp) utility 라이브러리 컴파일 대상에 포함 라이브러리 내부 보조 코드. 권장하지 않음. data 스케치 파일 시스템에 업로드 (컴파일 X) 웹페이지, 설정 파일 (.html, .json) examples 라이브러리 IDE '예제' 메뉴에 표시 라이브러리 사용 예제 (.ino) docs 스케치 / 라이브러리 무시 (인식 안 함) 프로젝트 문서 (Markdown, PDF) tests 스케치 / 라이브러리 무시 (인식 안 함) 유닛 테스트 코드 extras 기타 무시 (인식 안 함) 기타 자료 (데이터시트, 3D 모델) schematics 스케치 / 라이브러리 무시 (인식 안 함) 하드웨어 회로도 assets 스케치 / 라이브러리 무시 (상황에 따라 다름) 리소스 파일 (이미지, 폰트 원본) 1. 아두이노 IDE가 특별하게 인식하는 폴더. 이 폴더들은 아두이노 IDE가 컴파일하거나 메뉴에 표시하는 등 특별한 기능을 수행합니다. - src 아두이노의 공식 스펙은 src를 표준으로 권장합니다. 이 폴더 안의 모든 .c, .cpp 파일은 스케치와 함께 자동으로 컴파일됩니다.  .ino 파일이 너무 길어질 때 코드를 기능 별로 분리하거나, 해당 스케치에서만 사용할 라이브러리를 넣을 때 사용합니다. 하위 폴더를 자유롭게 둘 수 있고, 아키텍처별 코드를 src/arch/avr, src/arch/esp32처럼 나눠 쓰기도 합니다.  내_프로젝트_폴더/ ├── 내_프로젝트.ino └── src/     └── MyLibrary/      <-- (사용하려는 라이브러리 폴더)         ├── MyLibrary.h         ├── MyLi...

pdf 분할하는 파이썬 스크립트.

import os import tkinter import tkinter . filedialog import tkinter . messagebox # pip install PyPDF2 from PyPDF2 import PdfReader, PdfWriter # pdf 파일 경로 print ( "Select PDF File." ) pdf_path = tkinter . filedialog . askopenfile () # 출력 폴더 print ( "Select Save Folder." ) pdf_path_dest = tkinter . filedialog . askdirectory () # PDF 파일 읽기 reader = PdfReader( pdf_path . name ) chapter_ranges = {     "제01장" : ( 13 , 22 ),     "제02장" : ( 23 , 37 ),     "제03장" : ( 39 , 54 ),     "제04장" : ( 55 , 74 ),     "제05장" : ( 75 , 90 ),     "제06장" : ( 91 , 113 ),     "제07장" : ( 115 , 137 ), } # 분할된 파일 저장 경로 output_files = {} for chapter , ( start , end ) in chapter_ranges . items ():     writer = PdfWriter()     for page_num in range ( start - 1 , end ):   # 페이지 인덱스는 0부터 시작         writer .add_page( reader .pages[ page_num ])     output_path = f " { pdf_...

Godot 에서 해상도 화면 비율 유지하는 방법.

화면 비율 설정. 화면 비율을 유지한채 윈도우 창 사이즈를 변경하는 방법.  아래 예의 해상도는 FHD 1920 1080. - Project Settings에서 다음 항목들을 설정합니다. Display > Window > Viewport Width: 1920 Display > Window > Viewport Height: 1080 Display > Window > Mode: "windowed" Display > Window > Stretch Mode: "viewport" Display > Window > Stretch Aspect: "keep" - 윈도우를 마우스로 사이즈 조절할때 비율을 유지하는 코드. var window_size = Vector2i(1920, 1080)  # 초기 해상도 설정 func _process(_delta):     if DisplayServer.window_get_size() != window_size:         var window_w = DisplayServer.window_get_size().x         var window_h = window_w / 16.0 * 9.0                  DisplayServer.window_set_size(Vector2i(window_w, window_h))         window_size = DisplayServer.window_get_size()

git 오류 수정 - fatal: detected dubious ownership in repository at

- 에러 메세지. fatal: detected dubious ownership in repository at <PATH> - 해결. 저장소마다 safe.directory로 지정해야 함. git config --global --add safe.directory P:\_git\path 저장소 폴더를 통채로 지정할 수도 있음. git config --system --add safe.directory P:\_git\* 컴퓨터를 혼자 사용할 경우 아래와 같이 모두 풀어도 무방함. git config --global --add safe.directory '*' 설정은 다음 경로의 파일에 있음. C:\Users\<NAME>\.gitconfig or C:/Program Files/Git/etc/gitconfig - 원인. git 저장소는 한 사용자만 사용해야 함. 한 컴퓨터를 여러 명이 사용하거나, 공유 폴더에 놓고 사용할 경우 다른 유저가 접근할 수 있어 문제가 생김. 그래서 사용자가 다를 경우 접근하지 못하도록 막았음. safe.directory 옵션을 만들어 다른 컴퓨터에서 복사해 오거나 등의 경우 사용할 수 있도록 했음. - 참고. https://stackoverflow.com/questions/71849415/i-cannot-add-the-parent-directory-to-safe-directory-in-git https://github.com/git/git/commit/8959555cee7ec045958f9b6dd62e541affb7e7d9

Dart 3 ready (flutter) 소식.

https://pub.dev/ 의 라이브러리에 'Dart 3 ready' 마크를 보고 찾아 봤습니다. 개발자 입장에서 꼭 체크해야 할 부분은  - null safe 강제 입니다. Dart 2 버전까지는 컴파일 옵션으로 null safe를 끌 수 있었습니다. 하지만 Dart 3 부터는 null safe를 끌 수 없습니다. 이외에  - Dart 언어에 추가되는 언어 스펙이 있습니다. - 커맨트 라인 툴 들이 통합됩니다.  예) dartfmt 가 dart format 으로. 즉 앞으로는 dart format 형식으로 만들어야 합니다. - 2023년 봄에 Dart 3 베타 버전 출시를 계획하고 있습니다. 직접 작성한 코드와 외부 라이브러리도 null safe를 사용했다면 크게 손 볼 곳은 없을 거 같습니다. 하지만 버전업 초기의 혼란은 있을 수 있으니 가급적 Dart 3 출시 일정은 피하는 게 좋을 거 같습니다. - 출처. https://medium.com/dartlang/dart-3-alpha-f1458fb9d232 https://medium.com/dartlang/the-road-to-dart-3-afdd580fbefa https://github.com/dart-lang/sdk/issues/46100 https://github.com/dart-lang/language/blob/master/accepted/future-releases/0546-patterns/feature-specification.md

dart (flutter) 문법 - import, show, hide, as

import 문법에 대해 살펴 봅니다. import 문은  현재 dart파일에서  다른 dart 파일이나 외부 라이브러리의  클래스, 함수, 변수 등의 것을 가져다 쓸 때 사용합니다. import 할 때 옵션을 줄 수 있습니다. 아래에 설명과 코드를 보면 됩니다. // import 만 사용하면 다음과 같이 사용할 수 있습니다. import 'dart:io' ; Directory directory = Directory ( "path" ); // as는 라이브러리에 접두사를 지정합니다. // 주로 다른 라이브러리와 충돌을 피하기 위해 사용합니다. import 'dart:io' as MyIO ; MyIO . Directory directory = MyIO . Directory ( "path" ); // dart:io에서 Directory만 가져옵니다. import 'dart:io' show Directory ; // dart:io에서 Directory를 제외한 나머지를 가져옵니다. import 'dart:io' hide Directory ; // 지연된 로딩을 지원하는데 JavaScript에서만 지원합니다. import 'package:greetings/hello.dart' deferred as hello ; Future < void > greet () async {   await hello .loadLibrary();   hello .printGreeting(); } - 참고. https://dart.dev/guides/language/language-tour

유튜브 아카이브.

* 설명.  - 유튜브 채널 동영상을 보관.  - 설명도 같이 보관해 줌.  - 동영상에 직접 작성한 노트를 달 수 있음. * 단점.   - 자막은 지원되지 않음. * 프로젝트 사이트.   - https://github.com/Owez/yark * 준비.   - Python 3.9+ 설치되어 있어야 함. * 설치.   - pip3 install yark     + 설치 로그에 보면 설치 위치가 나옴.     + 내 설치 위치는 C:\Users\<유저이름>\AppData\Roaming\Python\Python311\Scripts * 사용.   - 저장소 생성.     + yark new foobar https://www.youtube.com/channel/dasjfl3423sdkjf     + yark new foobar https://www.youtube.com/@name     + 저장소를 생성할 뿐 다운로드 받지 않음.     + @name, fsjlfj234 두 가지 채널 형식 지원.   - 다운 받기.      + yark refresh foobar      + 이전에 다운 받은 폴더라면 이후 갱신 된 내용만 받음.   - 보기.      + yark view foobar      + 실행하면 브라우저를 열어 보여줌.      + 폴더에서 동영상을 직접 보는 건 불편함.

오픈 소스 사회적 자산.

SQLite의 알려지지 않은 이야기 https://news.hada.io/topic?id=4558   위 글을 읽다 보니 몇 가지 생각나서 적어 봅니다. - 모질라 재단의 Mitchell Backer가 이걸 어디선가 듣고 전화를 걸어옴 - 그때쯤에 항공전자공학(Avionics) 회사인 Rockwell Collins와 일을 하고 있었는데, 그들이 DO-178B [2] 개념을 소개해줬음. 전 세계에 오픈 소스 프로젝트들이 있지만  개인 개발에서 벗어나  지속적으로 유지 보수 발전 되는 건 미국 쪽이 압도적인데 이런 이유가 있던 거 같습니다. 아이디어와 능력이 있고 어느 정도 실적을 내면 더 발전할 수 있도록 지원해 줄 수 있는 시스템이 있습니다.  각종 오픈소스 재단들. 재정, 법적, 운영에 대한 지원을 해주는 거 같습니다. https://www.gnu.org/gnu/thegnuproject.ko.html https://www.linuxfoundation.org/ https://www.mozilla.org/ko/ -2001~2002년 사이, 모토로라가 자신들의 새로운 전화 OS에 SQLite를 넣겠다고 전화가 옴. 필요한 기능을 지원해주면 비용을 내겠다는 것. -  https://www.linuxfoundation.org/about/members 기업체가 사용하고 비용 지원까지 해주는 문화. 최근엔 조금 나아졌지만 한국 경영자들은 기능 요구만 하거나 베끼라고 하거나 훔쳐 쓰거나 오픈소스에 전혀 기여하지 않을 거 같습니다. 한국에도 오픈소스 개발자들이 있었으나 대부분 나가 떨어졌습니다. 생업에 바쁜 나머지 돈 안되는 오픈소스를 유지하기 힘듭니다. 거기에 오픈 소스 사용하면서 기여는 하나도 안 하면서 화내고 욕하는 덜 떨어진 것들도 많죠. 한국은 MP3 기기에 대한 특허를 가졌던 회사를 박살 낸 사례가 있습니다. 사회적인 시스템이 약육강식, 약탈적 이죠. 미국 리눅스 재단을 보면 국내 회사도 있습니다. 미국 문화에서...

git upgrade - windows

* 터미널이나 명령 프롬프트를 열어 실행한다. * 어차피 설치 파일 다운 받아 실행해주는데 손으로 하는 거보다는 빠르다. * 버전 확인. git -v * 업그레이드. git update-git-for-windows

python 가상환경 사용법. venv.

  /////////////////////////////////////////////// // 가상환경 생성 및 사용. * 생성. 가상환경을 만들고 싶은 폴더에서 아래 명령을 실행한다. python -m venv test python 특정 버전을 지정할 때는 아래와 같이 하면 된다. C:\Program Files\Python311\python.exe -m venv test * 활성화. cd test Scripts\activate.bat  -실행. (example) D:\temp\test> -커맨드 창에 이렇게 표시되면 성공. - PowerShell 에서는 아래 파일 실행. .\Scripts\Activate.ps1 * 비활성화. deactivate * python 스크립트 사용. 위의 활성화(activate)한 커맨드에서  python test.py /////////////////////////////////////////////// // 가상환경 package list 사용. * 가상 환경을 활성화한(activate) 커맨드에서 package를 설치하면 아래 폴더에 설치된다. test\Lib\site-packages - 가상환경에서 사용하는 package를 리스트로 만들어 편하게 사용할 수 있다. 물론 가상환경을 사용하지 않는 곳에서도 사용할 수 있다. * 생성. pip freeze > requirements.txt * 설치. pip install -r requirements.txt * 삭제. pip uninstall -r requirements.txt -y /////////////////////////////////////////////// // 가상환경 주의. * 가상환경 설정이 절대경로로 되어 있어 폴더를 옮기면 가상환경이 실행되지 않는다. D:\temp\test\Scripts 의  activate.bat, Activate.ps1, activate 파일 안의  VIRTUAL_ENV 의 폴더를 변경해야 ...

python package list 간단 사용법. requirements.txt

python에서  requirements.txt를 만들어  package list 설치를 쉽게 할 수 있다. * 생성. pip freeze > requirements.txt * 설치. pip install -r requirements.txt * 삭제. pip uninstall -r requirements.txt -y

vscode 디버깅 할 때 arguments 넣는 방법.

vs code에서 Ctrl + Shift + d 를 누르고 "launch.json" 파일을 열거나 만듭니다. 아래 "args": ["arg1", "art2"] 형태로 arguments를 넣을 수 있습니다. 구성을 여러 개 만들어 구성에 따라 arguments를 다르게 설정해서 디버깅 할 수 있습니다.     "configurations" : [         {             "name" : "test" ,             "request" : "launch" ,             "type" : "dart" ,             "args" : [ "arg1" , "art2" ]         },         {             "name" : "test2" ,             "request" : "launch" ,             "type" : "dart" ,             "args" : [ "333" , "555" ]         }     ]

dart 프로젝트 생성, 실행, 컴파일.

* 커맨드 창에서 실행 가능 합니다. 프로그램 만드는데 필요한 몇 가지 명령어를 정리 합니다. * 프로젝트 생성.   - dart create -t console test * 실행.   - dart run * 컴파일.   - dart compile exe bin/test.dart * 라이브러리 명령어.   - dart pub get * vscode에서 몇 가지 명령어를 사용할 수 있습니다.   - Ctrl + Shift + p 단축키 다음 dart 를 치면 실행할 수 있는 명령어가 보입니다. * 참고.   - Get started https://dart.dev/tutorials/server/get-started     - dart create https://dart.dev/tools/dart-create     - dart compile https://dart.dev/tools/dart-compile     - dart pub https://dart.dev/tools/pub/cmd     - dart run https://dart.dev/tools/dart-run  

flutter 폴더에서 File List 가져오기. 안드로이드.

* 안드로이드에서 파일 목록을 가져오는 방법.   - 안드로이드의 파일 관련 권한과 Storage Access Framework (SAF) 때문에 기본 API가 동작하지 않습니다. 그래서 아래 라이브러리를 사용 했습니다.   - 안드로이드 13(sdk 33)에서는 Uri 형태로 폴더를 넘기고 파일을 받아야 접근이 됩니다.  Uri 예) content://com.android.externalstorage.documents/tree/primary https://pub.dev/packages/shared_storage   // 폴더 선택 방법. final Uri ? dirUri = await openDocumentTree (); // 파일 리스트 함수 사용.   var audioList = await getFileList ( dirUri , ".(mp3|wav)" );   Future < List < DocumentFile >> getFileList ( String audioPath , String regex ) async {     const List < DocumentFileColumn > columns = < DocumentFileColumn >[       DocumentFileColumn . displayName ,       DocumentFileColumn . id ,       DocumentFileColumn . mimeType ,     ];     final List < DocumentFile > files = [];     final Uri audioPathUri = Uri . parse ( audioPath );     final ...

Android - 앱 서명키 인증서, 업로드 키 인증서 차이. 간략한 설명.

* 앱 서명키 인증서, 업로드 키 인증서는 아래에서 확인 할 수 있습니다.   * 구글 플레이 콘솔 -> App로 이동 -> 설정 -> 앱 무결성 -> 앱 서명.   *   https://play.google.com/console * 앱 서명키 인증서 - 사용자가 다운 받은 APP에 서명되어 있는 인증서. * 업로드 키 인증서 - 개발자가 구글 플레이 콘솔에 APP을 올릴 때 사용하는 인증서. * 동작 설명.   - 업로드 키를 잃어버리면 구글 플레이 콘솔에서 새로 APP을 만들어야 합니다. 기존 사용자와 APP 실적이 리셋 되기 때문에 활성화된 APP의 경우 문제가 큽니다.   - 이를 방지하고자 구글에서 생성한 인증서로 사용자가 받는 APP에 인증 합니다.    - 개발자가 APP을 올릴 때는 기존과 같이 개발자가 만든 인증서를 사용합니다. * 장점. ``` 개발자가 인증서를 잃어버리거나 해킹 당해도  업로드 키 인증서를 구글에 요청하여 교체하면  APP을 다시 만들 필요 없이 계속해서 서비스 할 수 있습니다. 업로드 키 인증서가 변경 되도 사용자에게 배포된 인증서는  구글에서 생성한 앱 서명키 인증서는  변경 없이 계속 사용하기 때문 입니다. ``` * 적용.   - 새 APP은 이를 위해서 별다른 작업은 필요 없는 거 같습니다. 저의 경우 다른 설정 없이 기존에 하던 대로 인증서 만들고 APP를 올렸더니 자동으로 적용되어 있었습니다.   - 기존 APP에 이를 적용하기 위해서는 키 파일을 구글 플레이 콘솔에 올려야 합니다. * 업로드 키를 잃어버리면 구글 플레이 콘솔에서 새로 APP을 만들어야 하는 것을 이해하지 못했다면 아래 예를 참고하세요. ``` com.ex.app_test 라는 도메인의 APP이 있었을 경우 com.ex.app_test와 인증서가 1:1로 묶여 있어 인증서를 잃어버리면 ...

JSON 파서 자동 코드 생성기.

https://app.quicktype.io/ https://github.com/quicktype/quicktype   지원 언어. Ruby, JavaScript, Flow, Rust, Kotlin, Dart, Python, C#, Go, C++, Java, TypeScript, Swift, Objective-C, Elm, JSON Schema, Pike, Prop-Types, Haskell json 문을 넣으면 지원하는 언어의 파서 코드를 자동으로 만들어 준다.

vs code 설정 백업.

* vs code 설정 개인 백업 입니다. * 설정 내용.   - 테마.   - 폰트 설정.   - 플러터(다트) 자동 정렬 라인 길이.   - 파이썬 자동 정렬. {     "workbench.colorTheme" : "Default Dark+" ,     "editor.fontFamily" : "JetBrains Mono NL, D2Coding, Consolas, 'Courier New', monospace" ,     "dart.lineLength" : 120 ,     "[dart]" : {         "editor.formatOnSave" : true ,         "editor.formatOnType" : true ,         "editor.rulers" : [             120         ],         "editor.selectionHighlight" : false ,         "editor.suggest.snippetsPreventQuickSuggestions" : false ,         "editor.suggestSelection" : "first" ,         "editor.tabCompletion" : "onlySnippets" ,         "editor.wordBasedSuggestions" : false     },     "security.workspace.trust.untr...

마크다운(markdown) 간단 문법.

이미지
사용하는 문법과 유용하다고 생각되는 문법을 정리 했습니다.  상단은 텍스트. 하단은 텍스트가 마크다운 렌더링 이미지 입니다. 1단계 제목 = 2단계 제목 - * 본문.   - 내용.     + 파트. **굵게** --- * *이탤릭* * **굵게** * ** *굵게이탤릭* ** * ~~가로선~~ * 위첨자 ^예시^ * [ x ] 체크박스. * \* 스페셜 캐릭터 표시. * ``스페셜 `캐릭터` 표시.`` 1. ㅇㅇㅇ 1. 222 1. ㅊㅊㅊ --- 가로줄. - [ 위키 ]( https://wiki/ ) - 위키. - https://github.io/ - browser. - [ img ]( https://url ) > 인용문. >> 인용문2. >>> ㅇㄹㄴㄹ | h1 | h2 | h3 | |---|:---:|---:| | `t1` | t2 | `t3` | ``` public class BootSpringBootApplication {   public static void main(String[] args) {     System.out.println("Hello, Honeymon");   } } ``` * [ 링크 ][id1] * 문서내 링크. [ id2 ] [id1]: URL "Optional Title here" [id2]: 문서링크. <!-- 주석. --> # h1 Heading ## h2 Heading ### h3 Heading #### h4 Heading ##### h5 Heading ###### h6 Heading -------------------------------------------------------------

flutter- @pragma('vm:entry-point')

* @pragma('vm:entry-point')   - 안드로이드 네이티브 코드에서 다트 함수를 실행할 수 있게 해주는 구문.   - 동작 설명 - dart는 컴파일 또는 런타임 시에 최적화 할수 있는데 이 과정에서 함수명이나 구문이 최적화되어 외부에서 실행할 수 없게 되기도 한다. 그래서 pragma로 힌트를 주어 안드로이드 네이티브 코드에서에서 해당 함수를 실행 할 수 있게 해준다. * 주의.   - dart, flutter 공식 문서화되어 있지 않다. 이로 보건데 향후 업데이트시에 공지 없이 변경될 가능성도 있어 주의를 요한다. * 참고.   - https://api.flutter.dev/flutter/dart-core/pragma-class.html   -  https://blog.csdn.net/rd_w_csdn/article/details/121293353   -  https://stackoverflow.com/questions/64314719/what-do-pragmavmprefer-inline-mean-in-flutter

android studio intellij - markdown preview 안보일때.

### 증상.   markdown 확장자 .md 파일의 경우 android studio(intellij) 에서 프리뷰로 이쁘게 표시해 준다.   하지만 IDE의 Java Runtime 오류로 인해 보이지 않는 버그가 있는거 같다. ### 해결.   * Ctrl+Shift+A 을 누르고 "Choose Boot Java Runtime" 을 입력하여 "Choose Boot Java Runtime for the IDE" 창을 연다.   * "Use Default Runtime" 버튼을 누르고 android studio(intellij) 재시작 한다.   * 이래도 안된다면 New에서 "... with JCEF" 을 선택하고 재시작 한다.   전 "... with JCEF" 으로 해결 했습니다.   * 주의 - 런타임을 선택하고 OK버튼을 누른후 런타임 설치를 기다리면 재시작 다이얼로그가 나타납니다. 꼭 런타임 설치가 완료되고 재시작 다이얼로그가 뜰때까지 기다려야 합니다. ### 참고.   * https://youtrack.jetbrains.com/issue/IDEA-265975   * https://intellij-support.jetbrains.com/hc/en-us/articles/206544879-Selecting-the-JDK-version-the-IDE-will-run-under?page=3