$30 off During Our Annual Pro Sale. View Details »

Code Reading

Code Reading

Learning More about Ruby by Reading Ruby Source Code'

高見龍

May 31, 2013
Tweet

More Decks by 高見龍

Other Decks in Programming

Transcript

  1. View Slide

  2. 高見 龍 です

    View Slide

  3. 高 見龍 です
    @eddiekao

    View Slide

  4. Code Reading
    Chimpr
    Learning more about Ruby by Reading Ruby Source Code

    View Slide

  5. I come from Taiwan
    photo by Fishtail@Taipei

    View Slide

  6. photo by J o n a G r a p h Y 

    View Slide

  7. photo by HeyNix

    View Slide

  8. photo by randomwire

    View Slide

  9. View Slide

  10. View Slide

  11. I’m a Python guy (≈ 2 years)
    I’m a iOS app guy (≈ 2 years)
    I’m a Flash guy (≈ 8 years)
    I’m a Ruby guy (≈ 4 years)

    View Slide

  12. But not a C guy, yet!

    View Slide

  13. Ruby > Rails

    View Slide

  14. “I’m a SHOW OFF person”

    View Slide

  15. “Experience Sharing is fun”

    View Slide

  16. Current Status
    80% iOS app, 20% Ruby/Rails

    View Slide

  17. 100% Ruby Lover!

    View Slide

  18. View Slide

  19. Web Development Conference in Taiwan

    View Slide

  20. View Slide

  21. 2 days, 3 tracks session

    View Slide

  22. 750+ attendees

    View Slide

  23. all tickets sold out in 4 mins

    View Slide

  24. WebConf Taiwan 2014

    View Slide

  25. Will be held on Jan 2014

    View Slide

  26. 850+ attendees in 2014, hopefully.

    View Slide

  27. All about web development

    View Slide

  28. 楽しい

    View Slide

  29. http://webconf.tw

    View Slide

  30. Code Reading

    View Slide

  31. Why read source code?
    How to start?
    What I learned?
    Anything interesting?

    View Slide

  32. Why read source code ?

    View Slide

  33. Ian Ruotsala

    View Slide

  34. http://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.html
    “once you start digging around in someone
    else’s code base, you’ll learn a lot about
    your own strengths and weaknesses”
    - Ruby Best Practice

    View Slide

  35. See how the Core Team write Ruby

    View Slide

  36. photo by chaines106
    Read the source, Luke!

    View Slide

  37. source http://kyaraben.seesaa.net/article/168967765.html
    source code は友達

    View Slide

  38. Contribution!

    View Slide

  39. Committer
    in my dream!

    View Slide

  40. FUN! :)

    View Slide

  41. Requirement ?

    View Slide

  42. C language

    View Slide

  43. “What if I don’t have any skill of C?”

    View Slide

  44. “Just Learn It!”

    View Slide

  45. Curiosity and Passion

    View Slide

  46. Where to Start ?

    View Slide

  47. get source files!

    View Slide

  48. download from Ruby website,
    or clone from github

    View Slide

  49. Ruby 1.9.2 p290

    View Slide

  50. View Slide

  51. Quick browsing.. :)

    View Slide

  52. *
    .c + *
    .h
    *
    .rb (stdlib)

    View Slide

  53. Let’s have some fun!

    View Slide

  54. Object
    Class
    String
    Array
    Hash

    View Slide

  55. “ruby.h”

    View Slide

  56. Object => RObject
    Class => RClass
    String => RString
    Array => RArray
    Hash => RHash

    View Slide

  57. “object.c”

    View Slide

  58. Init_XXXX( )

    View Slide

  59. “all Class’s class is a Class”

    View Slide

  60. “new”

    View Slide

  61. class A
    def initialize
    puts "hello"
    end
    end
    a = A.new

    View Slide

  62. Proc

    View Slide

  63. How to execute a Proc?

    View Slide

  64. proc.call
    proc[ ]
    proc.yield
    proc === 123

    View Slide

  65. attributes

    View Slide

  66. push v.s. <<

    View Slide

  67. Object ID

    View Slide

  68. What else?

    View Slide

  69. Haskell-like syntax :)

    View Slide

  70. head (x:_) = x
    tail (_:xs) = xs

    View Slide

  71. people = {
    "Eddie" => ["green", "[email protected]"],
    "Joanne" => ["yellow", "[email protected]"]
    }
    people.map { |name, (color, email)|
    puts [name, email]
    }

    View Slide

  72. parse.y#8277-8299 shadowing_lvar_gen( )
    people = {
    "Eddie" => ["green", "[email protected]"],
    "Joanne" => ["yellow", "[email protected]"]
    }
    people.map { |name, (_, email)|
    puts [name, email]
    }

    View Slide

  73. Method missing

    View Slide

  74. Anything interesting ?

    View Slide

  75. Interesting naming.. XD

    View Slide

  76. Conclusion

    View Slide

  77. “from basic structure”

    View Slide

  78. “don’t be afraid of source code”

    View Slide

  79. source http://kyaraben.seesaa.net/article/168967765.html
    source code は友達

    View Slide

  80. References

    View Slide

  81. http://i.loveruby.net/ja/rhg/book/
    “Rubyソースコード完全解説” (RHG)
    by 青木峰郎

    View Slide

  82. http://patshaughnessy.net/ruby-under-a-microscope
    “Ruby Under a Microscope”
    by Pat Shaughnessy

    View Slide

  83. Chimpr
    Hope we all can become
    Jedi Master someday :)

    View Slide

  84. 高見 龍 です

    View Slide

  85. 以上です。
    ご清聴ありがとうございました
    thanks for your listening :)

    View Slide

  86. 高見龍
    Contacts
    photo by Eddie
    Website
    Blog
    Plurk
    Facebook
    Google Plus
    Twitter
    Email
    Mobile
    http://www.eddie.com.tw
    http://blog.eddie.com.tw
    http://www.plurk.com/aquarianboy
    http://www.facebook.com/eddiekao
    http://www.eddie.com.tw/+
    https://twitter.com/#!/eddiekao
    [email protected]
    +886-928-617-687

    View Slide