2024
Don't dismiss the statistically probable
How does Rust allocate a zeroed Vec and what does it cost?
A Rust object that survives program restart thanks to Rust allocators, systemd's file descriptor store, and syscall memfd_create.
2022
On Linux what can you turn into a file descriptor and then monitor with epoll?
How does Rust return values, and does it make any difference to us programmers?
When is the linear scan Two Sum solution faster than a map? What if we use AVX-512 instructions?
In Rust, what is the performance cost of using sync::Once after the initial setup?
In Rust, how does using a different primitive type (u8, i32, u64, ...) change the generated assembly?
Assembly: In all the world of the programmer, there is no more important output.
Can we make a Rust program that's as small as it's assembler equivalent?
Thanks to Address Space Layout Randomization you can use the address of a stack variable as a zero-cost random number.
Rust avoids memory copies by optimizing return value placement.
On x86 it doesn't really matter what sync::atomic::Ordering you choose.
Safety is boring, let's do pointer arithmetic.
Linux's epoll API solved the C10K problem, enabling fast and afforable Internet services.
2021
Minecraft has an API. If you run your own server you can program it from Python.
An adventure in CPU out-of-order instruction execution.
Rust's traits are a single concept that unifies interfaces, abstract classes, mix-ins, operator overloading, contraints on generics, and more.
2020
Just a normal day reversing linked lists on the whiteboard.
It will take longer to learn than most languages, the standard library is small so you'll need dependencies, and a lot of behavior is in traits.
In Go, what's the simplest possible way to put all your ad-hoc tools in one place?
In Go, how do you run several operations that might return an error, and return those errors at the end? Here's how I do it.
2019
Two days at PDX DevOpsDays, a gathering of system administrators who use version control, and write a lot of YAML.
2018
Making like Theseus in the WEBM/MATROSKA/EBML audio maze
Unraveling the magic of async/await: From callbacks to linear code.
Cultivating code: From seedling to flourishing software garden.
2016
"Unlock root-level ports without root privileges: A guide to systemd socket activation"
Embracing the future: A quick guide to systemd for modern daemon management.
2015
"Move fast and break things: A cautionary tale from Facebook's code quality woes."
Decrypt, inspect, and debug HTTPS traffic with mitmproxy and iptables.
OSCON: Where open source meets commerce and connections bloom.
"GopherCon 2015: Where infrastructure meets innovation and inclusivity"
Seamlessly bridging Go and C++: A practical guide to shared libraries.
Unleash Go's power: Create shared libraries for seamless language integration!
Diving deep: How to allocate memory without malloc in Linux assembly.
Maps vs. slices: Choose wisely for optimal performance.
Timeless wisdom for crafting better code: Essential software engineering practices.
Go's empty interface: Flexibility at a cost.
"Wisdom from the masters: Insights on software engineering and language design."
Diving deep into raw sockets and IP headers with Go: A technical exploration.
Streamline your software delivery process with automation and collaboration.
2014
Design for disaster: Building software that survives production chaos.
"Diving into the nitty-gritty of assembly: A programmer's adventure!"
"Unlock the power of Unix-style modular syncing and encryption."
Gophers gather for insightful talks on Go's best practices and innovations.
Diving Deep: Exploring Go's IP Layer Capabilities
Unlock the secrets of programming with these three essential reads!
2013
Uncover the hidden growth patterns of Go slices.
A keyboard love story: still typing after all these years.