I’ve been self-hosting my git repositories for some time, but I’ve just upgraded them to use git-http-backend. Previously, clones were served by cgit (and before that by gitweb), which both present as a “dumb HTTP transport”. The smart protocol is much faster, though, especially with relatively high latency like my repositories tend to have. Git includes a CGI…
(Originally written as a response to the video Electricity is About to be Like Housing by Hank Green. Go watch it.) The one true constant of capitalism is not that it moves towards efficiency. That is an outright bald-faced lie. Capitalism grows towards maximum profit extraction (i.e. minimum efficiency). Those capitalists who are willing to behave more badly than the rest (loss lead their…
The other day, while doing some normal maintenance and removing a few files, I accidentally removed the only copy of a particularly important disk encryption key. I have no backups for most of the data on these drives 1 , and while it would be possible to rebuild most of it, it would take significant effort. To make matters worse, while I theoretically had the drive space available to copy the…
For many, many years now, AWS has been the top source of abusive traffic I’ve actually received. That’s not to say that they’re the top source of abusive traffic sent over the Internet. Rather, they have so many legitimate users that it gets through spam filters and blocklists. From outright spammers using SES, to Anthropic’s crawlers which sent my little site over 1…
Google makes it pretty easy to use a service account with domain-wide delegation through their SDKs (spoiler alert, you just download the service account credentials file from Google, point the SDK at it, and then call a setSubject('whoever@example.com') method). But how do you do this without their SDKs (which are usually thoroughly undocumented) getting in the way? The answer turned out to…
I had cause to reverse-engineer the mechanism by which Zebra printers are discoverable, and am documenting the information, such as it is, here. Discovery client sends a UDP packet to port 4201 (unicast or broadcast), containing the data: 0x2e2c3a010000 , or .,:\x01\x00\x00 . Actually, the discovery client sends 3 identical such packets (from the same socket), then waits 1 second, then repeats the…
My back has hurt forever, but why do my legs have to hurt? On a more serious note, I was reflecting today on this fact: the first kids who can’t remember a time before smartphones were everywhere are now becoming adults. The iPhone was released in 2007, and it wasn’t long before you didn’t have to look far to find a smartphone. At that time it was already quite normal for young…
Had the displeasure of visiting Quora today, and I want to share with you the answers I found. (Once I got all the “here are other questions you might enjoy” hidden away.) Question: Can military submarines reach the Titanic wreck site? Human answer 1: No. … AI: Military submarines are capable of reaching the depth of the Titanic wreck site … Human answer 2: No. … Human answer 3: No…
JSON sucks. I actually use JSON all the time. It’s great. It’s trivial to use in every language I use. Python? Included. PHP? Included. Perl? Included. JS? Duh. But it’s honestly quite a terrible format. It sits at this weird intersection between a binary format for machines to deal with, and a text format for humans to deal with. In the end, it doesn’t do either well. The…
Compare and contrast: const crlSetAppId = 'hfnkpimlhhgieaddgfemjhofmfblmnib' const versionRequestURL = 'https://clients2.google.com/service/update2/crx?id='+crlSetAppId+'&v=&uc&acceptformat=crx3' Versus Google code : const crlSetAppId = 'hfnkpimlhhgieaddgfemjhofmfblmnib' // buildVersionRequestURL returns a URL from which the current CRLSet version // information can be fetched. func…
systemd sucks. That’s been discussed many times, plenty of other people have said everything I could say about it. What I want to talk about is why the discourse around it sucks. I’m going to address the points that I see systemd defenders repeatedly raise, and explain why they are incorrect. sshd patch A malicious maintainer backdoored xz to pwn sshd instances. The defenders point out…
Allow me to show you a comparison, between the enormous two-trillion-dollar web behemoth, and myself: https://developers.googleblog.com/2024/03/build-with-google-ai-video-series-season-2.html DOMContentLoaded: 652 ms Load: 1.73 s https://jfr.im/blog/2024/03/rewriting-irc-log-timestamps/ DOMContentLoaded: 371 ms Load: 1.02 s https://developers.google.com/ DOMContentLoaded: 709 ms Load: 2.92 s…
Recently I had the desire to rewrite the timestamps in my IRC logs. I have logs going back to 2013, and over the years I’ve had three different timestamp formats: the default: 23:59 < someone> Hello a more verbose timestamp: [12/24/24 23:59:59] < someone> Hello and then a Unix timestamp prepended on the front: 173510 63 99 [12/24/24 23:59:59] … and then I moved to another timezone, so…
At work, we have one central server running Postfix which accepts all internal email, and sends it out through our email provider (Google Workspace). So for example, alerts from Nagios, requests and responses in our ticketing system, and automated reports all flow through this server, which sends them to Workspace’s “smtp-relay” as a smarthost, for further delivery (to both…
For this blog, I’m using the static site generator Hugo , but manually deploying a new build is too boring for me. Since I don’t use Github (and don’t want to bother with the alternatives - I do most of my Git operations from the command-line anyway), I can’t simply use some CI/CD service. On the other hand, since even my public Git repos are just “real” Git…
This is how I wish someone had explained git to me when I was first learning. (And a bit of a cheatsheet) What is git? Most people say Git is a version control system (VCS). However, it is more than that. Git is an object storage and tracking system. Moreover, Git is a distributed object storage and tracking system. The practical upshot of this is that the entire repository history is immediately…