My new project: QRpage
I’ve started a new thing, so in the spirit of building in public, here it is: QRpage. The one-line version: it’s a QR code with a real webpage behind it. The itch I kept noticing a particular kind of…
I Burned 23 Billion Tokens to "Rewrite" Langfuse
A migration retro: forking Langfuse to swap its analytics store from ClickHouse to GreptimeDB, run mostly by two AI agents. Most of the work was paying down the debt of one decision — make a single…
Evals aren't a step at the end. They run the whole way through
There’s a version of building an AI app that goes like this. You build the thing, you get it mostly working, and then someone says “should we evaluate it?” and you bolt some evals…
Two Places to Stop a Bad Release
How Drydock uses npm staged publishing and GitHub release gates to review the package artifact before it can ship.
Dynoxide 0.11.1: four conformance fixes
Dynoxide 0.11.1 is a small patch. Four fixes, all the same shape: spots where the engine evaluated a condition expression or validated a number slightly differently from real DynamoDB. No new…
Designing a personal Pebble watchface
I recently got a Pebble Time 2 as it seemed like a fun smartwatch away from Google/Apple/Samsung with a good 4 weeks of battery life. One thing I wanted to do is to create a custom watchface for my…
Cut the Token Bill on Both Ends
Two small tools that compound: Caveman shrinks what the agent says back, RTK shrinks what your terminal pipes in. Same context window, twice the room.
Don't Make Gates Optional, Make Them Flexible
When you need an approval checkpoint but don't want it everywhere, make the gate *required but flexible in formality* rather than *optional but formal*. A required gate lowers the stakes of…
Agents Write My Code. Agents Review It. I Referee.
AI agents review my pull requests now, not me. But there is one thing I will never be able to hand them: everything my company knows that was never written down.
Glue Services: Part Two — Data Synchronization
Glue Services: Part Two — Data Synchronization. I recently talked about using glue services (Anti-Corruption Layers) to isolate modern platforms from legacy integrations. Today I want to talk about…
Cascade Chat Has Moved to an ADLC
Cascade Chat now runs on an Agentic Development Lifecycle. Agents write the code, Playwright verifies it, and the only human decisions left are ideation, architecture, and the release gate.
The Ruby Community in 2026
The Ruby community in 2026 is dominated by mean discriminators and their benefactors (they're about 50% of the community at least). Many devs in the Ruby community who are indirect (unconscious) or…
AI Coding for Makers and Solopreneurs is now live
My ideas have always run faster than my ability to build them. I can sketch a circuit, breadboard a sensor, and read a datasheet without much trouble. But turning an idea into working, deployable…
Goodbye, Cursor
Regular readers of this blog know that I’ve been quite a happy user of Cursor for the past year, but the recent news of its mother company being purchased by SpaceX has made me reconsider my…
heavener: This is what happens when you can't afford EDR licenses
A modular engine that runs real vendor detection logic from reverse-engineered EDR components against live or replayed Windows telemetry.
Essential Insights from Programming Talks
Key ideas distilled from talks by Rich Hickey, Alan Kay, Guy Steele, and others — on simplicity, state, design, and the gap between what programming is and what it could be.
WWW Ep248 Live At React Miami With Guests Jason Lengstorf And Kent C Dodds And Tanner Linsley And Francesco Cuilla
Ep #248 Live at React Miami with guests Jason Lengstorf, Kent C. Dodds, Tanner Linsley and Francesco Ciulla Robbie and I chat with 4 guests in 1 episode! Topics span things like Lambo's, MCP vs…
Really building
Last week I decided to try something. I had an idea for a new app, pulled up Claude Code, and began building. The concept wasn't theoretical, I knew what I had in mind, and wanted to get to a…
The macOS Dock Nightmare: How I Finally Stopped It from Jumping Between Screens
A DockLock story about the long-running macOS Dock jumping problem, the first fixes in DockLock Lite and Plus, and the DockLock Pro direction.
GitHub under siege
My first thought when I saw Cursor’s Origin announcement last week was: You could see this move coming a mile away My second thought was: Dang, GitHub really is under siege Cursor is now…
I made an HTML quiz maker!
Heya! So, James recently made a blogpost opensourcing the python script he used to generate his various personality quizzes! (Blogger Archetype quiz, what microformat are you, etc.) At the end of the…
★ claude code: ship your skills as a plugin marketplace
Problem statement: my Claude Code skills lived in my .dotfiles, usable only on the machine that cloned them. I wanted them to be installable anywhere with one command, so that (for example) my…
Introducing TuxScribe v26.06
TuxScribe is a new audio transcription app for Ubuntu and Debian-based distributions that generates subtitles for audio and video files using Whisper.cpp.
Reasoning About Async Rust with State Machines
Build the state machine behind an async fn, then use that model to reason about common async bugs and compiler errors.
Blender Problem: I Added Bones But I Can’t Pose My Model
I’m trying to get a cute little cat model to life in Blender, and it’s […]
Signing and notarizing a Mac app on Linux
I had to sign and notarize the Posh TUI Mac app. The problem is that our household moved away from Apple. My last MacBook (Intel-based) was converted into an Omarchy machine for my son. But all the…
Tuning a Server for Benchmarking
Optimizing code starts with measuring it, and a measurement is only useful if it is repeatable: a 2% improvement is invisible under 5% of noise. Yet on an untuned machine the same binary can easily…
Least-Privilege MCP Tool Calls
There are two natural ways to lock an agent’s MCP tool calls down to least privilege. The agent can carry a narrow token scoped to the action, or the server can decide each call as it happens.…
I keep being be impressed by uv
MP 170: It understands my old projects!A few years ago I made a small project that automatically adds borders to screenshots, because macOS doesn't have a built-in tool to easily do that. For a…
Help me, but don't touch the paper!
As I’m discussing paper writing with more folks in the age of Claude Code and other coding assistants, we’re having more discussions about how to use these tools in writing. Per my earlier post, I…
GuixPkgs: every Guix package, as a Nix flake
I wrote earlier about what I believe to be an absurd idea , The Guix Nix Abomination : a tool, guix-transfer , that takes any Guix derivation and rewrites it into a Nix derivation, and lets…
Fishery Simulation
A fishery simulation of stocks, flows, and feedback loops managing fish populations.
Expat 2.8.2 released, fixes 13 vulnerabilities
For readers new to Expat: libexpat is a fast streaming XML parser. Alongside libxml2, Expat is one of the most widely used software libre XML parsers written in C, specifically C99. It is…
Bamboo Weekly #176: Religious restrictions (solutions)
Get better at: Working with CSV files, reshaping data, pivot tables, grouping, and plotting.
Data Access Patterns That Makes Your CPU Really Angry
Given an array of data, what is the slowest way to sum up the integers? Is it adding the numbers from left to right, adding them randomly, or doing something else? In this post, we are going to build…
Posting explains from tools (and not web browsers)
Some time ago (well, a month ago) someone called zam6ak reached to me and asked about extraction of delete_key from plans posted using tool, and not website. Specifically they were doing something…
Implementing CRYSTALS-Kyber (post-quantum cryptography) from scratch in Python
I wanted to understand post-quantum cryptography beyond high-level explanations, so I implemented CRYSTALS-Kyber from scratch in Python.This is a small series that walks through the math step by step…
BulkSynchronize in EF Core: Mirror Your Data in One Operation
The Function Everyone Has Written, Nobody Loves If your codebase has a method called something like SyncProducts(), RefreshMetrics(), or UpdateFromFeed(), it probably looks something like this: It…
trailmaps.app + Map Generator
I’ve been using it for a while now, so I guess it’s a good time to announce the revamp / relaunch / whatever of trailmaps.app.…
Learn T-SQL With Erik: Controlling Memory Grants
Learn T-SQL With Erik: Controlling Memory Grants Chapters 00:00:00 – Introduction to Controlling Memory Grants 00:03:45 – Example Query and Indexing for Order 00:07:24 – Exploring…
ESP IDF v6
I do not wish to speak ill of such an awesome project, but, this is head banging against wall stuff. ESP IDF v6 is out, and there is a migration guide, and a lot of breaking changes. I appreciate…
A value_lock type for C++
Here’s yet another idea I had for a C++ type. It’s a useful tool for simplifying the use of a mutex with a shared resource.
You can ask your coding agent for a selector to compare UI options
One of the ways I have been using coding agents these days is to prototype small UI changes in an existing project. I use them as a tool to explore. In this usage mode, I am not interested in the…
Migrating a decade of production data from an abandoned database (RethinkDB) to MongoDB
Back in 2015, when the Node.js, NoSQL, and microservices ecosystem was still fresh and the tooling hadn’t matured, choosing one solution over the other would be a hit-and-miss situation. We didn’t kno
Qobuz Theme 1.4
Here's another little update to the Qobuz Beta theme. Their use of Tailwind continues to be an obstacle, as there just aren't enough semantic classes to style things how I would like. In the vein,…
Drift Checks for a Self-Hosting Compiler
[MAGIC](https://github.com/flybot-sg/magic) is a compiler. It turns Clojure into .NET so Clojure can run in Unity, even on iOS. To do its job, it commits some of its build outputs straight into the…
Beam Up: CLI to deploy static sites
Beam Up is a command-line tool I wanted for some time. Its goal is to make deployments of static sites across various providers simpler from your machine: run one command: beam_up ./output/ . ❤️ If…
How to Get 12 Google Play Testers for Closed Testing 14 Days
Learn how I got 12 Google Play testers for 14-day closed testing completely free and unlocked Production access without paid tester services.
Understanding Testcontainers: The Module Layer
I am a core maintainer of testcontainers-go. The third post in this series closed pointing at the module layer. modules/postgres.Run, modules/redis.Run, modules/kafka.Run, and the rest of them are…