2021/05 3

[안드로이드] WebView 사용시 "Uncaught TypeError: Cannot read property 'getItem' of null" 해결

WebView에서 웹을 띄울때 어떤 경우에는 아래 콘솔메세지가 출력되면서 제대로 작동이 안되는 경우가 있다. 나는 네이버 한자사전(https://hanja.dict.naver.com/#/main)을 띄우다가 경험했다. Uncaught TypeError: Cannot read property 'getItem' of null 웹의 JS 쪽에서 localStorage.getItem() 이나 sessionStorage.getItem() 사용시 DOM Storage를 사용할 수 없어서 나타나는 오류인데, WebView Settings에서 DOM Storage를 사용할 수 있도록 설정해주면 해결된다. webView.getSettings().setDomStorageEnabled(true);

파티션 테이블로 Big Query 쿼리 비용 대폭 절감하는 법 (Partitioned table)

Big Query에서 쿼리를 날릴때 처리되는 용량을 가지고 요금이 매겨지는데, 그래서 "실행시 이 쿼리가 xxbyte 를 처리합니다" 라는 곳을 유심히 지켜봐야한다. Big Query에서는 테이블을 날짜별, 시간별, 또는 정수 기준으로 나눈 파티션을 나눈 테이블을 지원하는데, 이를 이용하면 처리되는 데이터의 양을 대폭 줄일 수 있다. 파티션 테이블을 사용하지 않았을때 다음은 으로 집어서 쿼리를 날렸을때 처리되는 데이터 양이다. SELECT event_timestamp, user_pseudo_id, param, user_id FROM `table-1605078626536.analytics_252952500.*`, UNNEST(event_params) as param WHERE event_name = 'fu..

프로그래밍/SQL 2021.05.28

[안드로이드] Kotlin에서 addOnGlobalLayoutListener 사용하기 (lambda에서 자신을 참조하는 법)

Kotlin Lambda에서 this 참조가 제대로 걸리지 않아서 (지원하지 않는다고 함) addOnGlobalLayoutListener를 일회성으로 사용하기가 어려웠다. 이렇게 적어서 구현하고 싶었지만...방황하는 this... view.viewTreeObserver.addOnGlobalLayoutListener { // TODO... view.viewTreeObserver.removeOnGlobalLayoutListener(this) } SelfReference를 추가하여 구현하면된다. class SelfReference(val initializer: SelfReference.() -> T) { val self: T by lazy { inner ?: throw IllegalStateException(..