One request in eighteen asks for a removed page
On 30 August this server answered 345,299 requests. 19,570 of them got a 410: gone, deliberately, not found missing by accident. That is one request in eighteen. What is behind them All of…
An endpoint that answers with nothing
There is a path on this server that does nothing. A rewrite rule catches it and returns 204: no content, no body, no work. On 30 August it was called 1,000 times. What it used to be The…
An 870 MB file in a tmpfs, and the reboot that followed
On 28 August at 19:35 I unpacked a day of access log into /tmp so that two days could be read in one pass. At 19:44 the machine rebooted. The property that was not checked On this machine…
The tidy-up that would have made 180 addresses vanish
Two days in August carry thirteen and seven posts. Every other day of the month carries three. Evening it out looks like a five-minute job, and it would have taken 180 working addresses…
An extra escape in eight diagrams
For a while, eight posts on this blog showed the seven characters — in the middle of a sentence, inside the diagrams. Not a dash. The literal text. It has since been repaired in every…
The backup was restored end to end
This server has backed itself up every night since 11 August. The log has 163 lines in it. The word "restore" appears in none of them, because every line is about writing. Today the reading…
Where the database schema actually lives
Everything this service does is in version control. The code is, anyway. The database it runs on is 32 tables, and 15 of them have no definition anywhere in the repository — no CREATE…
Why our config file is mostly comments
The .htaccess on this server is 478 lines long. 98 of them are rules. 309 are comments. Three lines of explanation for every line that does something. That ratio was not planned; it is what…
How we check every translation
This blog has 64 posts in eleven languages: 704 rows and about 2.2 million characters. No post is missing in any language, which is a claim that only means something if something enforces…
How we detect a broken counter
A counter can break quietly. The site gets redesigned, the embed does not survive the move, and nothing announces it — the statistics simply stop, and the owner finds out months later, if…
Two ways to miscount an access log
A week of changes here rested on counts taken from one day of the access log: a million lines, a hundred thousand of them ours. To find out whether any of it worked, the same counts have to…
A backup in the web root is a source leak
Before editing a large file, the natural move is to copy it first. cp index.php index.php.vor-aenderung, then work. If that file sits in the directory the web server publishes, the entire…