전체 글 538

윈도우로 개발하기 - 맑은 고딕이 싫어요!

맥북을 산 이래로 개발할때는 쭈욱 맥만 고수해왔다. 아래 이유들 때문에 윈도우즈 컴퓨터로 잠시 코딩좀 할라치면 익숙하지 않아 난항을 겪었다... MacOS로 개발하는 장점 기본 폰트의 가독성이 우수 UNIX 기반이라 명령어도 새로 익힐필요없고, 환경설정이 편리 Cmd + 화살표 조합으로 Line의 처음과 끝 자유롭게 이동가능 Xcode 사용 가능 손에익은 DBA 툴인 DBeaver 사용가능 게임을 할 수 없기 때문에 개발에 집중가능(?) 사실 안 좋을 이유가 없지만, 느려도 꾹꾹 참으면서 했지만...첫 재택에서 일이 터졌다. 2018 인텔 CPU 맥북으로 안드로이드 스튜디오와 게더타운을 동시에 켜두면 한 글자 쓸때마다 버벅여서 바로 애플 스토어로 달려가서 맥 스튜디오라도 지르고 싶은 심정이었다. 하지만 ..

네이버 카페 댓글 사진 일괄 다운받는 방법

네이버 카페에서 댓글에 달린 사진을 다운받으려면 번거롭게 댓글을 열어서 캡쳐를 해야한다. 아래 코드는 현재 페이지의 모든 댓글 이미지의 src를 추출해서 다운받는 일을 해준다. *보완해야할 점은 대댓글 다운로드 혹은 작성자의 댓글 다운로드가 안되는건데, 정확히 뭔지는 나중에 알아봐야겠다...잠이온다 새벽2시라~ㅋㅋㅋ async function start() { let images = getImages(); for (var i = 0; i < images.length; i++) { await downloadImage(images[i]); } console.log("다운로드가 완료되었습니다."); } function getImages() { let images = Array(); let iframe = do..

[안드로이드] Airbnb Epoxy 라이브러리 놓치기 쉬운 부분들

개발중인 앱에서 RecyclerView는 Epoxy를 사용하고 있는데 상당히 편리함을 누렸지만 제대로 알지못하고 있는거 같아서 공식문서를 쭉 훑어보았다. 이번 글에서는 공식 문서와 소개 페이지에서 설명하고 있는 요소들 중에서 놓치기 쉬웠던 부분들 몇가지를 체크하려한다. EpoxyAttribute EpoxyAttribute를 사용하면 자동 Diffing에 사용되는 hashCode()나 equals() 같은 메소드가 생성되는데, 이를 원하지 않는다면 @EpoxyAttribute(hash=false) 로 꺼둘 수 있다. 클릭 리스너처럼 매번 bind 될때마다 재생성되는 필드들에 적용하면 좋다. Hiding Models View가 조건부로 보여지고 숨겨져야할때 사용할 수 있다. model.show(boolean..

Upstream Flow, Downstream Flow

Upstream Flow Producer Block에서 생성한 Flow , 현재 연산자 전. Flow를 설명할때 대부분은 UI를 가장 아래쪽에, Remote data source를 가장 위쪽에 위치하는 도식으로 표현되는데, 상류의 물(데이터)이 아래쪽으로 내려오는식으로 이해하면된다. Downstream Flow 현재 연산자 이후의 모든 Flow collect 새로운 값이 생길때마다 호출되는 함수를 매개변수로 받는다. collect를 호출할 때마다 새 Flow가 생성된다. 이러한 Flow는 Cold Flow라고 하는데, 필요에따라 생성되고, 관찰되는 중에만 데이터를 전송하기 때문이다. StateFlow 컬렉터가 없더라도 데이터를 보관하고 있다. 출처 Android Dev Submmit 2021 - Kotl..

자주쓰는 정규식 패턴 (Email, IP, Youtube, URL...)

연속 3번 클릭하면 정규식 전체가 복사됩니다. IP 주소 (IPv4) ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ IP 주소 (IPv6) ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ IP 주소 (IPv4, IPv6 포함) ((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\..

[Github] 원격서버에서 git 권한 없음 해결방법 (Permission denied (publickey))

Cloning into 'xxx'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. SSH를 통해 git을 이용하기 위해서는 올바른 공개키가 등록되어있어야한다. 보통 본인 컴퓨터에서 할때는 문제가 없지만, 원격지에서 pull을 땡기거나 할때 위와 같은 오류처럼 Repository 액세스 권한이 없다며 오류를 뱉게 된다. 현재 사용중인 SSH 파악하기 먼저, 원격지 서버에서 사용중인 SSH키가 어떤 것인지 알아야하고, 해당키가 github의 어느 Repository에 권한이있..

Python 특정 키 값을 기준으로 Dictionary List에서 더하기

문제 arr = [] arr.append({"name": "A", "acquired_xp": 200, "key": 1, "data": 1}) arr.append({"name": "B", "acquired_xp": 500, "key": 2}) arr.append({"name": "B", "acquired_xp": 500, "key": 3}) arr.append({"name": "C", "acquired_xp": 750, "key": 4}) arr.append({"name": "A", "acquired_xp": 300, "key": 5})이렇게 Dictionary로 이루어진 리스트가 있고, acquired_xp항목을 이름에 따라 더하려고 한다. key는 고유값이므로 더하면 안되며, 첫번째로 만나는 key값을..

Python 정규식 그룹명으로 match 결과 가져오기 (group name)

filename = "backup_20220409180756_20220423180756" regex = re.compile(r"^backup_(?P\d+)_(?P\d+)$") match = regex.search(filename) if match: print(match.group("end")) # "20220423180756" 정규식 그룹명을 이용하면 편리하게 원하는 부분을 추출해낼 수 있다. (?P) 같은 식으로 사용할 수 있는데 위 예제는 정규식을 활용하여 파일명에서 시작시간과 끝시간을 뽑아내는 예제이다. 정규식 작성에 앞서 정규식을 테스트 해보기위해 regexr.com를 많이 이용하는데, 그룹명 테스트 만큼은 regex101이라는 사이트가 훨씬더 친절하게 결과가 나온다.

LiveData를 버리고 StateFlow를 써야할까요?

Flow 비동기식으로 계산할 수 있는 데이터 스트림. Flow는 값 시퀀스를 생성하는 Iterator와 매우 비슷하지만 정지함수를 사용하여 값을 비동기적으로 생성하고 사용한다. Python의 generator와 비슷하게 이해하면 될 듯. 생산자: 스트림에 추가되는 데이터를 생산. 코루틴 덕분에 비동기적으로 생산도 가능. (Remote Datasource) 중개자(*optional): 스트림에 내보내는 각각의 값이나 스트림 자체를 수정할 수 있다. 소비자: 스트림의 값을 사용한다. 생산자는 저장소, 소비자는 UI 인터페이스라고 받아들일 수 있다. 하지만 UI 레이어가 사용자 입력이벤트의 생산자 역시 될 수 있다. StateFlow의 특징 항상 값을 가지고 있다. 단 하나의 값만을 가진다. 여러 옵저버를 가..