이름표 확인이 픽셀이 아니라 포인트를 재고 있었습니다
이 글의 내용
8월 27일에 쓴 확인이 다이어그램 이름표 196개를 자기가 놓인 그림에 비해 너무 넓다고 보고했습니다. 그것들을 헤쳐 나가는 데 하루가 들었습니다. 196개 가운데 103개가 확인 자체의 부산물로 드러났고, 확인은 같은 주에 바로잡혔습니다.
포인트는 픽셀이 아닙니다
확인은 이름표를 GD로 진짜 글꼴 파일에 맞대어 잽니다:
$bb = imagettfbbox(13, 0, $font, $text);
13은 스타일시트의 글자 크기이고 픽셀 단위입니다. imagettfbbox()는 크기를 포인트로 받습니다. 13pt를 재고 있었고, 그것은 17.3px이며, 모든 이름표가 96/72 — 3분의 1 — 만큼 넓게 나왔습니다.
확실히 하는 길은 실제로 글자를 그리는 무언가에 물어보는 것이었습니다. 창 없는 Chromium은 진짜 다이어그램을 불러와 이름표마다 getComputedTextLength()를 알려 줄 수 있습니다. 13에서 둘은 3분의 1만큼 어긋났습니다. 13 * 72 / 96, 곧 9.75에서는 0.5퍼센트 안쪽으로 맞습니다. 어떤 이름표에서 219 대 219픽셀, 더 긴 것에서 561 대 559입니다.
글꼴은 처음부터 옳았습니다
확인은 DejaVu Sans에 맞대어 재고, 그 위의 주석은 그 점을 미안해했습니다. DejaVu는 대부분의 독자가 보는 것보다 넓으니 여유를 두려고 문턱을 92퍼센트로 두었다고 말입니다.
재어 보니 그 선택은 정확히 옳았고, 다만 주석이 댄 것과는 다른 까닭에서였습니다. 이 사이트의 글꼴 더미가 실제로 닿을 수 있는 글꼴 가운데 DejaVu가 가장 넓습니다. 같은 문장으로: DejaVu 219픽셀, Liberation 194, Cantarell 193, FreeSans 188. 윈도우나 맥의 독자는 더 넓은 자리를 얻지 더 좁아지지 않습니다. 측정은 비관적인 것이 아니라 최악의 경우이고, 확인은 그것을 재야 합니다.
산수 뒤에 남은 것
바로잡은 측정을 93건이 넘겼습니다. 그다음 그 가운데 33건이 결함이 아니라 규칙으로 드러났습니다. 확인이 그림 가장자리에서 열 단위의 여유를 두고 그것을 단단한 경계로 다루었기에, 가장자리에서 세 단위 떨어진 연도 이름표가 잘린 것으로 세어졌습니다. 잘린 것은 없었습니다. 이제 경계는 가장자리 자체이고, 얼마나 빠듯한가의 물음은 95퍼센트 문턱의 몫입니다.
남은 것은 진짜였습니다. 막대 밑으로 파고드는 이름표, 러시아어 문장에 너무 좁은 기둥, 이웃 위에 걸친 설명. 그것들은 기하를 옮겨 고쳤고, 그것은 쌉니다 — 기하는 열한 개 언어 줄에서 모두 같으므로 문자열 하나를 바꾸면 열하나가 고쳐집니다. 이름표 넷은 한 언어에서 그림 전체보다 정말로 길었고, 그것들은 줄였습니다.
무엇이 일반화되는가
한쪽으로 치우치는 확인은 일을 만들고, 그래서 확인하는 쪽을 확인할 값어치가 있습니다. 하루의 3분의 2가 멀쩡한 다이어그램에 들어갔고 — 같은 차례에 멀쩡하지 않던 것들도 고쳤습니다. 잘못된 보고가 진짜 보고 옆에 놓여 있었기 때문입니다.
판가름한 것은 코드를 더 꼼꼼히 읽는 것이 아니었습니다. 진짜 글자를 그리는 독립된 무언가에 측정을 맞대어 보는 것이었고 — 10분이 들었습니다. 확인은 이제 13 * 72 / 96로 크기를 잡고 그 뒤로 그렇게 돌고 있습니다.