전체 글 494

[Hilt] Custom Component의 활용 - 지역별 DB 생성하기

Hilt의 Component와 Scope Hilt에서는 안드로이드 앱의 다양한 생명주기에 맞는 미리 정의된 컴포넌트 들을 제공한다. 컴포넌트 위의 어노테이션은 해당 컴포넌트의 수명에 대한 바인딩 범위를 지정한다. 이렇게 어노테이션을 붙이면 해당 컴포넌트와 오브젝트는 생명주기를 같이하게 된다. 바인딩은 Scoped와 Unscoped 두 가지 유형으로 나누어지는데, 기본적으로는 Unscoped 바인딩이다. Unscoped: 해당 바인딩이 요청될 때마다 새로운 인스턴스가 생성됨 Scoped: 범위가 지정된 컴포넌트의 인스턴스 당 한 번만 생성되며, 해당 바인딩에 대한 모든 요청은 동일한 인스턴스를 공유함 @Module @InstallIn(FragmentComponent::class) object FooModu..

[Jetpack Compose] @Immutable과 @Stable이란

Stable과 Unstable Recomposition이 일어날때, Compose는 Stable과 Unstable로 유형을 구분한다. - Stable: 불변하는 것(Immutable), 혹은 Recomposition간에 값이 변경되었는지 여부를 추적할 수 있는 경우. - Unstable: Recomposition간에 값이 변경되었는지 알 수 없는 경우. 만약에 어떤 타입이 Stable하다면 Skip할 수 있지만 Unstable하다면 다시 그려야하므로, Stable과 Unstable하다는 것은 Compose에게 아주 중요하고 이것은 결국 성능에까지도 영향을 미치게 된다. 따라서 가능한한 클래스를 Immtable하게 만든다면 성능에 조금이나마 도움이 될 것이다. @Immutable @Immutable은 컴포..

[Python] SlackBot 쉽게 만들기

오늘 소개할 것은 Slack Bolt다. Slack Bolt 이전에는 슬랙봇을 만들기 위해 Redirect URL을 App에 정의 해주어야 했고, 그렇기 때문에 도메인도 필요하고 LocalHost에서 돌릴려면 ngrok 같은 서비스도 부가적으로 이용해야 했다. 웹 애플리케이션을 만들어야 했던건 덤이다 ㅎ... 하지만 이 모든것은 Bolt선에서 모두 정리된다! 두-둥 시작하기 슬랙 앱 만들기 봇 토큰 Scope 요청해서 토큰 발급받기 위 2가지 과정이 선행되어야 함은 기존과 변함없다. 하지만 Socket Mode를 켜줘야하는 추가 설정이 필요하다. Socket Mode는 우리의 봇이 HTTP 엔드포인트를 노출하지 않고도 작동할 수 있게 해준다. 설령 봇이 방화벽 뒤에있더라도 말이다. Socket Mode를..

Devfest GDG Songdo 2023 후기

올해의 마지막 행사라고 생각하고 신청한 GDG Songdo 2023이다. 송도라 좀 멀긴하지만 발표 주제도 다양하고 알차보여서 신청했다. 난 도전적인 문제를 해결하고 싶은데, 안드로이드 개발을 하면서 화면만 뽑아대니 회의감이 들었던 시절도 있었다. 화면빼고 정말 문제들만 남는 DevOps나 백엔드로 일하고 싶었다. 하지만 최근에 문득 생각이 든게... "잘하는 걸 즐기지 못한다는 건 인생을 하드모드로 살아가는 것"이라는 생각이 들었다. 정말 길을 걷다가 뿅-하고 떠올랐다. 잘하는 걸 더 잘해서 잘하는 자체로 재미있게 즐겨도 좋지않을까? 그래서 이번 발표는 안드로이드/KMP 관련 발표만 있는 gradle clean방에서 썩어보았다. 모두 양질의 발표로 정말 유용하게 잘 들었지만, 코드샘플이 있었던 몇 가지..

나/이슈 2023.12.10

방예담 <하나만 해(Only One)>에 숨은 저스틴 비버의 노래들

저스틴 비버의 팬이자 코리안 저스틴 비버인 방예담의 노래를 듣다 깜짝 놀랐다! 가사에 저스틴 비버의 노래가 마치 팬송처럼 섞여나오고 있었기때문이다 ㅋㅋㅋ 빌리버는 빌리버를 알아보는 법... 오랜만에 저스틴 비버 노래를 정주행 할 겸, 방예담의 에 숨은 저스틴 비버 노래들을 알아보도록 하겠다. (주관적 억지 있음) Baby just believe in yourself 자꾸 널 속이려 해 다른 누구보다 멋진 남자가 돼주고픈 맘을 왜 그렇게 멋대로 흔들어 놓고선 baby "believe" Justin Bieber - Believe 앨범의 수록곡 Believe다. 저스틴 비버의 팬송이라고 보면 된다. 난 이 노래를 그렇게 자주 듣진않지만 Believe 앨범, 특히 Acoustic 버전은 아주 명반이다. 얼마나 ..

나/이슈 2023.12.03

DASHI 채팅, 영상 Preview 업데이트

