Things I Wrote
A Purist's Guide to Type-Driven Design
Using the Go type system to make invalid states unrepresentable.
Enums: Rust Objects of Unusual Size
Learn how Rust compiler optimizations make enums more efficient.
7 Tips to Mentor Junior Developers More Effectively
Upgrade your engineering management with advice for growing junior developers into all-star seniors.
Logfusc: Surefire Secret Redaction for Logs and Traces
Make your secrets unloggable with logfusc, a Go library that makes redacting sensitive data from logs and traces simple.
Writing Parallel Parameterized Tests with Kotlin and JUnit 5
Learn how to supercharge your Kotlin test suite without using @JvmStatic or companion objects.
How to Write Atomic Repositories
Learn how to bundle business logic and database operations into atomic units, without leaking transactions into your domain model.
Things I Made
You're currently enjoying a Next.js application configured to use TypeScript and Tailwind! It's running on Vercel and hooked up to Sanity and SendGrid.
Ever wondered what a loosely coupled, maintable Go application looks like? Wonder no more. Here's a fully tested implementation of the RealWorld spec built using Hexagonal Architecture and fluent, type-driven design.
A collection of BSD command-line applications that I translated to Rust while assessing the Clap crate for a professional project. Inspired by Ken Youens-Clark's Command-Line Rust.
Behold the limited power of a single CPU core performing an uncomfortable amount of computational geometry! This exercise in the mathematical foundations of 3D rendering loads models from .obj files and renders them with perspective-correct textures.
A concurrent, non-blocking, composing template cache showcasing advanced usage of goroutines and channels.
Things I Said
Type-driven design is a powerful technique for making invalid states unrepresentable. In this talk, you'll learn how to write robust, type-driven Go that protects your applications from Byzantine failure modes.
Go's concurrency model uses communicating sequential processes (CSPs) to avoid shared memory, but its channel primitives offer footguns aplenty. Get Go-ing safely with my tech talk on essential concurrency patterns.
You'd like to know how your Rails applications are performing without increasing the noise in your codebase. Here I present a simple pattern that keeps lines of instrumentation to a minimum.
So you have a Go service running in production, and you'd like it to keep running. Try these techniques for running stable production systems in Go.