R Roam Roam 받기

신호가 끊겼을 때 기록 앱은 무엇을 해야 하나

모든 기록 앱은 언젠가 터널을 만난다. 차이는 보지 못한 구간에 대해 무엇을 적어 두느냐에 있다. 그리고 흔한 답인 "끊긴 곳을 직선으로 잇기"는 앱이 책임질 수 없는 숫자다.

터널에 들어간다. 4분 동안 수신기는 아무것도 듣지 못한다. 반대쪽으로 빠져나오면 측위가 다시 들어오기 시작한다. 이제 앱의 손에는 가운데가 뚫린 두 덩어리의 점들이 남았고, 앱은 그 구멍에 대해 무엇을 적을지 결정해야 한다.

정직한 선택지는 셋뿐이고, 대부분의 앱은 첫 번째를 고른다.

선택지 하나: 직선을 긋는다

두절 직전의 마지막 점과 직후의 첫 점을 이어 그 선을 실제로 지나간 것으로 취급한다. 구현이 가장 쉽고 보기에도 깔끔한데, 이것이 기본값이 된 이유의 대부분은 사실 그 깔끔함이다.

동시에 그것은 허구다. 그 4분 동안 무슨 일이 있었는지에 대해 앱은 아무 근거도 갖고 있지 않다. 직선은 산비탈을 뚫고 지나가거나 강을 가로지르고, 그 길이는 얼마가 됐든 그대로 거리에 더해져서 실제로 달린 거리와 구분되지 않는 상태가 된다. 짧은 두절이 열 몇 번 생기는 도심 경로에서는 이 오차가 조용히, 그리고 한 방향으로만 쌓인다. 언제나 위로만, 절대 아래로는 아니다.

최악은 터널조차 아니다. 골짜기 바닥에서 수신이 끊겼다가 11킬로미터쯤 지나서야 다시 잡힌 휴대폰이, 당신이 빙 돌아서 지나온 산 위로 완벽하게 곧은 11킬로미터짜리 선을 그어 놓은 경우다.

선택지 둘: 그 주행을 버린다

확신할 수 없는 것은 아예 보여 주지 않는다는 태도다. 아무도 이렇게 하지 않고, 해서도 안 된다. 80킬로미터를 달렸는데 그중 4분이 나쁘다고 해서 그것이 나쁜 주행이 되지는 않는다. 통계 하나를 지키자고 그 하루를 지우는 것은 형편없는 거래다.

선택지 셋: 구멍을 구멍으로 기록한다

두 구간을 따로 유지하고, 끊긴 구간을 양쪽 끝과 시각을 가진 실제 객체로 저장하고, 그 위로 아무것도 보간하지 않고, 직선 길이를 거리에 더하지 않는다. 그러고 나서 화면에 그대로 말한다. 이 구간은 비어 있고, 4분 동안 그랬으며, 아래의 숫자에는 그것이 들어 있지 않다고.

덜 깔끔하지만 훨씬 쓸모 있다. 거리 숫자가 추정치가 아니라 하한선이 된다는 뜻이기 때문이다. 그 안에 든 것은 전부 수신기가 실제로 본 것이다. 그리고 나중에 이 주행이 깨끗한 측정이었는지 구멍이 난 측정이었는지 구분할 수 있게 된다. 믿을 수 있는 조금 낮은 숫자가 믿을 수 없는 조금 높은 숫자보다 낫다.

Roam은 이 선택지를 택한다. 측위가 멈추면 현재 구간을 닫고 새 구간을 연다. 끊긴 구간은 닫히는 점이 이미 지니고 있는 두 가지 사실로 저장되며, 그 점과 같은 트랜잭션 안에서 함께 커밋된다. 그래서 터널 한가운데에서 앱이 강제로 종료되더라도 끊김 정보가 절반만 쓰인 상태로 남을 수가 없다. 끊긴 구간은 보간되지 않고, 그 길이는 거리에 계산되지 않는다. 지도 위의 점선과 "신호가 4분간 끊겼습니다"라는 문장은 같은 함수가 만들어 내므로 그림과 숫자가 서로 어긋날 수 없다.

더 어려운 문제: 정차와 두절은 똑같이 생겼다

좌표의 흐름만 놓고 보면 신호등 앞에 서 있는 것과 수신이 끊긴 것은 같은 사건이다. 위치가 변하지 않거나, 위치가 도착하지 않을 뿐이다. 이 짐작을 한쪽으로 틀리는 앱은 터널 입구에서 주행을 일시정지시키고 4분의 경과 시간을 잃는다. 반대쪽으로 틀리는 앱은 카페에 앉아 있는 동안에도 시계를 계속 돌려서, 말이 안 되는 이동 평균속도와 함께 두 시간짜리 주행을 보고한다.

