Ruby
 programming language
         and
Ruby on Rails framework
Presentation Agenda
 What is Ruby?

 About the language

 Its history

 Principles of language

 Code examples

 Rails framework

January 18, 2010        Radek Mika - Unicorn College   2
What is Ruby?
 Programming language

 Interpreted language

 Modern language

 Object-oriented language

 Dynamically typed language

 Agile language



January 18, 2010         Radek Mika - Unicorn College   3
Principles of Ruby




January 18, 2010        Radek Mika - Unicorn College   4
Principles of Ruby




January 18, 2010        Radek Mika - Unicorn College   5
Principles of Ruby
 Japanese Design

       Focus on human factor

       Principle of Least Surprise

       Principle of Least Effort



January 18, 2010         Radek Mika - Unicorn College   6
The Principle of Least Surprise
This principle is the supreme design goal of Ruby
       It makes programmers happy
       It makes Ruby easy to learn
Examples
      What class is an object?
                   o.class
      Is it Array.size or Array.length?
                   same method - they are aliased
      What are the differences between arrays?
                   Diff = ary1 – ary2
                   Union = ary1 + ary2

January 18, 2010               Radek Mika - Unicorn College   7
The Principle of Least Effort
 We do not like to waste time
           Especially on XML configuration files, getters, setters, etc.


 Syntactic sugar wherever you look

 The quicker we program, the more we accomplish
           Sounds reasonable enough, does not it?


 Less code means less bugs



January 18, 2010                   Radek Mika - Unicorn College            8
Philosophy
 No perfect language

 Have joy

 Computers are my servants, not my masters!

 Unchangeable small core (syntax) and extensible class
  libraries



January 18, 2010        Radek Mika - Unicorn College      9
The History of Ruby
 Created in Japan 10 years ago

 Created by Yukihiro Matsumoto (known as
  Matz)

 Inspired by Perl, Python, Lisp and Smalltalk



January 18, 2010        Radek Mika - Unicorn College   10
Comparison with Python
 Interactive prompt (similar)
 No special line terminator (similar)
 Everything is an object (similar)


                     X
 More speed! (ruby is faster)
  …
January 18, 2010          Radek Mika - Unicorn College   11
Ruby is Truly Object-Oriented
 Ruby uses single inheritance
           X
 Mixins and Modules allow you to extend classes
  without multiple inheritance

 Reflection

 Things like ‘=’ and ‘+’ which may appear as
  operators are actually methods (like Smalltalk)

January 18, 2010    Radek Mika - Unicorn College    12
Well, that’s all nice but…




                       …is it FAST?
January 18, 2010           Radek Mika - Unicorn College   13
Merge Sort Algorithm




January 18, 2010       Radek Mika - Unicorn College   14
Ruby Speed Comparison

 3x faster than      PHP

 2.5x faster than    Perl

 2x faster than      Python



 2x (maybe more)     C++
 SLOWER than




January 18, 2010              Radek Mika - Unicorn College   15
Ruby Speed - WARNING


 Previous results are only
 informational (only Merge Sort
 Comparison)

 Another comparisons usually
 have different results




January 18, 2010         Radek Mika - Unicorn College   16
When I should not use Ruby?
 If I need highly effective and powerful language, e.g.
  for distributed calculations
 If I want to write a complicated, ugly or messy code


     Other disadvantages:


 Less spread than Perl is
 Ruby is relatively slow

January 18, 2010       Radek Mika - Unicorn College        17
And finally…




                   …some code examples
January 18, 2010         Radek Mika - Unicorn College   18
Clear Syntax
# Output "UPPER"
puts "upper".upcase

# Output the absolute value of -5:
puts -5.abs

# Output "Ruby Rocks!" 5 times
5.times do
  puts "Ruby Rocks!"
end
Source: http://pastie.org/785234


January 18, 2010                   Radek Mika - Unicorn College   19
Classes and Methods
#Classes begin with class and end with end:
# The Greeter class
class Greeter
end

#Methods begin with def and end with end:
# The salute method
def salute
end
Source: http://pastie.org/785249


January 18, 2010                   Radek Mika - Unicorn College   20
Classes and Methods
# The Greeter class
class Greeter
  def initialize(greeting)
    @greeting = greeting
  end

  def salute(name)
    puts "#{@greeting} #{name}!"
  end
end

# Initialize our Greeter
g = Greeter.new("Hello")

