Matz
- 過去に未来について語った
- RubyConf 2001
- Virtual Machine(1.9 2007)
- RubyConf 2002
- M17N (1.9 2007)
- Native thread (1.9 2007)
- 世代別GC (2.1 2013)
- RubyConf 2003
- ローカル変数のスコープルール (--)
- 多重代入 (1.9 2007)
- ローカルメソッドの可視性 (--)
- キーワード変数 (2.1 2013)
- method combination (2.1 2013)
- selector namespace (2.1 2013)
- RubyConf 2004
- (--)
- RubyConf 2005
- Stabby lambda(->) (1.9 2007)
- 多値返却 (--)
- Trait (--)
- RubyConf 2006
- Bikeshed argument encouraged
- 新しいアイディアはなかった
- RubyConf 2007
- 1.9について
- RubyConf 2008
- Rubyの哲学
- RubyConf 2009
- SymbolGCなど
- RubyConf 2010
- Mix(traits)
- Module#prepend (2.0 2013)
- Refinement (2.0 2013)
- mruby (2012)
- RubyConf 2011-2014
- 新しいアイディアはなかった
- RubyConf 2001
- 22のうち7つは入らなかった
- OSSは泳ぎ続けないと死んでしまう
- そろそろ燃料投下すべき!
- 20世紀のスクリプト言語は、型がなかった
- 最近の言語は型がある
- Scala, Go, TypeScript...
- Rubyにも欲しいじゃん
- 型アノテーション
- なぜ静的型付け?
- パフォーマンス
- 型付けはパフォーマンスに必須か?→そうではなさそう
- コンパイル時チェック
- 静的解析
- リファクタリング
- テストの網羅性がすくなくていい、とはいかない
- 柔軟性が減る
- Duck typing
- ドキュメンテーション
- コメントよりもずっと明確で信頼性が高い
- 実装の中身を調べなくとも何を渡すべきかわかる
- パフォーマンス
- なんで今型がないの?
- Duck typing
- 静的型付けに反する
- Optionalにしかならない
- 型チェックがごく一部しか行われなくなる
- 型チェックありvs型チェックなし
- そこまで違うなら、本当にRubyと言えるの?
- DRY
- 型宣言しなきゃいけないのは重複だよね
- Duck typing
- Soft-typing
- 型推論
- 宣言不要
- duck typingをもとにしている
- 型は、メソッドの集合で表現される
- 引数・戻り値
- クラスで指定されることもある
- コンパイル時チェックが可能
- 行儀がいいプログラムなら、だいたいいい線いくのでは?
- 問題
- require
- define_method
- method_missing
- Documentation
- 推測して、提示
- 日経Linux 2014/9, 10月号に載ってる
- 限定された領域でプラスアルファを提供
- 限定部分から外れたら今まで通りに動く
- 互換性が保てる!
Ruby 3.0で新しいことを入れて、未来に備えよう!
使えると思う
フルセットの概念がなかった。そもそも難しかった。
ifは広く取ることでなんとかなるでしょう。define_methodは検討してみる
pythonよりはもっとひろいターゲットを想定してる?
André Arko (@indirect)
- 去年のbundler DDoS
- rubygemsが負荷に耐えられなかった
- rubygemsの脆弱性
- rubygems.orgを再構築した
- Travisのネットワーク問題
- DNS問題
- SSL失敗
- 根本からrubygems.orgを再構築
- Bundler Source CVE
- 複数のソースに同じ名前のgemがあると、どっちが入るかわからない
- Bundler 1.7にはバグがあった
- 1.7.2をリリース
- 今までは逐次聞いていた
- gemspecのリストをダウンロード
- 改善案
- 単純なテキスト形式のインデックス
- evalしなくていいように
- クライアント側でキャッシュ
- CDNに置きやすくなる
- ローカルでミラーリングしやすく
- 単純なテキスト形式のインデックス
- 新形式のインデックス
- /versions
- すべてダウンロードしなくていいよう、追記していく?
- /deps/gemname
- /versions
- インデックスの設計
- bundler側に実装
- rubygems側に実装(未)
- bundler開発に参加してね!
@_cha1tanya
2015春くらい?
-
なんで
- 否定する前に知っとくべきでしょ
- 標準でついてるし
- 出来る事が何かしっておくべき
-
fixtureって変
-
fixtureって
- YAMLファイル(CSV)
-
どう作るか
- 考える必要がある
- 創造的
- Keyの付け方
- :admin_user
- :driver
- :monitor
- :emergency_contact_for_john
- idはつけるな
- ARにつけさせるべき
- DHHに聞け!
- 全部のシナリオをカバーしようとするな
- DHHの発言はtwitterで検索しちゃえ
-
fixtureの読み込み
- YAMLファイルを読んで
- Hashに変換し
- 既存のデータを全部削除
- テストスイート開始前に読み込まれる
- INSERT時にARインスタンスを生成しない
- callback/validationが効かない
-
fixrureへのアクセス
- データベースから
- 動的に
- 自動インスタンス化
- use_instantiated_fixtures
- 遅い
- メモリを食う
-
動的に、って
-
Association
-
トリック
- デフォルト値があるカラムにNULLを入れるには
- 値をnilにセット
- キーだけ書く
- ERBを使って動的に
- <%= Time.now %>
- Timestamps
- DRY
- Label Interpolation
- $LABEL
- now(Postgres)
- YAML defaults
- デフォルト値があるカラムにNULLを入れるには
-
発展
- 順序つきfixture
- OMAP YAML
- テーブル名とモデル名が一致しない
- set_fixure_class
- test_with_transaction(Rails 4.2)
- 順序つきfixture
- fixtureは役に立つので、つかうべき!
(聞き取れず)
- pullreqからwebhookを受け取る
- Compare Linkerを起動
- Gemfile.lockの中身を取得・parse
- バージョンが変わったgem名をあつめる
- URLを作成
- gemのバージョン間の差分
- コメントをつける
- Railsの更新に弱い。。
- force pushに対応できてない
- そこそこの出来
- 学んだこと
- ideaよりも、やり遂げることの方が難しい
- idea < action < improvement
rails以外はバージョン指定しないで、bundle updateしてる。
両方みて、githubが含まれるほうを使ってる。
Thiago Scalone (@scalone) CloudWalk Daniel Rodoriguez (@sadasant)
- 目的に合わせて作られたコンピュータ・システム
- 考える事たくさん
- バグ修正をどう配るか、とか
- 昔
- windows上でexeにコンパイル
- 今
- Web上のIDEでコンパイル
- mobileへ
- 開発者にやさしく
- Rubyを使おう
- できなかった
- Ruboto
- JRuby core-teamがいない
- 起動に40秒
- コミュニティがない
- RubyMotion
- mobileのみ
- mruby!
- Rubyを使おう
- da_funk
- いろんなプラットフォームで同じ動きが必要
- CloudWalk MRuby Framework
- webで公開してる
- emscripten
- POSXML→MRubyへ
- 非同期に
- emscriptenで生成したコードは、たまにメモリリークする
- RubyのクラスをEmscriptenのAPIでオーバーライド
- Verifone, Ingenico
- 継続的デリバリ
- NFC
来年のmrubyカンファレンスに来てね!
吉田さん(@chihayafuru)
- 教育ツール
- おもちゃ
- STEM教育
- Science, Technology, Engineering, Mathematics
- 値段
- なかなか高い。
- Rasberry Pi 14~5台分!
- 3世代の比較
- ヴィジュアルプログラミング環境
- リモートコントロール
- iOS, Android
- 標準ファームウェアアーキテクチャ
- ev3dev
- full Debian 7
- microSDからブート可能
- mrubyとは
- 組み込みRuby
- 組み込みで使えるの?
- deadline守れる?
- GCが他の割り込みを邪魔しない?
- 初代では信号線が2本
- inとoutを切り替えて使う
- 3代目で信号線が増えた
- mrubyの向かないもの
- ハードの能力をめいいっぱい活用したい時
- 向くもの
- マイコンと強調して、あたらしいものをマッシュアップ
できる。大変だけど
その通り。
@sora_h
- 巨大Railsアプリ
- サーバ140台
- 10回/日
- CIが通ったビルドのみ
- 業務時間内のみ
- staging環境で確認後、手動でdeploy
- Deploy server
- チャットでdeploy
- かかる時間
- CIに10分
- 目視確認に1~5分
- デプロイに10分
- 時間がかかる(20分)
- capistrano2
- SSHが重い
- たまにこける!
- capistrano3に上げる?
- SSHに依然として頼ることになるので遅い
- deployのための新しいツールを作る!
- github/sorah/mamiya
- Serfを使ってる
- hashicorp/serf
- orchestration tool
- gossip protocol
- sorah/villein
- S3をファイル配布に使う
- capistranoとディレクトリ互換
- Serfを使ってる
- 構成
- Master node
- HTTP APIを受け、Serfを使って命令を送る
- Agent node
- Masterから命令を受け実行
- Deploy script
- Package
- tarball
- デプロイしたいファイルを全部つめておく
- Storage
- Packageの置き場所
- Step
- deployの手順
- 何回実行しても安全
- Fetch
- Prepare
- Switch
- Master node
- 流れ
- CIがパッケージをビルド
- パッケージをStorageにpush
- Masterにprepareリクエストを送信
- Agentがpackageを取得・prepare
- 結果
- SSHに依存しなくなった
- Stepは個別に実行して問題ない
- deploy前にprepareする?
- 8.4分→45秒に!
- ドキュメント
- クラスタ追加時に自動deploy
- Web UI
- エラー処理をよりよく
Richard Huang(@flyerhzm)
- RSpec2→3みたいな、単純な文法の変更を何度も繰り返したくない
- 開発者は
- 良くしていくのがすき
- なんどもおなじことはしたくない
- cane
- reek
- rails_best_practices
- チェックしてくれるだけで、代わりにやってくれるものってなかった
- IDE
- リネーム(class/method/変数名)
- メソッドの抽出
- カスタマイズできない
- テキストベースでやってきた
- sed
- Rubyコードで
- 正確じゃない
- 文字列の中も置換しちゃったり
- 複雑なケースに対応できない
- ASTベースでやりたい
- Abstract Syntax Tree
- ずっと正確
- ripper
- 1.9から標準
- ParseTree
- ruby_parser
- parser
- 正確だけど読みにくい!
- transpec
- デモ
- FactoryGirlのshort syntax
- Rails2.3から3へ
- 3.2から4へ
- Hash記法を1.9へ
- わかりやすいDSL
- RSpecにかぎらず、なんでもできる!
- 有用な属性をASTに追加
- send node
- class node
- block node
- DSL
- wwithin/file / ith_files
- with_node / with_node
- ...
- Playground
- Snippets
- http://github.com/xinminlabs/synvert-snippets
- pull req待ってます
zep & kevin
- Cerego
- 英語のラーニングプラットフォーム
- Super SRS(Space Repitition Software)
- 歴史
- 2007 iknow.co.jp
- 2009 smart.fm
- 2011 ikonw.jp
- 2013 cerego.com
- memory bank
- mobile apps
- 共通のコアにWeb/API2つのアプリ
- git submodules
- bundlerが使えない
- エディタとかで扱いにくい
- デプロイやJenkinsビルドが複雑に
- rails engine
- gem
- git submodules
- Fork
- 失敗
- 同期を失う
- Rails更新がつらい
- システム要件がそれぞれ変わってしまう
- 成功
- 新しいサービスの立ち上げが速い
- よく知られたコードベース
- 独自の変更が許される
- 失敗
- その他の同期の方法
- cherry-pick
- Gems
- Engines
- 独自のコードをたくさん作った
- gem管理
- アセット管理
- アクセス管理
- ...
- 新しい人が来るたびに、「なんで〜を使ってないの?」になる
- パッチだらけ
- Railsの更新が大変に
- verndor/patchesに入れて管理
- カスタマイズすべき時
- Railsにないコンセプト
- パフォーマンスが求められる、具体的なコアのコード
- ドメイン独自のコード
- 止める時
- いろいろ問題が起きた時
- 作者がいなくなった時
- 標準の道具を使おう
- 独自のコードはオープンソースにしよう
- rackミドルウェアでレコードをキャッシュするのとか
- キャッシュが消えてなくて苦労した
- rackミドルウェアでレコードをキャッシュするのとか
- 60人の開発者がいた
- 1400以上のmigration
- 人が去ると
- 知識が失われる
- workaround
- データ構造
- 死んだコード
- テストの意味がなくなる
- テストヘルパーが忘れられる
- テストは意図ではなく値をチェック
- 良い設計のコードも悪くなる
- 意図はメンテされない
- hackがたまってく
- 知識が失われる
- 何ができるか
- 死んだコードを除く
- 全部を最新にする
- RubyとかRailsとか
- 新たな開発者を助ける
- 全部セットアップされた新しいコンピュータを渡す
コードを取り除いて、テストが通るか確認する?
次のプロジェクトに入る前に、説得してる。大きな変更だとメリットを強調したり
辻本さん
- unit/spec
- unit系を対象
- assertionメソッドの使い分け
- asset_include / assert
- 失敗時のメッセージが違う
- 覚えるのが大変
- そこでpower assert
- assert{ 3.times.to_a.include?(3) }
- Groovyにもある
- power_assert(CRuby 2.0以上)
- test-unit-power_assert
- test-unit 3
- minitest-power_assert
- pry-power_assert
- テストに限らず、デバッグ時にも役に立つ
- 今後標準で入る
- 挑戦
- 値をどう得るか
- TRACEPOINT
- 値の位置をどう知るか
- 値をどう得るか
- TRACEPOINT
- Ruby 2.0で導入
- 新たなイベント
- return_value -raised_exception
- Exception#cause
- tracepointで実現可能
- 必要以上に取れてしまう
- スタックの深さを見て、フィルタする
- ==の値が取れない
- 先にpower_assertを読むとうまくいく
- なんでか
- tracepointのイベントが起動してない
- RubyVM::InstructionSequence.disasmでバイトコードを見ると
- OPT_EQ
- Cレベルで比較されちゃって、tracepointのイベントを起動しないから
- 対策
- 最適化を無効に
- specialized_instruction: false
- Ripper
- 位置を取得するため利用
- 多重代入でなんとか
- 初期ではpattern matchしてた
- どんな書き方までできる?
- 1行しか出せない
- 変数の再代入とか無理
- 分岐を扱えない
- PowerAssert, つかってね
- TracePoint、使うと楽しいよ
単純なテストで測ってみたら10倍くらい遅くなった。。Ripperで時間がかかってる
試してみましょう
ありがとうございます。
あまり速度は考えてなかったので、いくつかやれることはあるはず。bindingをつくるところとか。
高橋さん(@kenchan)
- モチベーション
- テストデータを作るのは簡単だけど、継続的にメンテするのは大変
- traitでモジュール化
- なるべくtrait
- イベントデータのファクトリは作らない
- アソシエーションが大事だから
- 見直していく
- BDD-style
- describeでlet
- contextでbefore
- BDD-style
Rei Kagetsuki
- プラットフォームごとにやり方
- HerokuではHammer
- Build
- Vendorize
- Engage!
- iPhoneで動くRuby開発環境
- 実行/編集/デバッグをiPhone上で可能に
- 内部構成
- 実行はmruby
- openFrameworks for iOS
- なんで作った?
- iPhoneは偉大だけど、家庭用PCが減ってる
- 子どもたちがプログラムに触れられない!
- デモ
- ongaeshi/ofruby
大場さん
- 自由が好き
- Rubyは自由
- チームだったり、ずっとやってたりすると一貫性を保つ必要が出てくる
- 自由 vs 一貫性
- 自由を手放すことには慎重であるべき
- チームの意見が分かれたりする
- 一貫性にこだわりすぎると、チャレンジを損なう
- 大事なこと
- るびまに記事書いてね
- 0048号、本日リリース
- 変わったこと
- これからもるびまをよろしく!
- 64bit整数対応
- mrb_get_args
- 問題を見つけるのは簡単!
- だから今やるべき
- Rails勉強会東京の発起人でした
- アイディアとかひらめきとかってなんなのか?
- うまくいったりいかなかったり
- 利益もまちまち
- 確率的存在
- アイディアの価値とは期待値では?
- アイディアの価値は低い?
- 期待値には加法性
- たくさんあればいいのでは?
- 試行がいる
- コーディングという試行錯誤が必要
- 加法性ってあやしい
- 条件付き期待値
- 似たアイディアは片方がうまくいかないと価値が減ってしまう
- 確率的独立に近い、多くのアイディアが必要
- 多種多様なコードを書かなければならない
- アイディアの価値が…とか言ってる人にこういう話をしてけむにまく!
- モデルごとにDBを切り替えることはできる
- 読み込みと書き込みを標準では分けられない
- octopus
- acts_as_readonlyable
- github.com/eagletmt/switch_point
- modelとdbの間にproxy
- Railsの実装に依存しない
@tagomoris
- バージョン1以上のgemをリリースした?
- semver
- v0って本番に耐えないってこと
- 本当にそう?
- v1をリリースしよう
- バージョニングは開発者とユーザのコミュニケーション
中山さん
- RSpec 2.99
- transpec
- AST
- 実行時情報
- 15分くらいで終わる
- なぜ可能だった?
- specが実行可能だったから
- テスト可能
- 多くのユーザがいたから