빠져나가는 길은 GPS에게 묻기를 그만두는 것이다. 휴대폰에는 가속도계가 있고, 그것은 자기가 시속 25킬로미터로 실려 가는 중인지 탁자 위에 놓여 있는지를 아주 잘 알고 있다. 그 신호는 위성이 들리느냐 마느냐와 완전히 무관하다. Roam은 바로 이 용도로 휴대폰의 동작 데이터를 쓴다. 진짜 정차와 신호 두절을 구분해서 실수로 주행을 일시정지시키지 않기 위해서다. 이 앱이 동작 및 피트니스 권한을 묻는 이유는 그것 하나뿐이다.

쓰고 있는 앱에서 직접 확인할 것들

  1. 터널이나 지하 주차장을 지나간 뒤 지도를 본다. 점선으로 표시된 구간이 있는가, 아니면 수상할 만큼 곧은 구간이 있는가.
  2. 길이를 알고 있는 경로와 거리를 비교해 본다. 도심 주행에서 꾸준히 높게 나온다면 그것이 바로 보간된 끊김의 흔적이다.
  3. 두절이 있었다는 사실을 앱이 알려 주기는 하는지 본다. 알려 주지 않는다면 어떤 기록이 깨끗한지 알아낼 방법이 없다.
  4. 하늘이 트인 곳에서 10분쯤 멈춰 서서, 경과 시간과 이동 시간이 납득할 만하게 벌어지는지 확인한다.

이 중 어느 것도 휴대폰을 측량 장비로 만들어 주지는 않는다. 저지 뒷주머니에 들어가서 젖은 재킷 아래, 공구 주머니 옆에 놓인 휴대폰은 제대로 된 안테나를 단 핸들바 거치형 기기보다 수신이 나쁘고, 소프트웨어로 그것을 고칠 방법은 없다. 소프트웨어가 할 수 있는 일은 그날 중 어디까지를 실제로 보았는지에 대해 당신에게 솔직해지는 것이다.

자주 묻는 질문

GPS 궤적이 왜 건물을 뚫고 지나가나요?

원인이 둘로 나뉩니다. 양옆에 높은 건물이 선 길에서는 반사된 신호 때문에 개별 측위점이 수십 미터씩 어긋나고, 그 결과 선이 톱니처럼 흔들립니다. 반면 한 블록을 관통하는 길고 곧은 구간 하나는 다른 이야기입니다. 그것은 앱이 아무 데이터도 없는 끊김 구간의 양끝을 이어 붙인 것입니다.

지나온 터널을 거리에 포함해야 하나요?

측정할 수 없는 구간이므로 추정하거나 빼는 수밖에 없습니다. 직선 추정치를 더하면 짐작한 거리와 기록된 거리가 한 숫자 안에 조용히 섞입니다. 빼면 거리가 약간 낮게 나오는 대신 그 안의 모든 것이 수신기가 실제로 본 것이 되고, 무엇이 빠졌는지에 대한 안내가 함께 남습니다.

터널에서 앱이 왜 주행을 일시정지했나요?

위치 데이터만으로 동작하는 자동 일시정지는 "움직이지 않음"과 "아무것도 들리지 않음"을 구분하지 못해서, 신호 두절을 정차로 읽습니다. 대신 휴대폰의 동작 센서를 쓰면 둘이 갈라집니다. 가속도계는 위성이 보이든 말든 상관하지 않기 때문입니다.

신호가 끊기면 그 기록은 망가진 건가요?

아닙니다. 양쪽 구간은 원래만큼 그대로 멀쩡합니다. 중요한 것은 앱이 그 구멍의 존재를 알려 주고 그것을 합계에서 빼 두느냐입니다. 그래야 지금 보고 있는 숫자가 무엇인지 알 수 있습니다.

주행을 잃지 않는 기록 앱

Roam은 측위점이 도착하는 그 순간, 주행 중인 누적 수치와 같은 트랜잭션으로 휴대폰에 기록합니다. 신호가 끊긴 구간은 직선으로 잇지 않고 끊긴 구간 그대로 남깁니다. 누적 상승은 GPS 고도가 아니라 기압 센서에서 읽습니다. 계정도, 로그인도, 동기화도 없습니다. 한 번의 주행을 온전히 기록하고, 보고, 다시 재생하는 것은 무료입니다.

App Store에서 다운로드

관련 글

전체 글