# Output "Hello World!"
g.salute("World")

Source: http://pastie.org/785258 - classes


January 18, 2010                     Radek Mika - Unicorn College   21
If Statements
# if with several branches
if account.total > 100000
  puts "large account"
elsif account.total > 25000
  puts "medium account"
else
  puts "small account„
end
Sources: http://pastie.org/785268



January 18, 2010                    Radek Mika - Unicorn College   22
Case Statements
# A simple case/when statement
case name
when "John"
  puts "Howdy John!"
when "Ryan"
  puts "Whatz up Ryan!"
else
  puts "Hi #{name}!"
end
Sources: http://pastie.org/785278


January 18, 2010                    Radek Mika - Unicorn College   23
Regular Expressions
#Ruby supports Perl-style regular expressions:
# Extract the parts of a phone number

phone = "123-456-7890"

if phone           =~ /(d{3})-(d{3})-(d{4})/
  ext =            $1
  city =           $2
  num =            $3
end
Sources: http://pastie.org/785732


January 18, 2010                    Radek Mika - Unicorn College   24
Regular Expressions
# Case statement with regular expression
case lang
when /ruby/i
  puts "Matz created Ruby!"
when /perl/i
  puts "Larry created Perl!"
else
  puts "I don't know who created #{lang}."
end
Sources: http://pastie.org/785738



January 18, 2010                    Radek Mika - Unicorn College   25
Ruby Blocks
# Print out a list of people from
# each person in the Array
people.each do |person|
  puts "* #{person.name}"
end

# A block using the bracket syntax
5.times { puts "Ruby rocks!" }

# Custom sorting
[2,1,3].sort! { |a, b| b <=> a }

Sources: http://pastie.org/pastes/785239



January 18, 2010                     Radek Mika - Unicorn College   26
Yield to the Block!
# define the thrice method
def thrice
  yield
  yield
  yield
end

# Output "Blocks are cool!" three times
thrice { puts "Blocks are cool!" }

#This example use yield from within a method to
#hand control over to a block:
Sources: http://pastie.org/785774



January 18, 2010                    Radek Mika - Unicorn College   27
Blocks with Parameters
# redefine the thrice method
def thrice
  yield(1)
  yield(2)
  yield(3)
end

# Output "Blocks are cool!" three times,
# prefix it with the count
thrice { | i |
  puts "#{i}: Blocks are cool!"
}
Sources: http://pastie.org/785789



January 18, 2010                    Radek Mika - Unicorn College   28
Enough talking about Ruby!...




              What about Ruby on Rails?
January 18, 2010      Radek Mika - Unicorn College   29
Ruby on Rails
 Web framework

 An extremely productive web-application
  framework that is written in Ruby by
  David Hansson

 Includes everything needed to create database-driven web
  applications according to the Model-View-Control pattern
  of separation

 So-called reason of spreading ruby


January 18, 2010       Radek Mika - Unicorn College      30
Ruby on Rails
 MVC

 Convention over Configurations

 Don’t Repeat Yourself (DRY)




January 18, 2010     Radek Mika - Unicorn College   31
History
 Predominantly written by David H. Hannson
       Talented designer
       His dream is to change the world
       A 37signals.com principal – World class designers


 Since 2005



January 18, 2010        Radek Mika - Unicorn College        32
Model – View - Controller
 MVC is an architectural pattern, used not only for building web
  applications

 Model classes are the "smart" domain objects (such as Account,
  Product, Person, Post) that hold business logic and know how to
  persist themselves to a database

 Views are HTML templates

 Controllers handle incoming requests (such as Save New Account,
  Update Product, Show Post) by manipulating the model and
  directing data to the view



January 18, 2010           Radek Mika - Unicorn College             33
Active Record
Object/Relational Mapping Framework = Active Record

 Automatic mapping between columns and class
  attributes
 Declarative configuration via macros
 Dynamic finders
 Associations, Aggregations, Tree and List Behaviors
 Locking
 Lifecycle Callbacks
 Single-table inheritance supported
 Validation rules

January 18, 2010       Radek Mika - Unicorn College     34
From Controller to View
Rails gives you many rendering options

 Default template rendering
             Just follow naming conventions and magic happens.


 Explicitly render to particular action

 Redirect to another action

 Render a string response (or no response)
