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

How to Change Organization

Eabad423977cfc6873b8f5df62b848a6?s=47 SHIBATA Hiroshi
December 12, 2014
200

How to Change Organization

Eabad423977cfc6873b8f5df62b848a6?s=128

SHIBATA Hiroshi

December 12, 2014
Tweet

Transcript

  1. ! How to Change Organization ! Hiroshi SHIBATA @hsbt Rakuten

    TechTalk
  2. SHIBATA ! Hiroshi ! @hsbt

  3. None
  4. ruby rubygems rake rdoc psych syck ruby-build railsgirls railsgirls-jp kaminari

    tdiary hiki jenkins.rb fastladder commit bit collector
  5. Ruby Committer

  6. None
  7. จࣈ

  8. asakusa.rb

  9. RailsGirls in Japan

  10. None
  11. ΋ͬͱ ͓΋͠Ζ͘ Ͱ͖Δ

  12. ຊࣾ ࢧࣾ

  13. "MPOHUJNFBHP

  14. None
  15. None
  16. None
  17. None
  18. Pepabo Hosting EC Media

  19. 0WFSQFPQMF

  20. organizations which design systems ... are constrained to produce designs

    which are copies of the communication structures of these organizations — M. Conway
  21. PHP MySQL5 PHP MySQL4 Ruby and PHP Rails MySQL5 Pepabo

  22. ϛυϧ΢ΣΞͷΞοϓάϨʔυ ࣾ಺։ൃج൫ͷߏங ౷ܭج൫ͷߏங +409ͷӡ༻੔උ HJUIVC ηΩϡϦςΟ؂ࠪ ίʔυϨϏϡʔ ςετج൫ͷߏங ΞΫηεղੳج൫ͷߏங ։ൃϓϩηε

    ৽ਓڭҭ ݪߘࣥච ΧϯϑΝϨϯεൃද 044։ൃ αʔόʔߏ੒؅ཧͷ࡮৽ ϦʔϯελʔτΞοϓ +FOLJOT 3VCZ3BJMT 3%#.4 ٕज़ج൫νʔϜ
  23. Pepabo ٕज़ج൫νʔϜ PHP MySQL5 PHP MySQL4 Ruby and PHP Rails

    MySQL5
  24. Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails

    MySQL5 Pepabo ٕज़ج൫νʔϜ
  25. Why Ruby?

  26. 3. references Why Ruby? 2. environment 1. testing

  27. Testing

  28. 3. rspec powerful testing framework 2. minitest 1. test-unit

  29. Capybara

  30. 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i|

    i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String Power Assert
  31. None
  32. 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i|

    i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String class TestPowerAssert < Minitest::Test! def test_power_assert_failed! assert { "0".class == "3".to_i.times.map {|i| i + 1 }.class }! end! end testcase assertion
  33. 3. run test -> fail -> detect fail reason Typical

    usecase 2. add inspection code 1. run test -> fail 5. run test -> success 4. fix code
  34. 3. run test -> fail -> detect fail reason Typical

    usecase 2. add inspection code 1. run test -> fail 5. run test -> fail!!! -> turn to 2 4. fix code
  35. Typical usecase 1. run test -> fail 5. run test

    -> fail!!! -> turn to 4 4. fix code 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i| i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String
  36. None
  37. Development Environment 2. rbenv + ruby-build 1. osx + homebrew

  38. Many references

  39. Why Rails?

  40. 3. admin integration Why Rails? 2. oss way 1. modern

    architecture
  41. enforce modern architecture

  42. case.1 Ruby 1.8.6 to Ruby 2.1.2

  43. http://30d.jp

  44. from 2008/4

  45. 380,000 users 230,000,000 photos

  46. Our Rails app 46 models 5000 lines in controllers 400

    lines in routes.rb 1:1.3 code to test ratio
  47. storage is over 450 TB

  48. system architecture

  49. application server

  50. storage server

  51. job server

  52. transaction server

  53. Ruby 1.8.6 Rails 2.0.2

  54. Ruby 1.8.6 Rails 2.0.2 Ruby 2.1.3 Rails 4.1.6 new!

  55. Ruby 1.8.6 1.8.7 1.9.3 2.0.0 2.1 Rails 2.0/2.1 2.3 3.0

    3.2 4.0/4.1
  56. Rails 2.0 Rails 2.3

  57. Rails 2.0 Rails 2.3 hotfix A migration A

  58. Rails 2.0 Rails 2.3 hotfix A migration A

  59. Rails 2.0 Rails 2.3 hotfix A migration A

  60. None
  61. None
  62. KyotoTycoon to memcached case.2 replace legacy middleware

  63. app1 app2

  64. begin! require 'dalli'! rescue LoadError => e! $stderr.puts "You don't

    have dalli installed in your application. Please add it to your Gemfile and run bundle install"! raise e! end rails4 need to dalli
  65. kyoto tycoon is slower than mysql… dalli is not support

    to kyoto tycoon…
  66. None
  67. enforce oss way

  68. Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails

    MySQL5 Pepabo ٕज़ج൫νʔϜ
  69. Use trunk everyday.

  70. None
  71. None
  72. None
  73. class Bar! def bar(foo = foo())! foo! end! ! def

    buzz(foo = foo)! foo! end! ! def foo! :buzz! end! end! ! p Bar.new.bar! p Bar.new.buzz
  74. % ruby -v r45272.rb! ruby 2.2.0dev (2014-04-13 trunk 45580) [x86_64-darwin13]!

    :buzz! nil! ! ! ! ! ! ! ! % ruby -v r45272.rb! ruby 2.1.2p80 (2014-03-01 revision 45231) [x86_64-darwin13.0]! :buzz! :buzz
  75. None
  76. source 'https://rubygems.org'! ! gem 'rails', '~> 2.3.18'! gem 'rake', '~>

    0.9.2'! gem 'rdoc'! gem 'rake-confirm'! ! gem 'mysql'! gem "mysql_retry_lost_connection"! gem 'acts_as_paranoid', :github => 'paperboy-30days/acts_as_paranoid'! gem 'passenger', '~> 3.0'! gem 'memcache-client', :require => 'memcache'! gem 'system_timer'! gem 'yajl-ruby', :require => 'yajl'! gem 'will_paginate', '~> 2.3'! gem 'mail'! ! gem 'sass'! gem 'compass-rails'! ! gem 'osaipo_client', :git => 'git@github.com:paperboy-all/ osaipo_client.git', :branch => 'legacy'! gem 'jugem_client', :git => 'git@github.com:paperboy-all/ jugem_client.git'! gem 'ppb_footer', :github => 'paperboy-all/ppb_footer'!
  77. admin integration

  78. 3. no console What’s admin? 2. payment/refund 1. customer support

  79. organizations which design systems ... are constrained to produce designs

    which are copies of the communication structures of these organizations — M. Conway
  80. Developer Director Customer Support Our Typical Team

  81. VONBJOUBJOFEʜ

  82. 3. other app better admin 2. Rails Engine 1. app

    internal
  83. app internal pros better testing better deploy cons including difference

    application including effective code
  84. Rails Engine pros splitting application code better deploy cons difficulty

    testing can’t use production code directly
  85. Other app pros definitely splitting app cons separated develop cycle

    duplicated code
  86. No silver bullet

  87. Rails like a php MySQL5 Rails like a java MySQL5

    Rails like a php MySQL5 Optimize Your Company ٕज़ج൫νʔϜ
  88. Ͱ͖Δ͚ͩ௕͍ؒ ϢʔβʹՁ஋Λ ఏڙ͠ ར५ΛੜΈଓ͚Δ8FCαʔ ϏεΛӡӦ͢ΔͨΊʹ͸ ܧଓతͳ վળΛߦ͏͜ͱ͕ඞཁͰ͢ɻ8FCαʔ ϏεΛվળ͢Δʹ͸ ٕज़తͳऔΓ૊ Έ͸΋ͪΖΜ

    ։ൃ౤ࢿͱͦͷϦλʔ ϯͱ͍͏ܦӦతͳ؍఺ νʔϜϏϧ σΟϯάͳͲͷ։ൃϓϩηε Ϗδω εϝτϦΫε΁ͷ஫ࢹͳͲ ߟྀ͢΂ ͖͜ͱ͕ͨ͘͞Μ͋Γ·͢ɻ
  89. εΫϥϜ͸ɺʮෳࡶͰมԽͷܹ͍͠ ໰୊ʯʹରԠ͢Δ͜ͱΛୈҰ໨ඪ ͱͨ͠ΞδϟΠϧ։ൃख๏Ͱ͢ɻ਺ ͋ΔΞδϟΠϧ։ൃख๏ͷதͰ΋ɺ ͍·ѹ౗తʹ࠾༻͞Ε͍ͯ·͢ɻ ɹ ຊಛूͰ͸ɺݱࡏͷιϑτ΢ΣΞ ։ൃʹ͓͚ΔεΫϥϜͷҙ͔ٛΒɺ ࣮ࡍͷݱ৔ʹ͓͚ΔऔΓ૊Έ· ͰɺεΫϥϜΛపఈղઆ͠·͢ɻ

  90. ฏು͞ΜʹΑΔߨԋ

  91. ΞδϟΠϧಋೖݚम

  92. 10ݚम

  93. Lern to Rails Internal step by step

  94. Lern to Active Record Internal

  95. github workflow

  96. ChatOps github issue costomer’s contact nagios

  97. DevOps

  98. 4 deploy/day

  99. Go to the next 10 years

  100. ΋ͬͱ ͓΋͠Ζ͘ Ͱ͖Δ