Your SlideShare is downloading. ×
0
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Small eigen collider ruby kaigi 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Small eigen collider ruby kaigi 2011

975

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
975
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Andrew Grimm University of New South Wales ニューサウスウェールズ大学 (UNSW) RubyKaigi 2011 日本 Ruby 会議 2011 Finding Black Holes in Ruby with the Small Eigen Collider 小型特異衝突型加速器で Ruby 内のブラックホールの特異点を見つける方法
  • 2. tl;dr Too Long, Didn't Read( 長過ぎてよんでられない ) <ul><li>Creates random code. Metaprogramming magic!
  • 3. ランダムなコードを作成します。メタプログラミングマジック! </li></ul>
  • 4. Why? なんで? <ul><li>Why did I create the Small Eigen Collider?
  • 5. なぜ私は小型特異衝突型加速器を作成した? </li></ul>
  • 6. Background 背景 <ul><li>Bioinformatician at UNSW
  • 7. UNSW のバイオインフォマティクス
  • 8. Looking at mutations in HIV
  • 9. HIV感染の変異を見て </li></ul>
  • 10. Looking at mutations 私は突然変異で探しています <ul><li>Start with viruses with identical DNA sequence
  • 11. 同一の DNA 配列を持つウイルスで始まります
  • 12. Allow to reproduce for one generation in laboratory
  • 13. 実験室内の 1 つの世代のために再現することができます
  • 14. Determine DNA sequence of new viruses
  • 15. 新しいウイルスの DNA 配列を決定する
  • 16. Differences are mutations
  • 17. 違いは突然変異です </li></ul>
  • 18. Big data ビッグデータ <ul><li>Looking at approximately 500,000 sequences
  • 19. 約50万シーケンスを見て
  • 20. Approx. 150,000,000 DNA letters (A, C, G, T)
  • 21. 約。 1.5億DNAの文字(A、C、G、T)
  • 22. For comparison, human genome is 3,000,000,000 letters
  • 23. 比較のために、ヒトゲノムは30億文字です </li></ul>
  • 24. Problem <ul><li>Ruby is too slow
  • 25. XKCD 303 </li></ul>問題 <ul><li>Rubyは遅すぎる </li></ul>
  • 26. How slow is my application? 私のアプリのスピード <ul><li>Currently using YARV Ruby 1.9.1
  • 27. My application looks at 500,000 sequences
  • 28. 50万件のルックアップ
  • 29. An analysis takes 20 minutes
  • 30. 解析には20分かかる </li></ul>
  • 31. That's after some optimizing! ちなみにこれはチューニングの 後の数字です
  • 32. Other Rubies might be faster ほかの Ruby 実装はもっと速いかも
  • 33. JRuby <ul><li>Faster at some tasks
  • 34. Real multithreading (no GIL)
  • 35. 特定の処理は高速で真のマルチスレッド </li></ul>
  • 36. Rubinius <ul><li>Faster at some tasks
  • 37. Real multithreading Real Soon Now
  • 38. 特定の処理は高速で真のマルチスレッドも近日リリース </li></ul>
  • 39. Ruby Enterprise Edition <ul><li>Mainly better at garbage collection
  • 40. GC が良い。
  • 41. More relevant to Rails developers than me
  • 42. Rails 開発者向き </li></ul>
  • 43. <ul><li>How do I know it'll give the correct results?
  • 44. どのように私はそれが正しい結果を与えているか知ることができる? </li></ul>Should I switch to a faster Ruby? もっと早いRuby実装に乗り換えるべき?
  • 45. What kind of errors worry me? どういうエラーが心配? <ul><li>Large, obvious bugs that cause an exception are fine
  • 46. エラーを生じる明らかなバグはあまり心配なし
  • 47. Small, subtle bugs that give an incorrect result are bad
  • 48. 些細でまちがった結果を生じるバグがやばめ </li></ul>
  • 49. Other implementations are wrong 他の実装が間違っている <ul><li>Ran my project against Rubinius – 1 unit test failed
  • 50. Rubiniusで自分のプロジェクトを走らせてみた-テストが一つ失敗した </li></ul>
  • 51. Other implementations are wrongerer 他の実装では、さらに間違っている <ul><li>Ran BioRuby with Rubinius – 1 unit test failed
  • 52. RubiniusでBioRubyを走らせてみた-テストが一つが失敗した </li></ul>
  • 53. Even JRuby is not immune JRubyも例に漏れず <ul><li>Made mistakes in the complicated task of splitting a file into lines
  • 54. ファイルを行に分割する複雑な作業でミス </li></ul>
  • 55. How many bugs cause 0 failures? Fail しないバグはいくつ? <ul><li>3 bugs caused 1 unit test failure each
  • 56. 3つのバグがそれぞれ一つの Fail テストを生じる
  • 57. How many bugs caused 0 unit test failures each?
  • 58. では Fail してない時のバグはいくつ? </li></ul>
  • 59. How can I be sure there weren't others? どのように他のエラーがないことを確認することができる? <ul><li>Rubinius and JRuby had failed me. RubySpec had failed me.
  • 60. Rubiniusでも JRuby でも RubySpecでもうまくいかなかった </li></ul>
  • 61. What could I do? 私には何ができる? XKCD 386
  • 62. What assumptions can I make about the problem? 問題に対してどういった想定をすれば良い?
  • 63. Bugs are simple ソフトウェアのバグは簡単 <ul><li>Isolate them to a single failure, not several failures
  • 64. 、複数のフェイルがでているコードを単一のフェイルがでているところまで分離 </li></ul>
  • 65. Bugs are simple to fix バグの修正は簡単 <ul><li>Rubinius folk fixed bugs promptly
  • 66. Rubinius開発者で 1日以内にバグを修正 </li><ul><li>String#split 1 day (1日)
  • 67. StringIO#gets 1 day (1日)
  • 68. String#casecmp 3 days (3日) </li></ul></ul>
  • 69. Unexplored territory 未踏の領域 <ul><li>Bugs are from trying something not done before
  • 70. バグというのは今まで行われていなかった領域に足を踏み込む前に現れる </li></ul>
  • 71. <ul><li>I'm happy to report that this is the first ever &quot;Rubinius doesn't support flipflop&quot; bug. I've been waiting for this day.
  • 72. 「 Rubinius がほげほげをサポートしてない」的なバグリポートをする日をずっと待っていた
  • 73. I'll go ahead and implement it now, I was waiting for someone to report it. It only took 5 years.
  • 74. 今すぐ実装するよ。だれかがリポートしてくれるのを5年間待ってたし </li></ul>
  • 75. What is the Small Eigen Collider? 小型特異衝突型加速器って何?
  • 76. How Small Eigen Collider Works 小型特異衝突型加速器はどう動く? <ul><li>Create same tasks, run on different Rubies, compare results
  • 77. 別のルビーで同じタスクを実行し、結果を比較。 </li></ul>
  • 78. Comparing results 比較結果 <ul><li>Me: What is the result of &quot;a&quot;.casecmp(&quot;b&quot;)?
  • 79. YARV: -1
  • 80. JRuby: -1
  • 81. Rubinius: +1 </li></ul>
  • 82. Task execution タスクの実行 <ul><li>receiver.send(method_name, *parameters, &block)
  • 83. &quot;a&quot;.send(:casecmp, [&quot;b&quot;], &:inspect) </li></ul>
  • 84. Task creation – objects タスクの作成 - オブジェクト <ul><li>Receiver and parameters are objects chosen at random, with a random number of parameters
  • 85. レシーバとパラメータはランダムに作成されたオブジェクト </li></ul>
  • 86. Task creation – method タスクの作成 - メソッド <ul><li>Potential methods based on reflection
  • 87. リフレクションによるメソッド候補作成
  • 88. &quot;a&quot;.methods # => [:upcase, :zip, ..., :casecmp, …]
  • 89. Method chosen at random
  • 90. 最後はランダムに選ばれる </li></ul>
  • 91. Result comparison Receiver object: “a” Method: “casecmp” Parameters: [“b”] Result: -1 diff MRI_output.txt rubinius_output.txt 180c180 < Result: -1 --- > Result: 1 結果の比較
  • 92. Task serialization タスクのシリアル化 <ul><li>Required for consistency
  • 93. これは、一貫性のために必要 </li></ul>
  • 94. Segmentation faults セグメンテーションフォールト <ul><li>CRuby and Rubinius can crash, so need tasks saved
  • 95. CRubyとRubiniusはクラッシュする可能性があるので、タスクを保存する必要あり </li></ul>
  • 96. Discoveries 発見
  • 97. Bugs のバグ <ul><li>String#casecmp bug in Rubinius
  • 98. String#casecmp Rubiniusのバグ </li></ul>
  • 99. Segmentation faults セグメンテーションフォールト <ul><li>Found in CRuby and Rubinius
  • 100. CRuby と Rubinius で検出
  • 101. Thread.kill(nil) caused a segfault in YARV
  • 102. Thread.kill(nil) が YARV でセグフォールとを引き起こした </li></ul>
  • 103. Current difficulties 現在の課題
  • 104. Inconsistencies in inspect inspect の結果が実装ごとに異なる <ul><li>inspect has different results between implementations </li><ul><li>Default: #<StringIO:0x10169cfd8>
  • 105. Rubinius: #<StringIO:0xf7c @string=&quot;&quot; @lineno=0 @append=false @readable=true @writable=true @pos=0> </li></ul></ul>
  • 106. False alarms 誤報 <ul><li>Is giving nil rather than false a problem?
  • 107. &quot;false&quot;でなく&quot;nil&quot;を与える事は問題?
  • 108. &quot;n&quot;.is_binary_data? </li><ul><li>Rbx, MRI 1.8: false
  • 109. JRuby 1.8: nil </li></ul></ul>
  • 110. Future directions 将来の方向性
  • 111. Faster 高速化 <ul><li>Faster is often better
  • 112. 速ければより良い
  • 113. Move it to the cloud?
  • 114. クラウドに移行? </li></ul>
  • 115. Questions? 質問?
  • 116. Extra material! 補足資料
  • 117. String#casecmp testing describe &quot;String#casecmp&quot; do it &quot;is a case-insensitive version of String#<=>&quot; do &quot;abcdef&quot;.casecmp(&quot;abcde&quot;).should == 1 &quot;aBcDeF&quot;.casecmp(&quot;abcdef&quot;).should == 0 &quot;abcdef&quot;.casecmp(&quot;abcdefg&quot;).should == -1 &quot;abcdef&quot;.casecmp(&quot;ABCDEF&quot;).should == 0 end # Snipped I18N tests end <ul><li>Testing everything except “happy path”!
  • 118. エッジケースのみテスト </li></ul>
  • 119. Other bugs found by SEC SEC で見つかったバグ <ul><li>YAML.load(YAML.dump(Regexp.new('',0,'n')))
  • 120. ''.unpack('d') { true }
  • 121. ObjectSpace.undefine_finalizer(:symbol)
  • 122. Fixnum.set_superclass Object ; 42.to_int
  • 123. YAML.try_implicit(0) </li></ul>
  • 124. Other bugs independent of SEC SEC とは別に見つかったバグ <ul><li>&quot;XabXcd&quot;.split(&quot;X&quot;, 2) # => [&quot;ab&quot;] but no &quot;cd&quot;
  • 125. StringIO.new(&quot;phone&quot;).gets(&quot;on&quot;) # => gives &quot;pho&quot; when it should give &quot;phon&quot; </li></ul>
  • 126. Thankyou! Domo arigato! どうもありがとう <ul><li>Translations: </li><ul><li>Makoto Inoue-san
  • 127. mame2-san
  • 128. Google Translate-san </li></ul></ul>

×