New Job

I started a new job recently as a DevSecOps Engineer for a company in the financial services industry. The company is mature, the coworkers are great, and the work is exhilerating! I was overall happy with my old job, having worked my way into my dream role: DevOps Engineer. But as with any story where private equity is involved, the ending was swift, sudden, and shitty. The company I worked for was a bit of a unicorn, having entered a niche market at the right time and experienced explosive growth the whole time I worked there. I met many wonderful, intelligent, talented, compassionate, fun people, many of whom I will make an effort to stay in touch with. The collaborative environment and general good vibes were truly a rarity, and I grew so much during my tenure. ...

September 11, 2026 · 5 min · 989 words · me

Renovate Automation

Renovate Cloud ...

August 16, 2026 · 11 min · 2167 words · me

Centralized CI/CD Pipelines

I recently began centralizing my CI/CD pipelines in a Github repository named “PipelineTemplates”. For years, I have copied/pasted and slightly modified pipelines, workflows, and configurations between repositories. These pipelines handled tasks like linting and formatting my Python and Go code on PR open to the main branch, building/compiling code, creating Github tags and releases, deploying artifacts, and most of them were performing the same larger role, but in ways that were tailored to each individual repository. ...

August 3, 2026 · 12 min · 2398 words · me

Migration to Cloudflare Pages

I migrated my blog to Cloudflare Pages on August 2nd, 2026. It was originally hosted with Netlify, and while I think Netlify’s service is good and I don’t have any real complaints, the potential to run up my bill and get my site disabled until the next billing cycle is a motivator to try something else. This situation happened as I was setting up the CI/CD pipeline for deploying the blog, which I describe in the Blog Setup series: Choices Made post. ...

August 2, 2026 · 4 min · 727 words · me

200 Docker Compose Templates

I have been maintaining a git monorepo named docker_templates since sometime in 2023, and I recently added my 200th template (commit 7c112b7)! I thought back to 2015, when I started learning Docker and Docker Compose, and how transformative containers have been in the way I use my machines. There is something very satisfying about describing a runtime you want to work with and encapsulating everything you need to run an app or service the same way each time you run it, on any machine. In reality, there are some edge cases, but it’s a beautiful dream. ...

August 2, 2026 · 13 min · 2680 words · me

Leaving Google Photos

I have been using Google Photos to backup my pictures since it was released in May of 2015. The software works great, seamlessly backing up any picture or video I take on my phone and making it simple to share photos and albums with my friends. Like many people, I am trying to reduce my reliance on Google products. I have not gone as hard as some people, like the users of the DeGoogle subreddit, although I admire their efforts and agree with their philosophy. I have so, so many things tied to the Google/Gmail account I created in 2005. A younger me had no concept of being the product when a service is free, and I foolishly tied so much of my online life to my Gmail account. Extricating is a long, difficult process, and one I’m doing in baby steps. ...

July 19, 2026 · 13 min · 2560 words · me

Comparing backup solutions (why I picked Restic)

Having a good backup strategy is essential, especially when you host your own data. If you have not experienced the dread of realizing you’ve lost an important file, consider yourself lucky and keep reading to learn why you should have a backup strategy for your data. I have lost important data due to lack of sufficient backups a number of times in my life. It never gets any less devastating, but each time it’s happened I have inched closer to a sufficient backup strategy. ...

February 26, 2026 · 8 min · 1633 words · me

Blog Setup: Challenges

This post is part of a series: Blog Setup. I also faced some difficulties getting started with the blog. I spent way too much time creating the Github Action that deploys my content to Netlify. I failed so many times before getting it right, I exceeded Netlify’s free tier 🤡. Most of the difficulty actually came from the “extra” functionality with Lychee link checking and Vale linting. Although I was able to get both of these tools running well locally on my machine, I ran into challenges getting them to run in the pipeline. ...

February 25, 2026 · 4 min · 782 words · me

Blog Setup: Tools

This post is part of a series: Blog Setup. Tools I am using Mise to handle installing all of the tools I need to develop/build the blog. The .mise.toml file in the repository defines these tools, so I can simply clone the repository, install Mise, and run mise trust && mise install on a new machine to get up and running. Mise is also useful in container environments and CI/CD pipelines, it can ensure I’m installing the same tools in every environment, with version pinning for ones I want to control upgrades for like the hugo CLI. ...

February 22, 2026 · 2 min · 289 words · me

Blog Setup: Choices Made

This post is part of a series: Blog Setup. While setting up the blog I had to make a number of choices that affect the short and long term health of the blog. Deciding where and how to host the code and the static site, what tooling to add, how to structure the repository, etc. Git Forge Spoiler: I went with Github. I considered many options for where to host the source code for the blog. Github is an obvious frontrunner, partially becaause I am already active on Github, but also the network effect. While I don’t promote my blog, I also like the idea that I’m not just shouting into the void with my posts, and discoverability is best where the people are. ...

February 19, 2026 · 5 min · 1044 words · me