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

ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

RubyKaigi2013 一日目のメモ

自分メモを実況する試み。

「有益なことは書きません」みたいなエクスキューズがある記事はたいてい有益だったりしますが、僕のこのメモは本当に有益なことは書きませんよ。

高橋さんの話

  • 自分が実行委員長でないRubyKaigi、、、→ヒラ?
  • イントロっぽい
  • XMLの本
  • IRC が原始時代
  • レールズブーム
  • eclipseのマークが見えて講演が一時中断

Chef

  • エンジンヤ〜ド
  • いろんな種類のサーバがいる
  • AWS - EC2, EBS local Vagrant(production <- staging)
  • /data -> /data snapshot
  • これが典型的
  • App を増やす
  • Chef
  • 最初はAMI, AppにはNginx, Unicorn/PHP, ...
  • chefを用いればnginxのバージョンを指定できる
  • デプロイユーザを作る
  • database.yml/memchache.yml をChefテンプレートで作る, source で元のテンプレートを指定できる、とくべつなAttributeも指定できる
  • chef solo 使う
  • キャッシュsvが二ついる
  • あらゆる変更をまずステージングに適用して、プロダクションに反映
  • Code deployment
  • 開発
  • Mac上に同じだけVMを作る
  • VirtualBox 便利
  • vagrant box コマンド
  • chef soloをプロビジョナに指定
  • chef recipeが、ベーグラントにも本番にも使えるよ
  • githubとかで指摘し合えるよ
  • attirubutes jsonとかIPとかいろいろ指定できる
  • 設定をいじるのがローカルでできる(ので好きな環境、好きなエディタでできる)、(って言った?)
  • box探し方
  • トークのために作ったボックス http://crigor.com/rubykaigi/ veewee便利
  • alternatives VMWare?
  • あとはEYの宣伝

RubyMotion

  • RubyMotionとは
  • めっちゃ使われてます
  • Basecamp - 37signals, RubyMotionが無かったらリリースできなかったわ〜
  • Pragprogにあるよ
  • Rubymotionによるラッパ一覧のページがある
  • your favorite editor is vim
  • you can use emacs if you want :)
  • RubyMine benri
  • cocoapods is benri - 1599 pods結構多い
  • demo - ルビーモーションを使った際のワークフロー
    • motion create Hello
    • expired
    • ひとのemacs、というかVimmerのマシンのemacs大変だったけどさっくりビルドできた
  • スタック
  • Objective-C も動的, RubyMotionはruntimeそのものの上で実行(ブリッジではない)
  • RubyMotionのオブジェクトはそのまんまObj-Cのオブジェクトだよ、なので相互実行がものすごく楽
  • 一部RubyオブジェクトはNSのやつを継承
  • GVLないよ!
  • Grand Central Dispatch, thread扱いが楽い
  • コンパイラ
  • スライド見た方がいい感じ
  • AST を作る(ルビーの配列で表現できる、ripper)
  • LLVM IR
  • https://twitter.com/ainame/status/339978413802680320
  • ASTとLLVM-IRのコードを交互に見続けるのがつらいw
  • アセンブリ〜

JRuby

  • JVM が進歩するとJRubyも進歩して便利
  • 1.7.0 めっちゃはやい
  • JVMを直すように言う、直るのを待つ、最適化、のループ
  • JRubyのベンチのご紹介、rbxやRuby C-extより高速(Java extやばいw)
  • JVMのリリースには時間がかかるので、進歩し続けないと
  • Next major release
  • Ruby2(現状の1.8, 1.9サポート), Java7 / modularity
  • 2014年春かな
  • バージョン名、JRuby 9000(9k) くるー
  • またIR / Intermediate Representation
  • ASTは最適化にはプア
  • やっぱりスライド見ればいい事例になってしまった
  • 別実装の工夫がたくさん見られてよい会議だ
  • GSoc -> Dalvikコード生成をやるプロジェクトがある
  • IR化の現状、1.8/1.9のテストはグリーン、JITバイトコードを部分的に生成
  • 起動が遅い、IRインタプリタもそんなに早くない、JITをより早くできるはず
  • 起動高速化のためにいろいろ工夫している。。。IR文字列を保存するとか
  • メソッド本体の遅延読み込み、割と定義されても使われないメソッドって多い
  • Nailgun JVM
  • C API やめろ, FFI フィッフィ 便利(JRuby team でメンテ) or XNI を実装している、実験的
  • 同時実行性
  • Ruboto, Shoes 4 RSence ちゃんと作る気あるらしい(Google SoC 2013)

