SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
Ruby on Rails
Web Development that doesn„t hurt
Dezember 2008



                          www.xing.com/profile/Christian_Feser
                          www.xing.com/profile/Michael_Kram
                          www.xing.com/profile/Jakob_Schroeter
                          www.Marc-Seeger.de
Ruby
A Programmer„s Best Friend
3
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 agenda
   •   Design History of Ruby
   •   Agile Manifesto
   •   Language basics
   •   Exercise
   •   Typing
   •   Libraries & Gems
   •   Ruby VMs
   •   Good & bad things
Design History of Ruby
Ruby *is* different from other
languages, indeed.
--Matz.
5
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 History
    • Origin:
         ▫ Yukihiro quot;Matzquot; Matsumoto
         ▫ Japan 1993




    • 1st english book: 2000
    • Ruby on Rails: 2004
6
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 What Matz has to say
                  I wanted a scripting language that
                  was more powerful than Perl, and
                      more object-oriented than
                    Python. That's why I decided to
                       design my own language
7
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 The Power of Ruby
   … according to Yukihiro „Matz“ Matsumoto
8
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby is
   Smalltalk
   – „Unfamiliar Syntax“
   + Perl„s scripting power
   + Pythons exceptions etc.
   + CLU„s iterator
9
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 This helps making ruby…
   •   a Scripting Language
   •   a dynamic typing Language
   •   an Object Oriented Programming Language
   •   a good taste of Functional Programming
   •   a highly reflective Language
   •   a base for creating Domain Specific Languages
10
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Can‘t I do all of that in Java/C?
   Sapir-Whorf-Hypothesis:


   • Language determines the way we think
        ▫ Basic Programmers never use recursion
        ▫ LISP programmers use macros for everything
        ▫ FORTRAN programmers can write FORTRAN in
          any language
11
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby = human-oriented
   •   reduces the burden of programming.
   •   tries to push jobs back to machines.
   •   You can accomplish more tasks with less work
   •   … in smaller yet readable code.
12
 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




  principle of least surprise
 I believe people want to express
 themselves when they program.
 They don't want to fight with the
 language.




Programming languages must feel
natural to programmers. I tried to
make people enjoy programming
and concentrate on the fun and
creative part of programming when
they use Ruby.
13
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Programming experience
 (according to Dr. Jacob Nielson)

   •   Learnability
   •   Efficiency
   •   Memorability
   •   Errors
   •   Satisfaction
14
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 How Ruby helps you: Learnability
15
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 How Ruby helps you: Efficiency
   • Not that fast to execute…
   • BUT fast to programm
        ▫ Pseudo-simplicity
        ▫ Consistency
        ▫ „Smartness“
16
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




    How Ruby helps you: Memorability
•   Conservativeness helps
•   Easy to remember syntax
•   Ruby is NOT a simple language …
•   … BUT the complexity is:
    ▫ Hidden
    ▫ Natural
    ▫ Consistent
17
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 How Ruby helps you: Errors
   • You won„t see that many because:
        ▫ Consistent syntax rules
        ▫ less code  less bugs
18
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 How Ruby helps you: Satisfaction
   • Ruby is fun
   • Ruby makes you feel smart 
19
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby in five E’s
   •   Everything is an object
   •   Elegant blocks give inline power
   •   Exploring with reflection
   •   Extending at runtime
   •   Extensive standard libray

                                                      David Heinemeier Hansson
Agile Manifesto
Painless Programming
21
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby – An Agile Language?
   • the language design should focus on users

   • the language should encourage readability

   • the language should be expressive, and helps
     communication between developers

   • the language should embrace changes, and be
     dynamic
   (Matz@Rubyconf2006)
Language Basics
A Programmer„s Best Friend
23
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Hello World!
24
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Read the following aloud
25
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: comments
26
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics
   •   ClassNames
   •   method_names and variable_names
   •   methods_asking_a_question?
   •   slightly_dangerous_methods!
   •   @instance_variables
   •   $global_variables
   •   SOME_CONSTANTS or OtherConstants
27
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics
   • Variable Declaration:




   • Function Declaration:
