Blog
When Threads Share Memory: Understanding Race Conditions and Atomics
Learn why multi-threaded programs break in subtle ways and how atomic operations fix them. A practical guide to race conditions, memory ordering, and Acquire/Release semantics.
On Software Complexity: Why Can't We Make Simple Software?
Exploring the challenges of software complexity and advocating for simplicity in design.
Write Your Own FIFO Queue: An Essential Data Structure for Modern Systems
Learn how to implement a queue data structure from scratch using circular buffers. Understand FIFO principles, constant-time operations, and why this pattern powers everything from audio processing to network packet handling. Code examples in Zig.
The Road Ahead: Why I'm Going All-In on Zig
This is a story about leaving the comfort of web development to tackle hard problems, find a new philosophy, and build software that lasts.
Angular Signals: Building a Reactive Countdown Timer
A comprehensive tutorial for experienced Angular developers to learn Angular Signals and their practical applications.
Node.js Performance: Processing 14GB Files 78% Faster with Buffer Optimization
Learn how to optimize Node.js for processing large files: 14GB of data processed 78% faster using buffer streaming, byte-level parsing, and hash-based lookups. Complete guide with benchmarks, profiling insights, and code examples for handling 1 billion rows efficiently.
Working with Strings in Zig: A Comprehensive Guide
Learn how to work with strings in Zig: slicing, formatting, Unicode handling, memory allocation, and C interoperability. A practical reference for Zig developers.
Building React Apps with Bun: A Modern Development Experience
Learn how to build React applications using Bun's fast runtime and built-in tooling. Create a blog app with TailwindCSS and discover the developer experience.
MCP/Tools Are Not REST API: Here's a Better Design
MCP/tools are sometimes designed like REST APIs. I'll show you how to design better tools for AI agents and models.