近永さん
- subversionアカウント数 84
- うち去年のRuby会議以降コミットがあった数 54
- うち今回のSpeaker 15
- 以下発表順に
- 2.1 branch maintaner
- RubyPrize 2013
- Heroku
- Ruby's VM
- RGenGC
- Incremental GC (will be available in 2.2)
- Mr. GC
- Lazy sweep/Bitmap Marking
- Symbol GC (NEW)
- Rails 5はRuby 2.2以降が前提になる?
- The Creator of Ruby
- Mr. 'fix typo'
- 発表:Ruby考古学
- GMOペパボ
- admin of ruby-lang.org servers
- 発表:Rubyへのcontributeの方法について
- CookPad
- 発表:CookPadでの大規模サーバへの高速デプロイ
- Readline extension maintaner
- Ruby Programming Shounendan(NEW)
- VM Bug Hunter
- Pattern Matching
- Power Asset(NEW)
- RedHat
- psych/dl/fiddle
- Rails Committer
- Author of Nokogiri
- 発表:Speeding up Rails 4.2
- Rubyの名付け親
- irb author & maintaner
- 発表:Reish
- dRuby/rinda/erb author & maintainer
- 発表:非同期プログラミング
- Documentation maintaner
- rubygems, rake, rdoc contributor
- 発表:tending the ruby ecosystem
- ClearCode
- rexml/rss/xmlrpc maintainer
- Droonga(NEW)
- GitHub
- Memory Optimization
- Inspection/Profiler/Debugger
- Hash#[] Optimization(NEW)
- ObjectSpace.dump_all(NEW)
笹田さん
- 結婚して1年
- YARV, Rubyの会, るびまから10年
- YARV
- Stack based virtual machine
- Native Thread strategy
- Fiber
- 同期的マルチスレッド
- method cache
- Flonum
- RgenCC
- 世代別GC
- Incremental GC(for 2.2)
- Research Projects
- 高速化とか並列化とか
- Community activities
- 日本Rubyの会
- るびま
- RubyKaigi
- Ruby Association
- 品質
- Reliability / Availability
- High Performance
- Low machine resources
- Good compatibility
- Extensibility
- トレードオフ
- トレードオフを知ること
- トレードオフをどこに置くか決めること
- トレードオフに打ち勝つこと
- 簡単
- VMの導入
- JITコンパイルの導入
- 難しい
- テストもRubyで書かれているので、通すだけでも大変!
- 生産性・信頼性・互換性を保つこと
- 同じようなコードをたくさん書く必要が出たり
- コード生成で解決
- 同じようなコードをたくさん書く必要が出たり
- 大幅な最適化でパフォーマンスを保つこと
- Rubyが持つ動的な仕組みに対応できなかったり
- 脱最適化
- Rubyが持つ動的な仕組みに対応できなかったり
- Cのコードとの親和性
- コアライブラリをRubyで書くとか
- Cのコードにアノテーション
- CのコードとRubyコードを混ぜる
- 簡単
- 並列スレッドを単純に提供すること
- 難しい
- プログラミングしやすいようにすること
- スレッドは難しい
- すべての状態を共有しているから、同期が必要
- 一個でも欠けるとバグになる
- 非決定的な挙動
- 再現しにくい
- すべての状態を共有しているから、同期が必要
- 解決策
- プログラマを教育?→無理
- よいプログラミングモデル
- forkしてIPC
- Multiple Virtual Machine
- Smaller isolated Ruby
- オーナースレッドの導入
- デバッガ
- スレッド間の競合の検出
- 決定論的挙動になるようOSスケジューラを変える
- パフォーマンスと柔軟性のトレードオフ
- 似た例: free()対GC
- スレッドは難しい
- 直列実行時のパフォーマンスをよくする
- コードの品質・信頼性・互換性
- プログラミングしやすいようにすること
- 簡単
- GCのアルゴリズムは簡単
- 難しい
- GC以外のInterpreter全体を見直す必要がある
- 互換性
- ライトバリア
- 新たなアルゴリズムを考案して解決
- 品質
- バグがあると最悪
- 非決定性
- デバッグ機能をつける
- GC.stress
- アサーション
- デバッグ機能をつける
- GC以外のInterpreter全体を見直す必要がある
- 簡単
- ベンチマークするのは簡単
- 難しい
- 定期的に測る環境づくり
- いろんなマシンで測ったり
- 何を測るか決める
- micro
- Rails application - discourse
- 定期的に測る環境づくり
- 簡単
- コミッタになる
- 難しい
- 続けていくこと
- トレードオフに打ち勝つこと
- モチベーションを保つこと
- Rubyソースコード完全解説
- Ruby Under a Microscope
- 続けていくこと
- まだまだやることはたくさんある
- Ruby開発者に加わってね!
↑で言ったこと全部やりたいので、手伝って欲しい。特に並列処理
世代別GCを導入できたことと、YARVでProcを作ったこと
自分で作ったほうが楽しいから!
Jonathan Mukai-Heidt
- Groundwork
- TDDによって独立性の高いコードを書くのを助ける
- リグレッションを捕まえる
- アンチパターン
- なんでもスタブする
- なんでもインテグレーションテストする
- コードの独立性を担保できない
- テストを書かない
- 一つの大きいアクション
- 小さな詳細たちからなる
- Railsのコントローラは宣言的に
- imperative / declarative
- ロジックを入れない!
手続き的に書いちゃだめ
- コントローラのロジックは薄くするのではなく、完全に無くすべき
- コントローラにあるもの
- 認証
- 権限
- リソースの有無
- レスポンス
-
コントローラが宣言的なら、
-
テストも宣言的!
it { should assign(:some_resource) }
-
認証みたいな共通部分のテストにはshared_exampleを活用
テストはチェックリストみたいに!
- 6つ中5つのプロジェクトは、fat controllerに苦しんでる
- ActiveModel
- ビジネスロジックをいれるために役立てよう!
- モデルは手軽
- 「モデルを作るには小さすぎる」ってことはない
- 要件は常に変わる
- 全部controllerに入れてったら、fat controllerに
- 動詞ではなく、名詞について考える!
- 宣言的なコントローラ・宣言的なコントローラテストをすることで
- テストが簡単になる
- よい設計を助ける
- コントローラを単純に保つ
インテグレーションでテストしていい?
@rsanheim
いつでもデプロイ可能なソフトウェア
- いつでも顧客に価値を届けられる
- 短いリリースサイクル
- 変化に追いつくため
- 痛みを伴う
- リリースは楽しい
- 従来のリリースサイクルは長い
- 継続的デリバリでもっと短いサイクルを繰り返せる
- 自動化
- 継続的デリバリに不可欠
- テスト
- 正しさを検証する
- test/app LOC ratio 1.06
- pull req
- 早く開いて、アイディアについて話し合う
- 機能フラグ
- 特定の機能をオン・オフする
- 長く走るブランチは扱いにくい
- なので早くマージして、フラグで出し分け
- 例: GitHubのRails3への更新
- ブランチを切っていたが、うまくいかなかった
- Rails2/3両方でひとまず動くようにしてから、Rails3で正しく動くように
- テストを通っても確信できないことがある
- https://github.com/github/dat-science
- 古いコードパスと新しいコードパスの共存を可能に
- チャットで運用
- Hu-Bot
- だれでもdeployできる!
- 何か問題があったらすぐrollback
- デプロイ後
- HAYSTACK
- 例外とかをチェック
- Performance Dashboard
- Twitterでなにか言ってないか確認
- 障害報告のメールボックスも確認
- HAYSTACK
- More money
- More fun
Keiko Oda(@keiko713)
- Herokuの問題のときもあるけど、
- たいていappが間違ったことをやってる
- 30秒
- リクエストが遅い
- コードの問題?
- 外部サービス?
- データベースの問題?
- Dynoをクリアしてリクエストキューを空にする必要がある
- トラフィックの急増
- Dynoを増やす
- データベースもスケールアップする必要がある
- 負荷テストをしておいた方がいいよ
- Dynoを増やす
- メモリ不足
- 512MB
- Ruby 2.1からメモリ使用量が増えた
- unicornのプロセス数は適切?
- メモリリークかも?
- ログ
- 1500行しか記録できないので、どこかにとっとくべき
- Heroku Loggin add-on
- 監視
- New Relic
- Pingdom
- Heroku Expensive Queries
- dashboard.heroku.com
- 正しいサーバを選ぶ
- unicorn
- puma
- タイムアウトを正しく
- Unicorn timeout: <= 15s
- rake-timeout: <= 10s
- 500ms以下でレスポンスを返せるようチューニングする
江木さん
- 柔軟なパターンマッチングができるプログラミング言語「Egison」の持つパターンマッチを、Rubyでも使えるようにした
- 無限集合にも対応
- データの分解
- 条件分岐
- データの分解
- 条件分岐
- データごとにパターンマッチの仕方をカスタマイズ
- Element Patterns(*なし)
- Collection Patterns(*あり)
- 非線形パターン
- Value Patterns(__)
- 前に捕まえた値を制約条件にできる
- バックトラック
https://github.com/egison/egison-ruby
- 2010年から
- 純粋関数型
- Haskellで実装
- パターンマッチ
- より拡張可能
- パターンをlexical scopeありでモジュール化できる
- ちょっとづつ知られるようになってきた
- 数学的抽象化
- 関数のモジュール化
- 型システム
- パターンマッチング
- コンピュータの抽象化
- メモリ最適化
- 分散コンピューティング
- 人間の理解しやすさ
- わかりやすい構文
- 日頃のプログラミング
- クエリ言語
- AI
- CodeIQで記事書きます!
大丈夫じゃない?
悩んだこととかない!ループで書くより簡潔なので、バグはなくなるはず
とくに。。対応予定もない。
東大の友達は3時間見たらわかった。。Lispと同じじゃね?
Laurent Sansonetti(@lrz)
- RubyでiOSアプリが作れる
- bridgeではない
- iOS上のRuby実装
- interpreterではない
- evalはできないよ
- コンパイル時に最適化
- iOS対応
- arm64近日対応
- iPhone6
- Apple Watch
- スマートフォンで圧倒的なシェア
- タブレットものびつつある
- Rubyで書きたい
- 昨日public betaに
- Rake Tasks
- Emulator
- Device上で動かす方が速いのでおすすめ
- お気に入りのエディタを使える
- ランタイム
- Rubyの新たな実装
- Javaと統合されたobject model
- オブジェクト管理はAndroid Garbage Collectorを使う
- local/globalな参照
- コンパイラ
- JNI用機械語の静的生成
- クラスのためのDEXバイトコードの作成
- DWARF metadata
- symbolicateやbacktrace用
- REPL
- interactive console
- リモートでのJITコンパイル
- iOSにも入れたい
- RubyMotionでiOSとAndroidのアプリが作れる
- 好きなエディタで
- Rubyを使って!
- プラットフォーム間でコードを共有
三浦さん
- 技術的負債を減らす
- 共通化
エンジニアのみんなが共通化を考えて、gemを作っていけば開発速度を向上できる
- privateなgemサーバ
- geminabox
- 社内からのみのアクセス
- 共通のコード
- UAをparse
- In-App purchase
- 死活監視
- komachi_heartbeat
- コミュニケーションツール上で
- 開発者ミーティング
- pull request
カジュアルにgemが作れるよう
-
「今週のgem」
- 毎週アナウンス
-
障壁
- rubygems.orgに公開するのははずかしい?
- private gemを推進
- アップロードの手間
- drecom_gemでbundle gemなどをラップ - 英語
- 忙しい
- 余力があるうちに共通化
- スキルが必要
- 新卒の人に共通化してもらったり
- rubygems.orgに公開するのははずかしい?
-
多くのメンバーからgemが生まれた
- GitLab
- 他のプロジェクトを見られる
- 社内ツール作成サークル
- 締め切り駆動開発
- gemicom
- gemnasiumにインスパイア
- gem追従ランキング
- 社内に限らないものは、rubygems.orgに公開していきたい
- capistrano-drecom-deploy
- rails_security_patch_cve_*
- drecomssh
- ordered_find
- プライベートなgemサーバ
- 「今週のgem」
- 文化として根付かせる
- リポジトリを自由に作れる
- 継続して更新していった
- みんな幸せになりたかった
- 幸せになった!
gem1つで1個のリポジトリをつくってる
Gemfileが綺麗になるし、リリースすると気持ちいいので。
コミッター陣の紹介・twitter上で集められた質疑など