Type to search.

    Updates

    A sort-of-monthly log of happenings on this site and things I do or stumble across.


    1. Updates for May 2026

      Here's what I've been working on, doing, and thinking about this month.

      • I implemented a Markdown formatter, incorporated it into my editors, and reformatted all of the input files for the site.

      • After my trip to London, I took a week off from work to start some house projects and spend time with family.

      • I wrote an article about updating my site to Zig 0.16 with some screenshots and added a "full screen zoom" feature for images on the site. The screenshots also have light and dark variants depending on the browser's color scheme.

      • I updated a text-based Instapaper client written in Go to Bubble Tea v2, which was a little confusing at first.

      I didn't read any books, despite the best intentions to dig into some non-fiction. My motivation to read books tends to wane going into summer for some reason. But I did keep up with articles:

      • Shipping a Laptop to a Refugee Camp in Uganda

        What had taken nearly two full days of travelling, waiting, stress, negotiation, and indirect requests for unofficial payments was finally completed in a matter of minutes.

        And that's just to even be able to pay the taxes on the shipment! One of the most upsetting and uplifting stories about technology I've ever read. That surprise and delight at the end is why I do what I do, but I wish it was vastly more accessible.

      • The Day I Logged 1 In Every 2000 Public IPv4: Visualizing The AI Scraper DDoS

        Every pixel that is red/orange/yellow is a /24 that contains at least a single IPv4 address that, in the span of 24 hours on 2026-04-24, hit my VPS [...]

        I'm a sucker for heat map visualizations and this is such a neat application of them.11 The portions grayed out because they're reserved or unused are a nice touch. It's a sad state for the web and there's no relief in sight for those of us who want to stay off the global CDNs.

      • 3 constraints before I build anything

        First research, plan, prototype, then write the one pager again. Iterate. If it requires more than one page, it's too complex, don't build it.

        I build a lot of things that aren't "products" per se, but I wish more engineers would actually spend the time to write down what it is they're trying to accomplish and why.

      • Intermezzo bag

        But my bags are all the wrong size, too small or so large that the book lays horizontally at the bottom, which annoys me. [...] So I made a bag just for this one book.

        I'd love to get more into sewing for bags and other non-clothing items, but all of the independent fabric stores around me are closing and nothing caters to the MYOG crowd.

      • Minimal Viable Zig Error Contexts

        [...] just log error context as key=value pairs, guarded by errdefer. The result is not pretty, but passable

        But it still logs whenever an error is handled, which is a problem for error.Canceled in Zig 0.16.

        When I picked up Zig coming from Swift and Rust, I was worried about missing dynamic context from returned errors. The technique outlined in this article addresses that concern during prototyping with minimal boilerplate. I started applying a bit of this to my website and unfortunately, it doesn't scale naturally to reporting through a diagnostics array because defer blocks cannot return errors (or use try).

      • Printing Zig Structs

        What’s nice about this is you don’t need to worry about the order of the fields because they’re extracted from the format string. If you squint it looks a little like basic string interpolation.

        This is a cute trick for printing, but having to use all of the fields is a bit annoying. Another shortcut that's available if you need it early on, though.

      • Just Fucking Use Go and the ensuing Lobste.rs discussion

        You're out there gluing together fifteen Node packages, three TypeScript build tools, and a Kubernetes cluster to serve a fucking form. You hired a Platform Team to babysit your Rails monolith. You convinced your CTO that Rust was necessary for a CRUD app that does maybe forty requests a second. Congratulations, asshole. You played yourself.

        I hate to say it (because Go is a very mid and frankly frustrating language), but I completely agree with this take. If you are working in a space that is well-covered by Go's built-in libraries or even well-known ones (like Bubble Tea for TUIs), they're generally so high-quality that it makes the limitations of the language less important.

      • A tour of txtar

        It stays this small because it was purpose-built around three goals listed in the package doc: stay hand-editable, store trees of text files for go command test cases, and diff cleanly in git history and code reviews.

        What a delightful and simple way to write tests.

      • You can beat the binary search

        [...] the quad approach has little effect on the Apple platform, but it is a decent optimization on the Intel platform for large arrays in the cold case.

        As someone who knows a thing or two about optimizing binary search, this feels a bit unfair because the baseline implementation is not branchless. It would be interesting to compare this to a more optimized version.

      • Downtown San Mateo Is a Monument to Insider Self-Dealing

        In 1862, with Polhemus running railroad construction, he commissioned a surveyor to plat the town of San Mateo at the exact point where the right-of-way crossed the creek. Conveniently, that point was the middle of his own holdings.

        Any nostalgia for the past evaporated when I realized that the "golden age" of rail travel in the USA was brought about by their equivalent of crypto grifters. I wish that Stanford's board had allowed their mascot to be changed to the robber barons. Max was on a roll this month, despite unsettling feelings of LLM writing.

      • We're Diversifying the University by Hiring More Crackpots

        Many ideas that enjoy enormous popularity among billionaires -- cryogenic immortality, disregard for punctuation, the Antichrist -- have scandalously been excluded from our labs and classrooms.

      • Rewarding Failure

        There exist no incentives at SFSU to hire good teachers. There are no incentives for teachers to improve the quality of teaching. There is no quality control at all to this end.

        You can have too much faculty and you can have too much administration, but most educational institutions emphasize the latter with ineffective management roles. The lack of broad systems thinking here is painful to read about.

      • Japan's invisible electric wall

        The result was rolling blackouts in Tokyo and surrounding areas, even though western Japan had spare capacity it could have sent over.

        I've heard of the out-of-phase regions in USA and Europe's convoluted set of electric railway standards, but nothing prepared me for Japan's tolerated disfunction.

      • Japan's Tourism Troubles Are Being Fuelled By Social Media Assholes

        In 2026 you couldn't move without hitting a Westerner filming themselves for some kind of content, their cameras raised above them while they narrated the event (whether there was actually an audience I'll never know), each one an oblivious centre of their own universe while the 1000 people around them were just trying to get past them so they could cross the road and get home.

      The week and change I took for the staycation was filled with miniature adventures: bike trailer forays into town, Happy Hollow merry-go-round rides by the dozen, a trek through the beleagured California Academy of Sciences, and other visits to pretty much every museum within a thirty minute drive. It was fun to pack the days with that instead of the seemingly-constant work from my business trip. I did fall off the journaling wagon, in a way, switching to a smaller A6-sized "bullet journal" for daily check-ins. The larger notebook got a few long entries when I had something to say, but filled up much slower this month than the previous ones.

      My bike storage situation has always been an afterthought, but I finally found the time to install an RS Slide and GearBlocks wall brackets to hang all four commonly-used bikes. I also cleared out more of the garage to make way for a weight lifting bench and rack I ordered. It was Bike to Work Day in the Bay Area this month and I took part in that ritual, too. To mark the occasion, the Rove got its Albatross handlebars back.

      I've returned to using the venerable Sublime Text for most text editing tasks. Helix still helps with in-terminal editing tasks and Nova is the dedicated CSS editor due to its browser preview. But I'm trying to stick with Sublime for everything else, including prose (replacing iA Writer). The last time I bounced off Sublime Text was when I wanted search-as-you-type across my entire project, which Helix does pretty well.

    2. Updates for April 2026

      Here's what I've been working on, doing, and thinking about this month.

      • I upgraded this site's generator for Zig 0.16 and made it multithreaded.

      • I went on a business trip to London for two weeks, staying in the central part of the city, close to the Tower Bridge. While I worked during the week, I still had four days on the weekend for sightseeing in the city and trips to Cambridge and Bletchley Park11 This is where the ciphers used by Axis powers in World War II were broken using early computers..

      • A notebook that lays flat was my first photo-rich article. Despite the low-quality photos, it's nice to share what my setup looks like.

      I did not read nearly as much as I did last month, but I did find time for one fun science-fiction book:

      Instead, I read some excellent articles:

      • Go Ahead and Use AI. It Will Only Help Me Dominate You.

        This was hilarious and a testament to writing in your own voice without the help of LLMs.

      • Your hex editor should color-code bytes

        I have some strong opinions about syntax highlighting and this is a neat application of it. I'd like a hex editor with structural grouping for known-formats, since I almost always use them on file data. But this looks really useful for hex editing arbitrary data.

      • A tail-call interpreter in (nightly) Rust

        I wish there was some way to apply this to the work I do in Swift, where I built a little arithmetic expression evaluator for the CPU Counters instrument. To be fair, I haven't actually looked at the generated code and I'm likely leaving a lot of performance on the table. Byte code VMs are a really effective solution to tricky problems and can be competitive with native code in some cases.

        Andy Wingo wrote the value of a performance oracle as a follow-up, showing that his WebAssembly runtime isn't as slow as Wasmtime. I'm still not convinced that there are not fundamental limits to performance, having re-read the WebAssembly Troubles series recently. And as much as I love the Uxn ecosystem, his take that a Uxn interpreter is a viable target to optimize for is a little odd. There are veritable loads of more commonplace workloads available in languages that can target WebAssembly.

      • Porting Mac OS X to the Nintendo Wii

        Seriously impressive. This might be the one of the last pieces of greenfield IOKit development to happen outside of Apple.

      • 256 Lines or Less: Test Case Minimization

        This is a nice demonstration that you don't need to be too fancy to get 80 to 90 percent of the benefit of an idea. The problem I've faced with property-based testing is finding useful invariants for a data structure or algorithm that can be easily checked. But I also didn't have access to convenient generation libraries.

      • Lua can be a really cool HTML templating engine

        I love a tactical Lua interpreter as much as the next person, but I'm not convinced that a DSL for HTML is a great application for it. Regardless, I appreciated how the code was presented and discussed. It's almost like a literate program, but positioned as a persuasive piece.

      Before my trip to London, we put on a little Easter egg hunt for my daughter in our backyard and, the next day, another one at my aunt's house. My aunt cleverly assigned each kid an egg color so they all got a set number of their own.

      While I was in London, I experienced a busy, built-up, very old, dense city and got around almost exclusively on their underground light rail and regional heavy rail systems. Getting from Heathrow airport to the middle of the city was fast and relatively convenient: the Elizabeth line was busy but not too bad. Being able to tap-to-pay everywhere took the stress away from finding a kiosk or getting some London-specific card.

      Now that I'm back home, I'm taking a week off work to spend time with my family and do some spring cleaning.

    3. Updates for March 2026

      Here's what I've been working on and thinking about this month.

      • I renamed the "now" series to just "updates," to catalogue what's happened each month.

      • Index pages (lists of articles) contain full article content inline instead of just the title and a link to the article page.

      • I added a human.json with a single entry for my old college friend.

      • The 2025 Priority Gemini bicycle's shift cable disconnected and I had to commute home in a pretty low gear.

      • I swapped out wallets in my Everyday carry.

      I read a few fiction books at the beginning of March after getting all the way through The Lord of the Rings for the first (and probably last) time:

      And read some articles but unlike books, I don't diligently track all of them:

      • Buc-ee's Is Better at Placemaking Than Your City by Max Mautner

        This piece was uncomfortable but in the best way. The urbanist movement needs more humility and meeting people where they are.

      • Good trains by Robin Sloan

        Not much to takeaway from this one but I love Robin's writing and enthusiasm.

      • GitButler CLI Is Really Good by Mat Duggan

        I'm all in on Jujutsu these days but only started looking around because I detested Git's default one-line graph log ASCII art11 Taste in command line tools matters a lot to me, I guess?. This looks so good that I probably wouldn't have made the switch if this was available at the time.

      • The Most Dangerous Line: Behind the Hawker stall test crashes by Admiral Cloudberg

        A haunting article mixed in with detailed descriptions of organizational, engineering, and human failings.

      We started the month recovering from a debilitating cold. When we were on the other side of it, we took our daughter to the beach22 Where she fell over whenever the waves lapped against her legs.. As the heat wave descended, I set up a water table and sand table for her to play with in the backyard.

      The garden had lost some plants over the winter, so we went to our local nursery and picked up a few flowers, shrubs, vegetables, and herbs to get things back on track. I'm pretty excited about the little vertical herb garden we're starting, currently with multiple varieties of thyme, sage, and chives.

      We capped off the month with a road trip up to Sacramento for a stay in Folsom and visit with family.