Systems programmer. A decade-plus working on the parts of software most people ignore until they break: networking stacks, cryptography libraries, filesystems, kernel internals, hardware interfaces.

This blog is a record of things I have figured out, things I keep forgetting, and occasionally things I have an opinion about. The content splits into tutorials — deep dives into specific topics — and presentations from meetups and conferences.


The Wikipedia definition of engineer has always resonated more than most:

An engineer is a professional practitioner of engineering, concerned with applying scientific knowledge, mathematics, and ingenuity to develop solutions for technical, societal and commercial problems.

Operative phrase: applying knowledge to develop solutions. Not “implementing requirements.”


Started in embedded — bare-metal and RTOS on microcontrollers, building medical devices. Full range of tasks: from fixing broken board traces to adjusting UI on small LCDs. I preferred the soldering iron. Getting burned is less painful.

A research project on hydrodynamic modelling in CUDA followed. Operating continuously on 4D matrices does something permanent to how you think about memory layouts. The project died the slow death common to academic software. The spatial intuition stayed.

A detour through application development. Learned a lot about design patterns and server-side architecture. Wanted to leave. Left.

Systems programming since. Networking stacks, crypto, performance, filesystems. The rabbit holes are deep and mostly worth it.


Topics: operating systems, parallel and concurrent computing, low-level software, security and vulnerabilities, networking, cryptography, neural networks. Languages are a secondary concern — pick the right tool and move on.

Links below.