Наша собственная проверка мерила на 32 процента шире
Проверка, написанная 27 августа, сообщила о 196 подписях на диаграммах как о слишком широких для картинки, в которой они стоят. Починка заняла день. 103 из них никогда не были слишком широкими.
Пункты — не пиксели
Проверка меряет подпись средствами GD против настоящего файла шрифта:
$bb = imagettfbbox(13, 0, $font, $text);
13 — это размер шрифта из таблицы стилей, в пикселях. imagettfbbox() принимает размер в пунктах. Мерились, стало быть, 13pt, то есть 17,3px, и каждая подпись выходила на 96/72 — на треть — шире.
Уверенность появилась, когда спросили того, кто действительно рисует текст. Chromium без окна умеет загрузить настоящую диаграмму и сообщить для каждой подписи getComputedTextLength(). При 13 эти двое расходились на треть. При 13 * 72 / 96, то есть 9,75, они сходятся в пределах полупроцента: 219 против 219 пикселей на одной подписи, 561 против 559 на подлиннее.
Шрифт всё это время был выбран верно
Проверка меряет против DejaVu Sans, и комментарий над ней за это извинялся: DejaVu шире того, что видит большинство читателей, поэтому порог стоял на 92 процентах.
После измерения выбор оказывается ровно правильным, но по другой причине, чем заявленная. Из шрифтов, до которых стопка этого сайта вообще может дотянуться, DejaVu самый широкий. Та же фраза: DejaVu 219 пикселей, Liberation 194, Cantarell 193, FreeSans 188. Кто читает под Windows или на Mac, получает больше места, никогда меньше. Измерение не осторожное, оно и есть худший случай, а именно его проверка и должна мерить.
Что осталось после арифметики
93 сообщения пережили исправленное измерение. Из них 33 оказались правилом, а не изъяном: проверка держала десять единиц отступа от края картинки и считала его жёсткой границей, поэтому год, стоящий в трёх единицах от края, шёл как обрезанный. Обрезано не было ничего. Границей теперь служит сам край, а вопрос тесноты отдан порогу в 95 процентов.
Оставшееся было настоящим: подписи, заходящие под полосы, столбцы, слишком узкие для русской фразы, подпись поперёк соседнего блока. Исправлено сдвигом геометрии, и это дёшево: геометрия во всех одиннадцати языковых строках одна и та же, значит одна буквальная замена чинит одиннадцать. Четыре подписи и правда были длиннее всей картинки, каждая в своём языке, и их сократили.
Что здесь обобщается
Проверка, ошибающаяся в одну сторону, хуже, чем никакой, потому что она производит работу. Две трети дня ушли на диаграммы, с которыми всё было в порядке, и единственная причина, по которой починили остальное, — что ложные сообщения стояли рядом с настоящими.
Дело решило не более внимательное чтение кода. Дело решило измерение измерения чем-то независимым, что рисует настоящий текст, — и это заняло десять минут после недели доверия к проверке.