Samuel Williams Saturday, 30 November 2019

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.

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.