All blog posts
No JavaScript. Just good old HTTP and HTML working together.
Moving away from Google services, 8 years in (2021-07-28)
Self-hosted LAN-only services FTW!
Using a Canon DSLR as a webcam with Debian/Ubuntu (2021-01-04)
No EOS Webcam Utility on Linux? No problem!
Simplify, batch, and cache.
Monitoring a grain dryer via the Internet (2020-11-08)
Agriculture meets static IPs and cellular APNs.
Turning my smartphone into a boring tool (2020-11-03)
Tools do their job then get out of the way.
Cut through the noise and identify what's important.
Making server response times 4x faster than before.
Two Ruby apps, same code, different output (2020-08-13)
Debugging a weird Ruby string sorting issue with GDB.
Welcoming newcomers with high-quality, high-context code comments.
Setting up your own digital garden with Jekyll (2020-05-20)
Carve out your own space where you'll seed, cross-pollinate, and grow ideas.
Why I still use a ThinkPad X220 in 2021 (2019-11-24)
Extensibility, compatibility, and reliability.
On sleepiness, activation energy, and flow (2019-09-30)
Parallels between chemistry and the human mind.
I didn't know any better (2019-02-28)
A security horror story starring 11-year-old me... and Flash.
Inspecting a “USB Drop” Attack Using olevba.py (2017-04-07)
Or, "why you shouldn't pick up random USB keys".
Seriously, who's that guy, and how is he committing to my repository?
That's it: you reached the end of this list. :)