At 2am during an outage, the answer is almost always on somebody’s blog: half-formatted, three years old, addressing the exact thing on fire. Twenty years in, I’ve written my share of those posts too, mostly on internal wikis nobody else can read. This is where I’m writing the public ones.
A real editor: VS Code for Python
So far in this series we set up the terminal and Homebrew , then installed Python with asdf and gave each project its own virtual environment . Now we need a place to actually write code. This is the one area where the book and I mostly agree, so this post is less about replacing its advice and more about finishing the job it starts. ...
Installing Python without touching the system Python
In the last post we set up the foundation: the terminal, the Command Line Tools, Homebrew, and a ~/projects folder for your code. No Python yet. This post installs it, and it’s where this series makes its first real departure from the book. Python Crash Course has you download Python from python.org and double-click an installer. That works, and if you’ve already done it, nothing here is going to break it. But it leaves you with a single Python wired into your whole machine, and no clean way to keep one project’s libraries from leaking into another. We’re going to install Python so that you control which version you’re running and so that every project gets its own isolated set of packages. It’s two tools doing two jobs, and once it’s in place you stop thinking about it. ...
Setting up a Mac to learn Python, the way you'd actually want to
I bought my dad a MacBook Air for Father’s Day. He joined Sun Microsystems in 1990 and spent two decades there writing Java, at the company that invented it, then moved to Oracle when it bought Sun in 2010. He retired in the summer of 2022. Thirty-two years, and he hasn’t really opened a computer since. The plan is to get him back into it with Python, using Eric Matthes’ Python Crash Course , which is the book I’d hand anyone starting today. There’s a small joke buried in that. Python Crash Course opens with a dedication: “For my father, who always made time to answer my questions about programming.” I’m running it backwards. ...
I reviewed the code. They wanted it deployed.
Is the work sample an audition? A take-home exercise asked me to review a junior engineer’s pull request the way a senior infrastructure engineer would. So that is what I did. I found the problems, explained why each one mattered, fixed them, added local tests across the stack and the CI pipeline the repo never had, and wrote the whole thing up like a real review. I ran out of time before I deployed it. The deploy was the part that scored. I did not get the job. I made a tactical error, and given the same exercise again I would deploy first and decorate later. The interesting part is not that I lost a point. It’s that the exercise and I disagreed about what it was for, and the exercise had the only vote that counted. ...
Twenty years in infrastructure, and the work doesn't look the same anymore
For the past couple of months I’ve been asking myself whether twenty years of experience still counts for anything, and how I’m supposed to describe my work on LinkedIn if AI is doing all the work. The engineers who don’t use AI aren’t helping. The ones who refuse to aren’t either. “Ask your robot friend.” “Is this AI slop?” “Looks vibe coded.” Each one is a way of saying the work doesn’t count because of how it got done. The shade is loud. The doubt is mine. So this post is me writing my way to an answer. ...
Recovering Terraform State, Eight Years Later
Back in 2017 I wrote about recovering orphaned Terraform state with the import command. That post is still up because the situation is still the same: somebody created infra without managing state, somebody else has to bring it back under control, and you’re the somebody else. What’s changed is the tooling. Three things, mostly. ...
Python Abort on MacOS Catalina
Yes. I upgraded to Catalina on the first day. ¯\_(ツ)_/¯ Now I’m trying to run a Python program and it’s exiting with Abort trap: 6. The crash report indicates the specific problem is with an OpenSSL dylib file… ...
Recovering Terraform State
This was written in 2017 when terraform import was the only option. The toolkit looks different now; see Recovering Terraform State, Eight Years Later for what I’d do today. Here’s the scenario… you have documented the steps for creating new infrastructure using Terraform including ensuring that state files are dealt with properly (remote in AWS S3). However, at some point those directions aren’t followed and you now have infrastructure that is orphaned with no state. What do you do? ...
Yet Another Tech Blog?!
Does the internet need another tech blog? No, probably not. However, I frequently lament doing a poor job documenting all the things I’ve figured out how to do over the years. Thus, I plan to make an effort to document those things here for all who find my methods sane to freely copy. ...