2. 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
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
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 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
8. 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
9. 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
10. 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
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 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
13. Well, that’s all nice but…
…is it FAST?
January 18, 2010 Radek Mika - Unicorn College 13
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 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
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
#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
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
# 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
23. 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
24. 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
25. 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
26. 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
27. 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
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 about Ruby!...
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 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
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 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
35. 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
36. 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
37. 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
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