January 18, 2010                 Radek Mika - Unicorn College    35
View Template
ERB –Embedded Ruby

 Similar to JSPs <% and <%= syntax

 Easy to learn and teach for designers

 Execute in scope of controller

 Denoted with .rhtml extension

January 18, 2010      Radek Mika - Unicorn College   36
View Template
XmlMarkup –Programmatic View Construction

 Great for writing xhtml and xml content

 Denoted with .rxml extension

 Embeddable in ERB templates

January 18, 2010      Radek Mika - Unicorn College   37
And Much More…
    Templates and partials
    Pagination
    Caching (page, fragment, action)
    Helpers
    Routing with routes.rb
    Exceptions
    Unit testing
    ActiveSupport API (date conversion, time calculations)
    ActionMailer API
    ActionWebService API
    Rake

January 18, 2010          Radek Mika - Unicorn College        38
Sources
   Ruby on Rails (Agile Atlanta Group) – Obie Fernandez – May 10 ’05
   Ruby Language Overview – Muhamad Admin Rastgee
   Ruby on Rails – Curt Hibbs
   Workin’ on the Rails Road – Obie Fernandez
   Get to the Point! (Development with Ruby on Rails) – Ryan Platte, John W. Long

   Ruby speed comparison (http://is.gd/70hjD)

   http://en.wikipedia.org/wiki/Ruby_on_Rails




January 18, 2010                 Radek Mika - Unicorn College                        39
External Links
   http://ruby-lang.org – official website

   http://www.ruby-doc.org/ - Ruby doc project

   http://rubyforge.org/ - projects in Ruby

   http://www.rubycentral.com/book/ - online book Programming Ruby

   Full Ruby on Rails Tutorial

   Euruko 2008 - videos from European Ruby Conference 2008 in Prague on avc-
    cvut.cz (Czech)



January 18, 2010                  Radek Mika - Unicorn College                  40
Between Q&A…
   … you can run this code …




     … do you still think that you have a fast computer? :)


January 18, 2010        Radek Mika - Unicorn College          41
Acknowledgments & Contact

    Special thanks to Mgr. Veronika Kaplanová for English correction.




                       Radek Mika
                        radek@radekmika.cz
                        @radekmika (twitter)


January 18, 2010           Radek Mika - Unicorn College             42
January 18, 2010   Radek Mika - Unicorn College   43

