July 19, 2026
Every senior engineer is a decade or so in the making, and AI just took that away. So far our fix is to hire people already senior, and skip any sort of growing. In an earlier post I argued that judgment takes a long time to build, and doesn’t churn with whatever flavor of the month framework is in fashion. Since then a harder question has been sitting in the back of my mind: where does the making happen now?
Read more →
July 11, 2026
I asked Claude Code to remind me about something the next day. One line, a throwaway request. The model reached for its memory system and started to write a new memory file plus an index entry, and a hook I keep on memory writes blocked it. The reminder ended up on my Kanban board instead, where it belongs. That beat is the whole architecture in miniature: the model wanted to append, the guard asked whether the fact deserved to exist as memory, and the answer was no.
Read more →
May 30, 2026
I wrote earlier about why I’m not buying Jira: a solo user can stand up a custom kanban board with an afternoon of AI help and skip the heavyweight tool. So I did. The speed was the least of it. What stuck with me afterward was how little of the work was mine, and which part of it was.
The reflex is to call it a ten-times multiplier and move on. But that credits the tool with something that was always mine.
Read more →
May 28, 2026
I built a Kanban board from scratch recently. I used a ZazenCodes devtool repo as the skeleton, let Claude Code do most of the typing, and the whole thing came together in a morning before work: a web UI for dragging cards around, an API behind it, a CLI for when I don’t want to open a browser. It fits my head exactly, because I shaped every column to fit my head. And sitting there looking at it, I had the obvious thought. Why would anyone ever buy Jira or Trello?
Read more →
May 6, 2026
Free plan limits that matter for a static blog:
- 500 builds/month (you’ll use maybe 20-30 if you post regularly)
- 1 concurrent build, 20-minute timeout (irrelevant for Hugo, which builds in under 2 seconds)
- 20,000 files per site (you have 10 posts; you’d need to write prolifically for a decade to approach this)
- 25MB max single file size
- 100 custom domains per project
In practice, none of these will ever touch you with a personal blog.
Read more →
July 31, 2016
Let’s Encrypt is a game changer for websites.
I thought it was a good idea when Let’s Encrypt introduced the notion of a free CA Authority making SSL more accessible to the public in early 2015. But, I didn’t delve deeper because I was already using sslmate to somewhat automate my certificate management. Then, as I was setting up a new domain, I noticed that Dreamhost was issuing free SSL for any domain, and I thought, “WHAT?? I want that!”
Read more →
August 3, 2014
GPG2 is a brilliant encryption tool, but so rarely used.
It’s not used mostly because it’s difficult to get buy-in from all the people with whom you want to securely communicate.
But if you use it and are lucky enough to find peers who use it as well, it’s a great boon for secure private communication and data storage.
Keep Your Master Key Safe
This is a key management technique I learned while working at UC Berkeley: Keep your master signing key away from your working keyring and use it only when you need it.
Read more →
August 2, 2014
Update 3/10/2016: Cipher list matches recommendations from https://wiki.mozilla.org/Security/Server_Side_TLS.
Update 5/29/2015: Modified cipher list for high security.
Update 12/9/2014: RC4 has been identified by SSL Labs as a weak point in SSL implementations so the example nginx configuration below now includes disabling of RC4 ciphers. This updated configuration means that the horribly outdated browsers IE6 on Windows XP and IE8 on Windows XP will no longer work with your site.
Also, please upgrade to the latest OpenSSL to ensure that TLS POODLE is mitigated via TLS_FALLBACK_SCSV downgrade attack prevention.
Read more →
May 25, 2014
Read more →
December 20, 2011
If you live in a terminal, you are likely using GNU Screen.
This is a pretty cool way to set a status bar at the bottom of your unix screen session. Add this to your screenrc file (one line):
[dennis@caffeinatedcode ~]% vim .screenrc
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"
Read more →