Blog
2026
- Rethinking simplicity in the age of AI
- The favicon survived the web
- AI will not stop at simple work
- The hard way has changed
- Programming experience is no longer a moat
- I built Flag Click
- The artificial programmer
- Stick with defaults
- The magic of typing terminal commands
- AI will help you climb the wrong ladder faster
- Less decoration, more communication
- What 2026 yields (announcing Telesink)
2025
- How to self-host Bearlytics with Kamal
- I'm back to Open Source
- English is a poor language for programming with AI
- AI amplifies programmers, not replaces them
- A mere add_foreign_key can wipe out your whole Rails+SQLite production table
- Why do software developers love complexity?
- I'm a proud CRUD monkey
- Not everything needs an update
- AI will take your job (and your boss’s job too)
- I vibe-coded Tech Debt: a game written in pure HTML/CSS/JS
- Your idea probably sucks
- How the pay-once business model saved my *aaS
- Learn to code, ignore AI, then use AI to code even better
- You know how it ends
- OKLCH CSS variables for Tailwind v4 colors
- The vertical bar (|) is the best HTML page title separator
2024
- How to build a dropdown menu with just HTML
- Hyperlinks existed before the web
- How Counter-Strike introduced me to the world of programming
- How to self-host Plausible Analytics with Kamal
- There's no place for Test-Driven Development (TDD)
- Why does target="_blank" have an underscore in front?
- Writing software is like spreading butter on bread
- Notes from the Opening Keynote by David Heinemeier Hansson at Rails World 2024
- How to add Mission Control to your Rails app and protect it with Basic Auth
- I built a flag-matching game in 6 days
- How to build and deploy a Telegram bot with Kamal
- Cloudflare Tunnel: a free ngrok alternative for exposing local Rails apps to the internet
- Coffee World Rush: a leaderboard for coffee drinkers all around the world
- I built a word-matching game called Matcharoo
- Using Overmind with Foreman as a fallback for Rails 7.1+ apps
- How to generate sitemap.xml for your Rails 7.1+ app with Kamal
- How to enable the Traefik dashboard in a Rails 7.1 app deployed with Kamal
- How to opt out of the cache with Hotwire's Turbo Drive in Rails
- Making PostgreSQL work with Kamal and a new Rails 7.1 app
- How to run your Turbo Native Android app on a physical device locally
2023
2018
2015
2014
2013
- JavaScript eval tricks
- Ruby eval tricks
- Various ways to count digits in a Ruby integer
- Blocks in Ruby are always there
- How to safely enter passwords in a terminal
- How to say “I love you” in Ruby
- Pulling through a Ruby exception
- Difference between frozen Ruby objects across versions
- So what is “binding.pry” exactly?