Speakers

Keynote Speaker

Yukihiro "Matz" Matsumoto
Yukihiro "Matz" Matsumoto
@yukihiro_matz

The Creator of Ruby

Matz Keynote

Speakers

Aaron Patterson
Aaron Patterson
@tenderlove

Aaron is on the Ruby core team, the Rails core team, and the team that takes care of his cat, Gorby puff. Someday he will find the perfect safety gear to wear while extreme programming.

Don't @ me! Instance Variable Performance in Ruby

How do instance variables work? We've all used instance variables in our programs, but how do they actually work? In this presentation we'll look at how instance variables are implemented in Ruby. We'll start with a very strange benchmark, then dive in to Ruby internals to understand why the code behaves the way it does. Once we've figured out this strange behavior, we'll follow up with a patch to increase instance variable performance. Be prepared for a deep dive in to a weird area of Ruby, and remember: don't @ me!

Benoit Daloze
Benoit Daloze
@eregontp

Benoit Daloze is the lead of TruffleRuby at Oracle Labs. He did a PhD on concurrency in Ruby with TruffleRuby. He has contributed to many Ruby implementations, including TruffleRuby, MRI and JRuby. He is the maintainer of ruby/spec, a test suite for the behavior of the Ruby programming language.

Running Rack and Rails Faster with TruffleRuby

Optimizing Rack and Rails applications with a just-in-time (JIT) compiler is a challenge. For example, MJIT does not speed up Rails currently. TruffleRuby tackles this challenge. We have been running the Rails Simpler Benchmarks with TruffleRuby and now achieve higher performance than any other Ruby implementation.

In this talk we’ll show how we got there and what TruffleRuby optimizations are useful for Rack and Rails applications. TruffleRuby is getting ready to speed up your applications, will you try it?

CRuby Committers
CRuby Committers
@rubylangorg

Ruby Committers vs the World

Ruby core all stars on stage!

Ernesto Tagwerker
Ernesto Tagwerker
@etagwerker

Ernesto is the Founder of Ombu Labs, a small software development company dedicated to building lean code. When he is not obsessively playing table tennis or chess, he likes to maintain a few Ruby gems including database_cleaner and email-spec. He is passionate about writing less code, launching minimal products, coaching entrepreneurs, contributing to open source, and eating empanadas.

RubyMem: The Leaky Gems Database for Bundler

Out of memory errors are quite tricky. Our first reaction is always the same: "It can't be my code, it must be one of my dependencies!" What if you could quickly check that with bundler?

In this talk you will learn about memory leaks, out of memory errors, and leaky dependencies. You will learn how to use bundler-leak, a community-driven, open source tool that will make your life easier when debugging memory leaks.

Hideki Miura
Hideki Miura
@miura1729

I am a plumber.

Ruby to C Translator by AI

I am developing Ruby to C Translator "MMC". This uses AI (i.e. Abstract Interpretation) for Type Profiling and Escape Analysis. MMC generates very efficient C code by AI. For example , MMC gains about 50 times faster than CRuby for ao-bench (faster than C version). I will presentation the technical detail of MMC especially escape analysis.

Hiroshi SHIBATA
Hiroshi SHIBATA
@hsbt

A member of Ruby core team. He maintains RubyGems, Rake, rdoc, psych, ruby-build, etc. and He is an administrator of ruby-lang.org and supports to develop the environment of Ruby language.

He is also Executive Officer in GMO Pepabo, Inc. His most interest things are “Productivity” He believes, there's business value in fun. The team member happiness can make valuable products.

Dependency Resolution with Standard Libraries

I maintain the RubyGems, Bundler and the standard libraries of the Ruby language. So, I have a plan to make all of the standard libraries to default gems at Ruby 3. In the past, I described the detail of default gems and bundled gems at RubyKaigi and the Ruby conferences in the world. But the users still confused the differences standard libraries and default/bundled gems.

After releasing Ruby 3, We need to learn about the dependency is not only "Versioning" with default gems. It caused by the between library and library over the versioning. For that reason, I need to describe the motivation of "Promoting/Demoting the Default Gems or Bundle Gems" continuously. You will learn the resolution mechanism on RubyGems/Bundler and the standard libraries of the Ruby language with my talk.

Hitoshi HASUMI
Hitoshi HASUMI
@hasumikin

A programmer of Monstar Lab at Shimane office

mruby machine: An Operating System for Microcontoller

There are different approaches to make an operating system.

I take an approach which takes advantage of mruby/c's VM then makes my own mruby compiler and shell program.

Though my purpose is making an useful and effective development platform for microcontroller with Ruby, I will also share some universal knowledge on how to make an OS with you.

ITOYANAGI Sakura
ITOYANAGI Sakura
@aycabta

