Create a self-hosted chat service with your own Matrix server
A speed-run introduction to Matrix via Dendrite.
Deceptively simple search-and-replace across multiple files
How to interactively search-and-replace across many files with just two commands, thanks to Vim.
Look mom, I'm a GitHub Action Hero
The GitHub blog interviews me for their GitHub Action Hero series.
Command line tricks for managing your messy open source repository
A handy toolbox for the terminal to help open source maintainers make their projects sparkle.
The surprisingly difficult task of printing newlines in a terminal
Your guide to string interpolation quirks that confound the best of us.
Bash and shell expansions: lazy list-making
A tour of brace expansion, shell parameter expansions, and playing with substrings in Bash.
A cron job that could save you from a ransomware attack
How a simple scheduled job can help you quickly recover from ransomware.
A lightweight, tool-agnostic CI/CD flow with GitHub Actions
How to take advantage of a simple GitHub Actions workflow without sacrificing agnostic tooling.
A portable Makefile for continuous delivery with Hugo and GitHub Pages
My Makefile for building this site, optimizing images, and running my CI/CD GitHub Actions flow.
How to quickly batch resize, compress, and convert images with a Bash one-liner
A fast command line interface solution for batch image processing.