The Software Engineering Identity Crisis
Many of us became software engineers because we found our identity in building things. Not managing things. Not overseeing things. Building things. With our own hands, our own minds, our own code. But that identity is being challenged. AI coding assistants aren’t just changing how we write software - they’re…
An update on Dart macros and data serialization
We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…
Fifty Shades of OOP
This post talks about the many different aspects under the umbrella term OOP
WASM GC isn't ready for realtime graphics
Wasm GC is a wonderful thing that is now available in all major web browsers since slowpoke Safari/WebKit finally shipped it in December. It provides a hierarchy of heap allocated reference types and a set of instructions to operate on them. Wasm GC enables managed memory languages to take advantage of the advanced…
Cutting down Rust compile times from 30 to 2 minutes with one thousand crates
How we split Feldera into a thousand crates to use every core rustc can get, cutting compile times from 30 minutes to 2.
Python Workers redux: fast cold starts, packages, and a uv-first workflow
Recent advancements in Cloudflare Python Workers means fast cold starts, comprehensive package support, and a great developer experience. We explain how they were achieved and show how Python can be used to build serverless applications on Cloudflare.
Don't tug on that, you never know what it might be attached to (2016)
From the highly eclectic blog of Mark Dominus
Structured Errors in Go (2022)
Bridge the gap between structured logging and errors in Go
Implementing a Forth
(Image of "Four-Armed Chuck" programming a PDP-11 is from my giant write-up of Forth .)
Using Vectorize to build an unreasonably good search engine in 160 lines of code
PartyKit now includes a vector database and access to an embedding model. Here’s a guide on how to use them to build a search engine.
The case of the UI thread that hung in a kernel call
I did tell you not to do that.
Experimental Tauri Verso Integration
The cross-platform app building toolkit
Compilers: Incrementally and Extensibly (2024)
The materials for the course on compilers: built incrementally and fully in tagless-final style
Guitar chord karaoke with Vamp, Chordino, and FFmpeg (2022)
A proof-of-concept using Vamp, Chordino, ImageSharp and ffmpeg to add live guitar chord charts to karaoke videos
Monte Carlo Crash Course: Quasi-Monte Carlo
We’ve learned how to define and apply Monte Carlo integration—fundamentally, it’s the only tool we need. In the remaining chapters, we’ll explore ways to reduce variance and successfully sample difficult distributions.
Microservices should form a polytree
Microservices work best as a polytree with clear dependencies and no cycles. Learn how this structure reduces complexity and makes systems easier to scale and maintain.
Comparison of C/POSIX standard library implementations for Linux
The table below and notes which follow are a comparison of some of the different standard library implementations available for Linux, with a particular focus on the balance between feature-richness and bloat. I have tried to be fair and objective, but as I am the author of musl , that may have influenced my choice of…
RustAssistant: Using LLMs to Fix Compilation Errors in Rust Code
The Rust programming language, with its safety guarantees, has established itself as a viable choice for low-level systems programming language over the traditional, unsafe alternatives like C/C++. These guarantees come from a strong ownership-based type system, as well as primitive support for features like closures…
Get an AI code review in 10 seconds
Personal Musings and Transcripts
The current state of TLA⁺ development
The 2025 TLA⁺ Community Event was held last week on May 4th at McMaster University in Hamilton, Ontario, Canada. It was a satellite event to ETAPS 2025, which I also attended, and plan to write about in the near future. I gave a talk somewhat-hucksterishly titled It’s never been easier to write TLA⁺ tooling! which I…
Partially Matching Zig Enums
A short post about a neat little Zig idiom. Consider your average {sum type, variant, tagged union, enum, alt}:
Dangerous advice for software engineers
I’m a big fan of “sharp tools”. These are tools that are powerful enough to be hugely helpful or harmful, depending on how they’re used. Most forms of direct…
How memory maps (mmap) deliver faster file access in Go
Learn how memory maps (mmap) accelerate file I/O, reduce latency, and improve app performance in Unix and Go with real-world benchmarks.
Baffled by generational garbage collection – wingolog
wingolog: article: baffled by generational garbage collection
Hard Mode Rust (2022)
This post is a case study of writing a Rust application using only minimal, artificially constrained API (eg, no dynamic memory allocation). It assumes a fair bit of familiarity with the language.
Claude Code vs. Codex: I built a sentiment dashboard from Reddit comments
I scraped hundreds of Reddit comments that compare Claude Code and Codex, and used Claude Haiku to build a sentiment analysis dashboard. The dashboard and my interpretations are shared here.
De Bruijn notation, and why it's useful
At least a familiarity with the lambda calculus, including how it is evaluated. Some base knowledge of programming languages is also assumed.
Layered Design in Go
This post will describe how I design my programs in Go. I needed this for work, and while I searched for a link, nothing quite fits my coding practices out there. The word “Layered” can pull up some fairly close descriptions, but I want to lay out what I do.