The Complex Nightmare of the Asian Cultural Area

There are many different cultures in Asia that seem odd to the rest of the world. This session introduces the complexities of the current situation and the various technologies that have been created to achieve their goals.

Jeremy Evans
Jeremy Evans
@jeremyevans0

Jeremy Evans is a Ruby committer. He is the maintainer of Ruby ports for the OpenBSD operating system. He is also the lead developer of the Sequel database library, the Roda web toolkit, the Rodauth authentication framework, and many other Ruby libraries.

Keyword Arguments: Past, Present, and Future

Ruby 3 will separate keyword arguments from positional arguments, which causes the biggest backwards compatibility issues in Ruby since Ruby 1.9. This presentation will discuss the history of keyword arguments, how keyword arguments are handled internally, how keyword arguments were separated from positional arguments internally, and possible future improvements in the handling of keyword arguments.

Jônatas Davi Paganini
Jônatas Davi Paganini
@jonatas

My work is onboard people in a large Ruby codebase, and most of the time, I'm showing code or hunting for some code examples.

While developing some educational RuboCop cops, I found the RuboCop node pattern very useful to target code offenses. Then, I developed a similar tool to search and allow refactoring code based on node pattern concept.

Live coding: Grepping Ruby code like a boss

Our favorite language allows us to implement the same code in a few different ways. Because of that, it becomes tough to search and find the target code only with regular expressions.

I'd like to present fast, a searching DSL that can help you build complex searches directly in the AST nodes as regexes does for plain strings.

The presentation will be a live coding tour of how to use the tool and create your searching patterns.

I'll also show how to manipulate the code in the target AST nodes, allowing us to refactor the source code in an automated way. I'll share a few funny stories about how I refactored thousands of files in a week.

Katsuhiko Kageyama
Katsuhiko Kageyama
@kishima

Embedded software engineer in a manufacturing company. Organizing a mruby community "mruby meetup". Personally, producing technical books about mruby and original devices in TechBookFest, Comic Market and Maker Faire(2020 Tsukuba).

Now is the time to create your own (m)Ruby computer

mruby has been known as a good tool for supporting server applications and embedded softwares like an IoT application on a small CPU whose resource is limited. Now times are changing. mruby gets more power from recent micro processors. I believe now Ruby engineers can create their own computer as per their wish. Basic process and essential technique how to create an original (m)Ruby computer will be shown in the talk with a live demonstration of the computer.

Kevin Deisz
Kevin Deisz
@kddeisz

I am a Staff Production Engineer of Shopify, based out of Boston, Massachusetts. I'm passionate about music, accessibility, and open-source software.

Prettier Ruby

Prettier was created in 2017 and has since seen a meteoric rise within the JavaScript community. It differentiated itself from other code formatters and linters by supporting minimal configuration, eliminating the need for long discussions and arguments by enforcing an opinionated style on its users. That enforcement ended up resonating well, as it allowed developers to get back to work on the more important aspects of their job.

Since then, it has expanded to support other languages and markup, including Ruby. The Ruby plugin is now in use in dozens of applications around the world, and better formatting is being worked on daily. This talk will give you a high-level overview of prettier and how to wield it in your project. It will also dive into the nitty gritty, showing how the plugin was made and how you can help contribute to its growth. You’ll come away with a better understanding of Ruby syntax, knowledge of a new tool and how it can be used to help your team.

Koichi ITO
Koichi ITO
@koic

Koichi ITO is a member of RuboCop's core developers team. He is a practitioner of Ruby/Rails application development with eXtreme Programming. He works at ESM, Inc.

Road to RuboCop 1.0

RuboCop 1.0 is coming soon.

RuboCop 1.0 introduces several new features and breaking changes to go to the stable major version 1.0! In this presentation, I will talk about how the milestones for RuboCop 1.0 has been implemented. For examples, gemified departments, safe annotate, new cop status, and others.

RuboCop 1.0 will provide the safest static analysis in the all‐time previous releases. The pragmatic meaning of them has emerged during the implementation process. This talk will help you ride on RuboCop 1.0.

Koichi Sasada
Koichi Sasada
@ko1

Koichi Sasada is a programmer, mainly developing Ruby interpreter (CRuby/MRI). He received Ph.D (Information Science and Technology) from the University of Tokyo, 2007. Now he is still working on MRI development at Cookpad Inc. He is also a director of Ruby Association.

Ractor report

This talk will introduce Ractor, the concurrency system for Ruby 3 based on actual implementation.

At RubyKaigi 2016, I proposed Guild (A proposal of new concurrency model for Ruby 3) and at RubyKaigi 2018, I introduced prototype of it (Guild Prototype - RubyKaigi 2018). For Ruby 3, we renamed Guild to Ractor and finished the first implementation. This talk will introduce Ractor API with current implementation.

