전체 233

Nutri Capture 백엔드 - StateFlow로 전환

#1 개요#1-1 State에서 StateFlow로 마이그레이션 [Kotlin] Coroutines Flow - StateFlow#1 개요 StateFlowA SharedFlow that represents a read-only state with a single updatable data value that emits updates to the value to its collectors. A state flow is a hot flow because its active instance exists independently of the presence of collectokenel.tistory.com위 게시글을 참조하여 프로젝트를 업데이트했다. #1-2 StateFlow 업데이트이전 게시글의 문제점을 ..

Nutri Capture 백엔드 - ChatBar에 ViewModel 연결

#1 개요#1-1 ViewModel 전달하기ChatBar의 '전송' 버튼을 눌러, NutrientViewModel.onEvent()를 발생시킬 것이다. 현재 MainActivity에서 NutrientViewModel 객체를 만들어서 NutrientScreen에 전달하고 있는데, 같은 방식으로 ChatBar에도 전달한다. 그리고 이 NutrientViewModel에 정의해둔 Insert 동작이, ChatBar의 '전송' 버튼을 누를 때 트리거되게 만든다. 지금은 기존 코드를 복사해서 새로운 기능에 붙여넣기하고 있지만, 후에 Hilt로 마이그레이션해서 이러한 의존성 관련 코드들을 깔끔하게 정리할 예정이다. #1-2 문제점: UI 업데이트하지만 #1-1를 프로젝트에 적용해도, #3-1에서 보듯 UI가 업데이트..

Nutri Capture 방향성 - 개발 일정표 (1차)

#1 현 개발 행태에 대한 문제점#1-1 과정의 완벽주의난 풋내기 프로그래머에 불과하다. 내가 만들 앱 또한 그저 그런 앱일 것이다. 적어도 처음 (출시할 의도로 만드는) 앱을 당연히 그럴 것이다, 아니 그래야만 한다. 그런데 나는 마치 정상급 앱 경영 콘테스트에 출품하는 것처럼 프로젝트를 만들어 가고 있다. 비유하자면 아주 사소한 돌부리만 발에 걸려도, 그걸 포크레인까지 동원해 철저하게 파고 평탄화 작업을 한 뒤에 안전 검사까지 하고 나아가는 셈이다. 최소한의 기능만 만들고 우선 출시부터 한다. 그리고 고쳐나가면 된다. 오히려 그 편이 더 '완벽'하지 않은가? 현재의 나는 결과의 완벽주의가 아니라 과정의 완벽주의를 좇고 있다. 어차피 사람들은 최종 결과만 보는 데 말이다. 나라고 다른가? 나 또한 다른..

Nutri Capture 프론트엔드 - Typography

#1 일괄적 글꼴 필요프로젝트 내에서 쓰인 글씨의 크기가 중구난방이라는 문제점이 있다. 현재는, fontSize 속성을 지닌 컴포저블별로 크기값을 일일히 할당해두었기 때문이다. 이를 전체적으로 통제할 수 있어야 한다. 크기 뿐만 아니라, 버튼에 들어가는 용도의 글꼴을 별도로 선언해두었다가 두고두고 쓰는 경우도 앞으로 생길테다. #2 Typography#2-1 머터리얼 디자인 가이드 Typography – Material Design 3Learn about Material Design typography. This guide covers everything from font styles and hierarchy to line height to create user-friendly text.m3.materi..

Nutri Capture 프론트엔드 - bottomBar 동적 변경

#1 개요#1-1 소프트코딩 개요지금까지는 +버튼을 누르면, 현재 시각을 기준으로 (하드코딩된) 더미 영양소 데이터를 담은 DayMealView 레코드가 INSERT되었다. 이제는 View에서 사용자가 시각 및 영양 데이터를 소프트코딩하여 ViewModel로 전송할 수 있게 만들어본다. #1-2 채팅 UI를 위한 '채팅' 입력 창 Nutri Capture 방향성 - 채팅 UI#1 기존 UI 비판#1-1 스크린샷지금까지 진행한 프로젝트의 스크린샷이다. 아래는 이 화면의 문제점들이다. #1-2 중첩된 Container'날짜 카드' Container 안에는 '식단' Container가 들어가는데, 이렇게 포장kenel.tistory.com이전에 계획한 방향대로 화면을 구성한다. 채팅 UI이므로 영양 데이터를 ..

디베이터 - 침묵

#1 개요내가 토론에서 배운 한 가지 교훈은 토론은 시작하긴 쉽지만 끝내기는 어렵다는 것이었다. 실제로 시작, 중간, 끝을 정해놓은 게임에서조차 경쟁심이 모든 걸 뒤덮어버리는 경우가 얼마나 많은가! 그렇게 되면 토론자는 실수를 저지르며 사람들을 긴장과 분노의 도가니로 몰아넣었고 그 감정은 토론이 끝나고 나서까지 그대로 남았다. 이런 위험을 생각하면 반대에 뛰어들기로 결심하기 전에 먼저 잘 생각해보아야 했다. 침묵하느냐, 아니면 뛰어드느냐. 무엇에 침묵하고 무엇에 침묵하지 말아야 하는가? 만약 침묵한다면 그 이유는? 단순히 감정 조절이 안 되기에 때문일까? 대체 왜 침묵하는가? #2 핵심 논리#2-1 침묵의 목적 1일레인 스캐리 교수님은 동의가 필요한 상황에서는 차단(clogging) 즉, 속도를 늦추고 ..

책/자기 계발 2024.12.17

Nutri Capture 백엔드 - 이진 탐색 적용

#1 삽입 함수 리팩토링#1-1 리팩토링할 함수// in NutrientViewModel.ktprivate fun findIndexToInsert(list: SnapshotStateList, newItem: DayMealView): Int {    for(i: Int in list.indices) {        if(newItem NutrientViewModel에는 정렬된 배열에 새 원소를 삽입하는 함수 findIndexToInsert()가 있다. 기존 findIndexToInsert()는 위 코드에서 보듯 선택 정렬의 원리로 짰다. #1-2 이진 탐색 이진 탐색 (Binary search)#1 알고리즘 #1-1 #1-2 이렇게 해서 x의 인덱스 i를 찾으면 좋겠지만, 이 x가 배열 values 어디에..

Nutri Capture 프론트엔드 - item 추가ㆍ제거 애니메이션

#1 애니메이션LazyColumn에 아이템이 추가ㆍ제거될 때의 애니메이션 효과를 추가하려고 한다. 이 때, 그 구현 방식은 (당장 내가 보기에) 아래와 같이 2개로 나눌 수 있다. 2개의 공식 문서 링크를 달겠다. 각각은 서로 다른 구현 방식을 알려주고 있다. #1-1 'Composable'의 애니메이션 처리를 위한 가이드 애니메이션 수정자 및 컴포저블  |  Jetpack Compose  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 애니메이션 수정자 및 컴포저블 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Compose에는 일반적인developer.android.com가이드에 기술된 코드의 구조는 아래..