전체 글 292

[Android] Module 구조

#1 Module?#1-1 What하나의 build.gradle에 종속된 코드의 범위= 빌드의 최소 단위= 라이브러리의 최소 단위안드로이드 앱은 Gradle로 빌드되고, 그 빌드의 명세는 build.gradle에 적힌다. 모듈이 build.gradle 파일에 종속된다는 말은 즉 모듈은 "빌드의 최소 단위"라고 뜻이 된다. #1-2 Why왜 이런 단위를 쓸까? 다시 말해, 왜 "빌드의 최소 단위"로서 모듈을 쓸까? 자체적인 빌드 구성을 가지고 있다(= build.gradle 파일을 가지고 있다)는 말은, 자체적으로 컴파일한 결과물을 생산할 수 있다는 얘기다. 즉, 외부(타인)에서 실행할 수 있도록 배포(= 라이브러리화)가 가능한 최소 단위가 된다. 라이브러리화가 가능하다는 이야기는 기능들을 분리하여 각각 ..

ContentWithSwipeableBottomSheet()

#1 개요BottomSheetScaffold()의 문제점을 개선한, 커스텀 컴포넌트 ContentWithSwipeableBottomSheet()를 구현한다 (게시글 맨 아래에 소스코드 있음). #2 BottomSheetScaffold()#2-1 개요 androidx.compose.material | API reference | Android Developersandroidx.appsearch.builtintypes.propertiesdeveloper.android.com말 그대로 Bottom쪽에 Swipe 가능한 Sheet를 보유한 Scaffold다. #2-2 한계(1) content 높이의 동적 조절 불가능sheet에 있는 dragHandle을 swipe 할 수 있다. 하지만, sheet의 sw..

디베이터 - 테크놀로지

#1 개요다국적 테크 회사 IBM의 연례회의 '싱크Think'의 2019년 무대는 더없이 단출했다. 한쪽 구석에는 온화한 태도의 케임브리지대 졸업생이자 내(저자) 오랜 토론대회 경쟁자였던 해리시 나타라잔이 서 있었다. 해리시는 가장 실력이 뛰어나고 경험 많은 토론자로 꼽혔고 토론대회에서 몇 차례 나를 꺾은 적도 있었다.반대쪽 구석에는 실시간으로 인간과 논쟁을 벌이고, 어쩌면 이길 수도 있도록 훈련된 인공지능 시스템 '프로젝트 디베이터Project Debater'가 있었다. 준비 시간이 다 끝났을 때 프로젝트 디베이터는 우아한 여성 목소리로 먼저 말문을 열었다. "만나서 반가워요, 해리시. 당신은 인간들과 겨루는 토론대회에서 세계 최다 승리 기록을 갖고 있다고 들었어요. 하지만 기계와의 토론은 아마 처음이..

디베이터 - 관계

#1 개요주방세제 피니시의 제조사는 미국인을 대상으로 설거지에 대해 조사한 적이 있다. 열 명 중 여섯이 설거지가 스트레스라고 대답했고, 그중 4분의 3이 그릇을 미리 한 번 헹구어 식기세척기에 집어넣는다고 했다. 하지만 가장 재미있는 발견은 가사 분담 논쟁이었다. 모든 가정이 설거지와 관련된 논쟁을 한해 평균 217차례, 한 달에 18차례나 벌였다. 대부분은 누가 세척기를 비워야 하는가에 관한 것이었고 개수대에 담가둔 그릇 때문에도 싸웠다.가까운 이들 간의 토론은 어떻게 해야 하는가? #2 핵심 논리#2-1 설거지 논쟁의 비극설거지에 대한 설문조사의 결과(#1)는 사람들이 논쟁에 대해 암묵적으로 알고 있는 두 가지 사실을 뚜렷이 드러냈다.1. 지속적인 의견 충돌은 가까운 사이에서 가장 많이 일어난다. ..

[Android] Pointer input - Drag

#1 개요#1-1 공식 문서 드래그, 스와이프, 플링 | Jetpack Compose | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 드래그, 스와이프, 플링 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. draggable 수정자는 동작을 한 방developer.android.com위 공식 문서를 나의 언어로 정리했다. #1-2 AnchoredDraggable Swipeable에서 AnchoredDraggable로 이전 | Jetpack Compose | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. Swipeable에서 Anchored..

[백준] 26169 (세 번 이내에 사과를 먹자)

#1 알고리즘 그래프 - 깊이 우선 탐색 (DFS, Depth-First Search)#1 그래프의 탐색 깊이 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 깊이 우선 탐색 깊이 우선 탐색의 애니메이션 예시 깊이 우선 탐색( - 優先探索, 영어: depth-fkenel.tistory.comDFS를 이용했다. 한 단계식 정복해가며 차근차근 나아가는 너비 우선 탐색과 달리, 깊이 우선 탐색은 '한 방향으로 갈 때까지 가보기'를 반복한다. 따라서 BFS보단 DFS가 이 문제에 어울린다. 이 문제에서는 최대 3번 이동해야 한다는 제한이 있다. 깊이 우선 탐색 알고리즘을 살짝 고쳐서, 문제에서 제시한 깊이까지만 수행되도록 만들었다. #2 코드 - 코틀린#2-1 성공한 코드var y..

[백준] 7569 (토마토)

#1 알고리즘 그래프 - 너비 우선 탐색 (BFS, Breadth-First Search)#1 그래프의 탐색 너비 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전.ko.wikipedia.org그래프의 각 정점을 한번씩 방문할 필요가 있다고 해보자. 그 방문의 방kenel.tistory.com #2 코드 - 코틀린import java.util.*var X = -1 // Mvar Y = -1 // Nvar Z = -1 // Hlateinit var tomatoes: Array>>const val RIPE_TOMATO = 1const val UNRIPE_TOMATO = 0const val RESULT_CANT_RIPEN_ALL = -1fun main() { val boxSiz..

[백준] 2178 (미로 탐색)

#1 알고리즘 그래프 - 너비 우선 탐색 (BFS, Breadth-First Search)#1 그래프의 탐색 너비 우선 탐색 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전.ko.wikipedia.org그래프의 각 정점을 한번씩 방문할 필요가 있다고 해보자. 그 방문의 방kenel.tistory.combfs 알고리즘으로 풀었다. #2 코드 - 코틀린import java.util.*var Y = -1var X = -1lateinit var miro: Array>const val WALL = 0fun main() { // (1) make miro and make discovered for bfs val yAndX = readln().split(" ") Y = yAndX[0]..

[Android] BottomSheetScaffold의 BottomSheet가 사용자 입력으로는 숨겨지지 않지만, 프로그래밍적으로는 숨겨질 수 있게 만들기

#1 문제 상황#1-1 사용자 입력으로 숨겨지지 않게 만들기val scaffoldState = rememberBottomSheetScaffoldState( bottomSheetState = rememberStandardBottomSheetState( skipHiddenState = true ))이러면 된다. 사실 skipHiddenState는 기본값이 true기에 그냥 val scaffoldState = rememberBottomSheetScaffoldState()만 써도 되긴 한다. 본 게시글의 코드는 기록의 의미가 강하므로, 그냥 명시적으로 밝혀 썼다. #1-2 문제점FilledTonalButton( onClick = { scope.launch { ..