联系支持

我们通过电子邮件回复,通常两天内。

为防止滥用,Google reCAPTCHA 会检查这次提交,其间会向 Google 传输数据。脚本只在你打开此表单时才加载。

← 全部文章

我们自己的检查量宽了 32%

8 月 27 日写的一个检查报告说,有 196 条图表标签对它们所在的图来说太宽了。修它们花了一天。其中 103 条从来就不宽。

被报告为太宽的标签 最初的报告 196 改正测量与实体之后 93 移动几何之后 38 改正边缘规则之后 3 缩短四条标签之后 0 在 77 篇文章、十一种语言里量了 5,093 条标签 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% 的阈值。

剩下的是真的:标签压到条形下面,列窄得放不下一句俄语,一段图注横在邻框上面。用移动几何来修,而这很便宜 — 几何在十一个语言行里完全一样,一次逐字替换就修好十一行。有四条标签确实在某一种语言里比整张图还长,那些被缩短了。

这件事的一般化

一个只朝一个方向出错的检查比没有检查更糟,因为它制造工作。三分之二天花在本来没问题的图上,而其余部分之所以被修,唯一的原因是假报告就摆在真报告旁边。

打破僵局的不是把代码读得更仔细。是拿一个会画真字的独立东西去量这个测量 — 这花了十分钟,而在此之前这个检查已经被信了一星期。

广告