본문 바로가기

분류 전체보기

(91)
Flutter: select box input 만들기 이렇게 생긴 select input을 만들고 싶을 때 일단 DropdownButton으로 시도해보자. 표시되는 값은 '비공개', '남성', '여성' 으로 하고 설정되는 값은 각각 null, 'M', 'F' 를 받기로 한다. Container( child: Column( children: [ ......, DropdownButton( items: [null, 'M', 'F'].map((String? i) { return DropdownMenuItem( value: i, child: Text({'M': '남성', 'F': '여성'}[i] ?? '비공개'), ); }).toList(), ) ], ) ) 비활성화 상태로 동작하지 않는다. onChanged 콜백을 넣어주자. DropdownButton( onCha..
Firestore 두 개의 collection에서 연관 데이터 조회. 비동기 처리. javascript Firestore를 처음 써봤는데, 간단하다고 생각했던 문제를 처리하는데 의외로 오래 걸려서 정리해둔다. 하나의 collection에서 데이터 조회한 후에 그 값을 키로 다른 collection에 있는 데이터를 읽어와서 JSON array를 만드는 작업이었다. 아주 간단한 일인데, 두번째 collection의 조회가 끝날 때까지 기다렸다가 json array 만드는 것이 잘 안 됐다. Collection 1 : channels { "chname1": { "group": 1, "order": 1, "name": "채널1" }, "chname2": { "group": 1, "order": 2, "name": "채널2" }, .... Collection 2: schedules { "chname1": { "ti..
Flask on Azure Functions 예전에 "Python으로 Azure에 Serverless 웹 구축하기" 라는 제목으로 Flask 웹 어플리케이션을 Azure Functions에 올리는 방법을 쓴 적이 있는데 (uaremine.tistory.com/9), 오랜만에 다시 봤더니 좀 달라진 것이 있어서 추가한다. WSGI 연동을 위해 이전 글에서는 azf-wsgi 모듈을 이용했는데, MS에서 WSGI 지원하게 되어서 해당 모듈을 deprecate 한다는 공지가 떴다. 자세한 내용은 아래를 참고하면 되고, github.com/Azure/azure-functions-python-library/pull/45 Enable WSGI for Python Function App by Hazhzeng · Pull Request #45 · Azure/azu..
MacOS Visual Studio Code에서 github push : Permission denied (publickey) github에 push 할 때 터미널에서는 잘 되는데, Visual Studio Code에서 push 하면 Permission denied(publickey) 에러 뜨면서 실패하는 경우가 있다. 작업은 Visual Studio Code에서 하고 push만 터미널에서 하다가 좀 찾아보니, Yosemite 이후부터 MacOS의 키 체인에 SSH passphrase 를 저장해도 reboot하면 날아가게 변경되었다고 한다. 해결책이라고 하는 게 몇 가지 있는데, 1. ~/.ssh/config 에 다음의 내용을 넣어준다. Host * (asterisk for all hosts or add specific host) AddKeysToAgent yes UseKeychain yes IdentityFile (e.g. ~..
맥북 재설정 2017 맥북프로를 계속 High Sierra로 버티다가 Big Sur로 갈아타보기로 함. OS 올리다가 구형 맥 벽돌 되었다는 소리도 들리고 안 그래도 저사양인데 최신 버전 올렸다가 참을 수 없이 버벅거리면 어쩌나 하고 걱정도 되었지만 에라 모르겠다 자세로 시도했다. 주말에 작업 하려고 했는데 회사에서 만들어놓은 설치USB를 안 가져온 바람에 네트웍으로 설치하느라 여러 차례 고비가 있었다. 결국 하드디스크 초기화 -> 네트웍으로 재설치 했더니 알 수 없는 이유로 Catalina가 설치되었고, Catalina에서 Big Sur 설치파일을 다운로드 해서 설치 USB 만들고, 처음부터 다시 하드디스크 초기화 -> USB로 재설치 했다. 이 과정에서 OS 다운로드를 여러번 했는데 5시간 이상 걸리다가 실패하는..
NAS 사진 정리하기 - (2) python에서의 시간대(timezone) 두번째 글은 원래 목적에서 약간 벗어나서 python 에서의 시간 처리에 대해 정리해본다. python의 date, time object는 'aware' 와 'naive'로 구분할 수 있다. (docs.python.org/3/library/datetime.html) 요약하면 timezone과 DST(daylight saving time) 정보가 object 안에 명시되어 있으면 aware, 그냥 날짜, 시간 정보만 있으면 naive object로 구분되는 것이다. 주로 국내에서만 사용되는 stand alone application에서는 이 구분이 크게 중요하지 않을 수도 있다. 그러나 timezone 정보를 제대로 취급하는 시스템과 정보를 교환하거나, 여러 나라의 node와 시간 정보를 교환할 때 nai..
NAS 사진 정리하기 - (1) 언제 찍은 사진인가? 폰을 몇 번 바꾸고, 백업 & 복구를 시도하다 보면 그 동안 찍은 사진 순서가 엉망이 되어버린다. 앱에 따라서 앨범을 정렬하는 기준도 다르고, 사진을 찍을 때 남기는 정보도 다르고, 복사 or 이동할 때 건드리는 정보도 다르기 때문. 경험해 본 문제는 대략 다음과 같다. 일부 카메라 앱으로 찍은 사진에 exif 정보 남지 않음 대부분의 카메라 앱은 timezone 정보를 남기지 않음 앨범 앱은 대부분 사진 파일의 modification date 기준으로 정렬해서 보여둠 사진 파일을 복사/ 이동할 때 사용하는 OS, 소프트웨어, 명령어에 따라 modification date 가 보존되거나, 혹은 보존되지 않음 이런 상황에서 경험한 문제들 출발하기 전 공항에서 찍은 사진과 도착해서 찍은 사진의 순서가 뒤바뀜..
[python] 리스트를 그룹화 itertools.groupby 중복 파일을 제거하기위해 일단 파일 사이즈가 같은 파일을 걸러내려고 한다. itertools.groupby()를 사용하면 쉽게 될 것 같다. from itertools import groupby rows = [('file1.ext', 123123), ('file2.ext', 123123), ('file3.ext', 234234), ('file4.ext', 234234), ('file5.ext', 234234)] for k, g in groupby(rows, lambda x:x[1]): print(list(g)) ---- [('file1.ext', 123123), ('file2.ext', 123123)] [('file3.ext', 234234), ('file4.ext', 234234), ('file5.ex..