I just finished updating this site from Zola 0.22.0 to 0.23.2 . It doesn't seem like this should be a big deal, but it turns out that Zola 0.23 ported the templating engine from Tera 1 to Tera 2. The biggest change in Tera 2 is the replacement of macros by hygenic function-like "components" which, to put it lightly, fucked my shit up . I have a bunch of templates that make this site more pleasant;…
Cross-posting a security advisory I wrote up at work . The actual mechanics of the issue are kind of boring, but I found some interesting stuff to work on in it anyway!
Yesterday, a former coworker reached out to ask if I had a copy of a piece of software that we'd open-sourced at easypost , which he couldn't find. I investigated and found out that not only was that repository mysteriously deleted, but a bunch of the things we open-sourced there. This comes about a year after I learned that all of the engineering blog posts had been deleted and the entire…
Back when I used Linux on the desktop, I used to use this great window manager called "awesome" . It's probably the thing I've missed the most since switching to macOS, especially when on small screens like the 14" display of this MacBook I'm typing on. Awesome was what is known as a "tiling window manager". This means that rather than having a bunch of windows overlapping on some number of…
Most of the time, when I'm actually doing it, I love my job. There's a reason that computer programming (or "software engineering" if you're highfalutin) attracts so many people, and it's not just the unsustainably high salaries at overvalued tech companies or the promise of free gogurt in a corporate cafeteria . I want to take this post to try and make a case for what makes it so great. The first…
I wrote another blog post on my employer's blog , this time about programmatically enabling a goofy new AWS ECS feature that doesn't have an API. Enjoy!
I'm trying to get into a habit of reflecting on some good stuff from the past year at the end of the year; I did it last year and the year before , at least. It continues to be hard to get into the mood to think about good things while the world's burning, jack-booted gestapo are shooting fellow citizens, and my entire industry has been brain-rotted by the great "AI" scam, but, you know, gotta try…
I wrote another blog post on my employer's blog about a little side quest I did to replace part of our system which used v8 to use QuickJS-NG instead. Nothing earth-shattering, but it's always nice to make slow things go faster.
I wrote a blog post over on my employer's blog about how to use row-level security patterns in postgres and clickhouse and I think it's pretty neat. Every company I've worked at has done multitenancy inside of SQL databases, and the approach to prevent cross user access has basically boiled down to git gud ; they've also all had at least one incident where some endpoint forgot to check permissions…
Trying to get back into the habit of blogging for work. I wrote a quick post on the Svix technical blog about using Rust with Clickhouse , two technologies that are near and dear to my heart.
It's been five years since the pandemic hit, and three years since the last time COVID hit our family, but it's hit for real now. My five year perfect-streak has been ended [1] . My daughter came home from day-care sick on Monday and I started feeling bit crummy late Thursday afternoon. Lo and behold, not only am I positive for COVID, but so is everyone else in the family. The kids are mostly okay…
I don't have time for a lot of hobbies these days, but one of my favorites is preparing food. Whether that's cooking four courses out of Julia Child [1] , grilling some meat, or just tossing a salad together, there's something deeply satisfying at turning ingredients into a meal. In some ways, it's not unlike programming; anyone can do a passable job using inferior tools and following other…
Last week, I wrote bout my experience getting a solar power system installed ; since then, I've been spending some weekend and evening time working on improving the little corner of technical nonsense that I have any control over! Background First, let's do a quick recap of how my system works: I have 20 panels, each of which generates up to 460W of DC power and immediately converts it from DC to…
Did you know that the sun is a mass of incandescent gas, a gigantic nuclear furnace? A source of a constant stream of high-energy photons? Did you know that PG&E is a gigantic racket with some of the highest rates in the state ? We pay 61¢/kWh for electricity during peak times [1] , about seven times as much as my wife paid at her old Philly apartment — given the US Energy Information…
This site has had both "Categories" and "Tags" since it was on Blogger in 2007 . It occurs to me that this doesn't really make any sense, so I'm hiding the categories and won't be populating them going forward. The old category index pages are live (because cool URIs don't change ) but otherwise, it's all tags from here on out. A few other small changes: updated some CSS fixed missing </li> in…
Yesterday, I left my job at Instrumentl , which I'd been at since leaving easypost almost three years ago . It was an interesting experience; I don't know that I'd choose to do it again, but it's always good to broaden one's horizons and try new things. I was only at Instrumentl for about 990 calendar days [1] , but I like to think that I got a lot done in that time. When I started, the dev team…
I've been using the Happy Hacking Keyboard in various configurations for the last 12 years; it's a great design for a 60% scale keyboard with all the keys that a Unix person needs and nothing they don't; in particular, I credit its lack of arrow keys with finally getting me to use vim motions correctly. Oh, I've dallied with other keyboards; for a while at work I had an Apple Wireless Keyboard,…
It's January 2025, which means it's time to reflect a little about 2024. Last year , I wrote about some video games I liked in 2023, and I thought that for this year, I might expand and just talk about a few things I liked. After all, the world is currently a burning hellscape looking forward to a fascist overthrow of government and a series of apocalyptic wars on a planet no longer suitable to…
So, I haven't posted here in a while (excepting the tiny CSS post this morning, and for fixing jsSnow earlier today). I promise: I have good reason. It's been a mighty busy few months!
If anyone is using the style from my Firefox post a couple of years ago , you may have noted that the userChrome styling broke in Firefox 132; here's the correct new style for the same visual effect: /* hide the native tabs */ # TabsToolbar . toolbar-items { visibility : collapse ; } /* fix the titlebar color and padding */ . browser-titlebar { background-color : var ( --toolbar-bgcolor )…
The generator for this site has been updated to Zola 0.19.0 ; this is most notable because it means that rss is back! There are now both RSS ( /rss.xml ) and Atom ( /atom.xml ) feeds. Enjoy!
Today was the keynote for Apple's World-Wide Developer Conference 2024 , and, as all the pundits predicted, they announced "Apple Intelligence" , a new suite of tools building on the current "Artificial Intelligence" hype bubble [1] . I started out feeling tentatively optimistic that they would continue to use machine learning systems to provide niceties and augmentation — replacing the two-line…
My GPG key ( 24F8AA354990F3F562EC014BC6496DEB3DA8E9B5 ) was set to expire on Tuesday. Rather than generate a new one, I've decided to just extend the lifetime of this one. I've added new EC25519 subkeys if you'd prefer to use more modern encryption, and bumped the expiration by another two years. Over the last two years, the only thing this key has been used for is as a root of trust for keyoxide…
This is one of my favorite Ruby snippets, which I wrote many years ago and tend to sneak into codebases: class Object def if_apply ( cond , & block ) unless cond . is_a? ( TrueClass ) || cond . is_a? ( FalseClass ) cond = cond . present? end if cond block . call ( self ) else self end end end It's super-helpful for cleaning up long method chains when writing in a "pipelined" style. Imagine the…
I just did my free 30-minute demo of Apple Vision Pro at the Apple Store in Emeryville and figured I'd write down my initial reactions: This is the worst Apple Store experience I've ever had. Apparently the connection between the supervisory iPad and the demo AVP unit is very flaky, and their solution is just to have a lot of iPads. The salesperson doing my demo went through five iPads before…
It's January 21, 2024, which means it's the perfect time to do a wrap up of some of the content I enjoyed in 2023 [1] . I'm going to start off with video games, because they're on my mind. I don't really play a ton of games, and when I do, I have some perhaps unusual things I look for: Xbox or Switch strongly preferred. I don't have or want a PC in the house, and I don't currently have a…
I decided to take some time over the holidays to redo my Neovim configuration, which I last spent any meaningful time on in 2019 . I've been going back and forth on editors a lot for the last few years; last year, I spent the first six months of the year using Helix , which is a batteries-included editor based on the Kakoune editing model. I gave up on Helix after one too many crashes, and went…
I've kept a server in The Cloud [1] for the past 14 years or so , hosted with Tornado VPS (formerly prgmr [2] ). Well, I suppose I've been running anywhere from tens to tens of thousands of servers during that time, but this one was always a pet that I used to run whatever miscellaneous nonsense I needed in my personal life. For what it's worth, let me say that I have had a very satisfactory…
Well, it's that time of year again ! The CDC and FDA both approved the new COVID-19 vaccine last week , and I started looking for shots immediately. I managed to find a booking for today at a local Walgreens, and was perhaps a little worried when the fact-sheet they sent me was for the 2022 BA.4/BA.5 bivalent shot. Thankfully, after a bit over an hour waiting in line, I successfully got the latest…
I think... there are too many social media platforms right now. A couple of years ago, the only thing I used was Twitter, and I was pretty happy with it? Now: Mastodon is where I mostly consume short-form social media postings... and is pretty frustrating a lot of the time. I think there are a total of three people I know in the real world who are still on Mastodon; everyone else bounced off.…
Welcome to Version 6 of this website. As promised a few months ago , I decided to take this website, which has been using the Pelican static site generator since 2014 , and rewrite it to use the Zola static site generator. This was a pretty painless process; I wrote some Python scripts to take all the Pelican markdown and convert it to Zola format [1] and to generate redirects for all the old…
A few months ago, Cory Doctorow wrote a very memorable blog post about the enshittification of social-media platforms , focused on TikTok. I've been thinking since then about how prevalent this trend is and how much it makes me worry for our future. It's mentioned in Doctorow's piece, but I really want to emphasize how deleterious this effect has been on Google Search. I remember when Google was…
My two-year-old's current Favorite Thing is the PBS television show Daniel Tiger's Neighborhood , which is a latter-day spinoff of the excellent Mister Roger's Neighborhood . It's a cartoon about the eponymous Daniel Tiger (who was a puppet on Mister Roger's Neighborhood) and his family, where various small children/animals learn important lessons about sharing and whatnot; standard fare for TV…
I know I just moved mastodon servers three months ago , but unfortunately tenforward.social just wasn't working out for me. I do like Star Trek, but my initial impression had been that the community would be a little more general interest, and unfortunately the Local Timeline ended up looking a bit more like a 90's era single-subject forum than I'd like. So, anyhow, I've moved to hachyderm.io…
I decided that this website looked a little too much like a product of the early aughts, and decided to redo the theme. Key changes since the last revision : No more Bootstrap No more JavaScript (except for Commento and GoatCounter , neither of which impacts any important functionality) Simpler layout that looks more like Web 1.0 and works better with browser-default stylesheets. Some more-modern…
Unfortunately, the Mastodon server I've been on for the last few years ( mastodon.technology ; since 2018 ) is shutting down next month. Thankfully, the decentralized nature of Mastodon means that it's pretty easy to jump ship to another server [1] , and there are even semi-automated migration tools . Since Twitter seems to be about to dive back into being the hosting platform of choice for…
Today was my last day at EasyPost . At a bit over seven years [1] this was the longest-running job I've ever had, which is very odd to think about. In those seven years, the company's grown from 10 people sitting around a scavenged table in another company's lobby on 2 nd St in San Francisco to a large enterprise with a veritable hydra of subsidiaries and hundreds of employees; from one…
I'm currently staying in a Best Western hotel in Eureka, CA , avoiding the Bay Area heat wave, and I noticed something remarkable: the hotel's free WiFi network performs automatic man-in-the-middle interception of all SSH traffic. I've literally never seen this before on public WiFi... Check it out: $ ssh github.com @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST…
Wrote a blog post on the easypost engineering blog [1] about the big project to replace MySQL [2] with Cassandra for storing webhook data. This was a big project that almost went totally sideways, but ended up working out in the end. Updated 2025-12-16: EasyPost replaced all their blog content with AI slop, so this now links to archive.org. Fie on them! ↩ Well, actually, Galera [3] ↩ Fine,…
As has become abundantly clear recently, COVID-19 isn't going away; in fact, it's striking more and more of my friends and family who had successfully avoided it for years. At this point, we have ample evidence that masks work to drastically reduce the spread of COVID; however, none of the local , state , or federal governments are willing to take the low-cost, high-return step of requiring mask…
As far back as I can remember, I've enjoyed photography as a hobby. It's probably because my father's father was a journalist and he never went anywhere without his Leica around his neck --- or maybe it's just because there's something magical at being able to hold the past in your hand and look at it whenever you want. My grandfather seen with his Leica Minilux While it's absolutely true that…
Yet again, it has come time to rotate my PGP/ GnuPG private key. My old key ( 1ED5E5A301C3D109904022893C7775DD37811E62 ) actually expired a couple of weeks ago, and I've been procrastinating writing up this transition. The new key is 0xC6496DEB3DA8E9B5 (full fingerprint: 24F8AA354990F3F562EC014BC6496DEB3DA8E9B5 ) You can also find it at https://files.roguelazer.com/roguelazer.gpg . It has also…
After more than two years of successfully dodging it, COVID-19 finally hit my family the week. On Tuesday my wife woke up with a migraine, which isn't unusual for her; on Wednesday morning, she woke up with a low (100.4°F fever) and we belatedly realized that she might be sick. She took an antigen test [1] and the TEST line turned blue basically instantly. Shit. Quarantine ensued. Isaac (our son)…
As you might recall , my son Isaac was born a couple of years ago. This was obviously an occasion for joy and family happiness (and an end to regular sleep) — but beyond that, it was the beginning of a capitalist glut, a massive influx of new Stuff. So, uh, I figured I'd write about that in case any of my readers ever have a kid and want to know about various baby support items. In general, we had…
Hello dear readers! Like most of you (and as I've written about before ), I've been stuck working from home for the last year and a half, out of the little converted covered porch on my house. For the last six months or so, I've been doing so with my butt firmly planted on an HON Basyx pleather-upholstered office chair that I rescued from my office when we moved out. This chair is, uh, not in the…
Yesterday, California released their Digital Vaccine Record system for securely verifying residents' COVID-19 vaccination status. I took a look at it and thought I'd write up my findings here. At a high level, the DVR consists of a QR code which contains a cryptographically-signed assertion in JSON Web Token (JWT) format. I'll walk you through how to get one, how to decode it, and what it contains…
Yesterday around 10am, I got my second shot of the ModeRNA COVID-19 vaccine (unsurprisingly, I got my first show four weeks ago ); at this point I'm in the countdown to be "fully vaccinated" [1] . So far, the side effects have been pretty mild: I was maybe a little tired yesterday afternoon Yesterday evening I had an elevated temperature of 99.7°F, but no clinical fever This morning my arm feels…
Just Finished For All Mankind Season Two. This season had a lot of slow moments, and more of Karen than I really wanted but holy shit did those final two episodes deliver. If you've bought an Apple product in the last couple of years, you get this for free, so you might as well watch it! Half-Way Through Babylon 5 Season Three. I'd never seen any B5 and $SPOUSE and I decided to watch it over…
As of yesterday morning, I've gotten my first shot of the ModeRNA [1] COVID-19 vaccine! I'd been trying to get an appointment since Berkeley opened them up to all adults on April 9th , and had no luck until 3am on Friday morning, when I managed to get one of the spots released by the CVS near my house (they were all gone a few minutes later). I was surprised to find when I arrived at CVS that,…