2023/01 7

[안드로이드] ExoPlayer 깜빡거리거나 검은 화면(Black screen)이 뜰 때

문제발생 Epoxy로 무한 반복되는 배너 캐러셀에 동영상을 적용시키는 중에, 간혹 동영상이 재생될때 검은 화면만뜨고 재생이 안되거나 깜빡이는 문제가 있었다. *하나의 ExoPlayer를 RecyclerView.Adapter에서 재활용해가면서 쓰는 사례다. 정신차리고 setPlayer() Document를 자세히 읽어보니... Player를 다른 View에 붙일때 switchTargetView()를 쓰는걸 추천한다고 되어있다. 하지만 setPlayer()를 직접 쓰고자 할 경우 이전 View에서 Player를 분리하기 위해 setPlayer(null)을 호출하기 이전에 새로운 View에 Player를 연결시켜야 한다. *switchTargetView를 직접 써보려고 했으나, 지원하지 않는 메소드였다. 해결..

LOOKUS 개인정보처리방침

LOOKUS 서비스 이용 안내 제1조 (총칙) LOOKUS 서비스(이하”서비스”라 합니다) 이용에 대한 본 동의를 거부하실 수 있으며, 거부 시에는 회원가입에 제한을 받을 수 있습니다. 비트코인 등 암호화폐의 경우, 발행 주체를 알 수 없으므로 회원의 소재국 내·외의 어떠한 제3자(회사 포함)도 가치를 보증하거나 지급을 보증하지 아니합니다. 그러므로 비트코인 등 암호화폐에는, 회원 소재국의 법률 기타 행정청의 유권해석, 경제환경 등에 따라 매우 큰 변동성이 있을 수 있고 비트코인 등 암호화폐의 교환에 대한 법률행위의 해석이 국가별로 상이하여 법정화폐와 다른 특유의 위험성이 내재되어 있으므로, 회원은 반드시 이 점에 주의하여야 합니다. LOOKUS 서비스의 경우, 회원이 LOOKUS 앱을 통해 스테이킹을 ..

[안드로이드] java.lang.IllegalStateException: An instance of OnFlingListener already set 해결

문제 발생 @ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT) internal class PagerSnapHelperCarousel @JvmOverloads constructor( context: Context ) : Carousel(context) { init { if (onFlingListener == null) { PagerSnapHelper().attachToRecyclerView(this) } } } Epoxy의 Custom Carousel로 SnapHelper를 붙이는 도중 OnFlingListener가 이미 등록되어있다는 오류가 발생했다. 당연하게도 이유는 RecyclerVIew에 OnFlingListener가 이미 등록되어 있어..

[TypeScript] satisfies 연산자 알아보기

satisfies operator satisfies는 TypeScript 4.9 버전 부터 새롭게 추가된 연산자로, 업캐스팅(up-casting)으로 Type-safety를 보장한다. 💡 업캐스팅? 부모 - 자식 상속관계의 클래스가 있을때 부모 → 자식 방향의 형변환을 다운캐스팅, 자식 → 부모 방향의 형변환을 업캐스팅이라 한다. Parent p = new Parent(); Child c = new Child(); Parent p2 = (Parent) c; // 업캐스팅 Child c2 = (Child) p2; // 다운캐스팅 Typescript의 경우 한 타입이 다른 타입의 값을 모두 포함하고 있으면 상속관계가 된다. 사용 예시를 바로 보자. Versions는 VersionRecord를 satifsfi..

덤벙대는 개발자를 위한 글 : 내가 버그 발생률을 획기적으로 낮춘 방법

나는 어떤 사람인가? 학창시절 필통도, 샤프도, 지우개도 반년 이상 들고다녀 본적이없다. 모두 잃어버렸다. 우산은 말할 것도 없지, 이젠 아예 유치원생이 들고다닐 것 같은 샛노란 우산을 사서 까먹지 않게 한다. 본가에 내려가서 다시 올라올때도 노트북 충전기나 뭐 하여튼 중요한 것을 꼭 하나씩 빠뜨리고 올라와서 부모님이 택배로 다시 보내주신다. 장기 기억력은 남들보다 뛰어나지만 초 단기 기억력은 아주 나쁘다. 34 + 23과 같은 간단한 암산을 하다가도 중간에 까먹어버린다. ADHD일까? 검사는 받아보지 않아서 모르겠다. 슬프지만 이런 나를 받아들이는 중이다. 영화 를 보면 주인공은 단기 기억상실증을 앓고있어 온 몸에 문신을 하고 다닌다. 내가 다음에 할일, 이미 했던 일들을 기억해야하기 때문이다. 어렸을..

CloudFlare KV로 앱 점검시간 관리하기

왜 Cloudflare Worker? 개발중인 앱 실행시 스플래시 화면에서 진입점(Entrypoint)을 결정하고 간단한 정보들을 내려주는 API가 있다. 포함되는 데이터는 API 서버 URL, 앱 버전 업데이트 정보, 점검시간 정보 등 앱 실행을 위한 필수정보들이다. 이는 CloudFlare Worker 로 구현되어있는데, 아래와 같은 이유로 채택하게 되었다. 앱 API 서버와 별개로 동작할 것: 서비스 점검 등으로 서버가 다운되었을때도 정보를 전달할 수 있다. 빠르고 안정적인 응답을 내려줄 것: Cloudflare 전역 네트워크 위에서 돌아가서 50ms 이내 응답이 가능하다. 수정 및 배포가 용이할 것: JS를 써서 언어적 장벽도 낮고 Wrangler라는 CLI를 제공해서 배포가 편리하다. 요구사항:..

[AppsScript] 스프레드 시트 Row 업데이트한 날짜 자동으로 적는 법

행에 수정이있을경우, 수정한 날짜를 자동으로 기록하는 방법을 소개한다. AppsScript는 여러 트리거들을 제공하는데, 몇몇 함수들이 예약되어있다. 그 중에서도 셀의 편집때 자동으로 트리거되는 onEdit(e) 함수를 사용해서 셀의 변화가 일어날때마다 업데이트 날짜를 찍어주는 만들어 보았다. 구글 스프레드시트 > 확장 프로그램 > Apps Script 메뉴에 들어가, 아래 코드를 붙여넣고 저장한다. HTML 삽입 미리보기할 수 없는 소스 사진의 시트를 기준으로 작성된 코드이므로 하나하나 뜯어서보자면, UPDATED_COLUMN은 날짜를 적을 컬럼의 위치다. 그리고 HEADER_ROW_LENGTH는 헤더부분의 길이를 나타내는데, 헤더를 수정했다고해서 업데이트 날짜가 찍히면 안되니 그 이상의 Row에서 수..