Blog
Terraform Patterns: the wrapper module
An overview of the Terraform wrapper module pattern.
Scalable Terraform Patterns: Reuse and Repeatability
An overview of native Terraform constructs enabling reuse and repeatability.
Scalable Terraform patterns: compound workspace names
My overview of the Terraform compound workspace name pattern.
Automated Terraform Plan Analysis With Terratest
How can terratest be used to automate Terraform plan analysis?
Unit Testing AWS S3 Downloads in Go
How can a function wrapping the aws-sdk-go be unit tested using a local directory serving as a mock AWS S3 bucket?
Using tfmigrate to Codify and Automate Terraform State Operations
A demo illustrating the use of `tfmigrate` for automating complex Terraform state operations.
Using the gh-dash gh CLI Extension to Manage GitHub Notifications
How I use the gh-dash gh CLI extension to manage GitHub notifications.
Notes on Implementing Backstage
Some notes on my experience implementing Backstage for a large engineering organization.
Extending the gh CLI with Go
Some introductory tips on building gh CLI extensions in Go.
What is the Kubernetes controller pattern?
An introduction to the Kubernetes controller pattern.
What is the Kubernetes Operator Pattern?
An introduction to the Kubernetes operator pattern.
IP addressing, Networks, Subnets, and CIDR
A brief overview of IP addressing, with a focus on CIDR notation and an introduction to ipcalc.
Advanced Terraform Logic
A case study illustrating Terraform techniques for expressing moderately complex business logic.
Collecting Paginated HTTP API Response Data Using JavaScript's async/await
Collect all pages of data from a paginated HTTP API in JavaScript using async/await.
Querying GitHub Release Data With gh and jq
Fetch the latest patch release of each of the latest 5 minor versions of Grafana
Terraform Provider Development Demystified
An introduction to Terraform provider development patterns
Mocking aws-sdk With Jest
How can the aws-sdk be mocked using jest?
Multi-stage Docker Builds
An introduction to leveraging multi-stage container image builds.
Transforming Terraform Output Values to Markdown with Terraputs
An introduction to using terraputs.
Triggering GitHub Actions From Outside of GitHub
An introduction to using custom repository dispatch events to trigger GitHub Actions.
Go Test Parallelization
Leveraging concurrency in Go tests.
Terraform Plan Validation With Open Policy Agent
Automating Terraform plan analysis with Open Policy Agent
Using Terraform workspaces
Terraform workspaces, their arguable advantages, and some thoughts on naming convention.
An Intro to Unix File Permissions
A brief, beginners' guide and cheat sheet to Unix file permissions.
Go Concurrency With Goroutines and Channels
An(other) introduction to Go concurrency, goroutines, and channels.
HTTP Middleware in Go with httptest.ResponseRecorder
A technique for creating Go HTTP middleware.
A systemd Cheat Sheet
A personal systemd overview and cheat sheet
Testing Ansible Roles With Docker-in-Docker
How to develop and test Ansible roles with Molecule and Docker.
How to Make a Concourse Resource Type
How to implement a custom Concourse resource type.
Channels in Go
A brief intro to Go concurrency through channels and goroutines.
Committing Via the Concourse Git Resource
How to commit to a git repo from Concourse using the git resource.
Serialize Empty Structs to JSON in Go
How to avoid serializing an empty struct to JSON in Go?
Using the ConcourseCI pull request resource to verify Docker builds
How to verify a Docker image pull request in ConcourseCI.
Using OptionParser in Rake
How to use Ruby OptionParser in Rake
Using wget over Ansible's get_url
Authenticated downloads with Ansible
Apache Persistent Connection Problems
Debugging an exhausted Apache worker thread pool.
Secure Session Cookie in Rails over HTTPS
How to ensure the secure flag is present in your Apache-fronted Rails app's session cookies.
How to Test Google Polymer elements on Travis CI
How to run a headless Firefox on Travis CI via Xvfb
JSConf 2015: Headless Testing Against Real Web Browsers
An overview of my JSConf 2015 talk on headlessly testing against real web browsers.
NW.js Chromium data-path
How to ensure against persistant cookies and local storage data between installs of an nw.js app.
Creating a Windows Installer for a node-webkit App on Mac OS
How to create a Windows app installer on the Mac OS command line using makensis.
All CSS Modal Dialogs
A simple example demonstrating all-CSS, no-JavaScript modal dialogs.
Rails API Integration Tests
A simple pattern for authoring integration tests for a Rails app.
A Simple Ruby Class Example
A basic Ruby class example to illustrate a few of the language's features.
Automated Tests: What, Why, How?
An overview of automated tests for the uninitiated.
Nicar 2013 Conference
A few NICAR 2013 highlights and reflections.
Using Google Spreadsheets and Tabletop.js as a Web Application Back-end
How to use Tabletop.js as your JavaScript app's datastore.
Streamlined Rails Gem Updates on Gem in a Box
Some small shell scripts to automate manual gem downloads & uploads.
Using the phl_geocode Ruby Gem
An overview of a small Ruby gem I built on Philadelphia's public geodata.
Using the civic-info Node.js Module to Get Voter and Election Info
A quick tutorial in using a simple NPM module I built.
Deploying an Express App to Heroku
A beginner's tutorial in deploying a Node.js app to Heroku.
Testing Node.js with Mocha, Expect.js, and Nock
A technique for mocking HTTP requests in your Node.js tests.
Icon Sprites with Compass
CSS authoring can hurt. Compass abstracts away the pain.
Using Mocha to Test a Node.js Server
Using Node.js's fork to write tests against a server.
Collecting Basic Team and Sprint Metrics with Git
Leveraging git in collecting team performance metrics. Management likes numbers.
Setting Up Postgres on Mac OSX with Homebrew
My notes on getting postgres running on Mac OS via a homebrew installation.
Fluent 2012 Notes: Nicholas Zakas on Maintainable JavaScript
My notes on Nichalas Zakas' Fluent 2012 talk.
Deploying Wordpress to Pagodabox
A beginner's guide to deploying a Wordpress app to Pagodabox's cloud service.
Lobbying.ph
Leveraging open data to track Philly lobbying efforts.
Using South on a Heroku-hosted Django Project
How to add new fields to an existing, Heroku-hosted Django project's database.
Basic Command Line Tools
Some beginner's notes; collected for a recently-hired junior developer.
How to Contribute to a Project on GitHub
A simple how-to outlining the Github fork, branch, and PR workflow.
CSS3: An All-CSS, Image-less Play Button
I wondered if it could be done; here's a quick and dirty technique.
CSS3: Using Transform to Make a Cube
My quick solution to a CSS challenge.
How to Make Testable Private Methods in JavaScript
A controversial technique for writing unit tests against private methods.
JavaScript Design Patterns
My notes on Addy Osmani's JavaScript design patterns ebook.
Simplified Find/Replace from the Command Line
An overview of a quick bash function I recently wrote.
How to Exclude Files from SVN Commits
A bash function for working around a Subversion annoyance.
Basic Overview of the Surround Plugin for Vim
My notes on using Vim's surround plugin.
Quiet Logger: HTML5 WordPress Theme
An overview of a basic Wordpress theme I was tasked in creating.
Hometown Typeface
A typeface I created in illustrator.
OurPhiladelphia.org Launched
Some colleagues and I recently released ourphiladelphia.org.