반응형 분류 전체보기334 에디터 기능별 단축키 VS CodeAndroid StudioXcodejump to definitionf12cmd + bcmdcursor historyctrl + -, ctrl + shift + -cmd opt generator cmd + enter wrap widgetcmd + .opt + enter auto completectrl + space ctrl + space multiple selectioncmd + dctrl + g find in filescmd + shift + fcmd + shift + f find filecmd + pshift shift find symbolcmd + shift + o(현재파일만)cmd + p 하고 #(전체파일)shift shift auto indentshift + opt + fcmd + .. 2024. 10. 7. flutter gpu 예제 분석 https://github.com/bdero/flutter-gpu-examples GitHub - bdero/flutter-gpu-examplesContribute to bdero/flutter-gpu-examples development by creating an account on GitHub.github.com https://medium.com/flutter/getting-started-with-flutter-gpu-f33d497b7c11 flutter에서 gpu 코드 지원이 가능해졌다고 한다. 관련 내용에 대한 공식사이트 블로그를 보고 예제가 작동이 안되어서 작성자의 깃허브에 들어가 예제코드를 보고 분석하기로 하였다. 간단한 잡지식들GPU 사용법인 초보인 나에게 대충 돌아가는 원리를.. 2024. 9. 11. 맥북에서 LLaMa 파인튜닝 하는방법 하루종일 튜닝방법 찾고 고생하다가 nvidia gpu가 없으면 안되는 이슈를 겪고 포기하던 찰나 애플의 mlx 프레임워크를 사용하고 해결했다. 진짜 애플님들께 감사드린다. 라마 튜닝은 맥북에서 정말 미치도록 쉽다 mlx는 대충 애플실리콘 잘돌아가게 만든 pytorch라고 생각하면 된다. 사용법은 파이토치와 완전 똑같다. 함수이름만 다름. 1. 초간단 개념 정리 llm을 파인튜닝할 때 보통 lora라는놈을 이용한다 이 lora는 모델 자체를 변형시키지 않고, 모델이 어떻게 변해야되는지에 대한 데이터를 내놓는다. 그걸 adapter라고 한다 그리고 adapter와 기존 모델을 fuse 하면 새로운 모델이 나온다. 2. 설치pip install mlx mlx-lm 3. config.yaml 파일.. 2024. 9. 9. 파이토치 큰그림 정리 회사에서 해커톤 대회에 출전할 때 텐서플로우로 이미지 분류를 써본적이 있다. 이번에도 다시 ai를 쓸 일이 있어서 이번에는 파이토치로 도전해보게 되었다. 매번 까먹고 다시공부하고 해서 이번에는 간단히 정리하려 한다 1. 큰그림에서 돌아가는 구조 우리가 일반적으로 아는 인공지능 트레이닝은 흔히 생각하는 신경망 구조를 만든뒤 데이터 넣어주는 작업이다.여기서 막막한 부분은 신경망을 어떻게 구성하고 짜야하는가 인데, 결국 trial and error다. 아무도 모르다는거임 이것만 기억하고 가면 된다. 2. 키워드 한줄요약으로 외우자 텐서 : 인공지능의 넘파이배열 같은거임. 데이터 단위CNN : 이미지 분류같은 2차원에 사용되는 신경망RNN : 1차원에 사용되는 신경망히든레이어 : 신경망 구성할때 세로.. 2024. 9. 5. 연속적인 애니메이션을 만드는 방법 1. Interval을 이용하는 방법 CurvedAnimation을 만들 때 Interval값을 주면 Parent 의 애니메이션 기간에 어떤 부분에서 애니메이션이 실행되고 종료될 지 결정할 수 있다. 2. TweenSequence를 이용하는 방법 https://api.flutter.dev/flutter/animation/TweenSequence-class.html TweenSequence class - animation library - Dart APIEnables creating an Animation whose value is defined by a sequence of Tweens. Each TweenSequenceItem has a weight that defines its percentage .. 2024. 8. 22. Bloc에서 event를 await 하는 방법 그런거 없다 하지만 다른 방법은 있다. 바로 callback 을 사용하면 된다. bloc에서 이벤트를 await 하고 싶은 목적은 아마 state 변경 이벤트를 날리고 이후 변경된 state를 이용하여 무언가를 하기 위한 것 일 것이다. 답은 간단하다. state 를 emit 한 후 콜백을 이용하여 이후 작업을 마저 수행해주면 된다. final class MyEvent extends StudyEvent { void Function()? callback; StopStudyEvent({ this.callback, });} myBloc.add(MyEvent( callback: () async { 하고싶은일 적으면 된다 } })); 이렇게 이벤트에 콜백을 받아와.. 2024. 8. 14. Dart의 class modifier 간단한 정리 매번 까먹어서 유튜브에서 아주 괜찮은 영상을 찾았다. https://www.youtube.com/watch?v=n5WuBICxv_8 아래는 요약된 코드 abstract : 클래스 구현을 다 안해도 된다base : implement를 막는다interface : extends를 막는다final : extends와 implements를 막는다 abstract interface : 다른 언어의 pure interface 만들때 사용 라이브러리 외부일경우// NormalClass can be instantiated, extended, and implementedfinal normalClass = NormalClass();class Normall extends NormalClass {} class N.. 2024. 8. 13. Child가 Rebuild 되지 않도록 하는 원리 플러터의 위젯을 보다보면 어떤 위젯들은 리빌드 될 때 child라는 변수를 받아서 리빌드가 되더라도 child 부분은 리빌드되지 않도록 재활용 한다. 이 원리가 궁금해서 ListenableBuilder를 분석해보았다 위 코드를 보면 이 위젯은 child를 생성자에 받아서 빌더 메소드에 활용한다.빌더 메소드의 정의를 보면 다음과 같다. 여기서 우리가 알 수 있는건, 빌더 메소드는 그저 위젯을 리턴하는 평범한 함수이다. 그리고 child를 받아 이를 위젯만드는데 활용하고 있다. 간단하게 정리하자면, A라는 위젯이 외부에서 만들어진 B라는 위젯을 생성자에서 받아, 이를 빌드 메소드에 사용한다면. 이때 리빌드 되더라도 B는 다시 리빌드 되지 않는다. 걍 한마디로 외부에서 만들어서 넘겨주면 재활용이 .. 2024. 7. 23. 위젯트리에서 중간에있는 위젯만 리빌드 하고 싶을 때 이전에 적은 AnimatedBuilder와 동일한 내용이다. AnimatedBuilder의 상속관계를 보면 ListenableBuilder를 볼 수 있다. 여기서 ListenableBuidler 코드를 확인해보면 똑같이 child를 가짐을 알 수 있다. 고로 Listenable Builder와 ValueNotifier를 조합한 뒤 재활용을 할 때 child를 이용하면 위젯트리의 중간만 리빌드 할 수 있게된다 2024. 7. 22. 애니메이션을 주고싶은데 자식위젯이 너무 많을 때 셀프로 애니메이션을 만들다가 간혹 내가 리빌드할 위젯이 자식위젯이 너무 많이 딸려 있을 때가 있다. 이럴때는 어떻게 해야 할 까? 정답은 AnimatedBuilder를 이용하는 것이다. AnimatedBuilder에는 child 항목이 있는데 여기에 리빌드 되지 않을 위젯을 넣으면 재활용이 가능하다. 또 한가지의 팁은 Listenable에 관한 것이다. 내가 어떤 이벤트를 받을 때 플러터에서 제공하는 대부분의 그러한 클래스들은 Listenable을 상속할 가능성이 높다. 여기서 중요한건 Listenable은 AnimatedWidget에 활용이 가능하다는 점이다!!! 고로 내가 받아올 이벤트가 Listenable과 연관되어 있다면 AnimatedBuilder를 이용하는걸 고려해보자 2024. 7. 11. SliverAppBar에 Sliver 겹치는 방법 결론부터 말하면 안된다. 찾아봤는데 방법이 없다 아니 그럼 어쩌라고? 해결방법은 직접 구현하는 것이다. 하는 방법은 다음과 같다 1. Stack위젯을 만든다2. SliverAppBar에 해당되는 부분을 Container로 만든다3. SingleChildScrollView를 그 위에 덮는다4. 스크롤뷰 탑에다가 패딩을 왕창 물려줘서 AppBar부분 밑까지 내려준다5. ScrollController를 하나 만들어 스크롤뷰에 물려준다 여기서 한가지 중요한 부분이 있다. ScrollController는 Listenable이다 !!! 한마디로 AnimatedBuilder를 사용할 수 있다는것!!! AnimatedBuilder의 장점은 child를 이용해 위젯트리 중간에 위젯만 리빌드하면서 애니.. 2024. 7. 11. HRV 신호 SDNN RMSSD의 차이 기본적으로 정의는 다음과 같다. 아래는 LLM에 물어본 답변이다SDNN과 RMSSD는 모두 심박 변이도(Heart Rate Variability, HRV)를 측정하는 지표이지만, 각각 다른 측면을 나타냅니다. 이 두 지표는 심장의 자율신경계 활동을 평가하는 데 사용되지만, 그들이 측정하는 시간적 스케일과 관련된 신경계 요소가 다릅니다.SDNN (Standard Deviation of NN intervals)정의: SDNN은 모든 연속적인 NN(또는 R-R) 간격의 표준 편차입니다.측정하는 것: SDNN은 장기적인 심장 박동 간격의 변동성을 측정합니다. 이 지표는 전반적인 자율신경계의 조절 능력을 반영하며, 주로 교감신경과 부교감신경의 균형을 나타냅니다.해석: 높은 SDNN 값은 심장의 높은 변동.. 2024. 5. 22. DSP 옛날기억 끄적끄적 1. 주파수 분석 종류 주파수 분석에서 배운 기법들은 푸리에 시리즈푸리에 트랜스폼디스크리트 타임 푸리에 트랜스폼(DTFT)디스크리트 푸리에트랜스폼(DFT)총 4개가 있었음. 푸리에 시리즈는 주기적인 신호에 사용됨 푸리에 트랜스폼은 비주기적인 신호의 주파수성분을 분석할 때 사용됨 디스크리트 타임 푸리에 트랜스폼은 샘플링한 신호를 푸리에 트랜스폼함 마지막 DFT는 DTFT를 주파수 영역에서 한번 더 샘플링함. 그래야 컴퓨터에서 표현 가능하니깐 2. 플롯 주파수 영역을 플롯할 때 절대값을 플롯하는거랑 절대값 제곱을 출력하는 방법 두가지가 있음 절대값은 Amplitude 절대값 제곱은 Power 또는 Energy와 관련되어 있음 푸리에 트랜스폼은 비주기적인 신호를 다룸. 한마디로 얘는 파워가 0임. 고로.. 2024. 5. 17. 파이썬에서 fft를 출력할때 고려해야할 사항 1. fftshift와 fftfreq 그리고 plot 매틀랩에서는 fft데이터를 flot할 때 fftshift를 한번 해주고 plot했던 기억이 있다 이유는 DFT는 주파수 0에서 다음주기 주파수까지 샘플링 하기 때문이다. 하여 원 신호의 주파수 리스폰스(데칼코마니처럼 생긴거)를 보려면, fft한 결과를 반으로 잘라서 오른쪽에있는걸 왼쪽으로 옮겨주어야 한다. 이를 fftshift함수로 이용한다. 나비로 비유하자면, fft로 계산한 결과값은 나비 왼쪽날개가 오른쪽으로 가고, 오른쪽 날개가 왼쪽으로 가있는 상태라, 이를 fftshift로 옮겨주면 된다는말 헌데 파이썬에서는 굳이 fftshift를 안하고 데칼코마니 모양으로 플롯할 수 있다. 코드상 더 깔끔하다 fftfreq는 샘플갯수와 주파수 간격.. 2024. 5. 16. DC 성분이란 (DC Component) 1. DC 성분이란? 어떤 센서로부터 데이터를 받아와서 fft를 하였더니 0hz에서 말도안되는 값이 피크친다. 이유는 다음과 같다. 센서의 데이터는 DC성분과 AC성분이 들어온다. DC성분은 직류 즉 0hz성분이다. 우리는 주파수 분석을 하고싶기에 AC성분이 필요한데, DC성분이 상대적으로 너무 크기에 값이 피크치는 것이다. 2. DC성분 제거하기 scipy에서 이러한 DC 성분을 제거하는 detrend라는 함수를 제공해준다.from scipy import signalsignal = np.array([your data here])signal_without_dc = signal.detrend(signal) 2024. 5. 14. freezed 왜씀? dart data class를 사용하자! 1. Dart Data Class란? https://github.com/andrasferenczi/dart-data-plugin GitHub - andrasferenczi/dart-data-plugin: IDEA plugin for generating utility methods for Dart data classes IDEA plugin for generating utility methods for Dart data classes - andrasferenczi/dart-data-plugin github.com flutter에서 json 관련 클래스를 만드는건 아주 귀찮습니다. 이에 freezed를 많이 사용하는데요.. 사실 이 패키지도 몹시 불편합니다. 보일러플레이트 코드를 작성하고 거기다가 코드 제너.. 2024. 4. 16. vim으로 flutter를 개발하는 원대한 꿈을 꿨다 vim으로 flutter를 개발하려는 원대한 꿈을 꿧다. 유튜브에서 한 외국인이 neovim으로 세팅한 영상을 보고 neovim 세팅에 대해 공부했다. 복잡한 세팅을 미리 다 해둔 nvchad와 lunarvim 같은 프로젝트 존재를 알게 되었고 nvchad 로 세팅을 마무리 하였다. 결과는 와우! 진짜 단축키 다 외우니 안드로이드 스튜디오보다 생산성이 훨씬 더 잘나왔다. vim flutter tools라는 플러그인은 생각보다 훨씬 잘 돌아갔고, lsp라는 프로토콜을 이용한 자동완성은 몹시 수준급이였다. 적어도 dart 영역에서는 말이다... 허나 나는 회사에서 네이티브 코드도 만질일이 있다. 이에 나는 코틀린과 스위프트까지 영역을 확장하려 했다. 거기서부터 문제였다. kotlin은 제대로 된 lsp가 없.. 2024. 3. 28. NeoVim과 flutter 설정 먼저 nvim과 nvchad를 깔아준다 brew install nvim git clone https://github.com/NvChad/starter ~/.config/nvim && nvim 설치도중 permission error가 난다면 ~/.local/share와 ~/.local/state에 퍼미션 문제가 있다. chown -R 유저이름 nvim 을 해주어 권한을 가져오자 설치가 되었다면 아래 코드를 통해 lua lsp를 설치해주자. :MasonInstall lua-language-server 다음으로 ~/config/nvim으로 이동한다 그리고 lua/plugins/init.lua 파일을 연 뒤 flutter-tools 를 설치해준다 { 'akinsho/flutter-tools.nvim', lazy.. 2024. 3. 27. Xcode에서 SwiftUI 코드선택 익숙해지기 1. 개요 안드로이드 스튜디오에서는 expand selection이라는걸 제공한다.커서기준으로 범위를 확장하면서 선택해주는 기능인데 flutter 개발할 때 매우 유용하다. 현재 내 커서가 위치한 위젯의 범위를 정확하게 선택가능기에 위젯들을 마치 레고 조립하듯이 코드를 작성할 수 있다. 헌데 Xcode에서는 그런 기능이 없다는것을 알았다... 너무 불편하다. 그래서 방법을 찾은 결과 결국 해답은 vim에 있었다. 2. 선택방법 여러가지 Va{ 혹은 Va}, vaBb 을 하면 플러터에서 하듯이 뷰의 전체를 선택가능하다 실제 vim에서는 vaBV를 해야한다. 고로 vaBV로 연습하자 va{ 혹은 va}, vaB을 하면 중괄호를 포함한 뷰의 바디부분을. 선택할 수 있다 vab는 소괄호 선택 vaB는 중괄호 선.. 2024. 3. 22. [Swift] PropertyWrapper 사용법 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/properties/ Documentation docs.swift.org 1. PropertyWrapper란? 파이썬의 데코레이션과 비슷하다. 파이썬의 데코레이션은 코드 앞뒤로 어떠한 코드를 붙여주는 작업을 해준다. 프로퍼티 래퍼또한 비슷하다. 어떤 프로퍼티 앞뒤로 특정한 작업을 넣을 수 있다. 2. 만드는법 만드는 방법은 간단하다. 1. struct를 정의할 때 @PropertyWrapper라고 적어준다 2. struct안에 wrappedValue라는 computedProperty를 정의해주면 된다 아래는 범위가 12까지인 프로퍼티를 프로퍼티 래퍼를 이용해 구현하.. 2024. 3. 22. 이전 1 2 3 4 ··· 17 다음 반응형