Lin Yu Hsiang
Lin Yu Hsiang
@johnlinvc

Cloud Platform Engineer at Exosite. Ruby lover. Full-stack developer. Organizer of Swift Taipei. iOS developer. FP lover.

mruby-rr: Time Traveling Debugger For mruby Using rr

Debugging bugs that don't happen every time is painful. It needs both technique and luck. When dealing with these, a mistyped continue command is irreversible and will take us a whole afternoon just to reproduce the issue again.

mruby-rr comes to rescue! It's a Time Traveling Debugger for mruby that based on Mozilla's rr. mruby-rr supports record and replay of mruby program execution. We can record the tough bug using mruby-rr for just once. Afterwards we can playback the execution as many times as we want. mruby-rr can also do time traveling operations like reverse-next and evaluating expressions.

Masatoshi SEKI
Masatoshi SEKI
@m_seki

Masatoshi Seki is a Ruby committer and the author of several Ruby standard libraries including dRuby, ERB, and Rinda. He’s an expert in object-oriented programming, distributed systems, and eXtreme programming. He has been speaking at RubyKaigi every year since 2006 when the Kaigi first started.

Rinda in the real-world embedded systems.

Okayama Astrophysical Observatory Wide-Field Camera (OAOWFC), is an autonomous wide-field near-infrared camera and has been in operation since 2015. A distributed control system is operated via control software using Rinda. I report the implementation of the robot telescope 🤖🔭.

ODA Hirohito
ODA Hirohito
@jimlock

;)

msgraph: Microsoft Graph API Client with Ruby

msgraph is the unofficial Microsoft Graph API Client with Ruby. The official Microsoft Graph Client Library for Ruby is microsoft_graph. However, since its release on August 1, 2016, the preview version has been continued and has not been maintained. So, I created an API client that I can maintain on my own.

In this talk, I will talk about why I created the unofficial API Client.

Samuel Williams
Samuel Williams
@ioquatix

I am a software engineer, and I am motivated by the beauty I uncover when building complex systems.

Don't Wait For Me! Scalable Concurrency for Ruby 3!

We have proven that fibers are useful for building scalable systems. In order to develop this further, we need to add hooks into the various Ruby VMs so that we can improve the concurrency of existing code without changes. There is an outstanding PR for this work, but additional effort is required to bring this to completion and show its effectiveness in real world situations. We will discuss the implementation of this PR, the implementation of the corresponding Async Scheduler, and how they work together to improve the scalability of Ruby applications.

Shugo Maeda
Shugo Maeda
@shugomaeda

The Creator of Textbringer, a Ruby committer, Director of Network Applied Communication Laboratory, and Secretary general of the Ruby Association

Magic is organizing chaos

The power of Law (e.g., type signatures, type checkers, type profilers) is growing toward Ruby 3. We need the power of Chaos for the Cosmic Balance.

In this talk, I propose Proc#using to extend area where Refinements can be used.

Soutaro Matsumoto
Soutaro Matsumoto
@soutaro

Software engineer at Square.

The State of Ruby 3 Typing

Ruby 3 will ship with a new feature for type checking, RBS. It provides a language to describe types of Ruby programs, the type declarations for standard library classes, and a set of features to support using and developing type checkers. In this talk, I will introduce the feature and how the Ruby programming will be with RBS.

Sutou Kouhei
Sutou Kouhei
@ktou

He is a free software programmer and the president of ClearCode Inc. He is also the namer of ClearCode Inc. The origin of the company name is "clear code". We will be programmers that code clear code as our company name suggests. He is a maintainer of rake-compiler gem that helps fat gem developers. He was maintain Ruby-GNOME that had many fat gems.

Goodbye fat gem

Fat gem mechanism is useful to install extension library without any compiler. Fat gem mechanism is especially helpful for Windows rubyists because Windows rubyists don't have compiler. But there are some downsides. For example, fat gem users can't use Ruby 2.7 (the latest Ruby) until fat gem developers release a new gem for Ruby 2.7. As of 2020, pros of fat gem mechanism is decreasing and cons of it is increasing. This talk describes the details of pros and cons of it then says thanks and goodbye to fat gem.

Ufuk Kayserilioglu
Ufuk Kayserilioglu
@paracycle

Ufuk is the Production Engineering Manager of the Ruby Infrastructure team at Shopify. He has over 20 years of experience working with statically and dynamically typed languages ranging from low-level communication programming to web development. He brings that experience to Shopify for the adoption of better Ruby tooling and practices. He currently works remotely from Cyprus where he lives with his beloved wife and wonderful daughter.

