This month has been productive. I travelled to Japan to give a talk at RubyWorld Conference 2019 and attend a Ruby developer meeting. I was able to dedicate time to many important Ruby gems, and additionally some side projects.
RubyWorld Conference 2019: Asynchronous Ruby
At RubyWorld Conference, I discussed thread safety issues in popular Ruby gems, and looked at different approaches to concurrency. I compared JavaScript async/await with Ruby, and showed how the async gem can bring both simplicity and scalability.
As part of this talk, I was able to submit issues and PRs to some of the projects I critiqued, and many of these have since been merged.
- redis-rb: Avoid data corruption in
#queue
. - money: Use monitor for recursive mutual exclusion.
- faraday: Set middleware_mutex when middleware/adapter classes are defined.
- nokogiri: Race condition in
Nokogiri::CSS::Parser
. - aws: Ensure locking around
@entries
.
Discussing Concurrency with Matz
During the conference, I was able to discuss plans for Ruby 3 scalability with Matz. We discussed various different options, and it seems like we will be exploring Fibers for light-weight concurrency.
Software Sessions
I had a chance to talk to Jeremy Jung about Building Scalable Systems Safely in Ruby. It was a great opportunity to talk about the things I've been considering over the past several years while working on improving Ruby's scalability, and I really appreciate the time he took to put it together.
OpenSSL Updates
The OpenSSL gem is a critical piece of Ruby infrastructure, especially for falcon, which supports HTTPS (required by HTTP/2). Over the past couple of months, we have merged many outstanding PRs, which I personally feel has encouraged users to be more active in contributing.
I am working with Hiroshi Shibata to merge all these changes upstream, and we hope to have everything completed by the time Ruby v2.7 is released.
Rack Updates
The Rack gem is another critical piece in most Ruby web applications. The master branch has a number of important improvements and bug fixes that have not been released yet. In addition, there are many outstanding issues and PRs, along with documentation which is largley out of date.
I am working with Aaron Patterson to release v2.1 which will be the first release to officially support falcon.
Faraday Updates
I'm a strong advocate for structured life-cycles within code. As such, I proposed and implemented support for Middleware#close
. This maps directly to Async::HTTP::Client#close
and should improve support for adapters that support persistent connections (including HTTP/2).
Ruby Association Grant
It was announced that my proposal to improve Ruby concurrency was accepted. As part of this, I've been discussing the implementation details with Koichi Sasada while in Japan. This has been very productive and I hope to prepare a report regarding this collaboration soon.
GitHub Actions
I've been really interested in GitHub actions, in particular how they allow remote runners. In particular, I'm interested in accessing GPU hardware from some of my tests. So, as I use Arch Linux on my home server, I built GitHub Actions which I've released in the Arch User Repository. I use this to build and test C++ code which uses GPU for hardware accelerated rendering.
Asakusa.rb
During my time in Japan, I've attended the local Asakusa.rb meetups. It made me realise how special Ruby is and the amazing people who dedicate their time to making it awesome.
Sponsorship
This work is, in part, supported by my GitHub sponsors. If you are a company and you depend on Ruby, I invite you to support my open source work.