벌써 일요일 2시인가...? 저지 아이즈도 해야하는데 Dashi 업데이트에 토요일 전체와 일요일 절반을 날려버렸다. 하지만 지금은 이게 저지 아이즈보다 재밌으니까 어쩔 수 없다... 오늘의 업데이트 어제 아침에 업데이트 계획을 세우고, 하고싶은거 부터 해봤는데 트위치 채팅 재생, Seek 프리뷰 이미지 업데이트에 성공했다. 사실 이것만으로도 엄청 쓸만해진 것 같다. - 영상 녹화를 하면서 채팅 서버에서 채팅을 받아와 자막 파일로 구성 - 녹화된 영상에 대해서 썸네일 생성 후 프리뷰용 Sprite 이미지 생성 VOD에 대한 고민 Twitch 계정 연동은 사실 연동해서 뭘 할 기능이 없어서 안해도 될거같고... VOD 다운로드가 문제다. 실제로 몇일 돌려보니 방송하나의 용량이 18GB 분량이 되는걸 목격했다..

나/이슈 2023.12.03

[VideoJS] 영상 타임라인에 프리뷰를 표시하는 방법

유튜브나 트위치에서 SeekBar에 마우스를 가져다대면, 특정 주기마다 영상 프리뷰가 살짝살짝씩 보인다. 당연히 될거라고 생각했던 기능이지만 이 프리뷰는 (당연히 ㅎㅎ) 손수 만들어주어야한다. 과정은 다음과 같다. 1. 영상을 특정 Interval 마다 잘라서 썸네일을 만든다. 2. 만들어진 썸네일을 한 장의 Sprite 이미지로 만든다. 3. VideoJS에 videojs-sprite-thumbnails Plugin을 적용해서 Sprite를 영상에 설정해준다. 나는 ts파일이 이미 10초 단위로 쪼개져있었기 때문에 폴더안의 모든 파일을 돌면서 한 장씩 썸네일을 만들어주었다. ffmpeg -i -s 160x90 -vframes 1 .jpg 그리고 만들어진 사진들을 imagemagick의 montage를 ..

영상자막을 채팅처럼 표현하기

DASHI 서비스를 계속 발전시키는 도중에, 트위치 채팅도 다시볼 수 있었으면 좋겠다고 생각했다. 문제는 채팅이 영상과 맞게 정확한 시간에 올라와야한다는 건데, 그래서 채팅을 WebVTT로 만들었다. 즉 영상 자막이 된다는 건데, 일반적인 영상 자막처럼이 아니라 세로로 스크롤하며 올라오는 채팅포맷이어야 했다. var track = video.textTracks[0]; track.oncuechange = function() { var cue = this.activeCues[0]; if (cue) { console.log(cue.text); } }; 영상에 자막을 추가하고, 영상자막이 변경될때마다 console에 로그를 찍는 코드다. 이를 이용해서 Container에 채팅 Element를 하나씩 추가하고 스..

DASHI 관리자 업데이트

오늘은 (나만쓰는) 트위치 다시보기 서비스 DASHI에 추가 업데이트를 진행했다. 이전에 보이는 것에 대해 크게 신경쓰지 않았는데 이렇게 메인 화면에도 트위치 로고를 넣어주었다. 이미지를 다운받는 건 너무 귀찮으니까...내가 좋아하는 아스키아트로~ 이렇게 긱하게 디자인 한번 해보고싶었는데 맘에든다. 또, 관리자 페이지를 준비하면서 페이지가 늘어나 빵 부스러기 시스템이 생겼다. 빵 부스러기가 있으니 확실히 쓰기 편해지는 것 같다. 유저도 페이지 계층이 그려질 수 있게 만들어준다. 이건 관리자 페이지다. 일본 여행도중 진짜 딱 휴대폰만 가지고 있을때 서버 용량이 꽉 차버리면 난감해지기 때문에 미리 준비해뒀다. Python 라이브러리 중에 humanize라는게 하나 있는데, 아주 유용하다. 화면에 보이는 용량..

나/이슈 2023.11.20

DASHI - 트위치 다시보기 부활

2022년 11월 10일 트위치 다시보기 서비스가 사라졌다. 오늘이 19일이니까 1년하고도 정확히 9일지났는데 너무나 불편한게 많아서 견딜 수 없었다 ㅋㅋㅋ 솔직히 1080p 뺏긴건 괜찮다...근데 다시보기는 선 넘었다고 생각함 좋아하는 스트리머가 갑자기 방송을 키거나, 아니면 그 날의 녹화본이 사라지거나 하는 경우가 잦아서 트수는 이 상황을 안타까워하며 분개하며...나만의 다시보기 스트리밍 서비스인 dashi를 어제 하루를 꼬박 투자해서 만들었다. 기능 - Observe하는 스트리머의 방송 녹화: 방송을 한번 켤때마다 하나의 다시보기가 만들어진다. - 지난 방송 리스트: 최대 3일까지의 방송목록을 가지고 있는다. - 최근 잘라보기: 지금은 리밋을 해제에서 처음부터 끝까지 볼 수 있지만, 최근 N시간만 ..