Loop Engineering Explained With a Non-Coding Example
Learning loop engineering on a non-coding problem: two AI agents that don't share context, looping until they stop finding problems with my estate plan.
Adventures in Fluid Simulation
How I spent a decade pushing the boundaries of fluid simulation for Hollywood VFX — from hacking together my first solver in three days at a Winnipeg hostel, to watching three pieces of my own…
Frameworks vs. Toolkits for Multi-Market SaaS
Why SaaS products that stretch one opinionated framework across multiple markets often become harder to use, and why scalable multi-market products separate universal toolkit primitives from…
Cherry-pick Asymmetry
Context is Trunnk-Based Development with Branch for Relase, and cherry picking. Trunk is main or master for may Git repos, of course. A friend put a scenario to me and I gave him a strong answer: I…
GixSQL, COBOL and FreeBSD
GixSQL, COBOL and FreeBSD This is more of a small bookmark for my own sake, rather than a full article. I created a tiny repository with working GnuCOBOL, GixSQL and SQLite examples:…
Faster micro-frontends: optimising CDN behaviour for performance
How optimising CDN caching improved performance metrics for our microfrontend architecture
The agent reliability ladder: what hardening buys depends on the model
I built a tool-calling support agent from scratch plus a trajectory eval, then stacked five small reliability fixes and tested them on three models. What each fix buys depends entirely on how good…
The Joy and Power of Understanding
Deeper understanding of the code and software systems we work on, is not only pragmatic and practical but highly enjoyable as well ... But, if it is both joyful and powerful, why are we so often…
The systemic decay of tech hiring
Complaining about tech interviews is the favorite pastime of software engineers. We know they're broken, we've seen exactly how they're broken, but, despite a decade of collective hand-waving, we…
Tidy First? A Personal Exercise in Empirical Software Design
A small, practical book on tidyings - tiny safe structural changes - and how to reason about when design work is worth it as an economic decision.
posix shell is all you need
and a better line editor
Lossless GIF recompression via exhaustive search
Exploring GIFs, flexiGIF and LZW compression
Your Next Backend Could Just Be a Google Sheet
A relative needed a website for their wholesale catalog. I turned a Google Sheet into the backend, and gave myself almost nothing to maintain.
Testing 1 2 3
I updated the little lambda that auto-toots when I post so that it will also auto-skeet — this is a test of that functionality!
Expert-aware quantisation: near-Q4 quality at near-Q2 size?
Profiling a MoE model to find which experts matter for a specific task, then quantising the cold ones hard. The result: near-Q4 quality at near-Q2 size for local models.
There is too much
I keep hearing from engineers lately: there is too much going on. Too many parallel threads. Too much code being generated to actually read. Big features merged that nobody could honestly claim to…
Build an Asset CDN on AWS with CDK (S3 + CloudFront + Route53 + ACM)
Build a fast asset pipeline with a private S3 origin, CloudFront caching, custom DNS, and HTTPS certificates using AWS CDK.
AI Journal 2: Vibe-Coding for Fun and Profit
I wrote earlier about how I started used agents for coding a bit later than everyone else who were into AI. I think I'm not the only of in my generation having a bit of a hard time coming to terms…
posix shell is all you need
and a better line editor
State Of Unreal
The latest State of Unreal happened at Unreal Fest and, as I had a feeling would happen, the other shoe of Epic’s grand plan has finally dropped. Unreal Engine is about to change. Significantly.…
Product Update: Custom Asset Uploads, Video-to-Splat, and Bollard Buddy for iOS
A roundup of 3DStreet updates since our April panel redesign, including custom 3D model uploads, image and video to 3D Gaussian splat, the Bollard Buddy iOS app, a major managed-street reliability…
Hot-swappable LiveView components
What if your components could be contracts for runtime implementations, instead of concrete materialized components ?
window.showDirectoryPicker opens up a whole new world
Chrome introduced a new API, window.showDirectoryPicker() that allows the user to grant access to a directory on their computer and allow a website to read/write everything inside.
p99 0 ms* autocomplete for 240 million domain names
We’ll get to the asterisk. I run Wirewiki.com , a website to inspect internet infrastructure like domain names. It helps people check (historic) DNS records, DNS delegation, email deliverability…
20%
Two quotes, apropos of nothing: A lot of software developers are seduced by the old “80/20” rule. It seems to make a lot of sense: 80% of the people use 20% of the features. So you convince yourself…
The AI Tarpit: Why You Can't Stop Reading Your Code
A response to Abigail Haddad on the risks of 'vibe coding' and the dangers of letting AI manage all your design choices.
AI Loops and Collaboration
This weekend I decided to play around with agentic loops and the results have been :chefskiss:. I’m using loops and combining Codex CLI and Antigravity CLI working with Claude Code as my…
How to Write to SSDs - Co-Designing DBMS and Flash Storage
. [How to Write to SSDs](optimising-ssd-writes-for-dbms-cover...
The Optimal Amount of Slop is Non-zero
Regretting that code you vibed? Learn when skipping human review is and isn't a smart move. Rigor should be proportional to risk. My regular readers might be shocked at the title of this post. If…
Vibe under constraint
Vibe coding is great. You describe what you want, the agent writes it, the tests pass, you ship. It keeps working right up to the moment it does not: the job gets killed by the OOM reaper in…
Spec-Driven Development and the Return of Big Batch Thinking
Some are calling it “Spec-Driven Development.” Write a detailed specification for a large chunk of system functionality, hand it to an AI agent, and let it generate a working codebase. The argument…
On arena allocators
Modern software finds it tempting to liberally use dynamic memory allocation. Most objects die young, so applications often see large amounts of churn. This is mostly harmless for programming…
Serving markdown to AI agents via content negotiation
How to make any docs site agent-friendly by serving raw markdown to AI agents and HTML to humans from the same URL, using HTTP content negotiation.
Building Groove: Playback Queue and Gapless Audio
It's been a few months since I launched my first iPhone app – a local-first music player called Groove – and it's been an interesting journey. I thought it would be fun to reflect on some of the…
PivCo-Huffman “merge” operations
There’s a new paper out called “PivCo-Huffman” (HTML version with annotations here) and it’s very interesting. Normal Huffman decoding (and, to a lesser extent, encoding) is…
Cracking simple XOR cipher with simulated annealing, part II
Cracking simple XOR cipher with simulated annealing, part II
kitcat 2.0
I released kitcat a while back: a matplotlib backend that draws plots directly into your terminal instead of opening a GUI window. The original release was barely a hundred lines and dead simple, and…
How Subagents are Built
Subagents are one of the most important primitives when it comes to harness engineering so lets peruse what exists and compare them.
Reliability via N-version programming?
N-version programming was first proposed in 1978, probably the most known paper on the subject was published in 1986, after which activity was mostly within safety-critical systems circles. Cost was…
I Zeroized My Secret. Or Did I?
If you work with secret keys — signing keys, API tokens, anything that must not leak — you’ve probably written this happy little line and felt good about it: 1 secret.zeroize(); Wiped! Auditor happy,…
PANhunt is now on PyPI
Why PANhunt exists When I started working in a payment processor, Dionach PANhunt project was already in use on many servers. It was not a tool I discovered later because I wanted to write something…
Stop opening Outlook just to check your calendar
Away from work, I am a Mac and iPad user. If I want to check my calendar, I open a calendar app. If I want to check my email, I open an email app. At work though, I’m locked into the standard…
Don't ask Microsoft to do it all
A five-million-line enterprise app asked Microsoft for a longer .NET support window. The Java world answered that question a decade ago.
Adventures in Open-Source: the lit profraw race
How a filename collision in lit's --per-test-coverage produced malformed profraws that crashed llvm-profdata, and the two upstream PRs that fix it.
Agent Harness Turns Development into Executable Patterns
Agent harnesses are not just multi-agent wrappers. They route context, package workflow skills, expose project-specific tools, and use traces as the feedback surface for improvement.
What is DRY? (And Other Things We Say at 3 AM)
There is a famous programmer joke that always gets me: “What is DRY? Well, at the risk of repeating myself…” It is funny, but it also hurts a little because it is so true. We all…
A cheaper and safer agentic AI workflow
I recently tried agentic coding for real. It cost $0.034 and finished in 3 minutes. It made two mistakes. In my personal human attempt, I took an hour, and made four mistakes. Cheaper model services…
Teensy Firmware OTA Update Via SSH to Pi5
Posted 21 June 2026 After getting OTA via Bluetooth to the onboard HC-05 going for the 2-wheel robot, I had an epiphany; For vision processing the 2-wheel robot uses an on-board Raspberry Pi5 with a…
Minitest is better than RSpec for AI Agents
I been using RSpec ever since I started Ruby on Rails development back in 2012. It was basically the default for writing tests in every Rails project, and it made sense because it was more human…