Type to search.

    Updates

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


    1. Updates for July 2026

      Here's what I've been up to during the month of July:

      • We took a trip to San Diego at the start of the month to see some friends and visit the zoo down there.

      • I installed a front basket on my main commuter bike and have been enjoying it, for the most part.

      • We've moved furniture around in our bedrooms for the first time since settling into them.

      • I've been researching and trying out sewing bags.

      I started reading Busy Doing Nothing for the second time but haven't finished it yet. I did read a bunch of eclectic articles:

      • Moving Car-Free as a Parent

        Driving is the default for the 95% of North Americans. This is just reality -- it is what most North American communities are built for, and depressingly it translates to a highly asocial and lonely experience for new parents [...]

        It's nice to see people try a different path through parenthood. I was pretty cautious biking with my daughter and didn't start in a trailer until she hit one year.

      • The US Constitution Is For Simple Folk Still Burdened By The Belief That Words Have Meaning

        Real originalism means asking what the Founders would have wanted if they had lived long enough to become furious about anchor babies.

        This is the best summary I've seen for the state of America's higher courts.

      • How Flock Cameras Wrongly Tracked Me for Days Over 'Stolen' Plates and Sent Police After Me

        Back in the Kohl’s lot, I was standing there with my hands up, still getting over the shock of throwing the Range Rover in reverse and seeing four cop cars materialize on the backup camera, lights blazing.

        I'm all for more enforcement of traffic laws (I see people breaking them every day), but the tech cannot be this capable and flawed.

      • Accepted proposal: range over all command-line flags

        But *debug is false both when the flag was omitted and when the user explicitly set it to false. The parsed value alone cannot distinguish those cases.

        This is an interesting case where most of the command line flags libraries I've used (except the venerable getopt) fall short. To me, Go consistently accretes good ideas in its standard libray on a very minimal and frankly odd base layer.

      • Server Migration

        I refused, and asked if I could speak to the engineers, which he in turn refused because, "They make hundreds of thousands of dollars. They don't get paid to take support calls. I get paid dollars an hour to do that." Then I was told it could take 24-48 hours to resolve.

        I also hosted with Media Temple initially (because it's what all the cool kids were doign) but dumped them when they were acquired by GoDaddy.

      • Mr. Penumbra is up all night

        In the years since, the Kindle has matured and curdled ... the web has become an even more brutal arena ... and only one realm has remained truly, reliably apart. Only one realm has remained reliable, period. That’s the realm of the physical, of course.

        I love the home-scale production that Robin's getting out of his risograph machine and booklet maker, I just wish they weren't so crushingly expensive.

      • Printing tiny photos for paper journals

        And the photos are stickers! So far I haven't printed something from this and not wanted the photo to be a sticker: wouldn't I want to stick it onto a postcard or in a notebook? The quality's totally fine but won't replace a desktop printer or a film photo.

        We bought a similar printer thinking we could use it to send updates to friends and families of our daughter, but it's not the most convenient tool. This seems like a good use of it that I might try for my bullet journals, though.

      When July started we took a four-day trip to San Diego to see some friends. There was an obligatory visit to the San Diego Zoo for a day, then to Coronado on North Island as the town prepared for the Fourth of July, and then some relaxing hangout days. While we were there, we tried more vegan restaurants: Plant Power, Mr. Charlie's, Tacotarian, and Ben & Ester's. We capped off the trip with an evening at Kate Sessions Neighborhood Park near Pacific Beach.

      Later in the month, I rearranged furniture in the bedrooms; it feels nice to have more open space in the main bedroom. My daughter loves her new wardrobe and moving her crib to the non-window side of the room lets us push it right up against the wall. I still haven't finished putting together all of the IKEA items, like the caster drawers. And we'll be upgrading our bed to a king size along with a refresh of our nightstands as soon as we can decide on them.

      I bought some devices this month, like an Xteink X4 that's now running CrossInk. It's great to avoid all of the distractions of a phone, but I wish it could open books I'm borrowing from the library. I'd also like to set it up to dual-boot into Microslate so I can try typing on it with a Clicks Power Keyboard. For my birthday, my wife bought me (her) a Nintendo Switch 2 so we swapped out the old Switch in our living room. They really thought through the migration experience and almost all of our old Switch games carried over to the new device, along with our settings, saves, and screenshots. We've been enjoying Splatoon Raiders, Star Fox, and Mario Kart World. On the Steam Deck, I started a new Baldur's Gate 3 character and tried out Clair Obscur: Expedition 33, which wasn't for me (I'm not a fan of quick-time reflex games).

      My commutes lately have been delightful with a new front rack installed on my Kona Rove. It's much more convenient than a cavernous pannier for the amount of stuff I carry.

      And finally, I've been exploring "MYOG" (Make Your Own Gear) for sewing bags and other sports/technical items. I bought a ZPP Kit from Ripstop by the Roll and sewed it up in a single evening, despite having to rip the first seam I sewed out a few times. We have a really nice sewing store near us that I've been able to stock up on supplies at. My next projects are a pouch for my wife's Freewrite Traveler and the LearnMYOG Everyday Fanny Pack.

    2. Updates for June 2026

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

      • I added back colored links to this website and added some light image processing to put their dimensions in the HTML so the layout is stable when they eventually load.

      • We were going to take a trip to San Diego over the Juneteenth weekend, but we all got sick and had to postpone it to this upcoming weekend.

      • For my bike commute, I started using the Brompton more, filming my rides with a chest-mounted GoPro, and taking a 15-minute-longer but less stressful route home.

      • I wrote an article about formatting Markdown and finding parser bugs.

      I still haven't finished reading any books, but I have plans to tackle a few classic novels in my vanishing free time. But there were a lot of articles I found interesting:

      • What it's like to have the machine that keeps you alive die while you're on vacation

        Every problem it has is an indignity and an insult to me. Anything it does that irritates me is a sin. Universal healthcare would make my life easier, for sure. But the irritation I feel whenever I have to deal with a pump problem will never go away until diabetes is cured.

        One of my good friends was diagnosed with diabetes as a child and I've seen her deal with obstacles stemming from the shitty medical technology she's stuck with. This article sums up the situation with a depressing and stressful anecdote.

      • Building from Zero After Addiction, Prison, and a Felony

        I'm not sure the door will be open for the kinds of entry-level programming jobs that helped here, but maybe they'll just shift in scope. Regardless, there were so many ways this could have (and did) gone wrong.

      • The Newest Instagram "Exploit" is the Goofiest I've Seen

        Once it looks like the request is coming from the correct region, they tell the Meta support AI that the account is hacked and ask it to send the verification codes to an arbitrary email address they control.

        What a terrible design that has real consequences for people who put so much of their lives into this platform.

      • Designing a better podcast editor

        So I built a set of layout tools that exactly correspond to that set of creative decisions. Using the pin-based layout system, the editor gets to pick which part of the music should play at the same time as which part of the preceding and following spoken word clips.

        I love seeing people approach software with new ideas, especially in areas with already-established orthodoxy. This looks like a great re-imagining of a spoken word editing workflow.

      • Designing a personal Pebble watchface

        Another example of personal software, but this time one that you experience all of the time since it's literally attached to your body. I feel like my current watch is "good enough" that I don't have an interest in the Pebble, but it's neat to see folks tinker with it.

      • When modern bike computers miss the mark

        I distinctly remember that Cat Eye’s UI started falling apart when they asked one particular computer to do way too much. Consider this a bit of foreshadowing.

        I've only used GPS-based bike computers but am kind of "stuck" on the Wahoo Roam v2. It has some annoying problems but has a great screen and generally good UI design. The new models with touch screens and more complex software seem like such a step back that I'm considering a Coros Dura.

      • NetNewsWire Status

        NetNewsWire has been a staple of my daily routine and it's great to see it getting the love it deserves for modern macOS.

      • On sabotaging projects by overthinking

        I’m pretty sure I still came out ahead compared to if I’d tried to write everything myself sans LLM or discussion with others, but I’m not certain. Perhaps there’s some kind of conservation law here: Any increases in programming speed will be offset by a corresponding increase in unnecessary features, rabbit holes, and diversions.

        This happens to me a lot, but usually only for my personal programming projects that have no deadlines or stakeholders aside from myself.

      • Plotting Ideas

        In order to expand your understanding of a problem space and generate new ideas, it’s useful to put what you already know on a plot. It can be one, two or three dimensional and you can experiment with different axis (continuous, discrete, binary).

        I do this subconsciously but haven't really had a name for it until now.

      • Bullet Journal

        Half of the solution to this is having a compact pen that's always on hand -- the Kaweco -- and simplifying the system to be agnostic of colour or pen type and instead be symbolic and annotation-driven is a complete solution.

        I've been using the Leuchtturm Bullet Journal Pocket for the past couple of months and it's a nice way to keep track of short- and medium-term goals and chores. I tried the Kaweco mentioned in this article but didn't like its weight or grip; the LAMY Safari or AL-star are hard to beat for me.

      • Level Boarding Soon, Fast, and Cheap

        The incrementalism recommended here is almost unheard of in US transportation planning but makes a ton of sense.

      I also updated a few notes:

      I continued organizing our garage this month in preparation for installing a "power rack" for barbell and body weight exercises. We bought a folding rack that bolts to the wall for our single car-sized garage. Installing that was tricky with one person, involving holding up 50-pound stringers while driving in lag bolts or balancing the hundred-pound rack frame to fit into brackets. We'll probably leave the rack unfolded most of the time, but it's nice to have the option to make it compact if I need more space in the garage for a project.

      I also branched out on my biking a bit more and used the Brompton for some errands again. It's a really comfortable bike to ride and the gearing is perfect on most of the routes near me. I bought new brakes and handlebar grips for it that I still need to install. I've started taking a slightly longer route home to avoid a busy but much more direct stroad. After a few close calls, I'm now wearing a GoPro Hero 9 on a chest mount and keeping my Cycliq Fly6 Pro charged and recording from my bike's seat post. It's a bit annoying to keep the GoPro's batteries topped off and the microSD card recently bit the dust, but it's nice to have in case something happens. And finally, I set up the Fairlight on my indoor trainer in case I want to get some fitness riding in. I'm going to try out the Zwift Cog to see how I like the platform.

      A couple of weeks ago, we all got pretty sick and had to postpone a trip to San Diego to see friends. Parenting becomes incredibly difficult for me when I get sick, but luckily my mom was coming out to do some childcare for us anyway. Hopefully that was the last bad one this year, but with my daughter starting preschool in August, I think it's just the beginning.

    3. 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.

    4. 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.

    5. 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.