読者です 読者をやめる 読者になる 読者になる

RubyKaigi 2016 2日目メモ #rubykaigi

開発 Ruby

raydive.hatenablog.jp

rubykaigi.org

2日目も参加。国際会館駅についたのがぎりぎりになってしまったので、一番はじめの途中から入ってしまった。ちょっとこれはもったいなかった。あと英語があんまり頭に入らなくて、ちょっとこれはやばいと思うのでなにかせねば。

とりあえずSutureとScrawlsはチェックしておこう。

あと丸善ジュンク堂ブースでみんなのGo言語【現場で使える実践テクニック】を購入。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

Fearlessly Refactoring Legacy Ruby

How to create bindings 2016

  • Kouhei Sutou
  • Binding?
    • CとRubyをつなぐ、Cの機能が使える
    • Rubyを使えるケースが増える
    • GI(GObject Introspect)がおすすめ
  • Demo
    • Webブラウザを使う
    • Webkitのデモ
    • ロードするのは非常に簡単に見える
    • バインディングで生成したオブジェクトに対してブロックを指定したりできる
      • Rubyっぽくかける
      • Cでenumで指定するところが、Symbolで指定できる
  • 拡張ライブラリ
    • Cで書かれたRubyライブラリ
  • Libffi
  • 手書きや自動生成での拡張ライブラリの説明
    • 自動で生成しても、使いやすくするためには手で書く必要もある
  • 手書きや自動生成のlibffi
    • バインディングRuby側(拡張ライブラリはC側)
    • GIはgobject wrapperの部分が増える
      • でも書くことは少ない!楽!
  • 自動生成の違い
    • swig ビルド時 => 新しいライブラリが出たら再ビルドする必要がある
    • GI 実行時 => 再ビルドは必要なし
  • OSS gateとClearcode boothの宣伝
  • 速度面はどうか?
  • C++のクラスとか構造体とかをマッピングするときはどうするの?
    • GIで面倒見てくれる
  • rubyから数値配列つくるときは自動変換してくれる?
    • それらも自動変換してくれる
  • Macでもつかえる?
    • 使えます 例:rabbit
  • GIだと登場人物増えるけどトラブルシューティング大変じゃない?
    • 私ぐらいになると大丈夫(どっ)
    • CとRubyと元の
  • SWIGも建前上は全言語いけるのでは?
    • 現実的には各言語のCライブラリつかわないとつらいものもある
  • GIの場合は動的に作られる=>でかい場合はロードに時間がかかる?
    • でかいgtk3ですぐ
  • 速度は?
    • Giだと結構オーバーヘッド食う
  • GIを覚えるコストはどのくらい?
    • rdocのフォーマット覚える程度なので軽いと思う

How DSL works on Ruby

  • SHIBATA Hiroshi
  • rake
    • make like
  • DSL
    • 特定のドメインを解決するための言語
    • Rubyの言語を特定のドメインの言語として読むほうがおおいかな
    • 実装におけるいくつかのパターン
  • DSL in gem
    • rakeのコードリーディング
    • capistranoはrakeを継承 => capistranoはrake拡張(capistrano3から)
    • Thorはrake関係なし
      • Thorクラスの中にDSL関連の実装を詰め込んでいる
    • Bundler
  • Rakeの話
    • JRubyだけで落ちるテスト => 修正
    • ToDOで残してたdeprecated codeを削除 => 他のライブラリに波及(ひええ)
    • Rake12
      • Ruby 2.2以降
        • -jでつかってる外部のコマンド呼び出しをEtc.nprocessorに置き換えたい
      • 仕組みを簡素化したい
      • defualt taskの記法を追加
        • 記法変更するとObjectにメソッドが生える => あんまりしたくないので、解決する仕組みをどうするか考えている
  • DSLのつらさを改善するtips的なこととかアドバイスあるか?

Learn Programming Essence from Ruby patches

  • Mitsutaka Mimura
  • プログラミングの知識
    • 言語仕様やライブラリの使い方
    • アルゴリズムとか
      • これらの勉強の仕方は?
        • 本を読む
          • 実プロジェクトと教科書との乖離
          • Programming Technics
  • パッチを読んで勉強!
    • Why patch?
      • コードベースが小さい(対象箇所わかりやすい)
      • コミットメッセージなどの情報がある
      • わかるところが選択できる
    • パッチでライブラリの使い方やアルゴリズムもわかる!
  • Rubyのパッチを読もう => 多少はRubyの中身をしらないと大変
    • Ruby Under a Microscope
    • doc/extention.rdoc
    • slide
  • Example
    • st_tableに対するパッチ
      • Hashを作ったときなど大事な構造体
    • hashのキーが衝突する場合 => Rubyだとチェイン法をつかっている
      • そのためのst_table_entry内のnext
    • パッチではオープンアドレッシングに変更
  • パッチ単体だと動きがみえないときもありそう

Web Server Concurrency Architecture

  • Kirk Haines
  • Web Server
    • Shellでも作れる
  • Scrawls
    • Pluggable IO Engine
    • Pluggable HTTP parsing
  • Single Threadでもベンチの結果はわるくない
    • ネットワークのレイテンシも短いし、この結果だけだと落とし穴がある
  • Concurrency
    • Multiprocessing
      • 実装はシンプル
      • プロセスの管理大変、リソース共有も大変
    • Mutlithreading
      • 管理は楽でライトウェイと
      • ロックの問題とかThreadは難しい
      • そのあたりはいっぱい記事あるのでそっち読んで
    • Event Driven
      • はやいしリソースにもやさしい
      • 不利な点を聞き逃した
        • 多分一般的に言われてるやつ
  • 他のRubyウェブサーバを説明
  • 細かい数値がおおかったので、資料として公開してもらえるといいな
  • 話としては基礎的なところからWebサーバにおけるConcurrencyを説明、Scrawlsでそれの違いを数値として表してみるというところ

