- 2025
- Continuations 2025/52: Do what you love
- Continuations 2025/51: Break ground
- Continuations 2025/50: Egregious hack
- Continuations 2025/49: Fit of procrastivity
- Continuations 2025/48: More conversational
- Continuations 2025/47: Everything is a guide
- Continuations, 2025/46: Hanami 2.3!
- Continuations, 2025/45: Releasemas eve
- Continuations, 2025/44: Resourceful return
- Continuations, 2025/43: Countdown continues
- Continuations, 2025/42: Easy breezy
- Continuations, 2025/41: Longstanding issues
- Continuations, 2025/40: Popping off
- Continuations, 2025/39: Momentum building
- Per-slice sessions in Hanami
- Continuations, 2025/38: Tutorial style
- Rodauth, meet Hanami
- Continuations, 2025/37: App land
- Continuations, 2025/36: Tone and tenor
- Join me at thoughtbot’s Open Summit!
- Continuations, 2025/35: Long game
- Continuations, 2025/34: Tangible reminders
- Catch you at Baltic Ruby
- Recently on Hanami, April 2025: One hojillion emails
- Goodbye Pinboard, hello Linkding! (And the magic of getting here)
- Look at all the things I’m not writing
- On the Dead Code podcast
- New chapters for 2025
- Hire me!
- Auto-generating frozen_string_literal comments with RuboCop
- 2024
- 2024 in review
- My favourite Ruby 3.4 improvements
- Tim in open source, September 2024
- Tim in open source, July 2024
- 2023 in review
- 2023
- Open source status update, September 2023
- Open source status update, August 2023
- Open source status update, October 2022–July 2023
- 2022
- Open source status update, September 2022
- Open source status update, August 2022
- Open source status update, May–July 2022
- Joining Buildkite, and sticking with Ruby
- Open source status update, April 2022
- Two years of open source status updates
- Don’t mutate what you don’t own
- Open source status update, March 2022
- Let the shape of the code reflect its flow
- Salubrious Ruby
- Open source status update, February 2022
- Open source status update, December 2021 and January 2022
- 2021
- Open source status update, November 2021
- Open source status update, October 2021
- Open source status update, September 2021
- Open source status update, July and August 2021
- Open source status update, June 2021
- Open source status update, May 2021
- Open source status update, March and April 2021
- Open source status update, February 2021
- Open source status update, January 2021
- Open source status update, December 2020
- 2020 in review
- 2020
- Open source status update, November 2020
- Open source status update, October 2020
- Open source status update, September 2020
- Open source status update, August 2020
- Open source status update, July 2020
- Philly.rb talk on hanami-view 2.0
- Open source status update, June 2020
- Rubyists, we must do better
- Open source status update, May 2020
- Sponsor me on GitHub
- Interviewed on GitHub’s “Open Source Friday” video series
- Sharing my Hanami 2 application template
- Open source status update, April 2020
- Open source status update, March 2020
- 2019
- Speaking at RubyConf Thailand
- Podcast interview: Remote Ruby
- Talking “Views, from the top”
- dry-view 0.6.0, an introductory talk, and plans for 1.0
- 2018
- Speaking at RubyConf AU 2019
- 2017
- Talking functional architecture at RedDotRubyConf
- Icelab talks at RubyConf AU 2017
- A Rodakase retrospective: 1 year of dry-rb in production
- 2016 in review
- 2016
- Announcing Decaf Sucks 2.0
- Next-generation Ruby web apps with dry-rb, rom-rb, and Roda: RedDotRubyConf 2016
- Conversational rom-rb, part 2: types, associations, and update commands
- A conversational introduction to rom-rb
- Put HTTP in its place with Roda
- A change-positive Ruby web application architecture
- Better code with an inversion of control container
- Effective Ruby dependency injection at scale
- Functional command objects in Ruby
- Inactive records: the value objects your app deserves
- My past and future Ruby
- 2014
- New podcasts
- Our Problem with Boxen
- 2013
- Decaf Sucks 2: A New Old Design
- Decaf Sucks 2: Starting Over
- Decaf Sucks 2 Is Coming, 2 Hours at a Time
- Sneaking Into the Everyday
- Levelling Up With AngularJS: Building a Reusable Click to Edit Directive
- Two i’s
- Things Get Fuzzy Fast: Examine Your Day So You Can Learn From It
- A Manageable Multi-Database Redis Development Setup
- There is No Lab
- Click to Edit with AngularJS
- Announcing Decaf Sucks 1.1
- My Boring Adventure
- 2012 in Review
- 2012
- Out My Window
- From a Good Idea and Persistence Came Sneakers
- Lost Cities for iOS
- Fast Downscaling of Retina OS X Screenshots
- Saying Goodbye, Keeping Your Team
- Moved to Hong Kong
- RubyMotion & Rails Responders at the Canberra Ruby Crew
- Icelab Singapore and RedDotRubyConf 2012
- Wrapping Rack Middleware to Exclude Certain URLs (For Rails Streaming Responses)
- The Darker Side of Software Development
- Money, Stress and The Cloud
- Did you in-app purchase anything from the minibar, sir?
- A Feeling of Lightness
- Derek Sivers on Doing Business
- For the Love of Fika
- Export Trajectory Stories to CSV
- Roxette in Hong Kong
- Shawn Blanc on Benjamin Franklin’s Daily Schedule
- Swipe to Go Back
- A Precious Hour
- A Webstock 2012 Recap
- Announcing gentlyremind.me
- Be More Than Your NDA
- 500 Words before 8am
- Customising ActiveRecord’s attribute formatting on inspect
- Render Single-Line Markdown Text with Redcarpet
- New Relic, Heroku and Rails Streaming Responses
- 2011 in Review
- 2011
- Decaf Sucks Launch Countdown: A Restrospective
- Dispatch’s First Birthday
- Moving to the Philippines
- Announcing Decaf Sucks for iPhone
- Decaf Sucks Launch Countdown: Development Complete!
- Decaf Sucks Launch Countdown: Un-Designing the App
- Decaf Sucks Launch Countdown: Finishing the API
- Decaf Sucks Launch Countdown: Getting to Work
- Decaf Sucks Launch Countdown: Starting Again, Again
- RailsCamp 9
- Run Your Own Piece of Heroku with Foreman
- What’s New With Decaf Sucks
- Canberra’s Best Coffee
- Put Your Mac to Sleep With a Backup
- The Benefits of Waking Up Early
- Useful Heroku-Friendly Rewrites with rack-rewrite
- New site
- Embrace the Metaclass and Extend Your ActiveModels
- FactoryGirl and has_many associations
- Taking the pain out of save_and_open_page
- TaskPaper and To-Do List Bankruptcy Without the Trauma
- Dispatch #2: Your Coffee, Faster
- 2010 in Review
- 2010
- Wishing You a Happy, Caffeinated Christmas
- Announcing Dispatch, From Decaf Sucks
- Welcome to the OmniSocial
- Decaf Sucks First Birthday Updates
- Easy server backups to Amazon S3 with duplicity
- JavaScript Testing with Cucumber and Capybara
- Rails Label Helpers with Blocks
- BarCamp Canberra 2010 and an Introduction to Sinatra
- Making Your Capistrano Recipe Book
- 2009 in a Few Lists
- 2009
- The Atomic Shell Script
- Complex Nested Forms with Rails and Unobtrusive jQuery
- Decaf Sucks, and a Rails Rumble Redux
- Show Me the Page!
- Machinist and Paperclip
- Fast GitHub Clone Bash Function Using the OS X Clipboard
- Thinking Sphinx RSpec Matchers
- Using RSpec Ordered Message Expectations to Tighten your Specs
- De-@wip Your Cucumber Stories
- Rails Templates as the New Geek Code
- Importing Legacy Data in Rails
- Adaptive script/console Shell Alias for both Rails and Sinatra
- Cucumber steps for testing page URLs and redirects
- Business Cards and Hacker Groups
- Handy Shell Alias for Restarting your Rack Apps
- Installing Gitosis on Dreamhost
- Cleaner Sinatra integration with Compass 0.4
- A Cycle Helper for Sinatra
- Caching and Expring Stylesheets and Javascripts in Sinatra
- Truism
- Using Compass for CSS in your Sinatra application
- Accessing Basecamp’s writeboards programatically with Ruby
- 2008
- Capistrano task to selectively update crontabs
- Using Markov Chains to provide English language seed data for your Rails application
- For the win!
- Lessons learnt the hard way: Don’t use script/console --sandbox on production apps
- Configuring god to monitor Sphinx’s searchd
- Beijing Olympic medal tally for our Campfire bot
- Mum’s Savoury Mince Pockets
- Displaying both local and HTTP remote images in Prince XML generated PDFs
- Loading the ActiveRecord SQL Server adapter in a Rails 2.1 app
- Enabling a non-interactive install of Blackdown’s j2re1.4 on Ubuntu or Debian
- Automatic Saving Of Invalid Resources in Rails While Maintaining a Clean RESTful Interface
- God init script for Debian/Ubuntu systems
- Testing for elements in ActiveRecord’s XML output
- Activating the screensaver with Quicksilver in OS X
- Setting default arguments for to_xml for your ActiveRecord model
- New Job at the Australian Medical Council
- Mocking out your Rails helpers in helper specs
- jQuery datepickers with constrained ranges in Rails forms
- Generating semi-private, obfuscated resource sharing URLs in Rails
- Canberra Ruby Crew February meeting wrap-up
- Naming schemes
- The Canberra Ruby Crew and getting involved
- ActionMailer templates in Rails 2.0
Subscribe to read future posts in your inbox (or grab the RSS feed)