Rubykaigi 2019 に参加した

Rubykaigi 後に社内勉強会やら、研修やら GW やらあって、書けてなかったのでやっと書ける。

ザクッと今回行ってみての感想を書いていこうかと思います。

選んだセッション

  • 今回は、個人的に機械学習周りを勉強してきたこともあって、 Ruby での機械学習系の話
  • Ruby のコアな開発事情の話
  • Rubykaigi ということもあり、 Web 系の話は他でも聞けそうと思ってスライドと Twitter で補足

所感

機械学習って Python だよね」って言われちゃうのが辛いというのはそのとおりだなと。

この分野を盛り上げる意味でも、 Red Chainer とか使っていこうという気持ちになったので、早速会社の同期とやってみる! 実用編もやりたかったしね!

そして、仙台を聞いてた分からの進化を知ることができて、その意味でも楽しさがあった。どんな世界を実現したくて、 Ruby の世界を広げていくのか?みたいなのが知れるのが楽しい。

また、今回は福岡ということもあって、懇親会の後の飲み会2次会でお店紹介したり、たくさんの Rubyist の方とお話できた! 前回は自社の方と一緒にいることが多かったのであまりできなかったけど、今回はそれもできて良かった〜!

来年も行きたいな!

今回も交通費から、チケット代まで出していただいた、弊社に感謝 😭

www.feedforce.jp

以下セッションの感想

Day1

Keynote

Ruby 3 で導入される型の話(rbi ファイル)やパフォーマンスの話など詳細な内容というより、概要についてがメインだった印象。 今年の Rubykaigi で話される Ruby 3 に向けての進化がこのセッションで話されるよ!というのを感じたので、この2つの基調講演でワクワクが高まった!

Pragmatic Monadic Programing in Ruby

去年の Jocker さんと moris さんの話を聞いてたからなんとかついていけた!

Hijacking Ruby Syntax in Ruby - RubyKaigi 2018

AST変換を使って、Proc を再評価することで使ってモナドRuby の世界で実現しようという話。

関数型の言語も触っているからの視点だと感じたので、複数言語やるのって大事だなと思い、 Haskell やろうとしているワイ。

Ruby for NLP

自然言語処理の基礎的な、形態素解析からの説明していただいたので、分かりやすかった。 (やっぱこの領域の日本語めんどくさいっすね)

ゼロつく本やってたからこそ softmax -> cross-entropy で評価するとか、 LSTM の説明が短くても理解できた。

機械学習って Python だよね」って言われちゃうのが辛いという言葉が印象的。

RMagick, migrate to ImageMagick 7

RMagic の2年半振りのバージョンアップについて。

メモリリークがめっちゃ直ったらしい。 実際、メモリリークがいい感じになったのであれば、 AWS Lambda で Ruby 使えるし、いい感じにできないかなぁとか思ったり。

Compacting GC for MRI v2

断片化したメモリーを整頓して空きメモリ空間を大きくする話。 Two Finger Compaction で、メモリ空間整理した事例は凄まじかった。

Day2

Keynote

All bugfixes are incompatibilities

Ruby 安定版のメンテナンスの話。 何を feature とするのか?何を脆弱性とするのか?の判断基準の話が面白かった。

バグと脆弱性のみを安定版では取り込む。

Better CSV processing with Ruby 2.6

RubyKaigi 2019 - Better CSV processing with Ruby 2.6 #rubykaigi - ククログ(2019-04-20)

元同僚の秒速284km さんのセッション CSV ライブラリが早くなった話。

複数行書き出す場合に関しては、 CSV#<<Ruby 2.5 と比較して、1.6倍強早いらしい。 これは業務でも関係ありそうなので、実際に試してみたい。

f:id:pokotyamu:20190506215327p:plain

Yabeda: Monitoring monogatari

yabeta というRubyの監視ツールフレームワーク。 Datadog に飛ばしたりといったプラグインが用意されている。

State of Sorbet: A Type Checker for Ruby

Stripe のチームによる静的型解析器 Sorbet の話。

実際にメソッドの上に型の情報を書き足すことで、型チェックを静的に解析しようという方針。 ただ、これはどうなんだろう?rbi ファイルとか Type profiler を使うことで、実コードには書き出さない方式にシフトしたいのかな?と思ってたんだけど...

OSS 化するらしいので、今後 watch してみる。

Benchmarking your code, inside and out

ElasticSearch のベンチマークの話。

elastic/rally: Macrobenchmarking framework for Elasticsearch

YAMLベンチマークで測定したい内容、データセット、実行回数などを記述する。

Day 3

Keynote

Ruby Committers vs the World

コミッター同士のリアルな言語をどうしていこうか?の提案が見れるのが楽しい。 これは生で見れてるからこそみたいな盛り上がりがあると思う。

Dayte.parse の挙動で、123日目というパースのされ方はびっくりだった。なお366日目はちゃんと例外になる模様。

> Date.parse('123')
=> #<Date: 2019-05-03 ((2458607j,0s,0n),+0s,2299161j)>
> Date.parse('366')
Traceback (most recent call last):
        6: from /Users/pokotyamu/.rbenv/versions/2.6.3/bin/irb:23:in `<main>'
        5: from /Users/pokotyamu/.rbenv/versions/2.6.3/bin/irb:23:in `load'
        4: from /Users/pokotyamu/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        3: from (irb):4
        2: from (irb):4:in `rescue in irb_binding'
        1: from (irb):4:in `parse'
ArgumentError (invalid date)

The Selfish Programmer

Ruby で書くということは楽しいこと!そのためには守らないといけないルールがあるよねという話。

例えば、 gem を使って車輪の再開発しないようにしようねとか、依存を少なくしていこうねとか。 あとは、 Heroku へのセットアップを CI にやらせて属人性を減らしていこうねとか。

Ruby 寄りではなかったけど、聞いててあるあるなことが多かったので聞きやすかった。

The challenges behind Ruby type checking

Ruby で型を扱うことの難しさについて。 メタプロをどう扱うか?が非常に難しい。メソッドに対して型宣言をしなければならないが、それが書き換わっている可能性がある。 だから、このメソッドは String or Integer という幅をもたせて定義できる必要がある。

ruby/ruby-signature: Type signature for Ruby classes

Array の rbi ファイルが非常に読みやすくて良い感じ。

ruby-signature/array.rbi at master · ruby/ruby-signature · GitHub

Play with local vars

parse.y をライブで書き換えるというのが見ていてエキサイティングだった。

Red Chainer and Cumo: Practical Deep Learning in Ruby

  • DNN
    • Red Chainer / TensorFlow.rb/menoh-ruby
  • Tensor
    • Numo::NArray -> CPU
    • Cumo -> GPU

ONNX(Open Neural Network eXchange)というNN関係のデータのやり取りに関する規格がある。他言語で学習した資産を Red Chainer でインポートできる! つまりカスタムを Ruby の世界でできる!!

後半は CUMO の話。

基本的な CNN 系の関数をサポートしている感じで、GPU のメモリに依存して、アルゴリズムを動的に決める。 Ruby 上で Array の処理をしている部分があるらしいのでそこを NUMO/CUMO に逃がすとさらに2倍ぐらい早くはなりそうとのこと。

Closing Keynote: Optimization Techniques Used by the Benchmark Winners

Ruby 最適化頑張ったのを10秒に1回ぐらい自慢する話。 ひたすらやばかったww

これは、レビューで来たら絶対弾きますねwww