Pwrake: Distributed Workflow Engine based on Rake

  • Masahiro TANAKA
  • NArrayの作者
    • 今年になって進捗あり
  • Pwrake
    • rake拡張
    • 並列分散して実行
  • 例:天文での画像
    • 複数の画像を連結して一つの宇宙の画像にする
    • 並列で処理できる
  • ワークフローを記述する言語
    • XMLベースのモノ
    • 新規言語
      • 学習コストが……
    • 既存のものを拡張
      • 例:GXP make
  • Rakeのいいところ
    • Rubyスクリプトとして使える
    • Pathmapが便利
    • 他にも便利なので、rakeはワークフロー記述言語としてぴったり
  • Pwrake
    • Master nodeとWorker node
    • ThreadとFiber
      • ThreadはやはりややこしいのでFiberを使うようにした
      • 非同期IOが必要……
    • File sharing
      • NFSなども検討してGfarmFile Systemを採用
        • 計算ノードのローカルストレージを束ねる
        • Meta Data Serverがスケーラブルでない
          • ここでこけそうな
    • ローカリティを考えたスケジューリング
      • IOで別ノードのファイルを読んだり、書いたりすると遅くなっちゃう
      • DAGを使ってグラフを分割、ローカリティを上げる
        • 提案手法で何もしない場合より性能があがった
    • 耐障害性
      • Master失敗だと再実行
      • Workerは落ちてもワークフロー全体は止めない
        • 別のノードで実行
        • あるノードで実行に失敗しつづければ、障害発生として別ノードで実行
    • 採用例
  • Inputがファイルに特化している?
    • その通り
  • 各ノードの生存はどうやって監視している?
    • 監視はしていない
  • 一つだけ処理失敗したときのとかは?
    • そこまででとまる
  • Gfarm File Systemがなくても動く?
    • 動きます

Modern Black Mages Fighting in the Real World

  • Satoshi "moris" Tagomori
  • メタプログラミングユースケース
  • fluentd
    • OSSのログコレクター
    • ロゴがかわった(目立たせるため)
  • 黒魔術
    • 例の黒魔術師
  • v0.14でネームスペースがかわった
  • 0.12ではクラスによってemitメソッド内の呼び出しがことなる!
    • ややこしい
    • 非常に問題が多い
      • 3rdパーティのプラグインがfluentdのコアを直接呼び出す
        • fluentd側で処理がやりにくい
      • ドキュメントも書きにくい
  • 0.14
    • エントリーポイントを分割する
      • コアのメソッドを上書きさせない
    • コールスタックが一本道になる
  • 0.12でのプラグインはどうするか?
    • そのまま動く必要がある => 死
    • 0.12が動くコンパチビリティーレイヤーを用意
    • コンパチビリティーレイヤーで3rdパーティの呼び出してるメソッドを判定して切り替える
      • 黒魔術!
    • moduleを動的に生成してemitメソッドをはやす
    • あるメソッドの前後ろにフックをつけられるようmoduleをincludeしたりextendしたりする
  • pluginのlifecycle
    • Module::Prepend
  • singleton_classをさらにprependする => 真っ先に呼び出されるメソッドができる
  • 正直よくない!
    • v0.14用のプラグインにバージョンアップを心がけてください
    • ただユーザに不利益を被ることはあってはならないので、黒魔術でもなんでもやる
  • 呼び出しは複雑、あれを設計するときどうした?
    • 図を書き出した、そもそも0.12の動作について理解ができてなかったので書き出した
  • OSSとか後方互換性がんがんこわしていくこともあるけど、プラグイン書き直しと考えることは?
    • あったけど、現状プラグインの数がおおいので単純に書き直しは大変
    • Rubyコミュニティとは別のところで発展していった。互換性を壊すということに敏感なところもあるのでそういう手はとらなかった
  • 0.14の機能を0.12にバックポートすることは?
    • そもそも機能を増やすのが無理だったので、バックポートはできない
  • 性能への影響は無視できる
    • 無視できる

SciRuby Machine Learning Current Status and Future

  • Kenta Murata
  • enumerable-statistics.gem
    • ベンチがめっちゃはやい、すごい
  • Ruby機械学習したい => Rubyでデータサイエンスをしたい
  • SciRuby開発したい人来てください
  • 機械学習、なぜ?
    • データからビジネスの意思決定したい
    • データがでかくなってきたので、機械学習で傾向を知りたい
  • いくつかライブラリはある
    • liblinear
    • rb-libsvm
    • decistiontree
    • 実用にはほど遠い
  • real world Machine Learning
    • データでかい、欠損値ある、どのアルゴリズムがあうのかわからない、比較しないといけない
  • Scikit-learn
  • Future SciRuby
    • Scikit-learnのようにしたい
      • 直接Scikit-learnそのものを使えるようにする
        • Juliaの例
    • Scikit-learnのようなものを作る
      • 難しい
      • Cython-like systemが必要
        • rebex
      • Numerical array
  • いろいろ活動しはじめているので、参加してください

おまけ

今日の弁当

うむ

今日も美味しかったです。