Recent Articles

What is a Script "Shebang"?
What is a Script "Shebang"?
Nov 25, 2025 · 5 min read

No, it's not a Ricky Martin song.


Defensive Shell Scripting with Shell Options
Defensive Shell Scripting with Shell Options
Nov 24, 2025 · 10 min read

Unlike typical programming languages, Bash doesn't terminate when it encounters a variety of exceptions.


white concrete building under blue sky during daytime
Be an Engineer Who Invites Collaboration
Nov 23, 2025 · 7 min read

I don't care if you're a 10x engineer, I care if we can build great things together.


a close-up of a computer screen
One, Few, or Many: A Guide to Rapid Impact Assessment
Nov 22, 2025 · 3 min read

Stakeholders love this one simple trick.


Querying MySQL Row Counts the Fast Way
Querying MySQL Row Counts the Fast Way
Oct 5, 2025 · 7 min read

SELECT COUNT(*) requires an expensive full index scan, which probably isn't what you want.


Installing Old Homebrew Cask Versions
Installing Old Homebrew Cask Versions
Oct 4, 2025 · 5 min read

Homebrew makes it very difficult to install older versions of a cask.


Pin Your GitHub Actions to Protect Against Supply Chain Attacks
Pin Your GitHub Actions to Protect Against Supply Chain Attacks
Aug 23, 2025 · 5 min read

Pinning third-party GitHub Actions to a commit SHA helps protect you against supply chain attacks.


Installing Old Homebrew Formula Versions
Installing Old Homebrew Formula Versions
Aug 13, 2025 · 5 min read

Homebrew makes it very difficult to install older versions of a formula.


a statue of a person sitting on a chair in front of a desk
I Don't Want to Have to Think About It
Jul 26, 2025 · 6 min read

I spent a substantial amount of time in the first half of 2025 ensuring that I don't have to think about microservices my team owns that have a low rate of change.


Resetting the Working Directory on Shell Function Exit
Resetting the Working Directory on Shell Function Exit
Jul 24, 2025 · 3 min read

Sometimes you need to change the working directory in a shell function. You should take care to reset it back after.


Copying Changes Between Git Clones
Copying Changes Between Git Clones
Jul 23, 2025 · 3 min read

How to copy uncommitted changes from one clone to another of the same repository.


Discussion Guide: The Pragmatic Programmer, 20th Anniversary Edition
Discussion Guide: The Pragmatic Programmer, 20th Anniversary Edition
Mar 26, 2025 · 7 min read

A guide with discussion prompts for David Thomas and Andrew Hunt's The Pragmatic Programmer, 20th Anniversary Edition.