/ ,' 3

https://twitter.com/gorlemkun

つれづれなるままにるびーかいぎ2019

感想だけ。全体的によくわからなかった。理解度はだいぶ自信ないっす。

ちゃんとした記事にしようかと思ったけどメモ時点で心が折れてしまったのでメモ集として供養します。

いちにちめ

Performance Improvement of Ruby 2.7 JIT in Real World

JIT

わからん。

それぞれの最適化、大量のコンパイル済みファイルを一つにまとめたり、メソッドのインライン化だったりはぼんやり分かったけど、去年の発表の時点でも単にJITコンパイルしただけで速くなった的な印象があり、それがどうしてなのかが結局いまいち分からなかった。YARVで処理するよりもCの動的ライブラリにコンパイルするだけでちょっと速くなっちゃったということなんだろうか。

もしそれで早くなるかつ、動的に最適化方法を変更してチューニングしていけるのは夢がある話だと思った。あと最適化のためにできる処理方法の変更はYARVよりもJITコンパイルのほうが自由度が高かったりするんだろうか?だとしたらすごい合理的な方法かも。

https://k0kubun.hatenablog.com/entry/ruby26-jit

YARVに関してはRubyのしくみという本が詳しいらしいという話を懇親会で教えていただいたのと、解説記事もあった。ちまちまつまみ食いするように読んでる。まだわからない。

https://www.amazon.co.jp/Rubyのしくみ-Ruby-Under-Microscope-Shaughnessy/dp/4274050653/ref=nodl_

https://magazine.rubyist.net/articles/0006/0006-YarvManiacs.html

Write a Ruby interpreter in Ruby for Ruby 3

https://techlife.cookpad.com/entry/2019/04/17/014142

RubyとCを融合させていいとこ取りするのはめっちゃ納得感があった。おもしろかった。

そもそもはGuild実装のためにRubyのContextが欲しかった(?)的なところからスタートして、ここまで両者のいいとこどりをする提案まで持っていけるのはすごいなあ。

それと、Ruby部分が多くなることで、他の最適化ともシナジーがあるのもつよい。

A Type-level Ruby Interpreter for Testing and Understanding

https://github.com/mame/ruby-type-profiler すごい愚直な実装という感じ(決して煽ってはいないです)。ぜんぶの型情報をプログラムを実行してみてプロファイリングして、矛盾を探すというものだけど、この方法だとどうもメソッド内のif分岐とかで組み合わせ爆発が起こるそうな、、まあそりゃあそうか。あとメタプロに効かないというのと、C定義のメソッドだとまだできないっぽい。

Optcarrotは10分くらいかかったそうな。

課題感の共有を受けて、めっちゃ大変そう、みたいな感想がとにかく出る感じ。これから先の進捗が本当に面白いところになりそう。

Fibers Are the Right Solution

IO待ちの空き時間をFiberで有効活用して、さらにそれを暗黙的にできるようにしましょう(?)という結構チャレンジングな話。

Webサーバーの性能改善する上で直すべきはIO待ちだ!!!みたいな強いメッセージを感じた。いやたしかに。

Fiberの存在を忘れていた。コントローラブルでいいですね。

https://qiita.com/k-penguin-sato/items/baec25479351ff1b6469

ノンブロッキングIOとイベントループもちゃんと理解できてなかった。

Node.js in Action, Second Editionが理解によかったです。

https://blog.takanabe.tokyo/2015/03/26/240/

async / awaitもわかっていなかった。けど調べるとなるほどこれは便利。

Pattern matching - New feature in Ruby 2.7

case のなかの in 文法の発表

すげー表現力。そして結構直感的。JSONと親和性高そうで、Ruby本体にこういう便利なもの入るのは素直に嬉しい。

2012年からやっていたらしく、7年間かかったのか、、と感慨深い気持ちになった。

 

ふつかめ

All bugfixes are incompatibilities

ブランチメンテナのお仕事。

Rubyエンバグデグレ集みたいな感じになってて、大変だぁ…みたいな感想が多発した。ウェブアプリケーションを運用している感覚に近いっちゃ近いと思った。テストとかどうしてるんだろ?(もしかしたら言ってたかも)特に文法パースしてるところのコードは多くの人は触れないレベルでやばい気がするので、メンテするのめっちゃ怖そうである。

How RSpec works

RSpec全体の構造の概観がざっくりとよくわかる発表だった。RSpec結構規模でかい印象あるけど、テストの構造を定義するもの、モックするもの、期待値と実際の値を比較するものの3つのGem(+1で共通サポートライブラリ?)で構成されていて、その中のコードも結構細かいクラスに細分化されているっぽい。ちゃんと設計されている感じ。

あとでコードを追いたい時に役立ちそうだなあという感想。これレベルのおっきいコードはちゃんと追えたためしがないが・・・。

RSpecって全Gemのなかでいちばん人気なのね。

https://rubygems.org/stats

