An introduction to the Kubernetes operator pattern.
A brief overview of IP addressing, with a focus on CIDR notation and an introduction to ipcalc.
A case study illustrating Terraform techniques for expressing moderately complex business logic.
Fetch the latest patch release of each of the latest 5 minor versions of Grafana
An introduction to Terraform provider development patterns
How can the aws-sdk be mocked using jest?
An introduction to leveraging multi-stage container image builds.
An introduction to using terraputs.
An introduction to using custom repository dispatch events to trigger GitHub Actions.
Leveraging concurrency in Go tests.
Automating Terraform plan analysis with Open Policy Agent
Terraform workspaces, their arguable advantages, and some thoughts on naming convention.
A brief, beginners' guide and cheat sheet to Unix file permissions.
An(other) introduction to Go concurrency, goroutines, and channels.
A technique for creating Go HTTP middleware.
A personal systemd overview and cheat sheet
How to develop and test Ansible roles with Molecule and Docker.
How to implement a custom Concourse resource type.
A brief intro to Go concurrency through channels and goroutines.
How to commit to a git repo from Concourse using the git resource.
How to avoid serializing an empty struct to JSON in Go?
How to verify a Docker image pull request in ConcourseCI.
How to use Ruby OptionParser in Rake
Authenticated downloads with Ansible
Debugging an exhausted Apache worker thread pool.
How to ensure the secure flag is present in your Apache-fronted Rails app's session cookies.
How to run a headless Firefox on Travis CI via Xvfb
An overview of my JSConf 2015 talk on headlessly testing against real web browsers.
How to ensure against persistant cookies and local storage data between installs of an nw.js app.
How to create a Windows app installer on the Mac OS command line using makensis.
A simple pattern for authoring integration tests for a Rails app.
A basic Ruby class example to illustrate a few of the language's features.
An overview of automated tests for the uninitiated.
A few NICAR 2013 highlights and reflections.
Some small shell scripts to automate manual gem downloads & uploads.
An overview of a small Ruby gem I built on Philadelphia's public geodata.
A quick tutorial in using a simple NPM module I built.
A beginner's tutorial in deploying a Node.js app to Heroku.
A technique for mocking HTTP requests in your Node.js tests.
CSS authoring can hurt. Compass abstracts away the pain.
Using Node.js's fork to write tests against a server.
Leveraging git in collecting team performance metrics. Management likes numbers.
My notes on getting postgres running on Mac OS via a homebrew installation.
My notes on Nichalas Zakas' Fluent 2012 talk.
A beginner's guide to deploying a Wordpress app to Pagodabox's cloud service.
Leveraging open data to track Philly lobbying efforts.
How to add new fields to an existing, Heroku-hosted Django project's database.
Some beginner's notes; collected for a recently-hired junior developer.
A simple how-to outlining the Github fork, branch, and PR workflow.
I wondered if it could be done; here's a quick and dirty technique.
My quick solution to a CSS challenge.
A controversial technique for writing unit tests against private methods.
An overview of a quick bash function I recently wrote.
A bash function for working around a Subversion annoyance.
My notes on using Vim's surround plugin.
An overview of a basic Wordpress theme I was tasked in creating.
A typeface I created in illustrator.
Some colleagues and I recently released ourphiladelphia.org.