The Curious Engineer

All blogs / Ruby / Rails

Mike Perham

mikeperham.com

Ruby, OSS and the Internet

Ruby / RailsSoftware / engineering practice

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

  1. Coming soon: the 2027 Gem Fellowship
  2. Sidekiq in the terminal
  3. Adding Mastodon Comments

2025 5

  1. Sidekiq 8.0: Profiling
  2. Sidekiq 8.0: Improvements to the Web UI
  3. Introducing Sidekiq 8.0
  4. Conventional Commits
  5. Sponsoring Hanami

2024 5

  1. Iteration and Sidekiq 7.3.0
  2. Redis Licensing Changes and You
  3. Serializing Ruby datatypes in JSON
  4. How does Sidekiq work?
  5. Supporting Dragonfly

2023 2

  1. Ruby HTTP Server from scratch
  2. Scaling Huge Transactional Datasets with Redis Cluster

2022 8

  1. Introducing Sidekiq 7.0
  2. Sidekiq 7.0: Embedding
  3. Sidekiq 7.0: Metrics
  4. Sidekiq 7.0 Beta now Available
  5. Sidekiq and Request-Specific Context
  6. Modernizing Einhorn
  7. Coming Soon in Sidekiq, 2022 edition
  8. 🎉 Happy 10th Birthday, Sidekiq! 🎂

2021 5

  1. What’s New in Sidekiq 6.3
  2. On Multi-Platform Docker images
  3. Using Tags with Sidekiq Jobs
  4. A Tour of the Sidekiq API
  5. Faktory News: Pause, RSS and Bring your own Redis

2020 10

  1. Grouping Events for Later Processing
  2. Running Ruby on RISC-V
  3. The Leaky Bucket rate limiter
  4. What’s New in Sidekiq, 2020 edition
  5. Trimming Dependencies: rack-protection
  6. Trimming Dependencies: concurrent-ruby
  7. My Coolest Code
  8. Railsconf 2020 Virtual Hallway
  9. Creating a private, commercial Docker registry
  10. Faktory Enterprise

2019 7

  1. Workload Isolation with Queue Sharding
  2. Welcome to Sidekiq 6.0
  3. Something For Nothing
  4. Proxying Golang Web Applications
  5. Leaving Twitter
  6. Using Faktory with JavaScript
  7. Using Faktory with Python

2018 10

  1. Introducing Faktory Pro
  2. Faktory 0.9.0 - Hello, Redis!
  3. Testing Ruby’s CGI
  4. Building Linux Packages and using Github Releases
  5. Moving to Mastodon
  6. Parallelize your work with Sidekiq Pro
  7. Taming Rails memory bloat
  8. Ruby Optimization with One Magic Comment
  9. Happy 6th Birthday, Sidekiq
  10. Faktory 0.7.0 Released

2017 16

  1. Sidekiq Pro Statsd support – new and improved!
  2. Getting Started with Faktory
  3. Introducing Faktory
  4. The Future of Background Jobs
  5. Retries and Exceptions
  6. Helping Others
  7. Tracking down performance bugs in Sidekiq jobs
  8. Hello Sidekiq 5.0
  9. Sidekiq at Railsconf 2017
  10. Monitoring Redis
  11. Migrating from redis-namespace
  12. RTL scripts and BiDi webapps
  13. Welcome, Hugo
  14. Five Years
  15. What can I do?
  16. Public Relations Blast

2016 9

  1. Debugging stuck Ruby processes
  2. Profiling Crystal on OSX
  3. Test Driving Sidekiq and Crystal
  4. Sidekiq for Crystal
  5. Serving your own Commercial Rubygems
  6. Distributed Locking with Redis and Ruby
  7. Kill Your Dependencies
  8. Happy 4th Birthday, Sidekiq
  9. Contributed Systems: the 2015 wrapup

2015 16

  1. How to Test Multithreaded Code
  2. How to Charge for your Open Source
  3. Sidekiq 4.0!
  4. Advanced Data Structures in Ruby
  5. Optimizing Sidekiq
  6. Should you use Celluloid?
  7. Storing Data with Redis
  8. Sidekiq Enterprise
  9. Sidekiq and Upstart
  10. Inspeqtor Pro now Open Source
  11. Sidekiq Pro Gem Server Outage
  12. Timeout: Ruby’s Most Dangerous API
  13. Sidekiq Pro 2.0!
  14. Indie Developers in Ruby, 2015 Ed.
  15. Inspeqtor 0.8.0 released
  16. CGI: Ruby’s Bare Metal

2014 24

  1. The expvar package - Metrics for Go
  2. Go 1.4 runtime visualized
  3. Building a Binary Tree with Enumerable
  4. Inspeqtor 0.7.0 – total_rss and Postgresql
  5. Inspeqtor 0.6.0 – init.d, cron and statsd!
  6. Stupid Go tricks in Janus
  7. Why Go?
  8. Introducing Inspeqtor
  9. The Path to Full-time Open Source
  10. Don’t Daemonize your Daemons!
  11. Library Versioning
  12. Building Systems and The Cloud
  13. Use runit!
  14. My Next Chapter
  15. What’s new in Sidekiq Pro
  16. The Reconciliation Step
  17. Bounded Libraries
  18. Setting MySQL DATETIME column defaults in Rails
  19. Ruby Performance 2014
  20. Sidekiq 3.0!
  21. Dipping a Toe into Open Source
  22. Happy 2nd Birthday Sidekiq!
  23. Don’t Forget What’s Important
  24. The Clymb 2013

