I'm currently open to new opportunities! View my resume or connect on LinkedIn.
279 posts

Using a local DNS namespace for local service discovery

I wanted to stop using IP addresses to access my homelab services, and I spent a Friday evening fixing that.

January 16, 2026 · 5 min · 876 words

Direction

Reflections on my career and where I want to go

January 8, 2026 · 1 min · 144 words
KOllector - KoReader Highlights Collector banner showing the application interface

KOllector - Publishing KOReader Highlights

How I built an application to merge KOReader highlights across devices and publish them.

December 7, 2025 · 7 min · 1467 words

gbt: branches touched in the last 24 hours

A tiny Fish function I use at Chatwoot to remind myself which Git branches I touched in the last day.

December 3, 2025 · 2 min · 290 words

A Soiree into Symbols in Ruby

A Pythonista opens `irb` and looks at all the symbols in Ruby. Or so the joke begins.

November 3, 2025 · 11 min · 2253 words

Some Smalltalk about Ruby Loops

Sending a message about why you shouldn't write `for` loops in Ruby.

October 20, 2025 · 12 min · 2446 words  · Updated: October 21, 2025

Ruby Blocks

How to start really getting Ruby, especially blocks.

October 14, 2025 · 6 min · 1234 words  · Updated: October 20, 2025

Returning from Ruby Blocks, Procs and Lambdas

How does `return` work within blocks, procs and lambda?

September 29, 2025 · 3 min · 548 words  · Updated: October 20, 2025

Ruby

How I started learning Ruby and Ruby on Rails in 2025 and what my experience has been like so far.

September 26, 2025 · 29 min · 6008 words  · Updated: October 20, 2025

OpenWRT

How I spent my week setting up multi-wan failover on OpenWRT on my Beelink EQI12

August 22, 2025 · 4 min · 757 words

Subscribe to Newsletter

Get the latest posts and insights delivered to your inbox.

Built using Picoletter.