라벨이 개발인 게시물 표시

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 파일이 설치된 폴더

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 Stream < DocumentFile > onFileLoaded = listFiles ( audioPathUri , columns : columns );     final regExp =

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로 묶여 있어 인증서를 잃어버리면  com.ex.app_test의 APP를 설치할 수 없게 됩니다. 그래서 기존에는  com.ex.app_test2 APP를 만들고 새 인증서를

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.untrustedFiles" : "open" ,     "window.commandCenter" : true ,     "editor.formatOnSave&qu

마크다운(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   

android studio 설정.

* 셋팅창 열기. File | Settings * android studio 실행시 이전 프로젝트 자동 열기 비활성화. File | Settings | Appearance & Behavior | System Settings | Project | Reopen projects on startup 해제. * 메뉴 폰트 및 사이즈. File | Settings | Appearance & Behavior | Appearance | Use custom font 체크 후 폰트 및 사이즈 선택. * 마우스 휠로 폰트 확대 축소. File | Settings | Keymap | "font size" 찾기. Decrease Font Size, Increase Font Size 에서 더블클릭 - Add Mouse Shortcut ctrl + 마우스 휠 스크롤. * flutter 코드 자동 정렬 라인 길이 변경. File | Settings | Editor | Code Style | Dart | Line length 변경. 120

flutter- 기본 프로젝트 오류 수정. GradleException

Flutter 3.0.5 버전 기준 입니다. Flutter에서 안드로이드 변경 사항을 업데이트하지 않아 생긴 오류 해결법 입니다. * android\app\build.gradle     - File - Project Structure - Modules - <프로젝트 이름>_android - Module SDK - 버전을 지정합니다.     -  GradleException을 FileNotFoundException으로 변경합니다.     -  kotlin-stdlib-jdk7을 아래와 같이 kotlin-stdlib-jdk8로 변경합니다. dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8: $kotlin_version " }

flutter- 다국어 지원. App Name. 어플 이름. 안드로이드.

표시되는 어플 이름 다국어 지원 방법. 안드로이드만 다룹니다.   * android/app/src/main/res 폴더에 지원하는 언어의 폴더를 만듭니다.     - 예)  values, values-en, values-ko * 위에서 만든 폴더에 Strings.xml 파일을 만듭니다. <? xml version ="1.0" encoding ="utf-8" ?> <resources> <string name ="appName" > 테스트 </string> </resources> * AndroidManifest.xml 에 다음 항목을 적용합니다. android:label="@string/appName"

flutter- 다국어 지원. easy_localization

* 라이브러리 사이트. https://pub.dev/packages/easy_localization * 라이브러리 설치. flutter pub add easy_localization * 설정.      - 폴더 생성 - assets/translations/      - 폴더에 다국어 파일 생성.             + 예) en-US.json, ko-KR.json { "hello" : "hello" , }     - main.dart 예시. import 'package:flutter/material.dart' ; import 'package:flutter_localizations/flutter_localizations.dart' ; import 'package:easy_localization/easy_localization.dart' ; void main() async { WidgetsFlutterBinding. ensureInitialized () ; await EasyLocalization. ensureInitialized () ; runApp( EasyLocalization ( supportedLocales: [ Locale ( 'en' , 'US' ) , Locale ( 'ko' , 'KR' )] , path: 'assets/translations' , fallbackLocale: Locale ( 'en' , 'US' ) , child: MyApp () ) , ) ; } class MyApp extends StatelessWidget { @override Widget build (BuildContext context) { return MaterialApp (