본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

장소도 두 진실이야

~9 min · location, two-truths, foreground-only, privacy

Level 0식은 화로
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"override 는 captured 표본을 절대 안 지워. 지도 우선순위는 intended, 그다음 captured."

같은 두 진실 모양, 이번엔 장소

시간의 두 진실 규칙은 이미 만났지. crumb 을 언제 썼나, 그리고 어느 날에 속하나. 위치도 정확히 같은 모양이야. captured 위치는 crumb 을 쓸 때 물리적으로 있던 곳이야. 허락했을 때 화면 켜져 있으면 자동으로 잡은 표본으로, 좌표·정확도·표본 시간·소스를 실어. intended 위치는 기억이 관한 곳이야. 선택이고, 흔히 달라. 부엌 식탁에서(captured) 지난달 간 해변에 대한(intended) crumb 을 쓸 수 있어. 둘 다 참이고, 하나의 '위치' 칸으로 뭉치면 두 날짜를 뭉칠 때랑 똑같이 하나를 부숴.

우선순위 규칙이 그걸 정리해. intended 위치는 있으면 지도 표시에서 이겨. captured 위치는 intended 가 없을 때 채워. 그리고 결정적으로, intended 를 정해도 captured 표본을 절대 안 지워. 실제로 있던 곳의 기록이 살아남아. backdate 를 견디는 captured_at 처럼. 같은 규율, 다른 축. 두 진실을 따로 두고, 하나가 표시 우선권을 갖게 하고, override 가 정직한 자동 표본을 절대 못 덮어쓰게.

한 번 성립한 패턴은 모든 새 축에 시도할 값어치가 있어. 두 진실 규칙은 날짜에서 스스로를 증명했고, 장소도 '일어난 곳 대 관한 곳' 의 같은 나눔을 가지니까 같은 해법이 통째로 넘어와. 한 축에서 invariant 를 벌었으면 다른 축들에서 그 모양을 찾아. 검증된 패턴 재사용이 새 걸 발명하는 걸 이기고, 모델 전체를 하나로 지켜.

화면 켜져 있을 때만, 보안 origin 에서, 저장 경로엔 없이

위치 캡처는 Waystone 에서 빡센 제약 셋을 물려받고, 각각 일부러야. 화면 켜져 있을 때만이야. Vesta 는 네가 능동적으로 쓰는 동안 위치를 표본 잡지, 절대 백그라운드에서가 아냐. 백그라운드 추적은 절대 없어. 저널이 널 따라다닐 이유가 없고, 상시 위치 기록의 프라이버시 비용은 이 제품이 물릴 뜻이 없는 거야. 보안 origin 에서만이야. 브라우저 위치는 HTTPS 위에서만 돌고, 그게 정확히 엔진이 모바일용으로 보안 origin 위에 닿는 이유야. 그리고 저장 경로엔 절대 없어. 느리거나 거부된 위치 잡기가 crumb 저장을 절대 막거나 늦출 수 없어. 위치는 덧붙이는 것이고, 생각은 그게 있든 없든 안전해.

지도는 아무것도 저장 안 해

경계 하나가 더 고리를 닫고, 다음 트랙으로 가는 다리야. Map 은 위치 진실의 projection 이지 자기 창고가 아냐. crumb 의 captured 와 intended 위치를 읽어 그리고, 이미 crumb 창고에 없는 건 아무것도 안 쥐어. 그래서 위치도 다른 모든 view 랑 같은 '하나의 진실' 규칙을 따라. crumb 이 두 위치 진실을 갖고, Map 은 그걸 그리는 렌즈일 뿐이야. 장소를 정직하게 잡고, 두 진실을 유지하고, 모든 지리 view 를 같은 canonical 사실 위 projection 으로 둬.

Code

두 위치 진실, 표시 우선순위와 함께·typescript
interface Crumb {
  // where you physically were — auto foreground sample, immutable record
  captured_location?: {
    lat: number; lon: number; accuracy_m: number;
    sampled_at: string; source: "gps" | "network";
  };
  // where the memory is ABOUT — optional, author-set
  intended_location?: { lat: number; lon: number };
}

// map precedence: intended first, then captured
function mapPoint(c: Crumb) {
  return c.intended_location ?? c.captured_location ?? null;
}
// setting intended_location NEVER erases captured_location
// no background sampling — foreground only; HTTPS-gated; never on the save path

External links

Exercise

네가 아는 시스템에서 '어디서/언제 기록됐나' 와 '어디를/언제 다루나' 를 섞는 칸을 골라 봐. 사진의 GPS 대 피사체, 로그의 서버 시간 대 event 시간. 표시용 우선순위 규칙과 함께 두 진실로 쪼개고, 저자가 정한 intended 를 정해도 자동 captured 를 절대 안 덮어쓰게 해. 그다음 프라이버시 자세를 정해. 자동 표본이 화면 켜져 있을 때만이야, 아니면 뭔가 백그라운드에서 조용히 추적해?
Hint
이건 날짜 두 진실 규칙이 다른 모자를 쓴 거야. captured 값은 정직한 자동 기록, intended 값은 저자의 뜻이야. 둘 다 유지하고, intended 가 표시에서 이기게 하고, captured 를 절대 안 지우게 해. 그리고 자동 표본이 백그라운드에서 돌면, 기능이 진짜 그게 필요한지 아니면 아무도 안 청한 위치 기록을 모으는 건지 물어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.