Recent Posts

go

Go Concurrency Patterns

Essential Go concurrency patterns including goroutines, channels, mutexes, and common synchronization techniques.

go

Bitwise Operations in Go

Using bitwise operators in Go to manipulate individual flags within a single integer for compact state management.

go

Go Typed Nil

Why an interface holding a nil pointer is not itself nil in Go, and how typed nils can cause unexpected behavior.

Rust Smart Pointers

A reference guide to Rust's smart pointer types: Box, Rc, Arc, Cell, and RefCell, with usage notes and trade-offs.

Fix broken Vim Themes

A working solution for fixing broken Vim colour themes using Neovim, a proper terminal, and correct tmux configuration.

Developer Tools

An overview of my current developer toolchain including Ghostty, Neovim, Zsh, and a curated set of CLI utilities.

go

Go Style Guide

A personal Go style guide covering naming, error handling, interfaces, slice gotchas, and function design patterns.

GitHub Actions

A comprehensive guide to building CI/CD pipelines with GitHub Actions, covering workflows, jobs, steps, and reusable patterns.

vim

Advanced Vim topics, tips and tricks

A deep dive into powerful Vim features including macros, global commands, substitutions, quickfix lists, and autocomplete without plugins.

go

Reflection in Go

A practical walk-through of Go's reflect package using a real CLI flags library as the guiding example.

git

Git Internals

A deep dive into the .git directory, plumbing vs porcelain commands, and how git works under the hood.

Python 101: Context Managers

Understanding Python context managers: what they are, why they matter for resource cleanup, and how to implement them.

go

Go Arrays and Slices

A deep dive into how Go arrays and slices work, including memory layout, append behavior, and capacity gotchas.

New Laptop Configuration

Step-by-step guide for setting up a new macOS development environment with Homebrew, Git, Python, Go, Vim, and tmux.

Algorithms in Python

Implementations of merge sort, quick sort, binary search, BFS, DFS, and Dijkstra's algorithm in Python.

Remote Working

Lessons learned from years of remote working, covering routines, communication, impact, health, and building relationships.

Mocking in Python

A practical guide to mocking resources in Python tests using unittest.mock, covering decorators, patching, and common pitfalls.

Data Types and Data Structures

A high-level overview of scalar, composite, and abstract data types along with common data structures like arrays, linked lists, trees, and hash tables.

Engineer to Manager

A guide for software engineers considering the transition to engineering management, covering responsibilities, communication, and motivation.

Post Mortems

How to run effective blameless post-mortems, including scheduling, invitees, attitude, and a reusable template.

OpsBot: Operations Slackbot

Building a Slackbot for incident management that creates channels, auto-invites responders, and looks up service runbooks.

Interview Topics

Key topics and questions to cover when interviewing at a new company, from culture and process to tech stack and vision.

Go Reverse Proxy

Building a reverse proxy in Go using httputil.ReverseProxy, from simple single-origin to configurable multi-route setups.

Logging 101

A practical guide to application logging covering log levels, structured logging, and choosing between logs and metrics.

Profiling Python

Techniques and tools for profiling Python applications including timers, cProfile, line_profiler, memory_profiler, and pyflame.

Profiling Go

Techniques and tools for profiling Go applications including pprof, benchmarks, and memory management analysis.

Key Architecture

An overview of a layered personal security architecture using GPG keys, encrypted password stores, and SSH key management.

go

Hitchhikers Guide to Go

A comprehensive cheat sheet covering Go fundamentals, from types and control flow to concurrency and testing.

Syscalls and C

Explaining the difference between Linux system calls and C library wrapper functions, and where to find documentation for each.

Bits and Bytes

A tour through bits, bytes, RAM, base number systems, and binary encoding fundamentals for newcomers to computing.

Big O for Beginners

A gentle introduction to Big O notation covering logarithms, factorials, and how to reason about algorithm growth rates.

git

Git Merge Strategies

Explains the differences between git merge, rebase, and squash strategies with practical examples.

gRPC for Beginners

An introduction to Google's gRPC framework covering Protocol Buffers, service definitions, and building clients and servers.

Bash Watchtower

A simple Bash script that monitors web pages for failures and sends Slack notifications when endpoints return non-200 status codes.

go

Understanding Golang's Func Type

How Go's http.HandlerFunc adapter uses a func type to satisfy the Handler interface and enable flexible HTTP routing.

HTTP/2

A quick introduction to HTTP/2 covering persistent connections, multiplexing, header compression, and server push.

DNS 101

A comprehensive guide to how the Domain Name System works, covering IPv4, IPv6, DNS resolution, and record types.

GitHub Workflow

A team workflow for GitHub PRs using interactive rebase, squash commits, and cherry-pick merges.

Refactoring Techniques

A summarised reference of commonly used refactoring techniques distilled from Fowler and Beck's Refactoring books.

Basic Shell Scripting

A beginner-friendly guide to common unix shell commands and scripting fundamentals for everyday use.

Clean Coder

Key takeaways from Robert C. Martin's Clean Coder on professionalism, responsibility, testing, and time management.

Object Oriented Design

Distilled principles of good OO design from Sandi Metz covering dependencies, interfaces, duck typing, and inheritance.

git

Git Tips

A collection of useful Git commands and tips for everyday version control tasks.

JavaScript 101

A beginner-friendly introduction to JavaScript covering syntax, terminology, data types, and core language features.

css

Maintainable CSS with BEM

A quick introduction to writing maintainable CSS using the Block, Element, Modifier (BEM) naming convention.