Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RubyConf2014: nobody knows nobu

RubyConf2014: nobody knows nobu

Nobuyoshi Nakada is the most prolific contributor to Ruby. He is the all time leader in commits to the CRuby source code. With over 10,000 commits, he leads second place by double the number of commits. Leading to his psuedonym "Patch Monster".

Allow me to introduce you to the man, the myth, and the legend that is nobu.

You will learn the true story of how nobu came to be, and witness exactly how he earned that psuedonym and why everyone loves nobu.

We will also show you what it takes to make it in ruby-core using nobu as an example.

7fe945668a4fc098e886e20dea71d2ee?s=128

Zachary Scott

November 19, 2014
Tweet

Transcript

  1. nobody knows…

  2. where nobu is.

  3. None
  4. Long time, no see..

  5. BACK & internet from <

  6. @_zzak Shutterfly San Francisco

  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. No time, for fluff

  14. Nobuyoshi Nakada Heroku.jp (matz team) a.k.a. “Patch Monster” Github: @nobu

    Twitter: @n0kada Website: ??? Hometown: ??? Age: ??? So many ???!!
  15. Do you know nobu?

  16. You might know him from…

  17. with @drbrain RubyKaigi 2013

  18. with @samkottler RubyConf 2013

  19. with @nagachika at RubyWorldConf 2013

  20. None
  21. Who is this guy really?

  22. None
  23. None
  24. Years # of commits

  25. Since January 2014 Commits per day

  26. Random Committer Spotlight Time!!

  27. None
  28. None
  29. None
  30. None
  31. martin dürst Martin obtained his masters degree from the University

    of Zurich in computer science, business administration, and Japanese studies. He has a Ph.D from the University of Tokyo in computer science with a thesis on compression and progressive transmission of images. Martin left W3C in April 2005 for a position at Aoyama Gakuin University. He continues to chair the Internationalization Interest Group and participates as an Invited Expert in several Internationalization-related Working groups. http://www.w3.org/People/D%C3%BCrst/
  32. None
  33. Who is nobu to me?

  34. None
  35. None
  36. None
  37. None
  38. None
  39. None
  40. None
  41. Who is nobu really?

  42. Ask his co-workers

  43. “͓ͪΌΊ ͷ ͍Έ Ͱ͔͢ʁ” @keiko713

  44. “஬͞ΜΛແࢹ͍ͯ͠Δ” @_ko1

  45. “Can you help me fix make-snapshot?” @hone02

  46. Ask a stranger

  47. “͔Ε͸ɻɻΊͪΌΊͪΌ΍͹͍” @mrkn Ask a stranger

  48. Ask the internet

  49. None
  50. None
  51. ʹ΄Μ͝ͰΘ͔Βͳ͍

  52. the_real_story_of_nobu.pdf

  53. None
  54. None
  55. None
  56. None
  57. None
  58. None
  59. None
  60. None
  61. None
  62. None
  63. None
  64. None
  65. None
  66. None
  67. None
  68. None
  69. None
  70. None
  71. What can we learn from nobu?

  72. How does he work?

  73. How nobu works

  74. • Macbook Pro 15” 2013 How nobu works

  75. • Macbook Pro 15” 2013 • OS X Yosemite How

    nobu works
  76. • Macbook Pro 15” 2013 • OS X Yosemite •

    emacs ..from macports How nobu works
  77. • Macbook Pro 15” 2013 • OS X Yosemite •

    emacs ..from macports • console tab …for multiplexing How nobu works
  78. • Macbook Pro 15” 2013 • OS X Yosemite •

    emacs ..from macports • console tab …for multiplexing • Yebisu for beer How nobu works
  79. PS1='[\[\e[32m\]\u\[\e[m\]@\[\e[35m\]\h\ [\e[m\]:\[\e[33m\]\w\[\e[31m\]$(__svn_ps1 || __git_ps1 \(%s\))\[\e[m\] \[\e[36m\]\t\ [\e[m\]]\[\e[31m\]$status\[\e[m\]\n\ [\e[31m\]\$\[\e[m\] '

  80. None
  81. 0 3 6 9 12 10 20 30 40 50

    Patches Beer
  82. None
  83. None
  84. None
  85. None
  86. None
  87. None
  88. What does he work on?

  89. None
  90. git log --grep 'properties' --author=nobu

  91. None
  92. git log --oneline --grep 'properties' --author=nobu | wc -l #=>

    213
  93. None
  94. git log --oneline \ --grep 'remove trailing spaces' --author=nobu |

    wc -l #=> 107
  95. files = log.select! {|l| (/\A(?:config|[Mm]akefile|GNUmakefile| README)/ =~ File.basename(l) or }

  96. files = log.select! {|l| /\A\z|\.(?:[chsy]|\d+|e?rb|tmpl|bas[eh]|z? sh|in|ma?k|def|src|trans|rdoc|ja|en|el|sed| awk|p[ly]|scm|mspec|html|)\z/ =~ File.extname(l)) }

  97. files.grep(/\/ChangeLog\z/) do |changelog| system( "iconv", "-f", "utf-8", "-t", "us-ascii//translit", changelog,

    out: tmp ) end
  98. edit = files.select do |f| src = File.binread(f) rescue next

    src.gsub!(/[ \t]+$/, '') src.sub!(/(?<!\n)\z/, "\n") end
  99. (• ε •) ,oO( whitespace )

  100. None
  101. None
  102. None
  103. None
  104. None
  105. None
  106. None
  107. ruby test/runner.rb test/rubygems/test_gem_ext_ext_conf_builder.rb # Running tests: Leaked tempfile: TestGemExtExtConfBuilder#test_class_build_extconf_fail: #<Tempfile:./siteconf20141108-62086-14b8yxe.rb

    (closed)> Finished tests in 1.066510s, 6.5635 tests/s, 29.0668 assertions/s. 7 tests, 31 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.2.0dev (2014-11-09 trunk 48321) [x86_64-darwin13]
  108. None
  109. None
  110. None
  111. None
  112. None
  113. None
  114. None
  115. None
  116. None
  117. ruby test/runner.rb test/rubygems/test_gem_ext_ext_conf_builder.rb # Running tests: Leaked tempfile: TestGemExtExtConfBuilder#test_class_build_extconf_fail: #<Tempfile:./siteconf20141108-62086-14b8yxe.rb

    (closed)> Finished tests in 1.066510s, 6.5635 tests/s, 29.0668 assertions/s. 7 tests, 31 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.2.0dev (2014-11-09 trunk 48321) [x86_64-darwin13]
  118. ruby test/runner.rb test/rubygems/test_gem_ext_ext_conf_builder.rb # Running tests: Leaked tempfile: TestGemExtExtConfBuilder#test_class_build_extconf_fail: #<Tempfile:./siteconf20141108-62086-14b8yxe.rb

    (closed)> Finished tests in 1.066510s, 6.5635 tests/s, 29.0668 assertions/s. 7 tests, 31 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.2.0dev (2014-11-09 trunk 48321) [x86_64-darwin13]
  119. None
  120. None
  121. None
  122. flip flop false: foo flip flop false: bar flip flop

    true: start flip flop true: inside flip flop true: blah flip flop true: this is the end flip flop false: baz
  123. == Flip-Flop The flip-flop is rarely seen conditional expression. It's

    primary use is for processing text from ruby one-line programs used with ruby -n or ruby -p. The form of the flip-flop is an expression that indicates when the flip-flop turns on, .. (or ...), then an expression that indicates when the flip-flop will turn off. While the flip-flop is on it will continue to evaluate to true, and false when off. $~ ri ruby:syntax/control_expressions ...
  124. 1) Failure: test_shared_thread(TestFlip) [C:/.../ruby- trunk-x86-build/test/ruby/test_flip.rb:40]: flip-flop should be separated per

    threads. <[3, 4, 5]> expected but was <[3, 4]>.
  125. None
  126. Now I'm uncertain if this is a bug. I suspect

    it is same as the following code:
  127. None
  128. None
  129. (›°□°ʣ›ớ ᵲ━ᵲ (›°□°ʣ›ớ ᵲ━ᵲ (›°□°ʣ›ớ ᵲ━ᵲ (›°□°ʣ›ớ ᵲ━ᵲ (›°□°ʣ›ớ ᵲ━ᵲ

    (›°□°ʣ›ớ ᵲ━ᵲ
  130. Not only patches

  131. None
  132. None
  133. • Work hard • Stay humble • Always be patching

    • Enjoy life Summary
  134. Thank you!

  135. Commit graphs by @shyouhei https://twitter.com/shyouhei/status/528998297969504256 “wurst” https://www.flickr.com/photos/eulenfan/9481918658 “Selfie” by @hone02

    “zzak shaving” by @keiko713 https://twitter.com/keiko713/status/512209036352049152 “nobu impersonator” by @hone02 “Heroku staff” by @hsbt https://www.flickr.com/photos/hsbt/11024487195 “Interview” by @akitaonrails https://www.youtube.com/watch?v=6A9eq3aaDVw “Oedo Hacking” by @hsbt https://www.flickr.com/photos/hsbt/13947321815/ “Patch-booth” by @keiko713 https://twitter.com/keiko713/status/403733046668443648 “Feeding nobu” by @keiko713 “Ruby cores!” by @keiko713 https://twitter.com/keiko713/status/481294912105611264
  136. Q & A