68mm 쏟아진 날, 카드엔 0mm.
기상청 단기예보는 발표 시각 이후만 제공. 밤에 받은 응답으로 하루를 요약해 같은 화면이 두 말을 함 — 요약 쪽 오류.
개발 과정
방향이 바뀐 자리만 날짜 순으로. 대부분 값을 더하는 일이 아니라 이미 있는 값이 무엇을 말하게 할지.
- 문제
- 「내일 비 87%」에서 「우산」까지는 매번 사람이 건너는 자리
- 한 것
- 네 갈래 규칙이 항목을 목록에 밀어 넣고, 항목마다 왜 떴는지 근거 줄
- 결과
- 「우산 — 강수 확률 87% · 4.6mm」. 근거가 있어야 넘길지 판단 가능
- 문제
- 집 기준만 보면 「회사엔 오는 비」를 그대로 맞음
- 한 것
- 집 · 회사 좌표를 박아 두고 켜 둔 곳 전부 합쳐 준비물 선정
- 결과
- 한 곳에서만 걸린 항목에만 곳 이름 — 다 붙이면 모든 줄에 같은 말
- 문제
- 카드 둘 — 집 32도 · 회사 34도를 나가기 전에 비교해야 함
- 한 것
- 요약 하나로 합치고 더 안 좋은 쪽 사용 — 최저기온만 더 추운 쪽, 구름은 적은 쪽
- 결과
- 비교는 화면이 담당. 어디가 더 궂은지는 차트 점선 둘
- 다음이라면
- 접는 방식이 「시각마다 더 높은 값」이라 한겨울 추위엔 어긋남. 겨울에 재검토
- 문제
- 네이버 · 갤럭시 「25~32」, 앱 「25~30」. 모델 차이지만 사용자에겐 앱 오류
- 한 것
- 단기예보를 덮어쓰기로, Open-Meteo 를 바탕으로 — 자외선 · 미세먼지는 단기예보에 없음
- 결과
- 저쪽과 같은 값. 열쇠 없어도 앱 동작
- 문제
- RemoteViews 는 커스텀 뷰 불가. 위젯용 그리기를 따로 짜면 한쪽만 고쳐짐
- 한 것
- 뷰를 화면 밖에서 measure · layout 해 비트맵으로 전달
- 결과
- 차트 코드가 앱 · 위젯 한 벌. 자리가 낮으면 비율 자동 축소
- 문제
- 글줄 넷에 그림이 눌림. 위젯이 답할 건 「지금 어떤 날인가」 하나
- 한 것
- 강수를 온도 곡선 뒤 반투명 막대로 겹쳐 한 판. 크기 4×2 · 4×1 · 3×1
- 결과
- 비 오는 시각과 최고 온도가 한 그림에서 세로로. 3×1 은 지금부터 열두 시간만
- 문제
- 강수량 0인데 매일 접이 우산
- 한 것
- 기상청 강수확률 30% 는 사실상 기본값 — 문턱 40 으로 상향, 예보 강수량 0.5mm 도 함께
- 결과
- 확률 · 양을 같이 판단. 하루 강수량은 합친 스물네 시간에서 재계산
- 문제
- 「높음이 몇부터 높음인가」에 앱 어디에도 답 없음
- 한 것
- 값마다 구간 띠 위에 어느 구간부터 무엇을 챙기는지. 등급 조각이 곧 단추
- 결과
- 문턱 숫자는
Rules에서만 읽음 — 두 곳에 적으면 한쪽만 헌 값
- 다음이라면
- 준비물 줄을 처음엔 전부 초록. 선크림은 노란 「높음」부터라 띠와 줄이 다른 말
- 문제
- 밤에 받은 카드 「25° 23°」, 바로 아래 곡선은 31° · 19°
- 한 것
- TMN · TMX 가 안 오면 남은 시간으로 메우지 않고 비움
- 결과
- 기온 · 눈 · 하늘 셋이 같은 병. 강수만 먼저 고쳤던 것을 한 번에
- 문제
- 오늘 · 내일만이라 「이번 주 언제 비 와?」에 답 없음
- 한 것
- 예보 사흘 → 이레, 요일 · 하늘 · 최고 · 온도 막대 · 최저 · 비 올 확률 한 줄
- 결과
- 막대는 그 주 최저~최고를 한 자로 — 높낮이가 온도, 길이가 일교차
- 다음이라면
- 주 경계를 처음엔 10dp 틈으로만. 바탕이 이어져 한 장에 금이 간 꼴 — 나눌 거면 카드를 나눔
의사결정 방식 — 실제 예보로 그려 놓고 고름
갈림길마다 실제 예보값과 치수로 그린 HTML 한 장을 만들어 선택.
무엇으로 그리나
그날의 실제 예보. 비 없는 날로 그리면 네 안이 똑같아 보임
무엇을 적나
안마다 얻는 것 · 잃는 것 한 줄, 값은 숫자로 — 「눈금을 버리는 대신 그림이 폭을 다 씀」
차이를 얼마나 벌리나
막대 불투명도 0.42 대 0.6 시안에 「뭐가 다르냐」. 눈으로 갈려야 시안
어떻게 고르나
고른 뒤에 구현. 네 안을 다 만들지 않음
잘라 온 자료로 하루를 요약하지 않기
다른 앱에도 가져갈 규칙 한 가지. 맨 위 비교의 원인.
메우지 않음
TMN · TMX 가 안 오면 비움. 「남은 시간의 최저 · 최고」로 메우면 저녁엔 저녁값이 곧 「오늘 최고」
합친 뒤에 셈
요약은 원본 응답이 아니라 합친 스물네 시간에서 — 최고 · 최저 · 강수량 · 적설 · 하늘 상태 모두
값마다 따로 고치지 않음
강수만 고치고 기온 · 눈 · 하늘을 두어 같은 병이 세 곳에 남음. 규칙 하나면 한 자리에서
어긋나면 신호
카드 25°, 곡선 31°. 같은 자료를 보는 둘이 다른 말이면 한쪽이 틀림
배운 점
위젯 색은 런처 테마로 풀림. ?android:attr/textColorPrimary 는 밝은 런처에서 어두운 카드 위에 검은 그림.
@color + values-night 는 밤낮 자원으로 풀려 안전. tint · setColorFilter 는 그림 전체를 한 색으로 덮어,
「해 뒤의 구름」 같은 두 색 그림은 길마다 제 색 필요.
안 보이는 단추는 없는 단추. 등급 조각을 단추로 만들고 단추처럼 안 보이게 두니 아무도 안 누름. 물음이 생기는 자리 바로 옆에 둠.
매번 무시하는 알림은 옆 알림까지 무디게 함. 주말 알림이 「오늘도 그냥 알림」이 되자 평일 알림도 흘려봄. 끈 건 알림뿐, 화면 · 위젯은 그대로.
산출물
- 소스 — Kotlin · RemoteViews · 기상청 단기예보 · Open-Meteo
- 시안 페이지 다섯 장 — 위 격자에서 열림