Ruby's root

  • rootおじさんだ。。。
  • Rubyに関わる基幹っぽいサーバ群のルート権限がある
  • コミット権の取り方説明、便利。電子署名難しかった
  • Github ruby/ruby, たとえば document 直すプルリクしてもいいんだよ
  • ci.hsbt.org すてき
  • padrino-framework 青いんだぜ!!!!!!!!!1
  • ruby-lang.org のroot権限
  • stable の tarball の切り替え...マジで鯖管業務だ
  • FTP鯖管
  • MLの管理
  • Rubyist magazine
  • ルビマのルビー更新業務、HikiのRack化、記事あるよ
  • bugs.ruby-lang.org
  • asakusarbでメンティナンス, debian, system ruby, rails
  • ML連携機能を最新のRedmineで動くようにする
  • big news
  • ruby-lang.org のRadiant CMS -> Jekyllllllllになった
  • 承認お願いします
  • postmodernさんじゃないっすか https://github.com/ruby/www.ruby-lang.org/
  • mina つこうてみた(fork依存はあるけど良い)
  • ruby-lang org 各言語メンテナ募集
    • 日本語もなんとかしてくれ、ライブラリ、インストール

Bundler

  • heroku本β版
  • コミュニティっぽい人だ
  • 1.0時代
  • sinatra一個で17秒
  • SpecFetcher でspec一覧を取ってくる
    • 1.2MB ある
  • Marshal されたルビーオブジェクト
  • Gem Specifications
  • ram 足りねーwww
  • 1.2時代
  • 高速
  • gemcutter API endpoint
    • 必要なgemを取る、その依存情報をぶん回す、最終的に全部解消される
  • DEBUG=1
  • rubygems.org was a 1 box
  • down、bundler APIトラフィックばかり
  • bundler API を止める
  • API endpoint, Sync code by polling, webhooks
  • TABELS rubygems versions dependencies, スーパークエリジョイン
  • 新しいgemをキャッシュする
  • yankされたgemをマークする
  • 自作のコンシューマープーリング
  • bundler-api on github
  • 利用サービス紹介
  • PagerDuty - また電話か!
  • papertrail
  • Librato
  • skylight.io

Refinements

  • 利用者すくなっ→「意外といる」
  • 2.1 で警告消すかも
  • Refinementsとは
  • toplevelだけのusing
  • 互換性の保持のために使えるけど、「互換性のためにrefinementsができたのにrefinementsは互換性が保証されない!」ウッ
  • 昔の挙動をリファインヌする
  • 内部ディーエスエルをハッキーにしたい
  • packrat parser - 一つ一つがモナド
  • モナドについてはHaskell guy に聞け
  • PEGパーサの例
  • RaddDjur
  • ルビー内部ディーエスエル事例
  • bind >>=
  • ret
  • モナド
  • こっからがリファインメント
  • ルby組み込みオブジェクトと文法をハックして、DSLのように使えるようにしたい。String, Symbol, Range
  • ファイル単位でアクティベーーーション
  • ブロック単位でアクティベートしたかった
  • instance_eval の引数にusingオプションをアレする
  • instance_evalがすごい突飛感→DSLによく使うし。。。selfを切り替えるんだからいいのでは
  • 可読性のヤバさ: やばい
  • パフォーマンスあっ