Steve Klabnik
Steve Klabnik's blog posts on programming, technology, and software development
- Posts
- 233 from 2 Dec 2009 to 21 Sep 2026
- Posting
- monthly (9 in the last year)
- Kind
- personal blog
- Feed
- https://steveklabnik.com/feed.xml
2026 8
2025 11
- Thirteen years of Rust and the birth of Rue
- I see a future in jj
- A tale of two Claudes
- Is Rust faster than C?
- I am disappointed in the AI discourse
- 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
2024 4
2023 7
2022 1
2020 7
2019 9
2018 11
- 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
2017 6
2016 6
2015 10
2014 9
2013 41
- 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?
- 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 49
- 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: assemblages
- 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
- Two pomodoros
- An API ontology
- Introducing metadown
- Moving from Sinatra to Rails
- Implementing HATEOS with presenters
2011 34
- ActiveRecord considered harmful
- Redcarpet is awesome
- Write better cukes with the rel attribute
- Marx, anarchism, and web standards
- Fast Rails tests with CanCan
- Devise: ActionController::RoutingError (No Route Matches [GET] /users/sign_out)
- Book review: New Programmer's Survival Manual
- Burnout
- Your startup is not a platform
- For science: I'm killing my cell phone
- 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
- 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
- Matz is nice so we are nice
- We forget that open source is made of people
- Some people understand REST and HTTP
- Twitter is too important to be owned by Twitter
- Nobody understands REST or HTTP
- Single text, many masters
- The next iteration of my blog
- Contributing to Ruby's documentation
- 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
- A few notes on Foucault
- Goals for 2011
2010 17
- 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
- Living in the cloud
- Book review: Rework
- Create a more compelling experience for your users through game mechanics
- Writing a su feature with Authlogic
- Why bother creating?
- Reddit drama: an interesting look at community values