Programming language Ruby and the Rails framework

  • 1.
    Ruby programming language and Ruby on Rails framework
  • 2.
    Presentation Agenda  Whatis Ruby?  About the language  Its history  Principles of language  Code examples  Rails framework January 18, 2010 Radek Mika - Unicorn College 2
  • 3.
    What is Ruby? Programming language  Interpreted language  Modern language  Object-oriented language  Dynamically typed language  Agile language January 18, 2010 Radek Mika - Unicorn College 3
  • 4.
    Principles of Ruby January18, 2010 Radek Mika - Unicorn College 4
  • 5.
    Principles of Ruby January18, 2010 Radek Mika - Unicorn College 5
  • 6.
    Principles of Ruby Japanese Design  Focus on human factor  Principle of Least Surprise  Principle of Least Effort January 18, 2010 Radek Mika - Unicorn College 6
  • 7.
    The Principle ofLeast Surprise This principle is the supreme design goal of Ruby  It makes programmers happy  It makes Ruby easy to learn Examples  What class is an object? o.class  Is it Array.size or Array.length? same method - they are aliased  What are the differences between arrays? Diff = ary1 – ary2 Union = ary1 + ary2 January 18, 2010 Radek Mika - Unicorn College 7
  • 8.
    The Principle ofLeast Effort  We do not like to waste time Especially on XML configuration files, getters, setters, etc.  Syntactic sugar wherever you look  The quicker we program, the more we accomplish Sounds reasonable enough, does not it?  Less code means less bugs January 18, 2010 Radek Mika - Unicorn College 8
  • 9.
    Philosophy  No perfectlanguage  Have joy  Computers are my servants, not my masters!  Unchangeable small core (syntax) and extensible class libraries January 18, 2010 Radek Mika - Unicorn College 9
  • 10.
    The History ofRuby  Created in Japan 10 years ago  Created by Yukihiro Matsumoto (known as Matz)  Inspired by Perl, Python, Lisp and Smalltalk January 18, 2010 Radek Mika - Unicorn College 10
  • 11.
    Comparison with Python Interactive prompt (similar)  No special line terminator (similar)  Everything is an object (similar) X  More speed! (ruby is faster) … January 18, 2010 Radek Mika - Unicorn College 11
  • 12.
    Ruby is TrulyObject-Oriented  Ruby uses single inheritance X  Mixins and Modules allow you to extend classes without multiple inheritance  Reflection  Things like ‘=’ and ‘+’ which may appear as operators are actually methods (like Smalltalk) January 18, 2010 Radek Mika - Unicorn College 12
  • 13.
    Well, that’s allnice but… …is it FAST? January 18, 2010 Radek Mika - Unicorn College 13
  • 14.
    Merge Sort Algorithm January18, 2010 Radek Mika - Unicorn College 14
  • 15.
    Ruby Speed Comparison 3x faster than PHP 2.5x faster than Perl 2x faster than Python 2x (maybe more) C++ SLOWER than January 18, 2010 Radek Mika - Unicorn College 15
  • 16.
    Ruby Speed -WARNING Previous results are only informational (only Merge Sort Comparison) Another comparisons usually have different results January 18, 2010 Radek Mika - Unicorn College 16
  • 17.
    When I shouldnot use Ruby?  If I need highly effective and powerful language, e.g. for distributed calculations  If I want to write a complicated, ugly or messy code Other disadvantages:  Less spread than Perl is  Ruby is relatively slow January 18, 2010 Radek Mika - Unicorn College 17
  • 18.
    And finally… …some code examples January 18, 2010 Radek Mika - Unicorn College 18
  • 19.
    Clear Syntax # Output"UPPER" puts "upper".upcase # Output the absolute value of -5: puts -5.abs # Output "Ruby Rocks!" 5 times 5.times do puts "Ruby Rocks!" end Source: http://pastie.org/785234 January 18, 2010 Radek Mika - Unicorn College 19
  • 20.
    Classes and Methods #Classesbegin with class and end with end: # The Greeter class class Greeter end #Methods begin with def and end with end: # The salute method def salute end Source: http://pastie.org/785249 January 18, 2010 Radek Mika - Unicorn College 20
  • 21.
    Classes and Methods #The Greeter class class Greeter def initialize(greeting) @greeting = greeting end def salute(name) puts "#{@greeting} #{name}!" end end # Initialize our Greeter g = Greeter.new("Hello") # Output "Hello World!" g.salute("World") Source: http://pastie.org/785258 - classes January 18, 2010 Radek Mika - Unicorn College 21
  • 22.
    If Statements # ifwith several branches if account.total > 100000 puts "large account" elsif account.total > 25000 puts "medium account" else puts "small account„ end Sources: http://pastie.org/785268 January 18, 2010 Radek Mika - Unicorn College 22
  • 23.
    Case Statements # Asimple case/when statement case name when "John" puts "Howdy John!" when "Ryan" puts "Whatz up Ryan!" else puts "Hi #{name}!" end Sources: http://pastie.org/785278 January 18, 2010 Radek Mika - Unicorn College 23
  • 24.
    Regular Expressions #Ruby supportsPerl-style regular expressions: # Extract the parts of a phone number phone = "123-456-7890" if phone =~ /(d{3})-(d{3})-(d{4})/ ext = $1 city = $2 num = $3 end Sources: http://pastie.org/785732 January 18, 2010 Radek Mika - Unicorn College 24
  • 25.
    Regular Expressions # Casestatement with regular expression case lang when /ruby/i puts "Matz created Ruby!" when /perl/i puts "Larry created Perl!" else puts "I don't know who created #{lang}." end Sources: http://pastie.org/785738 January 18, 2010 Radek Mika - Unicorn College 25
  • 26.
    Ruby Blocks # Printout a list of people from # each person in the Array people.each do |person| puts "* #{person.name}" end # A block using the bracket syntax 5.times { puts "Ruby rocks!" } # Custom sorting [2,1,3].sort! { |a, b| b <=> a } Sources: http://pastie.org/pastes/785239 January 18, 2010 Radek Mika - Unicorn College 26
  • 27.
    Yield to theBlock! # define the thrice method def thrice yield yield yield end # Output "Blocks are cool!" three times thrice { puts "Blocks are cool!" } #This example use yield from within a method to #hand control over to a block: Sources: http://pastie.org/785774 January 18, 2010 Radek Mika - Unicorn College 27
  • 28.
    Blocks with Parameters #redefine the thrice method def thrice yield(1) yield(2) yield(3) end # Output "Blocks are cool!" three times, # prefix it with the count thrice { | i | puts "#{i}: Blocks are cool!" } Sources: http://pastie.org/785789 January 18, 2010 Radek Mika - Unicorn College 28
  • 29.
    Enough talking aboutRuby!... What about Ruby on Rails? January 18, 2010 Radek Mika - Unicorn College 29
  • 30.
    Ruby on Rails Web framework  An extremely productive web-application framework that is written in Ruby by David Hansson  Includes everything needed to create database-driven web applications according to the Model-View-Control pattern of separation  So-called reason of spreading ruby January 18, 2010 Radek Mika - Unicorn College 30
  • 31.
    Ruby on Rails MVC  Convention over Configurations  Don’t Repeat Yourself (DRY) January 18, 2010 Radek Mika - Unicorn College 31
  • 32.
    History  Predominantly writtenby David H. Hannson  Talented designer  His dream is to change the world  A 37signals.com principal – World class designers  Since 2005 January 18, 2010 Radek Mika - Unicorn College 32
  • 33.
    Model – View- Controller  MVC is an architectural pattern, used not only for building web applications  Model classes are the "smart" domain objects (such as Account, Product, Person, Post) that hold business logic and know how to persist themselves to a database  Views are HTML templates  Controllers handle incoming requests (such as Save New Account, Update Product, Show Post) by manipulating the model and directing data to the view January 18, 2010 Radek Mika - Unicorn College 33
  • 34.
    Active Record Object/Relational MappingFramework = Active Record  Automatic mapping between columns and class attributes  Declarative configuration via macros  Dynamic finders  Associations, Aggregations, Tree and List Behaviors  Locking  Lifecycle Callbacks  Single-table inheritance supported  Validation rules January 18, 2010 Radek Mika - Unicorn College 34
  • 35.
    From Controller toView Rails gives you many rendering options  Default template rendering Just follow naming conventions and magic happens.  Explicitly render to particular action  Redirect to another action  Render a string response (or no response) January 18, 2010 Radek Mika - Unicorn College 35
  • 36.
    View Template ERB –EmbeddedRuby  Similar to JSPs <% and <%= syntax  Easy to learn and teach for designers  Execute in scope of controller  Denoted with .rhtml extension January 18, 2010 Radek Mika - Unicorn College 36
  • 37.
    View Template XmlMarkup –ProgrammaticView Construction  Great for writing xhtml and xml content  Denoted with .rxml extension  Embeddable in ERB templates January 18, 2010 Radek Mika - Unicorn College 37
  • 38.
    And Much More…  Templates and partials  Pagination  Caching (page, fragment, action)  Helpers  Routing with routes.rb  Exceptions  Unit testing  ActiveSupport API (date conversion, time calculations)  ActionMailer API  ActionWebService API  Rake January 18, 2010 Radek Mika - Unicorn College 38
  • 39.
    Sources  Ruby on Rails (Agile Atlanta Group) – Obie Fernandez – May 10 ’05  Ruby Language Overview – Muhamad Admin Rastgee  Ruby on Rails – Curt Hibbs  Workin’ on the Rails Road – Obie Fernandez  Get to the Point! (Development with Ruby on Rails) – Ryan Platte, John W. Long  Ruby speed comparison (http://is.gd/70hjD)  http://en.wikipedia.org/wiki/Ruby_on_Rails January 18, 2010 Radek Mika - Unicorn College 39
  • 40.
    External Links  http://ruby-lang.org – official website  http://www.ruby-doc.org/ - Ruby doc project  http://rubyforge.org/ - projects in Ruby  http://www.rubycentral.com/book/ - online book Programming Ruby  Full Ruby on Rails Tutorial  Euruko 2008 - videos from European Ruby Conference 2008 in Prague on avc- cvut.cz (Czech) January 18, 2010 Radek Mika - Unicorn College 40
  • 41.
    Between Q&A… … you can run this code … … do you still think that you have a fast computer? :) January 18, 2010 Radek Mika - Unicorn College 41
  • 42.
    Acknowledgments & Contact Special thanks to Mgr. Veronika Kaplanová for English correction. Radek Mika radek@radekmika.cz @radekmika (twitter) January 18, 2010 Radek Mika - Unicorn College 42
  • 43.
    January 18, 2010 Radek Mika - Unicorn College 43