모래게임 Sandrop TIL 31
며칠 쫓던 광고 버그
배너를 끄니 두 번 다 정상이었다
앞선 TIL 25에서 몰입 모드를 첫 화면 뒤로 미뤄 고쳤다고 본 그 닫기 버튼 문제가 다시 나왔다. 전면 광고의 X가 안 그려졌다. 앞선 TIL 30에서 배너가 매번 새로 만들어지며 전면 광고까지 무너뜨린 적이 있어서, 이번에도 화면 아래 배너를 의심했다. 배너를 끄고 내가 기기에서 광고를 띄워 보니 두 번 다 정상이었고, 로그에 있던 오류도 0건이 됐다. 증상과 기록이 같이 움직였으니 꽤 그럴듯했다.
그런데 배너를 다시 켠 상태로도 두 번 다 정상이었다. 가설이 죽었다. 배너가 없던 시절에도 이 증상이 있었다는 걸 내가 떠올리지 않았으면, 두 번 성공만 보고 배너를 걷어낸 채 엉뚱한 원인을 적어 뒀을 것이다.
이 증상은 원래 간헐적이다. 아무것도 안 고쳐도 절반은 성공하니, 성공 몇 번은 증거가 못 된다.
- “끄니까 된다”는 절반이다. “켜니까 안 된다”까지 봐야 원인이라고 말할 수 있다. 이렇게 비교하려고 조건 하나만 바꿔 돌려 보는 쪽을 대조군이라고 한다
- 가끔만 나는 증상이면 몇 번의 성공으로 판정하지 않는다. 확신이 클수록 반대쪽을 한 번 더 돌려 본다
범인은 어제 넣은 수정 두 개였다
배너가 아니면 무엇인가. 전날 이 문제를 고치려고 두 가지를 넣었는데, 알고 보니 그 둘이 각각 새 증상을 만들고 있었다. 둘 다 되돌리고 기기에서 다시 해 보니 네 번 연속 정상이었다.
그동안 원래 증상을 보고 있다고 생각했지만, 실제로는 고치려고 넣은 것이 만든 부작용을 보고 있었던 것이다.
- 한 번에 한 가지만 바꾼다. 여러 개를 섞어 넣으면 무엇이 무엇을 깼는지 못 가른다
- 안 통한 시도는 남기지 말고 되돌린다. 남겨 두면 다음 시도를 볼 때 그것까지 섞여 보인다
화면이 미세하게 떨렸다
떨림을 잡는 방법이 셋이었고 대가가 다 달랐다
게임을 하다 보니 그림이 미세하게 떨렸다. 처음엔 광고로 넘어갈 때만 그런 줄 알았는데 해 보니 평소에도 났다.
앞선 TIL 14에서 세로 공간을 벌려고 시스템 네비바를 숨기는 몰입 모드를 켰다. 그런데 화면 가장자리를 건드리면 네비바가 잠깐 나타난다. 그때마다 쓸 수 있는 영역(안전 영역 — 시스템 표시줄에 가리지 않는 화면 부분)이 바뀌고 판이 다시 계산된다. 아래쪽 바스켓을 누르다 보면 가장자리를 자주 건드리니 계속 떨렸다. 계산은 매번 받은 값대로 정확히 하고 있었고, 흔들린 건 들어가는 값이었다.
방법은 셋이었다.
방법 결과 대가
광고를 띄울 때만 영역 값 고정 광고 전환만 잡힘 게임 중엔 그대로 떨림
네비바 자리를 늘 비워 두기 안 떨림 화면이 좁아짐
값을 고정하되 위쪽 여백만 남기기 안 떨림 거의 없음
세 번째로 하기로 했다. 셋을 다 기기에서 해 보니 몰입 모드로 벌어 둔 공간을 지키면서 떨림만 없어지는 건 그것뿐이었다.
- 결과가 흔들리면 계산보다 입력이 흔들리는지를 먼저 본다
- 방법을 고를 때 “되는가”만 보지 않는다. 무엇을 내주는지가 실제 기준이다
손그림 도안의 색이 뭉개졌다
원본과 색이 다르다며 여섯 개를 짚었다
손으로 그려 넣은 도안이 있다. 도안을 그린 사람이 게임에 들어간 걸 보고 자기가 넣은 색과 다르다며 여섯 개를 짚었다. 호랑이 흰 얼굴이 회색으로 눌려 있었고, 호랑이 코와 떡볶이 파가 사라졌고, 떡볶이 양념 두 색이 하나로 합쳐져 있었다.
전수로 보니 원인이 넷 겹쳐 있었는데, 전부 사진에서 도안을 뽑을 때를 위해 만든 규칙이었다.
- 배경과 가까운 색을 떼어 놓으려고 흰 부분을 어둡게 눌렀다
- 몇 칸 안 되는 색은 바스켓 하나를 쓸 가치가 없다고 지웠다
- 비슷한 색끼리 합쳤다
- 색을 줄이는 과정에서 두 색을 평균으로 묶었다
사진은 색이 수천 개고 경계마다 얼룩이 있으니 이 규칙들이 필요하다. 그런데 손그림은 한 칸 한 칸 정확한 색으로 찍혀 있고, 작은 색은 얼룩이 아니라 일부러 넣은 코와 파였다. 같은 규칙이 정반대로 작동한 것이다. 손그림은 색 줄이기를 건너뛰게 했다.
앞선 TIL 8에서 흰색은 지키고 대비가 모자라면 배경을 내리기로 했다. 흰 얼굴이 눌린 건 그 결정이 손그림 쪽에서 다시 깨진 것이다. 이번에도 그림의 주요 색은 그린 사람이 넣은 대로 두고 배경을 옮기기로 했다. 배경은 앱이 정하는 값이고 그림은 받은 것이다.
- 규칙에는 만들어진 전제가 있다. 대상을 넓힐 때 규칙을 그대로 물려주지 말고 그 전제가 새 대상에도 맞는지 본다
- 받은 것과 우리가 정하는 것이 부딪히면 우리가 정하는 쪽을 옮긴다
색을 살렸더니 난이도가 바뀌었다
색을 살리니 바스켓이 늘었고, 바스켓이 늘면 판이 어려워진다. 여섯 판을 다시 만들어 목표 난이도와 대조하니 다섯이 맞았다.
하나는 못 맞췄다. 그림이 화면을 꽉 채워 벽을 놓을 자리가 없었고, 벽을 더 쓸 수 있게 늘려도 결과가 그대로였다. 숫자가 모자란 게 아니라 놓을 자리가 없는 것이었다.
그대로 가기로 했다. 앞선 TIL 16에서 색을 뭉개 그림을 망치느니 어렵게 나온 걸 그대로 보여 주는 쪽을 택했는데, 같은 판단이다.
- 값을 늘렸는데 결과가 안 변하면 그 값이 병목이 아니다. 더 키우지 말고 다른 제약을 찾는다
- 못 맞춘 것은 조용히 넘기지 않는다. 무엇을 해 봤고 어디까지 갔는지, 남은 선택지와 그 대가가 같이 올라와야 고를 수 있다