How to invoice Apple for App Store proceeds
If you're looking for the invoice generator, it is at the bottom of the article. Jump straight to the generator → Why won't my accountant accept Apple's App Store report? If you sell apps on the App…
Building GNOME Apps with Rust, Part 5: State and Signals
Clicking a sidebar row finally does something. Build a real Feed GObject, bind a list to a model, define a custom signal, and learn where state lives in a GTK Rust app — and why…
Bergen, by someone who lives here
I keep emailing this list to friends visiting Bergen, so here it is properly: the city the way I’d hand it to someone I know. I’ve wished I had it written down more than once. Bergen is small, wet,…
Ego Necromancy
What are hiveminds made of? Interconnected minds, obviously. Or is it more complicated than that? Are selves more than illusion — a mere cope for apes pretending to be human? Perhaps truly picking…
The Functional Analysis of DeepSeek-V4
The Functional Analysis of DeepSeek-V4: Bounding Operators at 1.6 Trillion Parameters When DeepSeek-V4 dropped, the immediate industry focus was on the replacement of Multi-head Latent Attention…
Optimizing for text-mode browsers
Here's how I finally optimized my site for viewing in w3m (a text-mode browser).
S-expressions the wrong way
S-expressions are attracted towards Lisp S-expressions give us that natural syntax for expressing nested hierarchical trees, and once our program is written as trees, it becomes tempting to let those…
Vim Classic 8.3.0 released
Following up on my earlier announcement that I was forking Vim, I’m happy to announce the first release of my fork today: Vim Classic 8.3.0.I have written a release announcement for vim-classic.org,…
It's always been the damn phone
Back in 2014, I was on a cruise with family (boomer parents, I don’t actually like cruises) - and I did not have my phone or internet access for 17 days. This was in the time when internet access out…
Chevrons Up Down Icon
Animated chevrons icon that morphs between up and down directions.
Introducing SwiftTUI
I’ve spent the last 8 months building a SwiftUI like engine that renders in the terminal. Today, I think it’s time for a reveal. Let me introduce you to SwiftTUI. Startup Like every project, it comes…
Don't mop the floor. Fix the leaky faucet.
Complexity is a choice. Simplicity is also a choice. Look for the root cause.
How to stream OpenTelemetry data to Iceberg and DuckLake with just DuckDB
Is duckdb all you need for storing and querying OTel? In a previous post about OpenTelemetry, parquet, and data lakehouses, I mentioned difficulties when you want to push lots of metrics, logs, or…
Keeping a Raspberry Pi Cluster Cool
Why temperature thresholds weren't enough, and how topology-aware automation improved thermal management in my cluster.
WeasyPrint v69 Has Been Released
WeasyPrint v69 has been released! Among the new features and bug fixes, the changelog contains important API changes and security information. ⚠️ If you use presentational hints and restrict CSS…
May Reading List
A collection of interesting things I've read in May.
Radical Builtins
This is my entry for the June 2026 Emacs Carnival Underappreciated Emacs Builtins. There is a lot of functionality in default vanilla Emacs that is certainly less talked about. I'm going to constrain…
Cognitive Debt
What cognitive debt is, whether it is scary, and how to manage it.
AI/LLM Resources
A curated collection of artificial intelligence and large language model resources, including Claude Code tools, plugins, MCP servers, spec-driven workflows and Ruby/Rails AI frameworks.
Eggs and Baskets
Running a microblog on Cloudflare and asking about competitors.
Elton John of celeries
An article from 2015 is making the rounds again because the internet has no new ideas and neither do we, that says Shakespeare (yes that Shakespeare) was quite possibly absolutely baked out of his…
New history books in May 2026
Here's the list from last month (history books published here in the UK in hardback): only nine but a wide range of topics. A couple I am curious about are: This Little World: A New History of…
Liquid Primitives: Building on a Stream
Notes from replacing runners, instructions, and implementations while keeping tests and behavior stable.
Go West, Nerd.
I have been constantly thinking about what it means for individuals and companies to be able to independently use AI models. Especially specific ones, ones where they are extremely personalized,…
Thoughts on Using AI for Creative Stuff
Reflections on where AI fits into creative work — and where it doesn't.
Fast Mode
Speed is not the reward for skill—it is the thing that builds it. Loop rate is the metric. When the cost of being wrong collapses, the whole logic of caution inverts. Swing.
Delegation Requires Confidence
An interesting side effect of working with AI agents for personal projects is they force you into professional workflows, even for solo and throwaway projects. Delegation requires confidence, and…
The 2026 DeFi Content Map: Every Platform Worth Publishing On
Every platform worth publishing DeFi content on in 2026 — ranked by actual utility. Parasite SEO tiers, Web3-native publishers, established crypto media, and the cross-posting stack that drives both…
Imagining the Instagram Recovery Exploit as a Multi-Agent Composition Issue
Over the past few days a reported account-recovery flaw let attackers take over Instagram accounts, including high-profile ones like the Obama White House account, by getting the Meta AI Support…
Most Infrastructure as Code Is Broken — and Reconciliation Is Only Half the Reason
Run terraform plan against infrastructure nobody has touched in a month and watch it propose changes. That drift is the absence of a reconciliation loop. But the missing loop is only half of why most…
Editing Text in-stream
A small helper to more easily edit files mid-stream
WWDC26 wishes
WWDC26 is just around the corner, and as always, it is the most exciting time of the year for Apple developers. Next week, Apple will show the future of its platforms, frameworks, and developer…
Brontosaurus: A Voice-Driven Generative AI Canvas
With additional thoughts on human-AI collaboration
Topographic Wallpaper
Fun with stylized maps. Inspired by Basic Apple Guy’s Topographic Amoeba wallpapers, I thought I’d try to find a way to create my own that contour places I’ve lived. I didn’t get anywhere close, but…
TUI Stability
Dear beta testers, I’ve just shipped the latest version of Terminal Click: TC v0.8.8. Recall that we are re-examining the basics to get us out of the beta and become a “fully grown”…
The SDLC Song Cycle: AI music about shipping software
Seven Gemini-generated tracks walk the software delivery lifecycle—from human sign-off to legacy maintenance—and now live on this blog with video, MP3s, and a persistent player.
Search Engine Optimization
SEO (search engine optimization) is a shitshow of wrong incentives: not good work / content / reputation counts but who can allocate most resources (money and time) to play the SEO game well (place…
Æon: Sound as a Function of Time
I always thought a purely functional audio engine would be cool and utterly stupid. Æon is that little toy. The whole engine is one pure function of time, built from small functions you chain…
4.88 Billion Tokens for $120 — Why I Stopped Using Frontier Models for Everything
Last month, I processed 4.88 billion tokens through an LLM. My bill: $120. If I had run the same workload on a famous frontier model, the minimum estimate would have been $4,900. On other frontier…
Travel anxiety
Another travel is coming, and my anxiety goes up. Ok, hello, my old friend, never liked you, but can live with you now. I don’t fear flights, I don’t have any other phobias connected to…
The failures your supervision tree calls “contained”
I built a static analyzer for OTP supervision trees and ran it over thirty-some well-known open-source Elixir projects. It found real cross-tree coupling in Livebook, TeslaMate, Teiserver, and…
Putting Code Under a Microscope: Wavelet-Based Context for LLMs
Every developer who has tried an AI coding tool is familiar with the problem of watching the model fumble with the codebase to find relevant sections to edit. Since it's not possible to load an…
QuickBooks Self-Employed is gone. Here's what I use instead.
I've watched this category long enough to see the pattern coming: you settle into a tool, and one day it changes underneath you and points you at a pricier version of the same subscription. That's…
Local AI Coding Assistant in Neovim in 2026 v3
How I extended the Pi agent framework with custom extensions for local models, git [worktrees](https://git-scm.com/docs/git-worktree), and Neovim integration.
Building a personal book library with NotebookLM and Claude Code
Ever since I started highlighting text on my Kindle, then my PocketBook, and also the old-fashioned way with pen and paper, I have been trying to store those highlights in my digital garden — which…
Seven years
In 2009, my father was diagnosed with kidney disease. He had to stop working. For the next ten years, we lived off his savings and some smart financial manoeuvring. I don’t think I fully understood…
Your friend at OpenAI
I’m joining OpenAI’s Developer Experience team to help grow and support the developer community.
Weather and Climate Websites
weather.gov — National Weather Service The official U.S. government weather site, operated by NOAA under the Department of Commerce. It provides local forecasts, graphical forecasts, aviation and…