[영화] Baby Driver (2017)

넷플릭스에 뭐 볼 거 없나 찾아보다가 예전에 영화 소개 프로에 나왔던 게 생각나서 봤던 영화. 별로 재미 없다. 왜 평점이 높은지는 잘 모르겠음. 항상 이어폰을 꽂고 있다는 특이한 설정과 힙한 음악으로 뭔가 ‘느낌’을 내보고 싶었던 것 같긴 한데, 뭐 하나 제대로 진행되거나 마무리된 게 없어보인다. 등장 인물들도 ‘이 정도 했으면 대충 얘네들 어떤 애들인지 알겠지? …

[영화] Baby Driver (2017) Read More »

네트워크 스토리지에 .DS_Store 파일 생성 방지

아래 명령을 터미널에서 실행하고 맥에서 로그아웃하고 다시 로그인한다. defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE 다시 원래대로 하려면 마지막의 TRUE를 FALSE로 바꿔준다. defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool FALSE   참고: https://support.apple.com/en-us/HT208209

Product Flavor에 따라 google-services.json 파일 따로 적용하기

Firebase 서비스를 연동할 때 테스트 프로젝트와 실서비스 프로젝트를 구분해서 운영하게 되는데, 이 때 각 프로젝트를 위한 google-services.json 파일이 따로 나오게 된다. 테스트용 빌드와 배포용 빌드를 product flavor로 구분하고, 각 빌드에 따라 google-services.json 파일을 따로 적용할 수 있다. 별도로 설정할 부분은 없고, product flavor 디렉토리에 json 파일을 각각 넣어두면 자동으로 적용된다. 예를 들어 내부 테스트와 배포용 …

Product Flavor에 따라 google-services.json 파일 따로 적용하기 Read More »

Android에서 Base64 URL safe encode

Base64로 인코딩된 문자열을 URL에 담아서보내는 경우가 있다. 이 때 URL에서 사용되는 +, / 문자를 -, _로 치환시키는 등의 처리를 하게 되는데 이런 방식이 Base64 URL Encoding이다. Java에서는 Java 8부터 API로 제공된다. https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html java.util.Base64 클래스 getUrlEncoder() 메서드를 호출해서 Base64.Encoder 객체를 가져오는 방법으로 사용한다. 안드로이드에서는 API 26부터 지원된다. https://developer.android.com/reference/java/util/Base64.html 그렇다면 min sdk 버전이 26 미만이면 외부 라이브러리를 …

Android에서 Base64 URL safe encode Read More »

Float/Double형의 값을 다룰 때 주의할 점 (NaN)

아래 코드를 실행하면 콘솔에는 NaN이 출력된다.

이렇게 연산 결과가 NaN(Not-a-Number)이 되는 경우에 대해서는 별도의 처리를 해주어야 한다. 그렇다면 그 값이 Double.NaN과 같은지 비교하면 될까?

위 코드는 false를 출력한다. 그런데 아래 코드는 true를 출력한다.

사실 어떤 값이 NaN인지를 확인하는 올바른 방법은 아래와 같이 isNaN 메서드를 사용하는 것이다.

한가지 재미있는 것은 isNaN 메서드의 …

Float/Double형의 값을 다룰 때 주의할 점 (NaN) Read More »

GitHub 알림 메일 주소 추가하기

GitHub에서 오는 알림 메일을 자신이 속한 조직(Organization)별로 다른 주소로 받고 싶은 경우가 있다. 예를 들어 개인 프로젝트와 회사 프로젝트가 둘 다 GitHub에 있는 경우, 회사 프로젝트 관련 메일이 개인 메일로 가게 되면 업무중에 개인 메일함을 계속 확인해야하는 부담이 생기게 될 것이다. 이런 경우 회사 프로젝트 관련 알림은 회사 메일로 받을 수 있도록 설정할 수 있다. …

GitHub 알림 메일 주소 추가하기 Read More »

RadioGroup의 생소한 동작

  RadioGroup에서 처음 check를 호출하면 onCheckedChanged가 두 번 연속 호출되는 현상이 나타남. 동일 현상에 대한 SO 답변 https://stackoverflow.com/questions/10263778/radiogroup-calls-oncheckchanged-three-times 소스코드를 보면 그렇게 동작하도록 되어있다고 함 http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/RadioGroup.java#RadioGroup.check%28int%29 실제로 따라가보니 리스너가 두 번 호출되는 플로우를 타고 있다. 의도대로 동작하게 하려면 RadioGroup이 아니라 RadioButton의 setchecked를 쓰라고 한다. V에서 click 이벤트 발생 -> P에서 처리 -> P가 V를 업데이트 (click …

RadioGroup의 생소한 동작 Read More »

Collections.addAll

오늘 문득 이게 궁금해졌다. 종종 List에 다른 원소들을 추가하는 코드를 보면

이런 식이 아니라

이런 식으로 되어있는 경우들이 있다. 전에는 똑같은 역할을 하는 메서드가 Collections에도 있나보다 하고 지나갔었는데, 오늘은 왠지 똑같은 메서드를 왜 굳이 따로 집어넣어놨을까 하는 생각이 들었다. addAll. 특별할 것 없는 메서드이다. 그런데 왜 Collections에 따로 만들어뒀을까? Collections.binarySearch 같은 뭔가 있어보이는 …

Collections.addAll Read More »

iOS 앱 설계 패턴

안드로이드 개발자 커뮤니티에서 MVP, MVVM 등의 패턴이 엄청난 관심사로 떠올랐다가 열기가 식어갈 무렵 iOS 개발도 시작하게 되었다. iOS 개발자들 사이에서는 어떤 패턴이 유행하는지 검색하다가 VIPER라는 패턴을 발견했는데,  이 동네도 MVP, MVVM이 한 번 휩쓸고 지나갔고 가장 최근 등장한 것이 VIPER 패턴인 것 같은데 현재 프로젝트에 한 번 적용해볼까 하는 생각이 든다. MVP 패턴을 이야기할 때 …

iOS 앱 설계 패턴 Read More »

Fastlane. 시작한 김에 PR까지.

최근 iOS 앱 개발을 맡게 되었다. 아마 iOS 앱 개발을 시작할 때 누구나 그러했겠지만 code signing과 관련된 부분이 지나치게 복잡하다고 느꼈다. 처음에는 인증서와 프로비저닝 프로파일(provisioning profile) 자체를 이해해야했다. 인증서는 iOS 개발이라고 해서 딱히 특별할 게 없었는데 프로비저닝 프로파일이 뭔지는 자료를 좀 봐야했다. 프로비저닝 프로파일은 인증서의 공개키, 그리고 해당 앱의 설치가 허용된 기기목록에 관한 정보를 담고 …

Fastlane. 시작한 김에 PR까지. Read More »