28
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Strings
29
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Strings
30
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Strings
31
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Strings
32
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Hashes
33
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Arrays
34
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Give me some sugar: Array
35
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Control Structures
36
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Classes
37
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Classes
   • Classes are always open (even built in classes)




 Another Example from Rails:
 1.hour.from_now
38
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: Inheritance
   • Single Inheritance
        ▫ But mixins are available (= Interface with implemented methods)
39
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




Language Basics: Mixin Example
                                                              This module implements the
                                                             mixin




                                                              A class that doesn„t do that
                                                              much




                                                              inheriting
                                                              and mixing!



                                                             We inherited that one
                                                             And mixed in that one
40
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Blocks




                                    „Blocks are unnamed functions“
41
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Blocks
   Define:




   Call:




   Result:
42
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Blocks Example: Iterators
                                         The current piece
                                                                What we are going
                                         of the collection we
                                                                to do with it
                                         are working with
43
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Closures
44
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Language Basics: IO
Exercise
 http://tryruby.hobix.com 
Typing
…and why do you call Ruby
„dynamic“?
47
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Typing: strong / weak
  • Strong typing
             quot; 5 quot; / 2  „NoMethodError“
  • Weak typing
             quot; 16 quot; / 2  8 (e.g. in Perl)




  Ruby is strongly typed! (Java too)
48
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Typing: explicit/implicit
    • Explicit: int a = 5
    • Implicit: a = 5




    Ruby is implicitly typed! (Java explicitly)
49
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Typing: static / dynamic
    • Static typing
         ▫ The compiler checks types during compilation
    • Dynamic typing
         ▫ The compiler doesn„t check types during compilation




    Ruby uses dynamic typing
    Java uses static typing,
    C# 4.0 will feature the concept of „Dynamic lookup‟ (“foreach()“ already uses it)
    Visual Basic allows you to do both
50
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Typing: duck?!
         If it walks like a duck and quacks like a duck, I would call it a duck.



       duck.quack
                                                                  Some other languages
                                                                  supporting duck-typing:
                                                                  •C# 4.0 will
                                                                  •Groovy
                                                                  •Javascript
                                                                  •Perl
                                                                  •Python
                                                                  •Smalltalk (no types for variables)
                          duck.walk                               •VB
51
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Typing: duck
   • Duck typing allows an object to be passed in to a
     method that expects a certain type even if it
     doesn‟t inherit from that type. All it has to do is
     support the methods and properties of the
     expected type in use by the method.
Libraries & Gems
Because you don„t want to do all of
the work yourself
53
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 The ruby world
54
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Libraries
55
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Rubygems
56
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Gems - search
   > gem search -l xml

   *** LOCAL GEMS ***

   libxml-ruby (0.9.2, 0.9.0, 0.8.3)
   xml-mapping (0.8.1)
   xml-object (0.9.8)
   xml-simple (1.0.11)
57
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Gems - search
   > gem search -r xml

   *** REMOTE GEMS ***

   axml (0.0.2)
   diff2xml (0.0.2)
   eimxml (0.0.2)
   faster_xml_simple (0.5.0)
   fastxml (0.1.92)
   gccxml_gem (0.9.1)
   hashtoxml (0.0.5)
   jrexml (0.5.3)
   libxml-feed (0.0.1)
   libxml-ruby (0.9.4)
   libxml-xmlrpc (0.1.5)
   […]
58
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Gems - installing
   > gem install textgraph
   Successfully installed textgraph-0.1.0
   1 gem installed
   Installing ri documentation for textgraph-0.1.0...
   Installing RDoc documentation for textgraph-
     0.1.0...
59
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Gems - Updates
   > gem update

   Updating installed gems
   Updating haml
   Successfully installed haml-2.0.5
   Updating libxml-ruby
   Building native extensions. This could take a while...
   Successfully installed libxml-ruby-0.9.4-x86-
    mswin32-60
   Updating ruby-debug-ide
   Successfully installed ruby-debug-ide-0.4.2
   […]
