Aaron Riekenberg’s Blog

Software Engineer | Performance Enthusiast

Life at 1Gbps

Last summer we got 1Gbps internet access when fiber finally came to our curb. Symmetric 1Gbps down/up is a significant upgrade from the old 400/10Mbps cable connection for about the same cost. As a small test, I did the below download on my home linux box using wcurl. This downloads a 773 MiB ISO image file from the local Cloudlfare POP in MSP. Here the file was already cached at Cloudflare. It downloads at 85.6 MiB per second over a single HTTP/2 TCP connection, this is finished in 9 seconds: ...

January 4, 2026 · 2 min · Aaron Riekenberg

Unsafe Strings

What does the below C++ program do? #include <iostream> #include <memory> #include <string> void someFunction( const std::string& name ) { static const std::string* pCachedName = nullptr; if (pCachedName == nullptr) { pCachedName = &name; std::cout << "in someFunction set pCachedName to value: " << *pCachedName << std::endl; } else { std::cout << "in someFunction pCachedName has value: " << *pCachedName << std::endl; } } int main() { std::shared_ptr<std::string> name; name.reset(new std::string("alice")); std::cout << "before someFunction name = '" << *name << "'" << std::endl; someFunction(*name); name.reset(new std::string("bob")); someFunction(*name); std::cout << "after someFunction name = '" << *name << "'" << std::endl; return 0; } name is declared in main as a std::shared_ptr to a string. We pass name as a constant reference to someFunction assuming we do not need to worry about it being mutated or stored. ...

May 16, 2025 · 2 min · Aaron Riekenberg

I Like Go

I like Go. It is definitely not perfect but there is much to like. Let me count some things I like: Simplicity and Correctness Go values simplicity and correctness, both for the language itself and its tooling. Unlike many other languages where choices of build tools, networking, threading models, memory management, and event loops are up to the user, Go takes the opposite route. Go has one simple, high-quality way to do things. ...

May 4, 2025 · 5 min · Aaron Riekenberg

Parsing JSON Logs With Python

It’s 2025 and you find yourself using Caddy as the home webserver. One nice feature of Caddy is structured logging. Caddy’s access logs include all request/response headers and fields as newline-delimited JSON. This is a bit mind-blowing coming from something like nginx or Apache’s Common Log Format from 3 decades ago. Structured logs are great when loaded into ELK to automatically parse and index fields. But what to do at home where there is no ELK, and I want to know simple things like: ...

April 19, 2025 · 2 min · Aaron Riekenberg

Too Many Words

I like this quote: I would have written a shorter letter, but I did not have the time. I thought this was from Mark Twain, but originally seems to be from Blaise Pascal in Lettres Provinciales. When writing English my first drafts usually have too many words. With effort I can revise and make it concise. A rough metric for me seems to be removing half of my original words (no joke). ...

April 12, 2025 · 1 min · Aaron Riekenberg