Something my dad never taught me: you remove the blockers. If you do what you have finished and make it not block the things you haven't finished, you end up getting more done.
Just like what I learned about chess a long time ago: keep playing. The more games you play, the more games you win. And if all you're counting is number of wins, then it's better to lose more, and faster. "Fail faster," they say. Well, that means fail. And fail. And fail. If you keep getting stuck, like I used to get stuck, then you don't fail—you don't get anywhere. Do what you can and keep moving.
That thought hit me around midnight. Here is the session that produced it, 8pm to 5:33am.
8pm: RustDesk, Headscale, and iTerm2 Badges
Sat down at 8pm to set up RustDesk and Headscale. Immediately got sidetracked by iTerm2 badges.
These things are insane. A badge is a big, faint text label that floats in the top-right corner of your terminal window, like a watermark. You set it per-profile or per-session. So if you have six tabs open, each one can say what it is: PROD, DEV, SHANNON-WORKER, whatever. It stays visible even when the terminal is full of output because it renders behind the text. You can use variables like \(session.name) to make them dynamic.
It is just very helpful for keeping me on task. I have a dozen terminals open at any given time and I SSH into the wrong server at least once a quarter. Now each tab tells me exactly where I am. I cannot believe I did not know about this sooner.
1:27am: Email and a New Server
Replaced [email protected] with [email protected] in the Claude in Chrome extension. Which means I need to set up DKIM, SPF, and the rest of the email authentication stack on the new server I just created.
2:10am: Hetzner CPX21
Set up a new Hetzner CPX21 (Ubuntu 24.04) in Ashburn for migrating Headscale, web redirects, and mail services. Configured basic security, and then came the big decision.
Replacing Apache2 with... not Nginx, but, wait for it... Caddy. Apparently that is a good application? Not sure how secure it is, but Gemini decided it is better than the things that have been around forever:
If you are running a monolithic, legacy web application serving tens of thousands of concurrent connections and you need absolute, bare-metal control over every millisecond of thread processing, Nginx is still king. Its performance ceiling is technically higher, and its module ecosystem is massive.
However, for modern microservices, reverse proxies, and personal infrastructure (like Headscale), Caddy is arguably more secure for the average administrator. Because it is written in a memory-safe language and removes the complex, error-prone manual configuration, your attack surface is drastically smaller.
Memory-safe language, automatic HTTPS, simpler config. For personal infrastructure it makes sense. I will report back if it breaks.
3:28am: DNS Migration
A bunch of time wasted. Now I need to go to Cloudflare and transfer all the URLs to the new server.
By 4:14am I was finally changing DNS records. Lost more time, but doing it now. CTDSU was straightforward: @ and www proxied to the DigitalOcean server, updated both to Hetzner.
simulation-pps was more interesting. jobapplicationserver.simulation-pps.com (probably a server I am using to check my job apps) and simulation-pps.com were both pointing to the DigitalOcean instance, but they did not have "Proxied" status in Cloudflare. I updated one and not the other, just to see if there was a reason they were DNS-only.
4:50am: Finally, Headscale
Finally setting up the thing I sat down to do at 8pm.
This is what I mean about removing blockers. The server setup, the DNS, the Caddy config, the email changes: all of those had to happen, but none of them needed to block each other. I could have parallelized more. Instead I got stuck in sequence.
5:33am: Gemini Pro Is Not Gemini Ultra
I thought the Headscale setup should take 20 minutes. I spent close to 1.5 hours just waiting for Google Gemini and pressing "yes, keep trying the fucking model I asked you to try." That is what happens when you only have a Pro subscription. I was used to Claude Max, but I do not have Gemini Ultra. The rate limits are real and they will eat your entire night if you let them.
Went to bed at 5:33am. Nine and a half hours. Most of it was moving infrastructure, some of it was waiting for AI models to respond, and the best part was a two-paragraph thought about chess at midnight.
Enjoyed this post?
Get notified when I publish something new. No spam, unsubscribe anytime.