RubyKaigiとGPのために京都に行ってきた(2)

まずはRubyKaigiまとめ、簡潔にセッション内容or感想など。 生ログはこちら

Keynote: Ruby3 Typing

最近のRuby系カンファレンスで恒例と化したRubyの型どうするよ話。

私としては「絶対に型は書きたくないでござる」でよくて、言語組み込みでstatic typingやろうと頑張るのは別にいいので、補助ツールとかでstatic analysisのようなことをして、どうしても拾えないところだけがんばる、という今までのアプローチでいいと思う。ほんとにstrictなコーディング規約とか型チェック欲しい場合はRubyでやらないし、ほんとに高度なメタプログラミングによる例外ケースは素人には作れないので玄人はhigh responsibilityをもって黒魔術してください、というのでいいのでは?

ErRuby: Ruby on Erlang/OTP

去年LTで聞いて以来興味があった話題だったのだがついにセッションになった。その間にErlang/Elixirでのプログラミング経験が増えたので内容理解の助けになった。RubyオブジェクトごとにErlang processを作るアプローチは確かにそうなりそうな気はするけれど、メモリとか大丈夫なのだろうか…?今後が楽しみなのでいくつかの組み込みメソッドの実装のpull requestとか送ってみようと思う。

Who reordered my code?!

out-of-order実行の話。ついていくのが大変だった。並行処理を行ったときにcode reorderingが発生すると問題が起きるので、問題のない範囲でreorderingするような仕組みを導入するよ、という話。

でその次は体力的に限界を迎えたためskip

笹田さんのGuildの話が聞きたかった…ので後でスライド見て復習した。

A Tale of Two String Representations

Stringの代替表現としてのRopeの話と、JRuby+Truffle上でそれを実装した話。なるほどStringを束ねたStringのようなものでロープか。そして確かに一部の変形に対して強くなるのは直感的にも納得。実際にRopeでいけるような変形がどれくらい使われるかの統計をとったり、自動的にRopeとStringの選択ができるようになるとよさそう。

Unifying Fixnum and Bignum into Integer

タイトルの通り。もともと意識しないで済んでいたけれど、この変更で壊れるケース(=ものすごいhackをしているケースなど)が実際にあるということを学んだ。

Scalable job queue system built with Docker

Job queueシステムのoverviewと、今までのjob queue systemで何がまずかったのか、どのように解決しようと思ったか、という話。競合の多い完成プロダクトの設計思想について聞けるのは大事な機会。競合のjob queue gemの特徴についてもまとめて勉強できた。

Fearlessly Refactoring Legacy Ruby

リファクタリングツールSutureの話。リファクタリングのために特定のメソッド呼び出しのところにSutureのコマンドを挿し込んで、最終的にリファクタリングが終わったらきれいに取り除ける、という仕組みが美しい。

Writing a Gameboy Emulator in Ruby

タイトルの通り。なおトラブルシューティングしながらだったのでメモは省略。確かに原理はわかるけど実際に実装しちゃうのがすごい。

How DSL works on Ruby

RubyでよくあるDSLの書き方と実際どうやって使われているかの話。こういうのも改めて整理してくれるのは本当に嬉しい。

A Nil Device, a Lonely Operator, & a Voyage to the Void Star

タイトルのVoid Starってvoid *のことか!Nilという概念がなぜ存在するか、nilやnull pointerによって発生するエラーとプログラミング言語がどのように戦ってきたか、の話。タイトルもそうだけど"Don't be a Lonely Operator"というメッセージは掛言葉の中に刺さるメッセージを持っている。

Web Server Concurrency Architecture

WebサーバーのIO待ちの実装比較とRubyのWebサーバーの実装比較。Event driven IOがレイテンシに対して強い、というのが発見だった。

Pwrake: Distributed Workflow Engine based on Rake

Rakeの記述を使った分散ワークフローエンジンの紹介。トラブルシューティングのためメモが断片的…

Modern Black Mages Fighting in the Real World

メタプログラミングテクニックの紹介と、fluentd 0.14でのプラグインアーキテクチャの変更にともなってどうやって互換性維持を実現したか、の話。実際にこういうの使う機会に出くわすことはあるんだろうか…特異クラスにprependするとか考えたこともなかったぞ…。

SciRuby Machine Learning Current Status and Future

Rubyでデータサイエンスはできるのか?問題に対する現状と今後について。個々人が試験的な実装を作り捨ててるからリアルワールドのユースケースに耐えるものが出てきていない、という状況らしい。インターフェースの整備されたライブラリが出てくれば十分にできるようになると思うのだけどこれはコミュニティの方向性を整備する人が出てくるのを待つしかないのかな…

3日目前半はスキップ

ぶっちゃけた話あんまりRuby committersの内輪ネタ感が好きくないため。その間に稲荷山に登ってきた。

Deletion Driven Development: Code to delete code!

Rubyでのunused methodを探索するgemを作る話。動的にメソッドが生えたり、一つのメソッドの中で複数メソッドが定義されたりするのをいちいちケアするのが大変そう。

Recent Advances in HTTP and Controlling them using Ruby

HTTP/2の課題の紹介(メイン)とそれをmrubyでこうやって解決するという話。TCPのcongestion windowの話とかはちょうどTLS脆弱性の勉強してたこともあってすんなりわかって嬉しい。HTTP/2だとこう嬉しい、っていうののあいまいだった部分が整理できた。

Ruby Concurrency Compared

並行性(concurrency)に関する概念の紹介と言語間での実装比較。資料が超充実しているのだけど資料まんまだったので読み返すのがよい。

Hijacking syscalls with (m)ruby

mrubyでシステムコールに処理を差し込む話。だいぶ力尽きてノートがまばら…。ChaosMonkey的な感じで「ネットワークが失敗する」「IOが失敗する」ような障害を擬似的に再現できるようになるとのこと。

Dive into CRuby

CRubyにどうやって貢献するか、という話。そっか…OpenSSLが穴場だったのか…。

クロージング

京都で開催して過去最大の参加者数だったとのこと。確かに東京で見かける人ばっかだったし、どっからきましたかって聞いて関東圏の人ばっかだったような…。京都開催は観光がセットでできるという意味でだいぶ嬉しかったので、来年も関東圏以外での開催だといいなあ。


第3部はGP京都編の予定。