可见计数及其重要性
现代的网络分析几乎完全在后台运行,默默地记录着每一次交互,而不向访问者给出任何视觉上的回馈。这种普遍的「看不见」,从根本上改变了网站经营者与其读者之间的关系,把最基本的测量变成了一项秘密的作业。…
浏览器列表说明的远比看起来的少
统计仪表板总是显示一个整洁的访问程序列表,将流量分类为 Chrome、Firefox 或 Safari 等不同的部分。这种有序的展示往往掩盖了极其混乱且本质上具有误导性的技术现实。 此数据的基础完全依赖于称为 User-Agent…
国家列表是一个估算
地理方面的统计,常常把访问者按国家分门别类地摆出来给人看。可是,仅仅依据网络层面上的那点凭据,就去判定一位访问者究竟身处何地,本质上是一次带着系统性偏差的推算,而不是一次直接的观察。 这个推断是怎么做出来的…
一句错话能活多久
8 月 14 日,「关于」页面上出现了一句话,说我们有意不测跳出率和页面停留时间,因为两者都需要跨多个页面追踪的会话,而那需要在对方网站上挂同意横幅。 8 月 27 日,我们上线了页面停留时间。那句话留着没动。 十三天为真,二十八小时为假 日期是精确的,因为仓库知道。那句话在 8 月 14 日 22:41 到来。停留时长,分六档,在 8 月 27 日 17:53 到来 —…
八张图里多出来的一次转义
有一段时间,这个博客的八篇文章在句子中间显示的是 — 这七个字符,而且是在图表里。不是破折号。是文字本身。此后所有语言都已修正。 81 行,91 处。而在同样这八篇文章的正文里:一处都没有。 多转义了一次 图表是内嵌 SVG,写在文章正文里。一条想要破折号的标签带的是 —,浏览器会把它变成破折号,和在段落里完全一样。 但存下来的是…
数据库结构实际存在哪里
这个服务所做的一切都在版本控制里。至少代码是。它运行其上的数据库是 32 张表,其中 15 张在仓库里任何地方都没有定义 — 没有 CREATE TABLE,没有结构文件,什么都没有。一份备份能把 32 张表连同结构一起还原;仓库里缺的,是这份结构的第二份、独立的副本。 这些数字来自把运行中的数据库与仓库里的 736 个文件、5,671,710 个字符做比对。它们不是估计。…
为什么我们的配置几乎全是注释
这台服务器上的 .htaccess 有 478 行。其中 98 行是规则。309 行是注释。 每一行做事的代码配三行解释。这个比例不是计划出来的;当写规则的规则是理由必须挨着它时,自然就会这样。 为什么一条重写规则需要一个段落…
我们如何检查每一份译文
这个博客有 64 篇文章,十一种语言:704 行,约 220 万字符。没有一篇文章在任何一种语言里缺失 — 这个说法只有在有东西强制它时才有意义。 确实有东西在强制。译好的一行写入之前,先与英文原文比对,不通过的行根本不会被写入 — 它会被报告出来,留给人看。 每项检查是干什么的 相同的链接目标。 内部路径在翻译时不能改变:/privacy 在每种语言里都还是…
为什么我们不给老用户发信
本服务的计数器表里存着 4,148 个电子邮件地址。它们属于过去二十年间创建的计数器,那时候计数器带着一个地址栏,人们就把它填了。 有三个人要求收信。 这两个数字就是这篇文章的全部。它们之间的差距不是一个需要填平的问题。它就是设计。 拥有一个地址,不等于有权使用它 这些地址是为一个目的收集的 — 找回对计数器的访问 —…
AI 可以写什么,不可以写什么
在一个公开的统计页面顶部,这里可能有两三句话,描述这个计数器本月做了什么。它们是一个语言模型写的。模型在这里什么也不编造,而让这句话成立的那套安排值得描述一番——因为搭建这个功能的显而易见的做法,并不具备这个性质。 服务器跑 SQL,决定哪个数字值得一提,然后写提示。模型把一个事实变成一句所要语言的话。之后服务器把回答读回来,只要里面有一位数字不是来自提示,就把它扔掉。…
排行榜现在进了导航栏
本站有一个排行榜:最热闹的公开计数器,另有按国家和按语言的分榜。它做好了,译成了十一种语言,有退出选项,而且已经上线一段时间了。 在这次改动之前,指向它的链接只有两处:排行榜自己内部,以及 sitemap.xml。不在导航栏里,不在页脚里,不在首页上。想走到那儿,前提是已经知道网址。它现在是导航栏里的第五个去处。…
并不是每张表都存着三十天
这里的统计页面不是一张表,而是十二张,一个问题一张 — 国家、页面、浏览器、小时、设备、操作系统、语言、地区、来源、机器人、屏幕分辨率,还有每日总数。在顶部选一个时间段,每个面板都按这个时间段作答。 只是并非所有面板都能按同一个时间段作答,因为它们背后的表往回追溯的深度并不一样。2026 年 8 月 26 日清点: 表 行数 最早的一天 跨度 每日总数 113 604…