2013 22

  1. Ruby’s GIL and transactional memory
  2. Advanced Sidekiq: Host-specific Queues
  3. The Emperor has no Clothes
  4. How to make $100k in OSS by working hard
  5. The Three Best Debugging Tools
  6. Please Use an Error Service!
  7. Lua and Sidekiq Pro
  8. Background Job Processing Overhead
  9. Sustainable OSS Meeting Notes
  10. Sustainable Open Source
  11. Celluloid and Sidekiq hackfest in Portland
  12. Blogging and the Paralysis of Choice
  13. The Sidekiq Pro Giveaway Winner!
  14. Sidekiq Pro reaches 1.0!
  15. Dealing with Stuck Workers
  16. Board Games and Beverages at Railsconf 2013
  17. Railsconf 2013 events
  18. Signal Handling with Ruby 2.0
  19. Bill Gates
  20. Happy Birthday Sidekiq!
  21. One Great Year at The Clymb
  22. 2012 OSS Rookie Project of the Year!

2012 30

  1. 12 Gems of Christmas #1 – puma
  2. 12 Gems of Christmas #2 – bullet
  3. 12 Gems of Christmas #3 – thor
  4. 12 Gems of Christmas #4 – mailcatcher and mail_view
  5. 12 Gems of Christmas #5 – lograge
  6. 12 Gems of Christmas #6 – childprocess
  7. 12 Gems of Christmas #7 – lunchy
  8. 12 Gems of Christmas #8 – wicked_pdf
  9. 12 Gems of Christmas #9 – pundit
  10. 12 Gems of Christmas #10 – konacha
  11. 12 Gems of Christmas #11 – statsd-ruby
  12. 12 Gems of Christmas #12 – awesome_nested_set
  13. The 12 Gems of Christmas
  14. Current Thoughts on MRI Performance
  15. One Happy User
  16. Sexism and Programming
  17. Say Hello to Sidekiq Pro
  18. MiniTest – Ruby 1.9’s test framework
  19. The Sidekiq Experiment, Part I
  20. Using Statsd with Rails
  21. Debugging with Thread Dumps
  22. Five Common Rails Mistakes
  23. One Quarter of Sidekiq
  24. Don’t Mistake Meetings for Process
  25. Converting a MySQL database from Latin1 to UTF8
  26. The Perils of “rescue Exception”
  27. Deleting Duplicate Rows in MySQL
  28. The State of Sidekiq – One Month Later
  29. Sidekiq – simple, efficient messaging for Rails
  30. I’m back!

2011 8

  1. Getting iChat to automatically reconnect
  2. Optimizing Heroku
  3. Threads Fibers Events and Actors
  4. Background Processing vs Message Queueing
  5. Actors and Ruby
  6. Node.js Roundup
  7. The Dangers of Shortcuts
  8. Filling out PDF forms with JRuby

2010 30

  1. Moving On
  2. Using RDoc
  3. Contributing to Ruby
  4. Ruby Stdlib is a Ghetto, Pt. 2
  5. Apache Tuning
  6. The Ruby Stdlib is a Ghetto
  7. Always Be Closing
  8. Dalli Performance and Garbage Collection
  9. Dalli – memcached for Ruby
  10. Securing Network Services
  11. Developing Rubygems with RVM and Bundler
  12. Detecting Duplicate Images with Phashion
  13. Stream Processing and Trending Data
  14. bayes_motel – Bayesian classification for Ruby
  15. Risk and Startups
  16. Phat News
  17. Introducing Phat, an Asynchronous Rails app
  18. Using ActiveRecord with EventMachine
  19. Cassandra Internals – Tricks!
  20. Ruby Open Files
  21. Cassandra Internals – Reading
  22. Cassandra Internals – Writing
  23. Touch a File
  24. The Trouble with Ruby Finalizers
  25. Changelog vs Commitlog
  26. Asynchronous DNS Resolution
  27. Cassandra and EventMachine
  28. Scalable Ruby Processing with EventMachine
  29. Varnish on 32-bit systems
  30. Speaking on January 26th

