Skip to main content
This is my blog.
2025
- A tale of two Claudes AI Field Reports
- Is Rust faster than C?
- I am disappointed in the AI discourse AI musings
- Rust 1.0, ten years later
- Thoughts on Bluesky Verification
- Thinking like a compiler: places and values in Rust
- Does unsafe undermine Rust's guarantees?
- Choosing Languages
- A Happy Day for Rust
2019
- "C is not how the computer works" can lead to inefficient code
- Porting steveklabnik.com to Workers Sites and Zola
- The culture war at the heart of open source
- I'm joining Cloudflare
- What comes after open source
- Rust has finally outgrown me
- Learning Ada
- What's next for SemVer
- thank u, next
2018
- Thoughts on Rust in 2019
- Six years with Rust
- Why is Clojure so stable?
- Borrow checking, escape analysis, and the generational hypothesis
- Should you learn C to "learn how the computer works"?
- You can't "turn off the borrow checker" in Rust
- Is WebAssembly the return of Java Applets & Flash?
- WebAssembly is more than just the web
- "The Expressive C++17 Coding Challenge (in Rust)" revisited
- 0b100000
- Looking back at Rust in 2018
2015
- Docember
- Rescuing Resque (again)
- "The Rust Programming Language" will be published by No Starch Press
- Community Versions for Rust
- Ember Data: ‘DS’ is not defined
- The language strangeness budget
- Ouroboros
- Hope
- An introduction to economics under capitalism
- A new introduction to Rust
2013
- 2013: year in review
- Rust is surprisingly expressive
- How Dogecoin changed my perspective on cryptocurrency
- git, history modification, and libuv
- Why I'm partnering with Balanced
- On leftist infighting
- Abstract vs concrete
- Pointers in Rust, a guide
- New Beginnings
- Keep Saturdays sacred
- Thankfulness
- The CLOSURE companion
- Resque 1.25.0 has been released
- Just the regularly scheduled apocalypse
- Emoji licensing
- redis-namespace 1.3.1 security release
- Beware subclassing Ruby core classes
- Resque 1.25.0.pre has been released
- Removing Turbolinks from Rails 4
- Twitter ghosts
- Returning to Free Software, a guide
- Rust-y Scraps: iterating with a step
- Rails 4.0.0-beta1 to Rails 4.0.0-rc1
- Ditching Google Chat with XMPP
- The profile link relation and you
- Closure
- Upgrading from Rust 0.5 to 0.6
- Deleuze for Developers: will smooth space/open source suffice to save us? Deleuze for Developers
- Travis build matrix for Rails
- Announcing security_release_practice
- Going vimgan
- Using puma on Heroku
- I'm writing "Rails 4 in Action"!
- The next iteration of "Designing Hypermedia APIs"
- Ruby on Rails maintenance policy
- Ember.js and accessibility
- How to not rely on rubygems.org for development
- Node
- _why is a role, not a person
- Draper 1.0.0 released
- Rails has two default stacks
2012
- 2012: year in review
- Most things I do are interconnected
- I invented hypermedia APIs by accident
- An early Christmas present for you
- Announcing request_store
- Getting started with chruby
- Deleuze for developers: deterritorialization Deleuze for Developers
- Deleuze for developers: assemblages Deleuze for Developers
- Draper 1.0.0.beta2 release
- Draper 1.0.0.beta1 release
- Introducing the rails-api project
- Narratives
- How to squash commits in a GitHub pull request
- Theory and practice
- I got hit by a car today
- Living with a terrible taste in music
- Run Rails with custom patches
- How do you find the time?
- Seriously: numbers: use them!
- Resque: let's do this
- Software and community
- Random Ruby Tricks: Class.new
- Protocol and language
- Random Ruby Tricks: Struct.new
- New blog: Words
- Protological Control: an introduction
- DayZ
- Sparrow
- Why I don't like factory_girl
- How can I contribute to Ruby on Rails?
- Introducing issue2pr
- Show solidarity to all who resist
- Finale
- Shoes 4 work is starting: get involved!
- Mixins: a refactoring anti-pattern
- On the eve of #m1gs
- Cards for dad - follow-up
- Building StoreEngine
- About antisocialne.ws
- Anti-capitalism 101
- Birthday cards for Dad
- Transmuting Philosophy into Machinery
- Hypermedia API reading list
- REST is over
- An API ontology
- Introducing metadown
- Moving from Sinatra to Rails
- Implementing HATEOS with presenters
2011
- ActiveRecord considered harmful
- Devise: ActionController::RoutingError (No Route Matches [GET] /users/sign_out)
- Redcarpet is awesome
- Write better cukes with the rel attribute
- Marx, anarchism, and web standards
- Fast Rails tests with CanCan
- Book review: New Programmer's Survival Manual
- Burnout
- Your startup is not a platform
- For science: I'm killing my cell phone
- Matz is nice so we are nice
- Rubinius is awesome
- GitHub is anarchy for programmers
- Real, modern Ruby development
- I'm deleting my Facebook tonight
- More rstat.us refactoring
- Extracting domain models: a practical example
- We forget that open source is made of people
- Better Ruby Presenters
- The secret to Rails OO design
- The self improvement pomodoro
- I'm making it dead simple to contribute to Ruby's documentation
- Some people understand REST and HTTP
- Twitter is too important to be owned by Twitter
- Nobody understands REST or HTTP
- Single text, many masters
- Contributing to Ruby's documentation
- The next iteration of my blog
- The first week of rstat.us: users, press, and scaling, oh my!
- Announcing rstat.us
- Did you hear? I'm Ruby Mendicant University's first visiting teacher
- I'm quitting Hacker News
- Living in the cloud
- A few notes on Foucault
- Goals for 2011
2010
- Hackety Hack v1.0
- The hardest decision I've ever made
- Trolling is a art
- 80% of success is showing up
- Trouble with Diaspora
- A word about _why, Whyday, and Hackety Hack
- A blip in time
- A case study in being excellent: Divvy
- Productivity Waves
- A Declaration of the Independence of Cyberspace
- A break with the past
- Book review: Rework
- Create a more compelling experience for your users through game mechanics
- Writing a su feature with Authlogic
- Reddit drama: an interesting look at community values