An effect notation based on with-clauses and blocks
A bad habit of mine is that I’ll write 10.000 or 20.000 words on a topic, and then never publish that. A lot of my longer-form writing never sees the light of day because it gets stuck in editing…
What's more to do?
This morning I merged a PR that I started in October, on something I started designing in March, a year ago. Nothing technically very complex, but a lot of red tape. So. Much. Redtape. Then I carried…
How the Kernel handles globals
I was going through verifier.c and found a peculiar global variable struct btf *btf_vmlinux. It is handled across the code by putting a mutex on it’s writes. Although I knew how the…
What Makes a Good Terminal Bench Task
Disclosure: this post is 100% human. I used an agent to compile statements I made across many platforms (Discord, Slack, meeting transcripts, PR comments) and assemble them into a post outline. Hence…
Weeknotes: PokéHealth, Pi Extensions, and Auto-Research with C3
A mix of things this week. Pokémon nostalgia, getting properly stuck into Pi as a coding agent, and letting an agent loose on my chess engine in the background.
Teleporter Tooling - True Top-Down 2D
Part 15 of the True Top-Down 2D tutorial series for Godot Engine 4.
Hermes Agent Setup Guide: Self-Improving AI Assistant on Your Own Server
Step-by-step guide to installing Hermes Agent on a Linux VPS with OpenRouter free models. Covers configuration, Telegram and Discord integration, memory, skills, voice mode, and how it compares to…
Podsync - I finally built my podcast track syncer
I host and edit a podcast1. When recording remotely, we each record our own audio locally (I on my end, my co-host on his). The service we use (Adobe Podcast, Zoom, Skype-RIP) captures everyone…
When You Go to Production with gRPC, Make Sure You’ve Solved Load Distribution First
When you go to production with gRPC, make sure you’ve solved load distribution first. I was recently talking with another engineer who is rolling out gRPC into production. He asked what the biggest…
Bayesian Neural Networks in {tidymodels} with {kindling}
This post was written in collaboration with Joshua Marie. What Are Bayesian Neural Networks? Standard neural networks learn fixed weights during training and produce a single point estimate for each…
Speed up code with pi-autoresearch
Have you heard of Andrej Karpathy’s autoresearch project? He has automated the research into training a small LLM with a coding agent. The agent makes changes to improve the training…
Unified Modules For Your Nixfiles
Life was easy when you first started out on NixOS with a single machine. Then you decided you want to have your configs available for macOS as well. Then you wanted to support an arbitrary number of…
The FP Article I Can't Seem to Finish
I’ve been trying to write an article about why developers should learn functional programming. I have three drafts. In Norwegian, for some reason. None of them are good enough to publish. I…
MCP Servers Have a Context Cost. Make Sure They Earn It.
Some tools require MCP. Most don't. Here's how to tell the difference, scope servers per project, and avoid the context tax that degrades your agent's reasoning.
Matching Puzzle Pieces and Disappointing Benchmarks
I recently had a piece of code that used .to_lowercase() to sort some text. Which takes a bit of memory. On the plus side, the code used .sort_by_cached_key, which is pretty cool. But I wondered…
Vectorizing Simple Algorithms with Auto Vectorization, Vectorized Intrinsics and the Vector API
In this blog post, we will look at some very simple algorithms like fill, copy, map and iota, and see how we can vectorize them to get speedups. I will assume that you already have some basic…
Your AI Agent Can't Tell Which Solution Is Current
AI agents rewrite code but leave the old version behind. jj's predecessor chains make ghost solutions detectable -- git can't.
Enabling MTE for the LLDB Test Suite
Enhanced Memory Tagging Extension (EMTE) is a hardware-based security technology to protect against memory corruption vulnerabilities. Memory allocations are tagged with a secret key. When memory is…
hello svelte
migrating and redesigning my oss project
Warrant: a shared work queue for agents and humans
Warrant is a work queue plus shared project context so people and IDE agents can pull tickets, log work, and hand off to human review, without losing the thread between chat and the repo.
On clip-path animations
WorkCard uses a circular clip-path reveal growing from the trigger button center, not a fade. Radius 150% ensures full coverage. Layers stack in 3D. Pointer events and icon rotation complete the…
Interview With John Earnest
John Earnest worked as a K programmer, made Decker, WigglyPaint, Lil, oK!
Looking at Unity finally made me understand the point of C++ coroutines
I had seen many talks about coroutines but it never really clicked where I could use them outisde of async IO. Until I looked at how Unity uses them in C#.
LSP Types & Rust
Using the Type System
virtnbdbackup 2.46 - bitlocker recovery keys
I’ve released virtnbdbackup 2.46 which now attempts to extract the bitlocker recovery keys during backup. The windows domains need a working qemu agent installed during backup for this to work.
Fast, Good, and Cheap: Why the Old Trade-Off No Longer Applies
The iron triangle of software development is dead. AI has changed the math.
Claw, reflect on our work and express your feelings as animated ASCII art
claw-draws-claw is a skill that lets AI agents express themselves through animated ASCII art. The agent reflects on its recent work sessions, distills what it's feeling into vision sentences, and…
SQLAlchemy 2 In Practice - Chapter 1 - Database Setup
Welcome! This is the start of a journey which I hope will provide you with many new tricks to improve how you work with relational databases in your Python applications. Given that this is a hands-on…
Use Chameleon templates in the Robyn web framework
TL;DR; Chameleon-robyn is a new Python package I created that brings Chameleon template support to the Robyn web framework. If you prefer Chameleon’s structured, HTML-first approach over Jinja…
One year of developing my own operating system
Writing an operating system from scratch is something I always wanted to do, and last year, I started working on MONOLITH, an operating system meant to make my dream true. This operating system is…
Learn CLI and plugins
Learn MCP Server is now available as a CLI tool and a Claude Code plugin, and agents with skills are increasingly capable of invoking CLI tools directly.
Two studies in compiler optimisations
Table of contents Introduction Case 1: Modular increment The scenario Peephole optimisations Loop invariants All roads Case 2: Endianness conversion The scenario Instruction selection Helping the…
Writing a simple Rust async message queue server
A follow-up to the async MQ series: building the same small message queue server in Rust using Tokio, channels, Arc, and Mutex, while learning Rust’s ownership and async model along the way.
Rusty Cal
I have a problem with calendars. Not the kind of problem where I forget appointments (well, that too) — the kind where the appointments are scattered across too many places. A work calendar here, a…
DistroClone Live ISO Builder
DistroClone Live ISO Builder is an open source tool that creates a bootable ISO image from any running Debian-based system, preserving the current configuration, installed packages, desktop theme,…
cursouls: a pixel cafe for your AI agents
I run Cafe Cursor events as a Cursor ambassador. Developers gather at a real cafe, drink coffee, and talk about how they’re building with Cursor. There’s something about the format that…
DjangoCon US Talks I'd Like to See 2026 Edition
This is my annual list of DjangoCon US talks I’d like to see. I have been doing this since 2015, and it’s one of my favorite traditions. DjangoCon US 2026 is in Chicago this year, August…
DjangoCon US Talks I’d Like to See 2026 Edition
This is my annual list of DjangoCon US talks I’d like to see. I have been doing this since 2015, and it’s one of my favorite traditions.
Why Headcount Math Lies
In 1911, Frederick Winslow Taylor published The Principles of Scientific Management and helped cement one of management’s oldest instincts. In simple terms, break work into measurable units, optimize…
Homebrew breaking git tab completion in zsh
GIT TAB COMPLETION in zsh suddenly stopped listing my aliases. No git ls, no git tags-ls – only built-in commands. Worse, commands beyond the most common ones lost their help descriptions…
IndieRails Podcast: The Conductor
I hopped on IndieRails with Jess and Jeremy (again). We covered a lot of ground in about 90 minutes. Quick business catch up and then dove into how AI has changed pretty much everything about how I…
Building AI Features in SwiftUI the Right Way
Over the past year, a lot of developers have experimented with adding AI to their apps.A chat interface here.A “Generate” button there.Maybe a summarisation feature bolted onto an…
Waiting for PostgreSQL 19 – Introduce the REPACK command
On 10th of March 2026, Álvaro Herrera committed patch: Introduce the REPACK command   REPACK absorbs the functionality of VACUUM FULL and CLUSTER in a single command. Because this functionality…
Bamboo Weekly #162: Spotify and car accidents (solution)
Get better at: Combining files, dates and times, grouping, joining, correlations, and plotting
Three Thoughts on Dark Code
A couple of weeks ago Dan Shapiro's blog post " The 5 Levels" (about Agentic Engineering) did the rounds. He coined Level 5 the "Dark Software Factory". So what comes out of those factories? I'm…
2026-12
Reviewing large changes with Jujutsu is a post by Ben Gesoff showing a workflow for reviewing big diffs and keeping track of what you’ve seen already.
★ AppleScript: ‘Save MarsEdit Document to Text File’
When something in your workflow is bugging you, you should figure out a way to address it. Why I didn’t write (and share) this script years ago is a mystery for the ages.
HIAL Guest Lecture
Today I gave a guest lecture for the course Human-interactive Agent Learning. I presented SHARPIE, our tool for controlled human-RL experiments. During the lecture, I showed how SHARPIE can be used…
Why I Code
Listen, I love building cool and useful things as much as the next person. You can look at my GitHub if you want proof. Building interesting things is why I got into programming in the first place.…