Reflecting on Ruby Reflection for Rendering RBIs

As part of our adoption process of Sorbet at Shopify, we needed an automated way to teach Sorbet about our ~400 gem dependencies. We decided to tackle this problem by generating interface files (RBI) for each gem via runtime reflection.

However, this turns out to not be as simple as it sounds; the flexible nature of Ruby allows gem authors to do many wild things that make this Hard. Come and hear about all the lessons that we learnt about runtime reflection in Ruby while building tapioca.

Urabe, Shyouhei
Urabe, Shyouhei
@shyouhei

Money Forward, Inc. hire Shyouhei, a long-time ruby-core committer, to contribute to the whole ruby ecosystem. Being a full-time ruby-core developer, his current interest is to speed up ruby execution by modifying its internals. Doing so is not straight-forward because of ruby's highly dynamic nature. To tackle this problem he is implementing a variety of optimisation techniques that are yet to be applied to it.

On sending methods

As you have noticed 2.7 is faster than older ruby versions. One of the main reason for this is my optimisation around method invocations. Let me share what was suboptimal, and how was that fixed.

Vladimir Dementyev
Vladimir Dementyev
@palkan_tula

Vladimir is a mathematician who found his happiness in programming Ruby and Erlang, contributing to open source and being an Evil Martian. Author of AnyCable, TestProf and many yet unknown ukulele melodies.

The whys and hows of transpiling Ruby

Transpiling is a source-to-source compiling. Why might we need it in Ruby? Compatibility and experiments.

Ruby is evolving fast nowadays. The latest MRI release introduced, for example, the pattern matching syntax. Unfortunately, not everyone is ready to use it yet: gems authors have to support older versions, Ruby implementations are lagging. And it's still experimental, which raises the question: how to evaluate proposals? By backporting them to older Rubies!

I want to discuss these problems and share the story of the Ruby transpiler — Ruby Next. A decent amount of Ruby hackery is guaranteed.

Yoh Osaki
Yoh Osaki
@youchan

Software engineer at Retrieva inc. Author of Hyalite which is react like virtual DOM library. Member of Asakusa.rb, Chidoriashi.rb

Asynchronous Opal

Opal is a compiler convert from Ruby to JavaScript. JavaScript has async/await syntax for asynchronous processing. But Opal hasn't implemented it yet. The Opal community had been discussed mapping Fiber semantics to JavaScript async/await. The conclusion was it is impossible to map coroutine such as Fiber because async/await is just a syntax sugar that expresses nested callbacks into flat statements. I'm going to talk about the idea I'm trying to incorporate easy-to-use asynchronous processing into Opal.

Yuji Yokoo
Yuji Yokoo
@yuji_yokoo

Yuji is a software developer based in Adelaide, South Australia. He was born and raised in Tokyo, Japan. He used to be a Windows desktop application developer until he discovered Ruby. He enjoys console video gaming, programming, and especially mixing both of them together.

Developing your Dreamcast apps and games with mruby

What would you make, if you can run your Ruby code on Dreamcast?

Well, now you can! I have been working on my development setup for running mruby code on Dreamcast. I would like to show you what I have developed so far and how you can get started. I would also like to tell you why development on Dreamcast is a great idea and share a few things I learned along the way.

Yusuke Endoh
Yusuke Endoh
@mametter

'A full-time MRI committer at Cookpad, Inc. He has been interested in testing, analyzing, abusing of Ruby. He is an advocate of "transcendental programming" that creates a useless program like this bio. (_)'.yield_self{|s|eval(t=%q(puts"'#{s.sub(?,?+?_)}'.yield_self{|s|eval(t=%q(#{t}))}"))}

Type Profiler: a Progress Report of a Ruby 3 Type Analyzer

Type Profiler is a type inference tool for plain Ruby code. It analyzes Ruby code that has no type information and guesses a type of the modules and methods in the code. The output will serve as a signature for external type checkers like Sorbet and Steep. Since 2019, we have been developing the tool as one of the key features for Ruby 3 static analysis, and now it works with some practical applications. In this talk, we briefly explain what and how Type Profiler works, present a roadmap and progress of the development, and discuss how useful it is for practical applications with some demos.

蒼時弦也
蒼時弦也
@elct9620

Game Developer / 5xruby's Rails Developer. Enjoy trying anything that can work with Ruby in Game, IoT or anything else.

Is it time run Ruby on Web via WebAssembly?

The W3C is starting to recommend to use WebAssembly, and we can compile mruby to WebAssembly very easy in now day. But we have Opal and it works well, we really need to use WebAssembly? Let me share my experience about trying to add mruby to HTML5 game, and discuss the pros and cons when we use Ruby in WebAssembly way in Web.