Kontrola popisků měřila body, ne pixely
Kontrola napsaná 27. srpna nahlásila 196 popisků v diagramech jako příliš široké pro obrázek, ve kterém jsou. Projít je zabralo den. 103 ze 196 se ukázalo jako artefakt samotné kontroly a kontrola byla opravena ještě týž týden.
Body nejsou pixely
Kontrola měří popisek pomocí GD vůči skutečnému souboru písma:
$bb = imagettfbbox(13, 0, $font, $text);
13 je velikost písma ze stylopisu, v pixelech. imagettfbbox() bere velikost v bodech. Měřila tedy 13 pt, což je 17,3 px, a každý popisek vyšel v poměru 96/72 — o třetinu — příliš široký.
Jistotu dalo zeptat se něčeho, co text skutečně kreslí. Headless Chromium umí načíst skutečný diagram a nahlásit getComputedTextLength() pro každý popisek. Při 13 se obě hodnoty lišily o třetinu. Při 13 * 72 / 96, tedy 9,75, se shodují s odchylkou pod půl procenta: 219 proti 219 pixelům u jednoho popisku, 561 proti 559 u delšího.
Písmo bylo celou dobu správné
Kontrola měří vůči písmu DejaVu Sans a komentář nad ní se za to omlouval: DejaVu je širší než to, co vidí většina čtenářů, takže práh byl nastaven na 92 %, aby zbyla rezerva.
Změřeno se ukazuje, že volba je přesně správná, ale z jiného důvodu, než uváděl komentář. Z písem, na která sada písem tohoto webu skutečně dosáhne, je DejaVu nejširší. Tatáž věta: DejaVu 219 pixelů, Liberation 194, Cantarell 193, FreeSans 188. Čtenář ve Windows nebo na Macu dostane víc místa, nikdy méně. Měření není pesimistické, je to nejhorší případ, a právě ten má kontrola měřit.
Co zbylo po aritmetice
Opravené měření přežilo 93 hlášení. Pak se 33 z nich ukázalo jako pravidlo, ne chyba: kontrola držela desetijednotkovou rezervu od okraje obrázku a brala ji jako pevnou hranici, takže popisek roku tři jednotky od okraje se počítal jako oříznutý. Nic oříznuté nebylo. Hranicí je teď samotný okraj a otázka těsnosti patří k prahu 95 %.
Co zbylo, bylo skutečné: popisky zasahující pod pruhy, sloupce příliš úzké na ruskou větu, titulek ležící přes svého souseda. Ty se opravily posunem geometrie, což je levné — geometrie je ve všech jedenácti jazykových řádcích stejná, takže jedna doslovná náhrada opraví jedenáct. Čtyři popisky byly v jednom jazyce skutečně delší než celý obrázek a ty byly zkráceny.
Co z toho plyne obecně
Kontrola, která se mýlí jedním směrem, vyrábí práci, a proto stojí za to kontrolovat i kontrolora. Dvě třetiny dne padly na diagramy, které byly v pořádku — a tentýž průchod opravil ty, které v pořádku nebyly, protože chybná hlášení ležela vedle skutečných.
Nerozhodlo to pečlivější čtení kódu, ale změření měření proti něčemu nezávislému, co kreslí skutečný text — a to trvalo deset minut. Kontrola teď počítá velikost jako 13 * 72 / 96 a od té doby tak běží.