intimate Chat with Matz and mruby developers about mruby

http://blog.masuidrive.jp/2013/01/24/diff-cruby-mruby/

そもそもmrubyがなんなのかよくわかっていなかった。省メモリなこと以外は、けっこう普通のrubyだった。

https://www.iij.ad.jp/dev/tech/activities/mruby/

実行方法は少し違う。事前に中間表現へコンパイルしておいて、それをLiteVMから実行する形式らしい。事前にコンパイル。という部分が違いそう。

メモリは食わないが、CRubyよりは断然おそい。

二年目の秋頃まで動かなかったらしい。そこまで信じて動かないプログラムを書き続けられるのか…慣れの力すごい。と思ったけど、書いている本人も二年目の8月頃に弱音を吐いていたみたい。

ガベージコレクタを2時間のつまらない会議で完成させたそうな。はえーすっごいスピード感。

State of Sorbet: A Type Checker for Ruby

FacebookPHPの型システム作ってた人が作ったのかこれ、、なるほどなあ。

Stripeが全世界に1700人も居る会社だとは思わなかった。一つのプロダクトを主力としてずっとそのプロダクトで伸び続けてて、この規模かあ。日本だとあんまり見ない気がする。LINEは2000人くらい、メルカリは1000人規模くらいらしいです。

変数の定義元の型がマウスオーバーで分かったりするみたいなんだけど、そのユースケースにハマるような実体験をあんまりしていないので、うーむという感じ。補完やsrbコマンドでの警告出力は結構ありがたいかも。Rubocopと一緒にお世話になりそう。

そしてもうドキュメントがある。

https://sorbet.org/docs/overview

sourcegraphとも連携できて、定義元がシュッとわかったりするらしい。というかなにこれ便利!!sourcegraphというものを知らなかった。これから使います!

https://sourcegraph.com/welcome

DeveloperProductivityというチームでこのプロジェクトは進めているらしい。改善効果がめっちゃ波及しやすい大規模な会社ならではっすね・・・という感じ。

Building a game for the Nintendo Switch using Ruby

いろいろわろたな発表でした

Nintendo Switchの上ではC言語が動くらしく、そこにmrubyの処理系を組み込んで実行できるようにできるらしい。

mrubyの処理系が動くということは、rubyのコードをコンパイルして置き直すだけで、ゲームを起動することなくゲームの処理内容を書き換えられるということで、デモしながらゲーム内容の置き換えをリアルタイムにやってくれた(そしてその内容がシュールだったw)

2Dゲームならしっかり60fpsで動くし、インディーゲーム開発者にはいいのでは。しかし、他のゲームエンジンも負けじと色々楽そうではあるので、実際のところどうなんでしょうね?

Benchmarking your code, inside and out

ぜんぜんわかんなかった

Rallyというベンチマークツールがあるそうですね

https://www.elastic.co/jp/blog/announcing-rally-benchmarking-for-elasticsearch

どこまで扱えるものかは不明。自分は過去Locustというものを見たことがある。これはどっちかというとサーバー側というよりクライアント側のやつだけど、Rallyはどうなんだろう。

https://locust.io/

LT

みっかめ

力尽きた。

Ruby Committers vs the World

DateクラスではなくTime クラスに置き換えていく流れらしいですね

Ruby の Organization にRubyのライブラリがいっぱいあって、LoggerとかCSVとかにコミットを募集しているそうな。Cではなく、Rubyが書ければコントリビュートが可能だそう。

https://github.com/ruby/csv

https://github.com/ruby/logger

チラ見すると、なるほど、公式のライブラリのわりには落ち着いてる感じ。Issueもそんなに無いからやることたくさんある感じでもない?んだろうか。

文法の議論は創造的な雰囲気をとても感じて面白かった。メソッド呼び出しの新しい文法があるべきか?右代入はどうか?イテレータの@記法は?など、表現方法どんなのがいいか、今だけじゃなくて後先も考えながら議論していく様子はよいですね。そして彼らはそういった文法を追加する権限を持っている。という事実を再確認できた。

Cleaning up a huge ruby application

噂のCookpadのお台場プロジェクト。

https://techlife.cookpad.com/entry/2018/12/26/103330

oneshot coverage知りませんでした。Ruby2.6の新機能一覧見て、ここまでユースケース思い浮かぶものなんだろうか。今回の場合は開発者の人がwhyから書いてくれたからこそこういうことがわかったけれども、、いや、ほかの機能でもモノによっては意図まで記述してくれる可能性もあるか。次から調べてみよう。

そういえばsimplecovとかいうものもあったな。こっちとはパフォーマンス以外だと何が違うんだろ?こっちは結構リッチに可視化までやってくれて便利そうだけど、可視化まわりでsimplecovと絡めた要素はそういえば無かった気がする。

https://github.com/colszowka/simplecov

The challenges behind Ruby type checking

何言ってるのかわかりませんでした。。

