La comprobación de etiquetas medía en puntos, no en píxeles
Sobre el contenido y su revisión
En este artículo
Una comprobación escrita el 27 de agosto señaló 196 etiquetas de diagrama como demasiado anchas para la imagen en la que están. Repasarlas costó un día. 103 de las 196 resultaron ser un artefacto de la propia comprobación, que se corrigió esa misma semana.
Los puntos no son píxeles
La comprobación mide una etiqueta con GD contra un archivo de fuente real:
$bb = imagettfbbox(13, 0, $font, $text);
13 es el tamaño de letra de la hoja de estilos, en píxeles. imagettfbbox() toma su tamaño en puntos. Estaba midiendo 13pt, que son 17,3px, y cada etiqueta salía 96/72 — un tercio — más ancha.
La certeza llegó al preguntar a algo que dibuja texto de verdad. Un Chromium sin ventana puede cargar el diagrama real e informar del getComputedTextLength() de cada etiqueta. Con 13 los dos diferían en un tercio. Con 13 * 72 / 96, es decir 9,75, coinciden dentro del medio por ciento: 219 contra 219 píxeles en una etiqueta, 561 contra 559 en otra más larga.
La fuente estuvo bien todo el tiempo
La comprobación mide contra DejaVu Sans, y el comentario de encima se disculpaba por ello: DejaVu es más ancha que lo que ve la mayoría, así que el umbral se puso en el 92 por ciento.
Medida, la elección resulta exactamente correcta, pero por otro motivo que el declarado. De las fuentes que la pila de este sitio puede alcanzar, DejaVu es la más ancha. La misma frase: DejaVu 219 píxeles, Liberation 194, Cantarell 193, FreeSans 188. Quien lee en Windows o en un Mac tiene más sitio, nunca menos. La medida no es prudente, es el peor caso, y eso es lo que una comprobación debe medir.
Lo que quedó tras la cuenta
93 avisos sobrevivieron a la medición corregida. De ellos, 33 resultaron ser una regla y no un fallo: la comprobación guardaba diez unidades de margen respecto al borde y lo trataba como límite duro, así que un año a tres unidades del borde contaba como cortado. No había nada cortado. El límite es ahora el borde mismo, y la cuestión de la estrechez le toca al umbral del 95 por ciento.
Lo que quedó era real: etiquetas metiéndose bajo las barras, columnas demasiado estrechas para una frase en ruso, un pie de imagen cruzado sobre la caja vecina. Se arreglaron moviendo geometría, que es barato: la geometría es idéntica en las once filas de idioma, así que una sustitución literal arregla once. Cuatro etiquetas eran de verdad más largas que la imagen entera en un idioma cada una, y esas se acortaron.
Lo que se generaliza
Una comprobación equivocada en una sola dirección genera trabajo, y por eso conviene comprobar la comprobación. Dos tercios de un día se fueron en diagramas que estaban bien, y la misma pasada arregló los que no lo estaban, porque los avisos falsos estaban al lado de los verdaderos.
Lo que lo resolvió no fue leer el código con más cuidado. Fue medir la medición contra algo independiente que dibuja texto real, y eso costó diez minutos. La comprobación calcula ahora con 13 * 72 / 96 y funciona sobre esa base desde entonces.