Posts
Published: Dec 2, 2025
If there is one easy, low-effort thing that most of my vendors could do that would instantly make me a happier customer, its this: email me a receipt. Not a notice that a receipt is available on your website. Email me the PDF. I don’t want to deal with your website. Or your app. I don’t want to have to figure out where the receipt is this month on your website that you’ve inexplicably redesigned 9 times in the last 5 years and managed to make less useful with each revision (looking at you, American Express.) I don’t want to have to try 3 times to download the receipt because your Java Enterprise Edition(TM) ReceiptFactoryInterfaceBuilderGizmo only works 50% of the time (looking at you, Comcast.)
read more...
Published: Aug 25, 2025
The ZSA Moonlander is a pre-built columnar, split ergonomic 72-key keyboard. It runs QMK-based firmware for full customization. I’ve been daily-driving a ZSA Moonlander for two years now and, with just a few caveats, I’m a big fan of the keyboard. As of the time of this writing, you can buy it1 direct from ZSA for $365 USD.
Click to view full size image Caption: Overhead view of the author’s Moonlander keyboard read more...
Published: Aug 24, 2025
If you’ve been around electronics long enough, you’ll have a few magic smoke moments: sometimes you’ll hear a pop, maybe see some smoke, and usually smell ozone and burning plastic in the air. Back at the ISP we had our fair share of those.
One time, I managed to connect a backup battery string to a DC inverter backwards (reversed polarity.) The batteries were fused - so no melt-down/fire - but the inverter let out its magic smoke.
read more...
Published: Aug 21, 2025
A Modest Proposal for Preventing the Aged from Completely Destroying The World Like a lot of people1, I think elected representatives should be like airline pilots: made to retire at 65. I don’t have anything against the elderly per se, but I think good governance is mostly about having a preference for the future. A long time ago, I read an essay by Paul Begala2 where he shared this anecdote:
read more...
Published: May 12, 2025
To help manage RSI (Repetitive Strain Injury,) in my pinky fingers (Emacs Pinky) I’ve swapped my key switch springs for the lightest springs I think will allow the key switches to return properly: Sprit MX Supreme 25 S springs. I bought a pack of ~100 springs from RD KBD, for $20 USD shipped.
After a week, I’m still getting acclimated to the new springs, which has required more adjustment than switching from Cherry MX Browns to Gateron Clears or switching out my key caps from OEM to XDA profile. The change in feel is enough that I hesitate a bit on the keys, and I’m experiencing some accidental activations from resting my fingers on the home row. I think in another week or two, I’ll be back up to full speed.
read more...
Published: May 3, 2025
Click to view full size image Caption: Installed keycaps; left side After not touching my keyboard layout in any real way for a while, I decided to buy a set of printed key caps to match my layout. After looking around, I found FK Caps which met all of my must-have requirements:
Fully customizable legends Full range of custom sizes Shinethrough legends Not terribly expensive (all-in cost with 8 extra 1U keys and shipping was $89 USD.) My previous set of caps were the OEM profile ones that came with my Moonlander, and I would have liked to stick with the OEM profile, if for no other reason than to not have to buy a full set of caps. Alas, FK does not offer custom-printed OEM profile caps (at least for shine through,) so I went with XDA. They offer a few different profiles:
read more...
Published: Apr 10, 2025
Reading Hacker News Hug of Deaf, I was reminded of a time I built a custom notification system of sorts. I wrote a script to have a modem call my desk phone.
Back at the ISP job, my office was in the data center. In one room, we had racks with colocated customer equipment, and immediately adjacent were the engineering offices. There was a door between the two (which we never closed,) so customers would come over and ask questions or just come over to chat. Most people would only stay a few minutes, but one guy, Marvin, apparently had a lot of free time on his hands. And he liked to talk. Either that, or he was getting paid by the hour (I recall him being a consultant for one of our customers, not somebody we did business with directly.) He also didn’t really take hints like “wow, today sure is busy” very readily. He’d usually respond in kind – “yeah, I’m really slammed today as well. Anyway, like I was saying, can you believe the Bulls last week…”
read more...
Published: Jan 15, 2025
The Free Our Feeds initiative (hereafter, “FoF”) has been seeing a lot of discussion over the past few days. Cory Doctorow signed on and criticized opponents on Mastodon as impractical, puritan scolds. Overall, the initiative purports to be a way to keep Bluesky from turning evil under the control of a maniacal billionaire. They want to raise $30M to, among other things, run a second Bluesky relay, under their control, to free Bluesky users from reliance on a single entity.
read more...
Published: Jan 7, 2025
There are a bunch of fun numerical facts1 about 2025:
2025 is a perfect square (45^2 = 2025) Which you can also write as: (20 + 25) * (20 + 25) = 2025 Or (0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)^2 = 2025 1936 (44^2) was the previous perfect-square year; 2116 (46^2) will be the next. 2025 is the product of two squares: 5^2 * 9^2 = 2025 and the sum of three squares: 40^2 + 20^2 + 5^2 = 2025 If you increment each digit in 2025 by 1, the result is also a perfect square (56^2 = 3136). Since 45 is a triangular number and 45^2 = 2025, you can sum cubes to get 2025: 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3 = 2025. The next triangular number is 55. 55^2 is 3025. 2025 is the sum of all products from 1 * 1 to 9 * 9 2025 is an early bird square. If you concatenate the natural squares together as a string 14916…, 2025^2 = 4,100,625 appears ahead of its natural position in the (4,100,625 is found using digits from 790^2 and 791^2.) 2025 is a powerful number that is not a prime power 2025 is a Harshad number since 2025 mod (2 + 0 + 2 + 5) = 0 2025 is a palindrome in base 20 (515) Click to view full size image read more...
Published: Jan 3, 2025
I use Chezmoi to manage my dot files and scripts. With a few relatively simple config tweaks, I’ve eliminated almost all of the friction of using a dotfile manager. These are my notes about my setup, workflow, and how I handle a few specific situations.
Table of Contents The Basics Why use Chezmoi Basic setup Adding and editing files Editing files Emacs integration Setting up a new machine Getting changes from your Git repo Templates Inserting Variables Handling host-to-host differences Handling OS differences Avoid excessive templating Special Situations Creating empty directories (i.e., your tmp directory) Handling executable files Templatizing a file after the fact Why use Chezmoi There are many dotfile managers out there, and I think most hackers at one point or another write a homegrown solution, so why pick Chezmoi? I like it because it is very reliable and, with the right configuration options, very low friction. By low friction, I mean I don’t really have to think about Chezmoi very much, and I don’t have to worry about my files getting out of sync. When I want to edit a config file, I just go edit that file.
read more...