Writing

Pi is Vim for Agentic Coding

What I love about Vim is its simplicity. Yes, I’m serious. Everyone jokes about being unable to quit the editor, and about the steep learning curve, but I re...

The Golden Age of Copy-Paste

I’ve been copy-pasting a lot of code recently. Not in the copy-from-stack-overflow-without-understanding-what-it-does kind of way, but in the deliberate, thi...

Custom Walker Menus with Lua

When I switched to Wayland early this year, I had to wave goodbye to my trusty Rofi and find a new application launcher. Enter Walker - a fast, customizable ...

One Version to Rule Them All

Managing different tools in your modern Ruby on Rails application can be a pain. You definitely use Ruby. You probably use Node, and some package manager - n...

Ruby on Rails, Claude Code and Worktrees

Here’s how I use Claude Code to develop Ruby on Rails applications. Mostly medium sized ones that have been around for a while. No green-field, everything-is...

Multi Select with Hotwire Combobox

Recently, I put some work into lowering the barrier to contributing talks to RubyEvents. Not entirely out of the kindness of my heart, I might add. As the or...

Customizing Solr Highlighting with Sunspot

Need full-text text search in your web app? You don’t have to use Elasticsearch. There are alternatives. Even in 2025, some will refuse to switch to Elastics...

Porting a Ruby Gem to the browser with ruby.wasm

When I built a small Ruby command-line tool - Tints ‘N Shades - I wondered: What does it take to run this library in the browser? Can it be done? Should it b...

Using Jekyll with Esbuild

I know. What an unholy union. Why would anyone do this? Why would anyone want that?