Regression to the Mean Model
Shuffle your XGBoost training data and you can get a different model. Not different hyperparameters or different features, just a different row order. With tree_method='hist' and multiple…
a cool little project - my thermal printer
Hello, Recently, I coded a cool thing with a thermal printer. Basically, I coded a website that connects to a server that is connected to my little thermal printer. If you click here you can send me…
Unbound (KernDiff)
I've been getting into CUDA for the past month, and profiling GPU kernels (functions that run in parallel on the GPU) always felt painful. You run NSight Compute (NCU, a kernel profiling tool for…
My Starship prompt setup
The prompt is the line you stare at before every command in a terminal app. It can be as minimal as a symbol like $ or . By default, the Terminal app on macOS uses zsh with a plain prompt that shows…
Bidirectional I2S with PIO
Raspberry provide an example I2S output PIO program. I needed simultaneous input and output, so I adapted their program for that. Code at the end of the post.
Windows Native App Development Is a Mess
I’m a Windows guy; I always have been. One of my first programming books was Beginning Visual C++ 6 , which crucially came with a trial version of Visual C++ that my ten-year-old self could install…
McPick - Manage MCP Servers and Plugins in Claude Code
I saw a Reddit post the other day that called setting up MCP servers in Claude Code “a tech ritual for the quietly desperate.” 😅 That tracks! The comments were full of people saying things like “took…
How to Make Claude Code Follow Hook Instructions
I’ve been using the forced-eval hook for months now. It’s part of my claude-code-toolkit plugin and it’s been working brilliantly. Until about a week and a half ago, when Claude just started skipping…
Maximally minimal view types, a follow-up
A short post to catalog two interesting suggestions that came in from my previous post, and some other related musings. Syntax with . It was suggested to me via email that we could use . to eliminate…
Amp and the partial ordering of measures of disorder, part 2
In the first part of this series, we analyzed different techniques used to compare measures of disorder and to construct a partial order thereof. We then tried to apply that newfound knowledge to…
How to Avoid Runaway API Costs in OpenClaw
Routing every OpenClaw request, from background tasks to complex reasoning, through a premium model adds up fast. Here is how to right-size it.
Wonderful Toolchain project update - March 2026
It’s certainly been a while. Let’s take a peek into the Wonderful toolchain. There have not been many major changes or new additions since the last update. As such, this post will act…
All tests pass: a short story
One night, I wrote a simple tool to pick a random programming language. After shuffling a few times, I landed on Arturo. I decided to try it for fun. What’s Arturo? Best I understand, Arturo is…
Little web app to pick a random programming language
I wrote a web app to choose a random programming language. It’s very simple; I hestitate to even call it an “app”! The interesting part was scraping all the languages on Rosetta…
A Data Scientist RLM That Lives in Your Program
… or how to process DataFrames with RLMs and DSPy
System reminders - how Claude Code steers itself
Claude Code has 37 hidden reactive messages that nudge the agent mid-conversation. Here's how they work and how to build your own.
The Software Factory: Why Your Team Will Never Work the Same Again
We already have everything we need to build software factories. Teams will change. The only variable is speed.
The Ruby Browser War: Playwright vs. Ferrum (2026 Edition)
The New Guard For a decade, Selenium was the king of browser automation. It was slow, clunky, and flaky, but it was all we had.
What Happened When I Applied Karpathy's Autoresearch Idea to LLM Inference
Most “AI optimization” demos are fun to watch for the same reason benchmark tweets are fun to watch: they show you the win, not the search. You see the final graph. You see the +12% or…
Relaunching tablecloth.time: Composability Over Abstraction
Daily electricity demand patterns — each line is one day, colored by year I recently relaunched the tablecloth.time project. The goal of this project, which remains in an experimental phase, is to…
Dev Weekly: Nvidia GTC Drops Vera Rubin, Stripe Ships 1,300 PRs/Week with AI, Laravel 13 Arrives
Nvidia unveils Vera Rubin at GTC 2026. Stripe's Minions agents ship 1,300+ pull requests weekly. Microsoft restructures Copilot leadership. OpenAI signs AWS deal for government AI. Laravel 13 and…
EWW fragments: fixing my own mistakes
This month's [[https://www.emacswiki.org/emacs/Carnival][Emacs Carnival]], my first participating, is titled "Mistakes and Misconceptions." This story happened over the past few years, behind the…
Build your own shimmer skeleton that never goes out of sync
Skeleton screens break every time you touch the UI. Here's how to build one that reads the DOM and keeps itself in sync automatically.
Replacing Disqus with Mastodon Comments
How I dropped Disqus and wired up Mastodon toots as comments on my Hugo blog using a web component.
Voice AI in 2026
Since I’ve been exploring the extended universe of voice AI and voice agents, I’ve met a lot of people working with them in the real world and it’s not just the average customer support bot anymore.…
Create new revisions in Jujutsu with multiple heads
It was one of those "ah ha!" moments for me when I finally used it. Chris Krycho covers the concept of megamerges with this diagram: m --- n / \ a -- b -- c -- [merge] -- [wip] \ / w --- x I've found…
Use |mach try --no-push| for a configuration dry run
I wanted to see what the generated try configuration would be for a new preset I made and did this by submitting real try pushes (with empty so they don't execute resources). What I was looking for…
Kirk, Scotty, and Spock
Vibe-specing from the chair.
Building an FPGA 3dfx Voodoo with Modern RTL Tools
This frame of Screamer 2 was rendered not by an original 3dfx card and not by an emulator, but by an FPGA reimplementation of the Voodoo 1 that I wrote in SpinalHDL. Available on GitHub. Read the…
When a Feature Request Becomes a Research Project
Someone made a feature request on the skill-validator tool: support for the evals/ directory introduced by Anthropic's recent updates to its skill-creator skill. This is the third or fourth Claude…
The Software Architect Elevator
I don’t think it’s necessary to introduce Gregor Hohpe. I’m a big fan, having read Enterprise Integration Patterns, and I’ve recommended the book ever since. When I spoke at the…
BSidesSF 2026: nameme - a DNS-based pwn challenge
This is a challenge I’ve been considering making forever. It’s possible I’ve already made it, even, it’s one of those things that appeals to my brain! As always, you can find copies of the binaries,…
🧮 How To Write Fast Game Engine Math
Text Version Are you in a linear space? YES: Congratulations, things are easy and fast! Task Complete. No: GOTO 2. Can you easily get into one? YES: GOTO 1. NO: GOTO 3. Can you pretend the space is…
The Bloat Industry: 30,000 Lines to Count Pageviews
Vibe coders celebrate 30k LOC Rails blogs and 8-container analytics stacks. I built Kaunta — one Go binary, 15MB — because I needed to count pageviews, not run Kafka. The industry of bloat is real,…
Daily GitHub Stars: March 22, 2026
Today’s starred repositories:
🤖 SO-101 Nexus
An open-source toolkit for training and deploying learned policies on the SO-100/SO-101 robotic arms.
Flow field visualisation on my homepage
I created a new visualisation for my homepage rotation. Here’s a demo: It’s just a basic flow field simulation with particles tracing their paths along the space. I used the p5.js framework. It…
From Lektor to Zola — migrating 26 years of content
This website has been running on Lektor, a Python-based static site generator created by Armin Ronacher (of Flask fame), since I moved away from WordPress years ago. Lektor served me well: its…
My AI Dev Setup: cmux, OpenClaw, Skills, and a Lot of Fish
A walkthrough of the toolchain I cobbled together so my AI agents keep working when I step away from my desk—and I can follow up from my phone.
Week 89: Signs of Spring
This week the sun finally returned, and I could stash away the winter coat. Even managed an after-work drink stood outside watching the sun go down. Prototyping with real data I spent much of the…
A quarter of a billion NuGet downloads
A personal milestone and a short reflection on NuGet's history and what it has enabled for open source and the community
How to Make an Open-Source Project Suit Your Needs
To fork or not to fork? How to contribute substantial changes?
A Demographic Collapse of Developers
Junior developer hiring is stalling. Meanwhile, the senior pipeline doesn't refill itself.
How We Synchronized Editing for Rec Room's Multiplayer Scripting System
Simple solutions, powerful outcomes.
Slowing down to go fast
How a debugging session with a coding agent reminded me of the need to learn things with intention
Code as Config: The Start of Software Speciation
The era of the identical binary is ending as autonomous agents begin directly mutating source code, fragmenting once-uniform programs into bespoke digital organisms. This post explores the profound…
.plan-26-12: Zarr across space and TESSERA time
I've been on leave this week so not much coding, but I did progress some threads from last week which I'll update on! TESSERA+Zarr take 3 After I published the TESSERA Zarr conventions from last week…
How to Handle Malformed JSON from LLM Responses in TypeScript
LLMs return invalid JSON all the time — markdown code blocks, trailing commas, smart quotes, unquoted keys. I open-sourced a zero-dependency TypeScript package to fix it.