60
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Gems - Usage
61
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 RDoc
Ruby
VMs
63
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby VMs
   •   Ruby 1.8 („MRI“-Matz's Ruby Interpreter)
   •   Ruby 1.9 („YARV“)
   •   JRuby
   •   Rubinius
   •   (IronRuby)
64
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Speed
   Rubinius < Ruby 1.8 < JRuby < Ruby 1.9
65
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby 1.8
   • Matz's Ruby Interpreter or Ruby MRI

   • Performance: Code -> Syntax Tree -> Run
   • Threading: Green
   • Unicode: no (utf8 though)
66
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Ruby 1.9
   • YARV (Yet another Ruby VM)

   •   Performance: Code -> Syntax Tree -> ByteCode
   •   Unicode: yes
   •   Threading: Native (but “global interpreter lock“)
   •   small syntax changes
   •   no more continuations
67
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 JRuby
   •   Performance: Hotspot!
   •   Threading: Native
   •   Unicode: no (utf8 or java unicode)
   •   Compatibility: 1.8 and 1.9!
   •   Addon:
        ▫ Deployable on Tomcat/Glassfish/…
        ▫ Access Java from Ruby or Ruby from Java
   • Problems: C Libraries
68
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Rubinius
   • the ultimate level of “dogfooding”
Good and bad things
A Programmer„s Best Friend
70
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Good Things
   • Sweet Language
   • Ruby on Rails
   • Big community
     quot;ruby people are nicequot; - Martin Fowler
   • Open Source
71
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Bad Things

   • Ruby 2 is vaporware
   • „slow“
   • IDE
Ruby 2
Future Prospects
73
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Future Prospects
   • gather wild & weird ideas

   • try to make ruby the best language ever

   • shed light to undefined corners of Ruby

   • finally (if possible), document Ruby specification
Questions & Answers
75
Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger




 Quellen
   • confreaks.com – RubyConf 2006/2007/2008
   • ruby-lang.org
   • tryruby.hobbix.com
   • „Ruby Grundlagen – PDF zum Buch Rapid Web
     Development mit Ruby on Rails“ – besimple.de
   • OReilly - Ruby Cookbook
   • poignantguide.net/ruby/

Weitere ähnliche Inhalte

Mehr von Jakob

Mehr von Jakob (7)

Client-side Web Performance Optimization [paper]
Client-side Web Performance Optimization [paper]Client-side Web Performance Optimization [paper]
Client-side Web Performance Optimization [paper]
 
HTML5 Video vs. Flash Video [paper]
HTML5 Video vs. Flash Video [paper]HTML5 Video vs. Flash Video [paper]
HTML5 Video vs. Flash Video [paper]
 
Client-side Performance Optimizations
Client-side Performance OptimizationsClient-side Performance Optimizations
Client-side Performance Optimizations
 
Flash vs. Silverlight auf dem mobilen Endgerät
Flash vs. Silverlight auf dem mobilen EndgerätFlash vs. Silverlight auf dem mobilen Endgerät
Flash vs. Silverlight auf dem mobilen Endgerät
 
Flash Video vs. HTML5 Video
Flash Video vs. HTML5 VideoFlash Video vs. HTML5 Video
Flash Video vs. HTML5 Video
 
Ruby On Rails - 2. Rails Introduction
Ruby On Rails - 2. Rails IntroductionRuby On Rails - 2. Rails Introduction
Ruby On Rails - 2. Rails Introduction
 
Ruby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails AddonsRuby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails Addons
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Ruby On Rails - 1. Ruby Introduction

  • 1. Ruby on Rails Web Development that doesn„t hurt Dezember 2008 www.xing.com/profile/Christian_Feser www.xing.com/profile/Michael_Kram www.xing.com/profile/Jakob_Schroeter www.Marc-Seeger.de
  • 3. 3 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger agenda • Design History of Ruby • Agile Manifesto • Language basics • Exercise • Typing • Libraries & Gems • Ruby VMs • Good & bad things
  • 4. Design History of Ruby Ruby *is* different from other languages, indeed. --Matz.
  • 5. 5 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger History • Origin: ▫ Yukihiro quot;Matzquot; Matsumoto ▫ Japan 1993 • 1st english book: 2000 • Ruby on Rails: 2004
  • 6. 6 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger What Matz has to say I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That's why I decided to design my own language
  • 7. 7 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger The Power of Ruby … according to Yukihiro „Matz“ Matsumoto
  • 8. 8 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby is Smalltalk – „Unfamiliar Syntax“ + Perl„s scripting power + Pythons exceptions etc. + CLU„s iterator
  • 9. 9 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger This helps making ruby… • a Scripting Language • a dynamic typing Language • an Object Oriented Programming Language • a good taste of Functional Programming • a highly reflective Language • a base for creating Domain Specific Languages
  • 10. 10 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Can‘t I do all of that in Java/C? Sapir-Whorf-Hypothesis: • Language determines the way we think ▫ Basic Programmers never use recursion ▫ LISP programmers use macros for everything ▫ FORTRAN programmers can write FORTRAN in any language
  • 11. 11 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby = human-oriented • reduces the burden of programming. • tries to push jobs back to machines. • You can accomplish more tasks with less work • … in smaller yet readable code.
  • 12. 12 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger principle of least surprise I believe people want to express themselves when they program. They don't want to fight with the language. Programming languages must feel natural to programmers. I tried to make people enjoy programming and concentrate on the fun and creative part of programming when they use Ruby.
  • 13. 13 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Programming experience (according to Dr. Jacob Nielson) • Learnability • Efficiency • Memorability • Errors • Satisfaction
  • 14. 14 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How Ruby helps you: Learnability
  • 15. 15 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How Ruby helps you: Efficiency • Not that fast to execute… • BUT fast to programm ▫ Pseudo-simplicity ▫ Consistency ▫ „Smartness“
  • 16. 16 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How Ruby helps you: Memorability • Conservativeness helps • Easy to remember syntax • Ruby is NOT a simple language … • … BUT the complexity is: ▫ Hidden ▫ Natural ▫ Consistent
  • 17. 17 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How Ruby helps you: Errors • You won„t see that many because: ▫ Consistent syntax rules ▫ less code  less bugs
  • 18. 18 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger How Ruby helps you: Satisfaction • Ruby is fun • Ruby makes you feel smart 
  • 19. 19 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby in five E’s • Everything is an object • Elegant blocks give inline power • Exploring with reflection • Extending at runtime • Extensive standard libray David Heinemeier Hansson
  • 21. 21 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby – An Agile Language? • the language design should focus on users • the language should encourage readability • the language should be expressive, and helps communication between developers • the language should embrace changes, and be dynamic (Matz@Rubyconf2006)
  • 23. 23 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Hello World!
  • 24. 24 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Read the following aloud
  • 25. 25 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: comments
  • 26. 26 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics • ClassNames • method_names and variable_names • methods_asking_a_question? • slightly_dangerous_methods! • @instance_variables • $global_variables • SOME_CONSTANTS or OtherConstants
  • 27. 27 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics • Variable Declaration: • Function Declaration:
  • 28. 28 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Strings
  • 29. 29 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Strings
  • 30. 30 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Strings
  • 31. 31 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Strings
  • 32. 32 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Hashes
  • 33. 33 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Arrays
  • 34. 34 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Give me some sugar: Array
  • 35. 35 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Control Structures
  • 36. 36 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Classes
  • 37. 37 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Classes • Classes are always open (even built in classes) Another Example from Rails: 1.hour.from_now
  • 38. 38 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Inheritance • Single Inheritance ▫ But mixins are available (= Interface with implemented methods)
  • 39. 39 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: Mixin Example  This module implements the mixin A class that doesn„t do that much inheriting and mixing! We inherited that one And mixed in that one
  • 40. 40 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Blocks „Blocks are unnamed functions“
  • 41. 41 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Blocks Define: Call: Result:
  • 42. 42 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Blocks Example: Iterators The current piece What we are going of the collection we to do with it are working with
  • 43. 43 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Closures
  • 44. 44 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Language Basics: IO
  • 46. Typing …and why do you call Ruby „dynamic“?
  • 47. 47 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Typing: strong / weak • Strong typing  quot; 5 quot; / 2  „NoMethodError“ • Weak typing  quot; 16 quot; / 2  8 (e.g. in Perl) Ruby is strongly typed! (Java too)
  • 48. 48 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Typing: explicit/implicit • Explicit: int a = 5 • Implicit: a = 5 Ruby is implicitly typed! (Java explicitly)
  • 49. 49 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Typing: static / dynamic • Static typing ▫ The compiler checks types during compilation • Dynamic typing ▫ The compiler doesn„t check types during compilation Ruby uses dynamic typing Java uses static typing, C# 4.0 will feature the concept of „Dynamic lookup‟ (“foreach()“ already uses it) Visual Basic allows you to do both
  • 50. 50 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Typing: duck?! If it walks like a duck and quacks like a duck, I would call it a duck. duck.quack Some other languages supporting duck-typing: •C# 4.0 will •Groovy •Javascript •Perl •Python •Smalltalk (no types for variables) duck.walk •VB
  • 51. 51 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Typing: duck • Duck typing allows an object to be passed in to a method that expects a certain type even if it doesn‟t inherit from that type. All it has to do is support the methods and properties of the expected type in use by the method.
  • 52. Libraries & Gems Because you don„t want to do all of the work yourself
  • 53. 53 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger The ruby world
  • 54. 54 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Libraries
  • 55. 55 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Rubygems
  • 56. 56 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Gems - search > gem search -l xml *** LOCAL GEMS *** libxml-ruby (0.9.2, 0.9.0, 0.8.3) xml-mapping (0.8.1) xml-object (0.9.8) xml-simple (1.0.11)
  • 57. 57 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Gems - search > gem search -r xml *** REMOTE GEMS *** axml (0.0.2) diff2xml (0.0.2) eimxml (0.0.2) faster_xml_simple (0.5.0) fastxml (0.1.92) gccxml_gem (0.9.1) hashtoxml (0.0.5) jrexml (0.5.3) libxml-feed (0.0.1) libxml-ruby (0.9.4) libxml-xmlrpc (0.1.5) […]
  • 58. 58 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Gems - installing > gem install textgraph Successfully installed textgraph-0.1.0 1 gem installed Installing ri documentation for textgraph-0.1.0... Installing RDoc documentation for textgraph- 0.1.0...
  • 59. 59 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Gems - Updates > gem update Updating installed gems Updating haml Successfully installed haml-2.0.5 Updating libxml-ruby Building native extensions. This could take a while... Successfully installed libxml-ruby-0.9.4-x86- mswin32-60 Updating ruby-debug-ide Successfully installed ruby-debug-ide-0.4.2 […]
  • 60. 60 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Gems - Usage
  • 61. 61 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger RDoc
  • 63. 63 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby VMs • Ruby 1.8 („MRI“-Matz's Ruby Interpreter) • Ruby 1.9 („YARV“) • JRuby • Rubinius • (IronRuby)
  • 64. 64 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Speed Rubinius < Ruby 1.8 < JRuby < Ruby 1.9
  • 65. 65 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby 1.8 • Matz's Ruby Interpreter or Ruby MRI • Performance: Code -> Syntax Tree -> Run • Threading: Green • Unicode: no (utf8 though)
  • 66. 66 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Ruby 1.9 • YARV (Yet another Ruby VM) • Performance: Code -> Syntax Tree -> ByteCode • Unicode: yes • Threading: Native (but “global interpreter lock“) • small syntax changes • no more continuations
  • 67. 67 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger JRuby • Performance: Hotspot! • Threading: Native • Unicode: no (utf8 or java unicode) • Compatibility: 1.8 and 1.9! • Addon: ▫ Deployable on Tomcat/Glassfish/… ▫ Access Java from Ruby or Ruby from Java • Problems: C Libraries
  • 68. 68 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Rubinius • the ultimate level of “dogfooding”
  • 69. Good and bad things A Programmer„s Best Friend
  • 70. 70 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Good Things • Sweet Language • Ruby on Rails • Big community quot;ruby people are nicequot; - Martin Fowler • Open Source
  • 71. 71 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Bad Things • Ruby 2 is vaporware • „slow“ • IDE
  • 73. 73 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Future Prospects • gather wild & weird ideas • try to make ruby the best language ever • shed light to undefined corners of Ruby • finally (if possible), document Ruby specification
  • 75. 75 Christian Feser, Michael Kram, Jakob Schröter, Marc Seeger Quellen • confreaks.com – RubyConf 2006/2007/2008 • ruby-lang.org • tryruby.hobbix.com • „Ruby Grundlagen – PDF zum Buch Rapid Web Development mit Ruby on Rails“ – besimple.de • OReilly - Ruby Cookbook • poignantguide.net/ruby/