Mike Perham
Ruby, OSS and the Internet
- Posts
- 350 from 16 Sep 2007 to 15 Oct 2026
- Posting
- now and then (3 in the last year)
- Kind
- personal blog
- Feed
- https://www.mikeperham.com/index.xml
2026 3
2025 5
2024 5
2023 2
2022 8
2021 5
2020 10
- Grouping Events for Later Processing
- Running Ruby on RISC-V
- The Leaky Bucket rate limiter
- What’s New in Sidekiq, 2020 edition
- Trimming Dependencies: rack-protection
- Trimming Dependencies: concurrent-ruby
- My Coolest Code
- Railsconf 2020 Virtual Hallway
- Creating a private, commercial Docker registry
- Faktory Enterprise
2019 7
2018 10
2017 16
- Sidekiq Pro Statsd support – new and improved!
- Getting Started with Faktory
- Introducing Faktory
- The Future of Background Jobs
- Retries and Exceptions
- Helping Others
- Tracking down performance bugs in Sidekiq jobs
- Hello Sidekiq 5.0
- Sidekiq at Railsconf 2017
- Monitoring Redis
- Migrating from redis-namespace
- RTL scripts and BiDi webapps
- Welcome, Hugo
- Five Years
- What can I do?
- Public Relations Blast
2016 9
2015 16
- How to Test Multithreaded Code
- How to Charge for your Open Source
- Sidekiq 4.0!
- Advanced Data Structures in Ruby
- Optimizing Sidekiq
- Should you use Celluloid?
- Storing Data with Redis
- Sidekiq Enterprise
- Sidekiq and Upstart
- Inspeqtor Pro now Open Source
- Sidekiq Pro Gem Server Outage
- Timeout: Ruby’s Most Dangerous API
- Sidekiq Pro 2.0!
- Indie Developers in Ruby, 2015 Ed.
- Inspeqtor 0.8.0 released
- CGI: Ruby’s Bare Metal
2014 24
- The expvar package - Metrics for Go
- Go 1.4 runtime visualized
- Building a Binary Tree with Enumerable
- Inspeqtor 0.7.0 – total_rss and Postgresql
- Inspeqtor 0.6.0 – init.d, cron and statsd!
- Stupid Go tricks in Janus
- Why Go?
- Introducing Inspeqtor
- The Path to Full-time Open Source
- Don’t Daemonize your Daemons!
- Library Versioning
- Building Systems and The Cloud
- Use runit!
- My Next Chapter
- What’s new in Sidekiq Pro
- The Reconciliation Step
- Bounded Libraries
- Setting MySQL DATETIME column defaults in Rails
- Ruby Performance 2014
- Sidekiq 3.0!
- Dipping a Toe into Open Source
- Happy 2nd Birthday Sidekiq!
- Don’t Forget What’s Important
- The Clymb 2013
2013 22
- Ruby’s GIL and transactional memory
- Advanced Sidekiq: Host-specific Queues
- The Emperor has no Clothes
- How to make $100k in OSS by working hard
- The Three Best Debugging Tools
- Please Use an Error Service!
- Lua and Sidekiq Pro
- Background Job Processing Overhead
- Sustainable OSS Meeting Notes
- Sustainable Open Source
- Celluloid and Sidekiq hackfest in Portland
- Blogging and the Paralysis of Choice
- The Sidekiq Pro Giveaway Winner!
- Sidekiq Pro reaches 1.0!
- Dealing with Stuck Workers
- Board Games and Beverages at Railsconf 2013
- Railsconf 2013 events
- Signal Handling with Ruby 2.0
- Bill Gates
- Happy Birthday Sidekiq!
- One Great Year at The Clymb
- 2012 OSS Rookie Project of the Year!
2012 30
- 12 Gems of Christmas #1 – puma
- 12 Gems of Christmas #2 – bullet
- 12 Gems of Christmas #3 – thor
- 12 Gems of Christmas #4 – mailcatcher and mail_view
- 12 Gems of Christmas #5 – lograge
- 12 Gems of Christmas #6 – childprocess
- 12 Gems of Christmas #7 – lunchy
- 12 Gems of Christmas #8 – wicked_pdf
- 12 Gems of Christmas #9 – pundit
- 12 Gems of Christmas #10 – konacha
- 12 Gems of Christmas #11 – statsd-ruby
- 12 Gems of Christmas #12 – awesome_nested_set
- The 12 Gems of Christmas
- Current Thoughts on MRI Performance
- One Happy User
- Sexism and Programming
- Say Hello to Sidekiq Pro
- MiniTest – Ruby 1.9’s test framework
- The Sidekiq Experiment, Part I
- Using Statsd with Rails
- Debugging with Thread Dumps
- Five Common Rails Mistakes
- One Quarter of Sidekiq
- Don’t Mistake Meetings for Process
- Converting a MySQL database from Latin1 to UTF8
- The Perils of “rescue Exception”
- Deleting Duplicate Rows in MySQL
- The State of Sidekiq – One Month Later
- Sidekiq – simple, efficient messaging for Rails
- I’m back!
2011 8
2010 30
- Moving On
- Using RDoc
- Contributing to Ruby
- Ruby Stdlib is a Ghetto, Pt. 2
- Apache Tuning
- The Ruby Stdlib is a Ghetto
- Always Be Closing
- Dalli Performance and Garbage Collection
- Dalli – memcached for Ruby
- Securing Network Services
- Developing Rubygems with RVM and Bundler
- Detecting Duplicate Images with Phashion
- Stream Processing and Trending Data
- bayes_motel – Bayesian classification for Ruby
- Risk and Startups
- Phat News
- Introducing Phat, an Asynchronous Rails app
- Using ActiveRecord with EventMachine
- Cassandra Internals – Tricks!
- Ruby Open Files
- Cassandra Internals – Reading
- Cassandra Internals – Writing
- Touch a File
- The Trouble with Ruby Finalizers
- Changelog vs Commitlog
- Asynchronous DNS Resolution
- Cassandra and EventMachine
- Scalable Ruby Processing with EventMachine
- Varnish on 32-bit systems
- Speaking on January 26th
2009 32
- Event-Driven Applications
- EventMachine Examples
- Document-oriented Database Shootout Part 2: Performance
- Looking for Machine Learning Specialist
- DataFabric – database sharding for Rails
- Heading to RubyConf 2009
- Comparing Document-oriented Databases
- Rails Engines at LSRC
- Old versus New
- Slabs, Pages, Chunks and Memcached
- memcached vs memcache-client Performance
- Adding multi-get support to Rails
- Scraping with Typhoeus and Nokogiri
- Memory-hungry Ruby daemons
- A Guide to Varnish VCL
- Engines in Rails 2.3
- memcache-client rdoc
- Caching and Rails
- Socket Timeouts in Ruby
- Using the Tokyo Tyrant native bindings
- SystemTimer 1.1 crash
- memcache-client 1.7.0 – the End of the Line
- Tokyo Cabinet vs Memcached
- Using memcache-client 1.6.x in Rails < 2.3
- FiveRuns Dash, now with 100% more rimshot!
- Memcache-client Performance
- Improved Deadlock Retry
- memcache-client 1.6.2 released
- Testing Multipart Upload with Sinatra
- How I Achieved my Dream with the iPhone
- Consistent Hashing in memcache-client
- The Future of memcache-client
2008 71
- Clojure vs Ruby, Part I
- Ruby.rewrite Ruby
- DataFabric 1.2 released
- Consensus Protocols: Two-Phase Commit
- Video: Distributed Computing
- fiveruns-memcache-client 1.5.0.4 released
- Caption Contest
- New Look
- data_fabric 1.1.0 released
- Rails Plugins with Multi-Threading
- RubyConf 2008: The Aftermath
- Introducing Politics
- EnvyCasts’ new Rails 2.2 screencast review
- Laziness Can Hurt
- Fall Speaking Schedule
- MySQL Optimization
- Bulk Import
- One Year of Ruby
- Upgrading tracknowledge.org
- How NOT to Build a Service
- Google Reader problem – Solved!
- Google Reader ignores language settings?
- MySQL InnoDB Clustered Indexes and Rails
- Explaining REST to Damien Katz
- Tough Lessons in Software
- Google Analytics
- Web 2.0 and Databases
- Introducing DataFabric
- Rails Bootup
- Using third-party services
- Finally! A Modern Development Tool
- Ich bin ein Berliner
- Lesson of the Day: Question Everything
- Speaking at Lone Star Ruby Conf 2008
- Screencasts and Firefox 3
- The MVC Song
- Starling and a reliable Memcached client
- MySQL lock debugging
- Ruby Scoping Oddity
- FiveRuns Public Beta
- DataMapper projects
- Ruby, Threads and Exit Codes
- Microsoft and America
- ActiveRecord 2.1 Performance (Part 1)
- Changing with the Times
- Syntactic Sugar
- VMWare question
- Introspecting RESTful APIs
- COBOL ON COGS
- Expression Rescue is Evil
- Speaking at OSCON 2008
- FiveRuns is Moving!
- Detecting Event Storms
- Monitoring with Monit
- Ruby, Rails and XFDL
- Death, Doom and Daemons!
- Blogging @ FiveRuns
- Design and Tufte
- Java Developers moving to Ruby and Rails
- Assert { 2.0 }
- acts_as_conference Finale
- acts_as_conference Day 1
- DSLs and XML
- Blog Customization is Scary
- Housekeeping
- Tuning ActiveRecord
- Austin jumping on Rails
- ActiveSupport Dependency arcanery
- Conversion to Array
- OpenOffice.org 2.4 for OSX
- Performance and ActiveRecord::Base.establish_connection
2007 37
- Java is becoming the new Cobol
- Media Encoders Considered Evil
- BDB: The Conclusion
- Creating a counter_cache column
- Great Moments in Ruby History?
- Using Berkeley DB with Ruby
- Berkeley DB and Ruby
- Leopard Compilation Problems
- Amazon’s Kindle
- Mirror, mirror
- 2D Dock in Leopard
- RubyConf pictures
- How to know if your airport is cool?
- RubyConf 2007 – Day Three
- RubyConf 2007 – Day Two
- RubyConf 2007 – Day One
- Debugging Ruby with Netbeans Beta 2
- Using Fixtures without Rails
- Netbeans 6.0
- Using the RRDTool Ruby bindings with OSX
- Using svn:externals
- Glassfish versus Mongrel
- Glassfish and JRuby
- Amazon’s Dynamo
- File Uploads in Merb versus Rails
- North Carolina in November
- Accessing LDAP from Ruby
- Using Apache DS with Mac OSX and Ruby
- Using Apache DS, Part 1
- Using Apache DS, Part 2
- Performance versus Scalability
- Slashdot – Thinking about Rails? Think Again
- Fun with Acronyms
- Welcome, Sun!
- Ruby/Rails IDE
- About this blog
- Welcome Aboard