Evening reading: RFC archaeology
Spent the evening reading through some old RFCs, particularly RFC 793 (TCP specification) and RFC 791 (IP). It's fascinating how clean and concise these fundamental specifications are compared to modern protocol documents. RFC 793 is 85 pages and defines the protocol that still runs most of the internet 45 years later. Modern protocols often require hundreds of pages just for the core specification, plus dozens of extension RFCs. There's elegance in simplicity, and these early internet architects understood that. They designed protocols that were robust enough to survive massive scaling and flexible enough to evolve, all while remaining comprehensible to implementers.
Afternoon frustrations with smart devices
The "smart" thermostat decided to update its firmware this afternoon. Without warning, naturally. The house temperature dropped to 12°C before I realized what had happened. Post-update, the interface has changed completely. What used to be a simple "set temperature" control now requires navigating through three menu levels to do the same thing. Plus it now wants me to create an account with their cloud service to access "advanced features"—which appear to be the same features I had before the update. When did thermostats become subscription services? It's a device that should set a temperature and maintain it. Adding WiFi was arguably useful for remote control, but requiring cloud connectivity for basic operation is pure rent-seeking behavior.
USB-C: The universal connector that isn't
Spent the morning trying to connect my new external drive to the laptop, only to discover that not all USB-C cables are created equal. The cable that came with the drive works fine for power, but won't carry data. The one from my phone charges everything but transfers nothing. And the expensive "high-speed" cable I bought last month? Perfect for everything except video. This reminds me of the old RS-232 days, when you needed a different cable for every device and a drawer full of gender changers and null modems. We thought we'd solved this with USB, and for a while we had.
Improving photo rendition
While looking for photos of the 50mm f/1.8 F.Zuiko, got held up with many photos that could have been processed better, like this flash photo taken with +0.7 EV compensation. The original is on the left, what I made of it with basic processing on the right: I spent a lot of time complaining about flash at the time. No wonder. Now I use studio flash units, but I recall on-camera flash to have been a real pain for over 60 years.
New UPS
Also got a new UPS, a CyberPower VP1600ELCD. At first sight it looks good: nearly 1 kW power (“1600 VA”, corresponding to 960 W), explicit surge protection (the reason I bought it), Ethernet connection (not mentioned in the advertisements) and a reasonable display. The display displays the load in both VA and W, so I'll be able to compare the values. Put it on charge. When will I connect the computers? They need to be rebooted, so I'll wait for the next power failure.
More web server overload
So far my web servers seem to have suffered from overload in the mornings, and every time I have checked I have found overnight jobs running and consuming many resources. Could they be to blame? No. Today the overload came in my afternoon. But once again it didn't last long.
Speaking on October 21 at PDXCPP: Portland OR C++ meetup
In two weeks I’ll be giving a talk at the local C++ meetup here in peaceful, quirky, dog-walking, frisbee-throwing, family-friendly Portland, Oregon, USA. PDXCPP – Monthly MeetupOctober 21, 2025 @ 7:00pmLocation: Siemens EDA in Wilsonville Which talk will I give? That’s a great question, and there’s a poll about that! At CppCon last month, I … Continue reading Speaking on October 21 at PDXCPP: Portland OR C++ meetup →
More Exif pain
Processing yesterday's photos included a surprise: === grog@hydra (/dev/pts/15) ~/Photos/20251005 185 -> exifx Lost-kangaroo-8.jpeg File Lost-kangaroo-8.jpeg Date taken: Sunday, 5 October 2025, 18:44:58 Exposure: 1/60 sec, f/5.0 (EV 10.6), 1600/33° ISO Camera: OM Digital Solutions OM-1 Lens: LEICA DG 100-400mm f/4.0-6.3 Focal length: 156.0 mm Meter mode: Spot Program AE Size: 5184 x 3888 pixels (20.16 megapixels, 1:1.33) That doesn't look right. In particular the camera and lens model are wrong, and details like camera serial number are missing.
Where does the overload come from?
Lately every morning I've found my web servers overloaded. Why? Round midday it drops from round 160 (lax.lemis.com) or 210 (fra.lemis.com) to under 1. Should I maybe delay crawlers?
The real (economic) AI apocalypse is nigh
The real (economic) AI apocalypse is nigh This week on my podcast, I read “The real (economic) AI apocalypse is nigh,” a recent column from my Pluralistic newsletter; about the looming economic crisis threatened by the AI investment bubble: A week ago, I turned that book into a speech, which I delivered as the annual... more
Android USB connectivity revisited
A year ago today I tried in vain to connect my Android mobile phone to a Real Computer. I failed. The choice of USB mode looked like the same on cameras, but there was no way to tell it to look like a disk: That was on an old phone, but it hasn't changed. OK, Google Gemini, what do I do? The answer was illuminating: Modern Android devices no longer use the USB Mass Storage (UMS) protocol, which is what makes a drive appear as a "disk" with a letter/path (e.g., D: or /mnt/usb) and grants your computer direct, block-level access to the drive.
Hugin irritations
I still don't understand why Hugin's fast panorama preview always fails the first time I try to start it, and always succeeds the second time. Looking at the typical GUI vomit on the home terminal, I find: Warning: TIFFDecoder: no TIFFTAG_SAMPLEFORMAT or TIFFTAG_DATATYPE, guessing pixeltype 'UINT16'. Warning: TIFFDecoder: no TIFFTAG_SAMPLEFORMAT or TIFFTAG_DATATYPE, guessing pixeltype 'UINT16'. ERROR: 14:00:42.087030 (/wrkdirs/usr/ports/graphics/hugin/work/hugin-2024.0.1/src/hugin1/hugin/GLViewer.cpp:156) SetUpContext(): Error initialising GLEW: Unknown error. Warning: TIFFDecoder: no TIFFTAG_SAMPLEFORMAT or TIFFTAG_DATATYPE, guessing pixeltype 'UINT16'. Warning: TIFFDecoder: no TIFFTAG_SAMPLEFORMAT or TIFFTAG_DATATYPE, guessing pixeltype 'UINT16'. The TIFFDecoder errors are harmless, just Tiff muttering to itself where it thinks nobody will see.
More load issues
True to their promise, the vultures rebooted lax yesterday. And I couldn't get any response from the automatically restarted shell. It took something like 30 minutes to realize that we were once again overloaded, both web server machines with load averages over 200. I couldn't even get apachectl to stop the web servers. But it was just another overload masquerading as a bug; after a couple of hours the load dropped again, and all was well.
Frustration
Some days things never go quite right. Today was one of them. Nothing went really seriously wrong, but it was enough. It took me four times to commit my diary entry, something that normally takes a second or two. firefox has chosen to stop highlighting URLs when the cursor is positioned over them. Paul Donaghy came to mow the lawn, but the lawn mower drive belt failed, so he wasn't able to complete that either. There was more
Chrome pain
Another thing that has occurred since upgrading hydra is that the editing keys (Emacs-like) have gone away and been replaced by something stupid. How do I reinstate them? This time it was simple, with the help of Google Gemini: gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs" And that worked. The only issue is that I frequently have difficulty finding these answers later.
More Android pain
What's this? Can't find dimensions for 'Android-pain-1.jpeg' Can't find dimensions for 'Android-pain-1-detail.jpeg' Clearly it's a mobile phone display. It seems that the purple icon is a message bubble or some such nonsensical term. What good is it? None whatsoever, unless it's to annoy me. How did it appear? No idea. How do you get rid of it? All the “help” I could get didn't work, pointing to things that don't exist. After nearly an hour of messing around in different places in the settings, finally got rid of it—and forgot where it was.
Digitalocean problems
While writing yesterday's diary this morning, discovered that I couldn't upload any images to DigitalOcean. It just timed out. Further investigation showed some breakage in the connection between Australia and New York, though it's not clear to what extent the output of mtr is relevant, which shows about 6% packet loss at port-channel8122.ccr92.jan02.atlas.cogentco.com. But ping tells a very different story: 22 packets transmitted, 8 packets received, 63.6% packet loss There were no outage notices from digitalocean, but Daniel O'Connor confirmed that he had similar issues. It seems only to relate to access from Australia.
ANOTHER bloody power failure!
Into the office first thing this morning to discover that hydra had rebooted. That's strange for a number of reasons: the two main monitors (1 and 2) had apparently powered down, but nothing else had failed. And in the past hydra has powered down and not come up automatically. In addition it was on a UPS, which should have protected it. It must have been only a fraction of a second, if at all; possibly it was a power surge that the ancient UPS couldn't detect or handle. But that's surprising because it took down the monitors as well. One thing's clear: I need a new UPS, one that is advertised as handling power surges, so I ordered one today.
My other CppCon talk video is now available: The Joy of C++26 Contracts (and Some Myth-Conceptions)
I usually only give one new talk a year, but this year I volunteered to give a second new talk at CppCon on a topic I haven’t spoken on before: draft C++26 contracts. Thank you to all the experts, including the actual implementers and people who are for and against having contracts in C++26, for … Continue reading My other CppCon talk video is now available: The Joy of C++26 Contracts (and Some Myth-Conceptions) →
Social Media Provenance Challenge
At a a recent online conference, I said that we can “change the global Internet conversation for the better, by making it harder for liars to lie and easier for truth-tellers to be believed.” I was talking about media — images, video, audio. We can make it much easier to tell when media is faked and when it’s real. There’s work to do, but it’s straightforward stuff and we could get there soon. Here’s how. The Nadia story This is a vision of what success looks like. Nadia lives in LA. She has a popular social-media account with a reputation for stylish pictures of urban life.
Announcing the Enshittification tour
Next Monday, I’ll be departing for a 24-city, three-month book tour for my new book, Enshittification: Why Everything Suddenly Went Wrong and What To Do About It: https://us.macmillan.com/books/9780374619329/enshittification/ This is a big tour! I’ll be doing in-person events in the US, Canada, the UK and Portugal, and a virtual event in Spain. I’m also planning... more
Announcing the Enshittification tour
Next Monday, I’ll be departing for a 24-city, three-month book tour for my new book, Enshittification: Why Everything Suddenly Went Wrong and What To Do About It: https://us.macmillan.com/books/9780374619329/enshittification/ This is a big tour! I’ll be doing in-person events in the US, Canada, the UK and Portugal, and a virtual event in Spain. I’m also planning... more
Development gets better with Age
More firefox pain
So what's wrong with firefox? My standard profile just hangs. Why? How do I debug such a mess? I tried setting up a different profile, losing a number of tabs in the process, but nothing I could do could get the font sizes right. Get them right for my diary (without any trickery) and they're far too small for things like Wikipedia and friends. Migrate from hydra:0.2 (3840×2160) to hydra:0.0 (1920×1080)? Yes, that works, but why did it happen? Then it occured to me: yes, the standard profile still hangs. But I can check the settings. And it seems that the big thing is the Zoom setting, which was at 150%.