비디오 세대

요즘에는 강의뿐만 아니라 단순한 설정작업에 관한 자료들도 영상 설명이 검색되는 경우가 많은데, 이런 게 좀 낯설고 이해가 안 가면서도 (그냥 텍스트로 후다닥 훑어보면 될 걸 왜 굳이?) 반대로 생각해보면 이미 영상으로 정보를 얻는 게 익숙한 사람들이 텍스트 자료를 보면 너무 많은 부분이 생략되어있다고 느낄 수도 있을 것 같다. 그리고 이전 세대들에게는 영상을 재생하는 행위 자체에

비디오 세대 Read More »

macOS 캘린더 앱에서 구글 계정 추가 시 캘린더 중복 등록 현상

캘린더앱에서 구글 계정을 추가했더니 똑같은 캘린더가 두 개씩 나타나는 현상이 발생했다. 정확한 원인은 모르겠고, 계정을 삭제했다가 시스템 환경설정 앱을 통해서 계정을 다시 등록했더니 정상적으로 추가되었다. 왠지 계정 등록 이벤트를 두 개의 앱에서 각각 핸들링했던게 아닌가 싶다.

macOS 캘린더 앱에서 구글 계정 추가 시 캘린더 중복 등록 현상 Read More »

[영화] 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

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

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이 출력된다. double x = 0.0; double y = 0.0; double num = x/y; System.out.println(num); // NaN 출력 이렇게 연산 결과가 NaN(Not-a-Number)이 되는 경우에 대해서는 별도의 처리를 해주어야 한다. 그렇다면 그 값이 Double.NaN과 같은지 비교하면 될까? System.out.println(num == Double.NaN); 위 코드는 false를 출력한다. 그런데 아래 코드는 true를 출력한다. System.out.println(num.equals(Double.NaN)); 사실 어떤

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

GitHub 알림 메일 주소 추가하기

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

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

RadioGroup의 생소한 동작

  RadioGroup에서 처음 check를 호출하면 onCheckedChanged가 두 번 연속 호출되는 현상이 나타남. 동일 현상에 대한 SO 답변 소스코드를 보면 그렇게 동작하도록 되어있다고 함 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 »