Video Recording and Production by Ruby Kaigi
Until recently, we didn't talk much about "legacy Ruby". But today, so many companies rely on Ruby that legacy code is inevitable.
When code is hard-to-understand, we fear our changes may silently break something. This fear erodes the courage to improve code's design, making future change even harder.
If we combine proven refactoring techniques with Ruby's flexibility, we can safely add features while gradually improving our design. This talk will draw on code analysis, testing, and object-oriented design to equip attendees with a process for refactoring legacy code without fear.
Justin Searls @searls
Nobody knows bad code like Justin Searls—he writes bad code effortlessly. And it's given him the chance to study why the industry has gotten so good at making bad software. He co-founded Test Double, an agency focused on fixing what's broken in software.
Good news! Ruby is a successful and mature programming language with a wealth of libraries and legacy applications that have been contributed to for many years. The bad news: Those projects might contain a large amount of useless, unused code which adds needless complexity and confuses new developers. In this talk I'll explain how to build a static analysis tool to help you clear out the cruft - because there's no code that's easier to maintain than no code at all!
Chris Arcand, @chrisarcand
Chris is a Ruby developer at Red Hat on the ManageIQ core team. He enjoys working full time on open source software to manage The Cloud™ and has contributed to various projects in the Ruby ecosystem. Chris hails from Minnesota in the United States and also enjoys hockey, hiking, and tasty beers.
Come with us now on a journey through time and space. As we explore the world of analog/digital synthesis. From computer generated music to physical synthesisers and everything in between.
So you want to write music with code, but don’t know the difference between an LFO, ADSR, LMFAO, etc. Or a Sine wave, Saw wave, Google wave. We’ll explore what these mean, and how Ruby can be used to make awesome sounds. Ever wondered what Fizz Buzz sounds like, or which sounds better bubble sort or quick sort? So hey Ruby, let’s make music!
Julian Cheal, @juliancheal
A British Ruby/Rails developer, with a penchant for tweed, fine coffee, and homebrewing. When not deploying enterprise clouds, I help organise fun events around the world that teach people to program flying robots. I also occasionally speak at international conferences on the intersection of programming and robotics.
JRuby 9000 was released over a year ago after a lengthy set of pre-releases. Our most significant major release in nearly 10 years. New runtime. Native IO subsystem. Complete port of C Ruby's transcoding facilities. How did things go? Is the new runtime faster? Did it enable more aggressive optimizations? Does it help aid debugging in development? This talk will discuss lessons learned and where we are focused for upcoming improvements.
Thomas E Enebo, @tom_enebo
Thomas Enebo co-leads the JRuby project. He has been passionately working on JRuby for many years. When not working on JRuby, he is writing Ruby applications, playing with Java, and enjoying a decent beer.
I made ruby 10x faster. Let me show you how.
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 deoptimization engine onto ruby, which enables lots of optimization techniques that are yet to be applied to it.
Static typing is very popular among recent languages, e.g. TypeScript, Flow, Go, Swift, etc. Even Python has introduced type annotation. How about Ruby?
Can Ruby statically typed? Has dynamic typing become obsolete?
I will show you the answer. You will see the future of the type system in Ruby3.
How do we do machine-learning things by using Ruby?
In this talk, I will show you the current status of SciRuby by comparing it with other language stacks such as the SciPy stack on Python.
Kenta Murata, @mrkn
A Ruby committer. A BigDecimal maintainer.
People sometimes want to involve CRuby development, but won't. I guess it's because they couldn't embody the motivation and don't know how to work about it.
I explain how to find an entry point, write code, make matz merge it.
NARUSE, Yui / @nalsh
Ruby committer, nkf maintainer, working at Treasure Data Inc.
Strings are used pervasively in Ruby. If we can make them faster, we can make many apps faster.
In this talk, I will be introducing ropes: an immutable tree-based data structure for implementing strings. While an old idea, ropes provide a new way of looking at string performance and mutability in Ruby. I will describe how we replaced a byte array-oriented string representation with a rope-based one in JRuby+Truffle. Then we’ll look at how moving to ropes affects common string operations, its immediate performance impact, and how ropes can have cascading performance implications for apps.
Kevin Menard @nirvdrum
Kevin is a researcher at Oracle Labs where he works as part of a team developing a high performance Ruby implementation in conjunction with the JRuby team. He’s been involved with the Ruby community since 2008 and has been doing open source in some capacity since 1999. In his spare time he’s a father of two and enjoys playing drums.
A proposal of new concurrency model for Ruby 3
This presentation proposes a new concurrency model to support parallel execution for Ruby 3.
Now, Ruby has "Thread" to support concurrency.
However, making thread-safe programs is very hard because we need to manage all of the concurrent object mutations.
To overcome such difficulty, we propose a new concurrency model that enables parallel execution.
This presentation shows the following topics.
(1) Why is thread programming difficult?
(2) New concurrent model proposal and why is this model easy?
(3) Current design and implementation of this idea.
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. He became a faculty of University of Tokyo (Assistant associate 2006-2008, Assistant professor 2008-2012). After the 13 years life in university, now, he is a member of Matz's team in Heroku, Inc. He is also a director of Ruby Association.
Released in 1989 the Gameboy was the first handheld console of the Gameboy series to be released by Nintendo. It featured games such as Pokemon Red & Blue, Tetris, Super Mario Land and went on to sell 64 million units worldwide.
My talk will be discussing what components make up a Gameboy, such as the CPU, RAM, Graphics and Game Cartridge. How each component works individually and how they work together to let trainers catch em all. Then how to replicate the behavior of the Gameboy in code to eventually make an emulator.
Colby Swandale, @0xColby
Working in Melbourne at Marketplacer. I enjoy working on Ruby on Rails projects, low level computing and encryption.
To hit Ruby3x3, we must first figure out **what** we're going to measure, **how** we're going to measure it, in order to get what we actually want. I'll cover some standard definitions of benchmarking in dynamic languages, as well as the tradeoffs that must be made when benchmarking. I'll look at some of the possible benchmarks that could be considered for Ruby 3x3, and evaluate them for what they're good for measuring, and what they're less good for measuring, in order to help the Ruby community decide what the 3x goal is going to be measured against.
Matthew Gaudet, @MattStudies
A developer at IBM Toronto on the OMR project, Matthew Gaudet is focused on helping to Open Source IBM's JIT technology, with the goal of making it usable by many language implementations.
Amir Rajan (creator of the #1 iOS Game: A Dark Room), will speak about his journey to becoming a game developer using Ruby. He'll explore the source code for his games, showing how elegance in code becomes elegance on screen.
Amir Rajan, @amirrajan
Amir Rajan is a pretty decent dev and is constantly trying to improve in his craft. He’s a jack of all trades, being comfortable with a number of platforms and languages. Last but certainly not least, Amir is the creator of A Dark Room iOS. This RPG conquered the world and took the #1 spot in the App Store and placed in the top #10 paid apps across 70 countries. It has been downloaded over 2.5 millions times and is a staple game in the App Store with over 25,000 five star reviews.
Concurrency will be an important feature for future Ruby, and Erlang programming language is famous for its concurrency features such as Actor model, Lightweight process and ability to build fault tolerant distributed systems such as the telecom.
ErRuby, an Ruby interpreter on Erlang/OTP, tries to bring Ruby to the concurrent world. ErRuby use Actor and process to create an Object-Oriented realm in immutable Erlang universe. I'll talk about how to implement key Ruby features in a functional way and demonstrate experimental concurrency features of ErRuby.
ErRuby is at github.com/johnlinvc/erruby
REST and Hypermedia Web APIs such as Amazon Web Services are getting more common every day. Of course it is also common to integrate those APIs into Ruby app. There are so many HTTP clients we use for integration written in Ruby but all of them lack the feature "state management" for taking advantage of Web APIs.
I implemented the feature on Faraday, a typical HTTP client in Ruby. I'll show you the key point and the usefulness of the implementation.
Toru Kawamura, @tkawa
RESTafarian, freelance programmer, technology assistance partner at SonicGarden Inc., co-organizer of Sendagaya.rb (regional rubyist meetup), and facilitator of RESTful-towa (“What is RESTful”) Workshop
Ruby has many different web server options, covering a gamut of possible concurrency architectures. We will look at what those concurrency options are, and at what their respective theoretical costs and benefits are.
We will then look at a reference ruby web server implementation that can have each of these different concurrency architectures plugged into it, and examine how its performance under load varies with each of those architectures.
We'll wrap it all up with a summary of the results, and a look at which Ruby web servers fall into which categories of concurrency architecture.
Kirk Haines, @wyhaines
I started using Ruby back in the Ruby 1.6 days, and I have used it in my daily professional life ever since. I'm fascinated by issues of application design, distributed architecture, and making hard things easy. I was also the last Ruby 1.8.6 maintainer. For entertainment, I read studies on exercise and nutrition physiology, and I like to run and bicycle long distances. This year will include my first 50k and 50m running races, and at least one 75 mile gravel bike race.
mruby and mruby-cli makes it possible to ship single binary command-line tools that can be used without setup effort. How can we make these easy to write too?
Existing libraries for making command-line tools are built for experienced rubyists. This makes them a poor choice for porting to mruby.
In this talk we'll explore how to build a command-line tool with mruby-cli along with a design and philosophy that makes it easy to create new commands and maintain existing commands even for unfamiliar developers.
Eric Hodel, @drbrain
Eric Hodel is a ruby committer and maintainer of many gems. He works at Fastly on the API features team maintaining and building ruby services that customers use to configure their CDN services.
There is a hidden problem waiting as Ruby becomes 3x faster and starts to support parallel computation - reordering by JIT compilers and CPUs.
In this talk, we’ll start by trying to optimize a few simple Ruby snippets. We’ll play the role of a JIT and a CPU and order operations as the rules of the system allow. Then we add a second thread to the snippets and watch it as it breaks horribly.
In the second part, we’ll fix the unwanted reorderings by introducing a memory model to Ruby. We’ll discuss in detail how it fixes the snippets and how it can be used to write faster code for parallel execution.
Petr Chalupa / @pitr_ch
He is a core maintainer of concurrent-ruby, where he has contributed concurrent abstractions and a synchronisation layer, providing volatile and atomic instance variables. He is part of the team working on JRuby+Truffle Ruby implementation at Oracle Labs. He is a happy Ruby user for 10 years.
mruby's unique packaging strategy gives developers the possibility to inject Ruby code in any program, written in any language.
In this talk we'll discover how a mruby application can be distributed, how one could replace OS system calls with custom Ruby apps, and real-world usages of this technique.
Franck Verrot, @franckverrot
Domain-Specific Language(DSL) is a useful tool for communication between programmers and businesses. One of the greatest present from Ruby to programmers is to allow them to develop DSL easily. Ruby has a variety of functionalities for DSL making.
I started to maintain Rake last year. I found interesting techniques in Rake and felt different things on other popular DSLs like rspec examples, rails routes, and thor tasks etc. And I found patterns of code for DSL with Ruby.
I’m going to try to improve Rake 12 using these patterns. So I will describe these patterns of code for DSL with Ruby and talk on the future of Rake 12.
SHIBATA Hiroshi, @hsbt
Ruby Committer, Chief Engineer at GMO Pepabo, Inc.
Last year at RubyKaigi, I introduced Hyalite, a virtual DOM implemented in Ruby.
Hyalite allows Rubyists to write front and back-end code in Ruby, an approach that has proven to provide many benefits. Using a single language across an application stack is sometimes referred to as isomorphic programming.
This talk introduces a new framework for isomorphic programming with the Opal: Menilite.
Menilite shares model code between the server side and the client side by marshalling objects and storing them in the database automatically.
As a result, code duplication is reduced and APIs are no longer a necessity.
Isomorphic programming can significantly accelerate your progress on a project; I sincerely hope you find it helpful in developing web applications.
Menilite aims to expand the playing field for the Ruby language, a language optimized for developer happiness. I'm sure you will agree that we will find even more happiness by bringing Ruby to the front-end as well.
Yoh Osaki, @youchan
Software engineer at Ubiregi inc. Author of Hyalite which is react like virtual DOM library. Member of Asakusa.rb, Chidoriashi.rb
While job queue system has been indispensable to execute a task asynchronously for a long time, we have some problems in typical job queue systems built with Ruby. Have you ever suffered from job queue system's availability, scalability or operation cost? Don't you want to implement a job with another language which is suitable for the job?
We built a new job queue system using Docker this year. In this talk, you'll know how these problems can be solved with the system constructed with Ruby.
Takashi Kokubun, @k0kubun
A software engineer working to improve developer's productivity at Cookpad Inc.
Ruby is used everywhere now. In this talk we will compare Ruby concurrency with Node.js, JVM, Erlang and others.
Ruby supports concurrency but with GIL, it can't run threads parallely. We will explore options available that makes this problem irrelevant.
Node.js doesn’t support concurrency or parallelism. Node.js is single threaded. It runs an event loop which makes non blocking IO possible. We will explore why Node.js fits well to only certain types of problems only
JVM supports native threads and can do parallelism. But in JVM memory is still shared among different objects. We will explore JVM architecture in regards with memory. Where JVM gets it wrong.
Erlang/Elixir achieves concurrency and parallelism with shared nothing, immutable data, first class processes, actor model. We will explore whether this approach is better for solving every kind of problem.
Talk will have deep comparison with all of these platforms in regards with what most real world project need,
Anil Wadghule, @anildigital
I am a geek but a senior software developer by profession, currently working for Equal Experts, India. When not programming, I spent time in exploring music around the world. Emacs is my text editor of choice. I love watching Japanese animes.
Easy and fast analysis of data is an uphill task for any Rubyist today. Ruby has been mostly restricted to web development and scripting, until now. In this talk we will have a look at daru, a gem from the Ruby Science Foundation specifically developed for simplifying data analysis tasks for Rubyists.
You will learn how you can use daru for analyzing large data sets and get a tour of daru being coupled with other Ruby tools like pry, iruby and nyaplot for interactive and standalone data analysis and plotting for gaining quick insights into your data — all with a few lines of Ruby code.
Sameer Deshmukh, @v0dro
Sameer is a student and a contributor to the Ruby Science Foundation, where he helps build scientific computation tools in Ruby. He is currently maintaining daru, a library for data analysis and manipulation in Ruby. He enjoys spending spare time with friends, books and his bass guitar.
Configuration of a web server is becoming more and more complex, as technologies such as OAuth, Client Hints, HTTP/2 push become standardized.
This talk introduces the recent advances in HTTP and related technology, as well as explaining how they can be configured and maintained by writing ruby code based on the Rack interface.
Kazuho Oku, @kazuho
This talk describes how to create Ruby bindings of a C library. I want to increase Ruby bindings developers. If you're interested in using C libraries from Ruby and/or using Ruby more cases, this talk will help you.
This talk includes the following topics:
* List of methods to create Ruby bindings of a C library.
* Small example of each method.
* Pros and cons of each method.
Kouhei Sutou @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 interested in how to tell other programmers about how he codes clear code.
Learning GLSL (OpenGL Shader Language) is a little harder to me, but if I can create shader like Unreal Engine 4's material design tool? Let's play with Shader on OpenFrameworks.
I using mruby and OpenFrameworks to create a scriptable GLSL generator to create shader. By the power of Ruby DSL, the shader generate becomes very fun and simplely.
A Web Developer focus on Interaction Design, and love Game, Animation and Comic. Current working on develop game and website.
Fluentd v0.14, which has drastically updated Plugin APIs, also has a layer to provide compatibility for old-fashioned plugins to support them and huge amount of existing configuration files in user environments.
It was far from easy, and developers had to do everything possible, including any kind of black magics.
This talk will show some stories with code and commits of a software used in real world:
* How to provide compatibility between different APIs
* How to provide required methods on existing objects
* How to make sure to call super for existing methods without super
Satoshi "moris" Tagomori, @tagomoris
OSS developer/maintainer: Fluentd, Norikra, MessagePack-Ruby, Woothee and many others mainly about Web services, data collecting and distributed/streaming data processing. Living in Tokyo, and day job is for Treasure Data.
Various patches are sent to Ruby. Those patches contain various ideas on programming.
In this session, I would like to discuss the knowledge underlying programming, such as the original algorithm and data structure patches of Ruby and some libraries.
Mitsutaka Mimura, @takkanm
member of Asakusa.rb, eiwa-system-management.
How do you write software for controlling home appliance such as High Tech Seat (a.k.a. Washlet) ?
When you write bad code, water may flood or may not be flushed...
Even after you write correct code, you might want to add some nice features like open and close the cover working with flusher. How do you verify the behavior of it?
State machine diagram is usually used to verify the behavior, especially for embedded systems.
In UML 2.x, nested states and orthogonal regions are supported to describe complex behaviors.
Through the diagrams, you can learn what is "good" design for controlling devices.
In addition, Ruby lets us convert the diagrams into executable code easily.
Let's try to implement High Tech Seat from state machine with mruby.
Yurie Yamane, @yuri_at_earth
"nora" mrubyist. A member of Team Yamanekko. A member of TOPPERS Project. A staff of ET robocon TOKYO.
Pwrake: Distributed Workflow Engine based on Rake
Pwrake aims at the high-performance parallel execution of data-intensive scientific workflows using multi-node clusters with 10,000 cores. In the design of Pwrake, I made use of existing powerful tools. First, Pwrake is implemented as an extension to Rake. In this talk, I show that Rake is so powerful that it enables portable definition of workflow DAGs comprised of many tasks. Second, Pwrake has an option to make use of Gfarm distributed file system for high-performance parallel file I/O. Also, I will talk about other studies on Pwrake such as locality-aware task scheduling.
Masahiro TANAKA, @masa16tanaka
Research Fellow at CCS, University of Tsukuba. The author of NArray, a numerical library for Ruby.
Many people strive to be armchair data scientists. Google BigQuery provides an easy way for anyone with basic SQL knowledge to dig into large data sets and just explore. Using the rubygems.org download data we'll see how the Ruby and SQL you already know can help you parse, upload, and analyze multiple gigabytes of data quickly and easily without any previous Big Data experience.
Aja Hammerly, @the_thagomizer
Aja lives in Seattle where she is a developer advocate at Google and a member of the Seattle Ruby Brigade. Her favorite languages are Ruby and Prolog. She also loves working with large piles of data. In her free time she enjoys skiing, cooking, knitting, and long coding sessions on the beach.
Unicorn is the most used multiprocess server framework implemented in ruby. But it doesn't work on Windows unfortunately.
Serverengine is a robust multiprocess server implemented in ruby and it works on windows now. This is the first multiprocess server with ruby which can work on windows.
I'll talk about what only ruby can do and my original effort for realizing a robust multiprocess server for restricted environment.
And in the end, I'll introduce real demos on windows.
Ritta Narita, @narittan
Ritta graduated from university last September and now is working at Treasure Data.Inc. And he is maintainer of serverengine.
In the current tech scene, many developers use so-called Container-based virtualization such as Docker or LXC.
The speaker will talk about Linux container technologies and his tools. He develops haconiwa (https://github.com/haconiwa/haconiwa), a tool helping developers combine container features such as cgroup, namespaces and capabilities which they want to use.
The speaker has about 2 years experiences on Docker (in-house CI basis) and LXC (PaaS service). The talk has background of (some) issues found in these experiences, and includes why he's creating a new container in Ruby and why he switched to *m*ruby.
Uchio KONDO, @udzura
An 8 y.o. Rubyist, Hashicorp freak, DevOps enthusiast, system programming novice. One of the writers of books "Perfect Ruby" / "Perfect Ruby on Rails" (both in Japanese). He lives in Fukuoka - the "coast" city of "west" Japan, works at GMO Pepabo, Inc. as SRE/R&D/Dev Productivity Engineer, and holds Fukuoka.rb local meetup. He also is a organizer of RailsGirls Fukuoka #1.
Ruby has three classes to represent integers: Fixnum, Bignum and Integer.
Integer is the abstract super class of Fixnum and Bignum.
Fixnum represents small integers that fit in a word.
Bignum can represent any integers until the memory is full.
The exact range of Fixnum varies depending on the machine architecture and Ruby implementation.
Since Fixnum and Bignum are implementation details,
applications which depend on the Fixnum range is not portable at least, and just wrong in most cases.
We'll unify Fixnum and Bignum into Integer for Ruby 2.4.
This makes Ruby programs a bit more portable.
Also, hiding the implementation detail makes Ruby easier for beginners to learn.
Tanaka Akira @tanaka_akr
Ruby committer, Researcher of National Institute of Advanced Industrial Science and Technology (AIST)
Currently many of Ruby's String methods, such as upcase and downcase, are limited to ASCII and ignore the rest of the world. This is finally going to change in Ruby 2.4, where this functionality will be extended to cover full Unicode. You will get to know what will change, how your programs may be affected, and how these changes are implemented behind the scenes. We will also look at the overall state of internationalization functionality in Ruby, and potential future directions.
Martin J. Dürst @duerst
Martin is a Professor of Computer Science at Aoyama Gakuin University in Japan. He has been one of the main drivers of Internationalization (I18N) and the use of Unicode on the Web and the Internet. He published the first proposals for DNS I18N and NFC character normalization, and is the main author of the W3C Character Model and the IRI specification (RFC 3987). Since 2007, he and his students have contributed to the implementation of Ruby, mostly in the area of I18N.
My first dRuby talk was in 2000, here in Kyoto. After the talk, I got many opportunities to write books and to talk on various topics including OSS, XP, and software testing. So, I'm glad to talk again here this year.
Nowadays, concurrent processing has become more familiar with many people as one of their solutions. It's time for us to begin understanding dRuby.
In this talk, I will introduce dRuby, sometimes called an OOPArt, to all generations of Rubyists.
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.