2009 32

  1. Event-Driven Applications
  2. EventMachine Examples
  3. Document-oriented Database Shootout Part 2: Performance
  4. Looking for Machine Learning Specialist
  5. DataFabric – database sharding for Rails
  6. Heading to RubyConf 2009
  7. Comparing Document-oriented Databases
  8. Rails Engines at LSRC
  9. Old versus New
  10. Slabs, Pages, Chunks and Memcached
  11. memcached vs memcache-client Performance
  12. Adding multi-get support to Rails
  13. Scraping with Typhoeus and Nokogiri
  14. Memory-hungry Ruby daemons
  15. A Guide to Varnish VCL
  16. Engines in Rails 2.3
  17. memcache-client rdoc
  18. Caching and Rails
  19. Socket Timeouts in Ruby
  20. Using the Tokyo Tyrant native bindings
  21. SystemTimer 1.1 crash
  22. memcache-client 1.7.0 – the End of the Line
  23. Tokyo Cabinet vs Memcached
  24. Using memcache-client 1.6.x in Rails < 2.3
  25. FiveRuns Dash, now with 100% more rimshot!
  26. Memcache-client Performance
  27. Improved Deadlock Retry
  28. memcache-client 1.6.2 released
  29. Testing Multipart Upload with Sinatra
  30. How I Achieved my Dream with the iPhone
  31. Consistent Hashing in memcache-client
  32. The Future of memcache-client

2008 71

  1. Clojure vs Ruby, Part I
  2. Ruby.rewrite Ruby
  3. DataFabric 1.2 released
  4. Consensus Protocols: Two-Phase Commit
  5. Video: Distributed Computing
  6. fiveruns-memcache-client 1.5.0.4 released
  7. Caption Contest
  8. New Look
  9. data_fabric 1.1.0 released
  10. Rails Plugins with Multi-Threading
  11. RubyConf 2008: The Aftermath
  12. Introducing Politics
  13. EnvyCasts’ new Rails 2.2 screencast review
  14. Laziness Can Hurt
  15. Fall Speaking Schedule
  16. MySQL Optimization
  17. Bulk Import
  18. One Year of Ruby
  19. Upgrading tracknowledge.org
  20. How NOT to Build a Service
  21. Google Reader problem – Solved!
  22. Google Reader ignores language settings?
  23. MySQL InnoDB Clustered Indexes and Rails
  24. Explaining REST to Damien Katz
  25. Tough Lessons in Software
  26. Google Analytics
  27. Web 2.0 and Databases
  28. Introducing DataFabric
  29. Rails Bootup
  30. Using third-party services
  31. Finally! A Modern Development Tool
  32. Ich bin ein Berliner
  33. Lesson of the Day: Question Everything
  34. Speaking at Lone Star Ruby Conf 2008
  35. Screencasts and Firefox 3
  36. The MVC Song
  37. Starling and a reliable Memcached client
  38. MySQL lock debugging
  39. Ruby Scoping Oddity
  40. FiveRuns Public Beta
  41. DataMapper projects
  42. Ruby, Threads and Exit Codes
  43. Microsoft and America
  44. ActiveRecord 2.1 Performance (Part 1)
  45. Changing with the Times
  46. Syntactic Sugar
  47. VMWare question
  48. Introspecting RESTful APIs
  49. COBOL ON COGS
  50. Expression Rescue is Evil
  51. Speaking at OSCON 2008
  52. FiveRuns is Moving!
  53. Detecting Event Storms
  54. Monitoring with Monit
  55. Ruby, Rails and XFDL
  56. Death, Doom and Daemons!
  57. Blogging @ FiveRuns
  58. Design and Tufte
  59. Java Developers moving to Ruby and Rails
  60. Assert { 2.0 }
  61. acts_as_conference Finale
  62. acts_as_conference Day 1
  63. DSLs and XML
  64. Blog Customization is Scary
  65. Housekeeping
  66. Tuning ActiveRecord
  67. Austin jumping on Rails
  68. ActiveSupport Dependency arcanery
  69. Conversion to Array
  70. OpenOffice.org 2.4 for OSX
  71. Performance and ActiveRecord::Base.establish_connection

2007 37

  1. Java is becoming the new Cobol
  2. Media Encoders Considered Evil
  3. BDB: The Conclusion
  4. Creating a counter_cache column
  5. Great Moments in Ruby History?
  6. Using Berkeley DB with Ruby
  7. Berkeley DB and Ruby
  8. Leopard Compilation Problems
  9. Amazon’s Kindle
  10. Mirror, mirror
  11. 2D Dock in Leopard
  12. RubyConf pictures
  13. How to know if your airport is cool?
  14. RubyConf 2007 – Day Three
  15. RubyConf 2007 – Day Two
  16. RubyConf 2007 – Day One
  17. Debugging Ruby with Netbeans Beta 2
  18. Using Fixtures without Rails
  19. Netbeans 6.0
  20. Using the RRDTool Ruby bindings with OSX
  21. Using svn:externals
  22. Glassfish versus Mongrel
  23. Glassfish and JRuby
  24. Amazon’s Dynamo
  25. File Uploads in Merb versus Rails
  26. North Carolina in November
  27. Accessing LDAP from Ruby
  28. Using Apache DS with Mac OSX and Ruby
  29. Using Apache DS, Part 1
  30. Using Apache DS, Part 2
  31. Performance versus Scalability
  32. Slashdot – Thinking about Rails? Think Again
  33. Fun with Acronyms
  34. Welcome, Sun!
  35. Ruby/Rails IDE
  36. About this blog
  37. Welcome Aboard