Performance Optimization Techniques of MessagePack-Ruby

シリアライズとデシリアライズアルゴリズム聞いて、完全にわかった!と当時は感じていたけど、今となってはさっぱり忘れてしまった。発表がとてもわかりやすかったので下側のレイヤー詳しくなくても理解していける内容だったと思う。

知らないレイヤーの知見が深まるいい発表だった。

Reducing ActiveRecord memory consumption using Apache Arrow

よくわからない!でもApache Arrowという便利なものが知れたのはでかい収穫。

Red Chainer and Cumo: Practical Deep Learning in Ruby

結局Whyの部分があんまり理解できなかったかも・・・。

Optimization Techniques Used by the Benchmark Winners

魔神

雑感

発表はきいておいて良かったものが多かった

発表を流して聞いてると昨今の技術の地平みたいなものが広がる。おおなるほど、あれはああなっていたのか。とか、こんな便利なものが!知らなかった!とか結構多い。業務に活かすつもりで聞いてもつまらない発表が多くて、どっちかと言うと知的好奇心に身を任せるほうが楽しめるタイプのカンファレンスだったと思う。自分が意味不明な分野とか、興味ない分野の発表を聞いて、新たに分かる範囲を広げていくのも楽しみ方としてアリだなと思った。Rubyの知識だけじゃなくて、周辺の知識が広まるのもいい。

名刺枯渇問題

20枚?くらいあった気がするけど結構かんたんに枯渇した。50枚は要る気がする。となると、もう名刺が入った箱持ってくるしか無いんじゃないかな。という気持ちになった。次からそうしよう。

名刺が無意味問題

会社の名刺があんまり意味ないことに気づいた。。twitterのidとかどこにも書いてないので、渡したところでなにも今後のつながりが発生しない虚無の名刺と化している。どうにかせねばなあ。というわけでtwitter idとgithub idだけ記載した名刺サイズの紙だけ応急処置的に作ろうかと考えている。シールとかも考えたけどたぶん渡すときに貼るひまがない。

スポンサーブース出してたraksulを確認してみる。

https://raksul.com/businesscard/

600円くらいで100部刷れるみたいなので、早いうちにパパっとやってしまおうかな。

PCいらないんじゃね問題

iPad Pro + Smart Keyboardを持っていったんだけど、メモはこれで十分すぎるくらいだった。Macより電池ももつし、いろいろ無敵な感じ。

コードの読み書きだけ出来ないのが気になるポイント。いや、読みはギリギリできるっちゃできるんだけど、日常的にその用途でiPad使っているわけではないので、会議のために慣れが要るみたいな事態になってしまう。

まあ実質1日目の夜しかやらなかったので、今となってはいらないんじゃね。という意見が勝ちつつある。

ぼっちしんどい問題

ぶっちゃけて書くと、大量に初見の人と話していくムーヴがかなりしんどかった

 

懇親会きびしい問題

RubyKaigiに対する目標は特になかった。それが問題だったかも。

発表聞いてて収穫はあるにはあったけれども

懇親会でも会話の目的がどうもうまいこと作れなかった

他の人に何を聞きたいのか?を上手く作れなかった

今回2回目なのでそれなりに慣れた状態で参加できて、出会いもあるにはあったけど、うーむ。次もプライベートで行きたいかと言われると、今のところはいいかなぁ、という感じ。知り合いがそれなりに居ないと感想をいろんな視点で聞けたりしないので、楽しさ半減だったかも。他の小規模勉強会で知り合い増やすなどの下準備は楽しむ上では必須だったかなあと。まずは小規模な近所の勉強会行くべきでしたね。

並べてみると学生時代苦手なことのオンパレードを無理やりやろうとしてる感が否めない。

こういうイベントは発表側じゃないと…楽しめないかもなぁという気持ち。RubyKaigiは発表通すのめちゃくちゃ難しいでしょうね…。

もっと自分の知的好奇心と、本業の課題に向き合っていこうなと思いました。まだまだ浅いっすね。

会社で同僚と気軽に会話して、すっげー安心した自分が居て自分でもびっくりした。RubyKaigi中は無意識に気をだいぶ張っていて、会社に戻ったときに楽さを存分に感じることが出来た。

久々に時間が取れて、趣味の開発が出来るようになってきたので、このカンファレンスで学んだことも生かしながらやっていければとても面白く開発が出来るようになれそう。なのでがんばります。

Glideというスプレッドシートアプリ開発出来る代物があるらしい。すごい。

https://ngmt83.hatenablog.com/entry/2019/04/12/085000

HyperApp

HyperAppに絡んだ発表があることを懇親会で聞いて、HyperAppいいなと思った。コードチラ見したら、ほんとに小さい。個人開発で採用するならアリなフレームワークっぽい。選定候補のリストに入れておいた。

旅行としては最高だった

パーっと旅行でもするか!みたいな気分で最初そもそも申し込んだので、旅行はくっそ楽しかった。