programming language ruby and the rails framework
TRANSCRIPT
Rubyprogramming language
and Ruby on Rails framework
Presentation Agenda What is Ruby?
About the language
Its history
Principles of language
Code examples
Rails framework
2Radek Mika - Unicorn CollegeJanuary 18, 2010
What is Ruby? Programming language
Interpreted language
Modern language
Object-oriented language
Dynamically typed language
Agile language
3Radek Mika - Unicorn CollegeJanuary 18, 2010
Principles of Ruby
4Radek Mika - Unicorn CollegeJanuary 18, 2010
Principles of Ruby
5Radek Mika - Unicorn CollegeJanuary 18, 2010
Principles of Ruby
Japanese Design
Focus on human factor
Principle of Least Surprise
Principle of Least Effort
6Radek Mika - Unicorn CollegeJanuary 18, 2010
The Principle of Least SurpriseThis principle is the supreme design goal of Ruby It makes programmers happy It makes Ruby easy to learnExamples 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 – ary2Union = ary1 + ary2
7Radek Mika - Unicorn CollegeJanuary 18, 2010
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 accomplishSounds reasonable enough, does not it?
Less code means less bugs
8Radek Mika - Unicorn CollegeJanuary 18, 2010
Philosophy No perfect language
Have joy
Computers are my servants, not my masters!
Unchangeable small core (syntax) and extensible class libraries
9Radek Mika - Unicorn CollegeJanuary 18, 2010
The History of Ruby
Created in Japan 10 years ago
Created by Yukihiro Matsumoto (known as Matz)
Inspired by Perl, Python, Lisp and Smalltalk
10Radek Mika - Unicorn CollegeJanuary 18, 2010
Comparison with Python
Interactive prompt (similar) No special line terminator (similar) Everything is an object (similar)
X More speed! (ruby is faster)
…
11Radek Mika - Unicorn CollegeJanuary 18, 2010
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)
12Radek Mika - Unicorn CollegeJanuary 18, 2010
…is it FAST?
January 18, 2010 Radek Mika - Unicorn College 13
Well, that’s all nice but…
Merge Sort Algorithm
14Radek Mika - Unicorn CollegeJanuary 18, 2010
Ruby Speed Comparison
15Radek Mika - Unicorn CollegeJanuary 18, 2010
3x faster than PHP
2.5x faster than Perl
2x faster than Python
2x (maybe more) C++SLOWER than
Ruby Speed - WARNING
16Radek Mika - Unicorn CollegeJanuary 18, 2010
Previous results are only informational (only Merge Sort Comparison)
Another comparisons usually have different results
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
…some code examples
January 18, 2010 Radek Mika - Unicorn College 18
And finally…
Clear Syntax# Output "UPPER"puts "upper".upcase
# Output the absolute value of -5:puts -5.abs
# Output "Ruby Rocks!" 5 times5.times do
puts "Ruby Rocks!"endSource: 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 classclass Greeterend
#Methods begin with def and end with end:# The salute methoddef saluteend
Source: http://pastie.org/785249
January 18, 2010 Radek Mika - Unicorn College 20
Classes and Methods# The Greeter classclass Greeter
def initialize(greeting)@greeting = greeting
end
def salute(name)puts "#{@greeting} #{name}!"
endend
# Initialize our Greeterg = 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 branchesif account.total > 100000puts "large account"
elsif account.total > 25000puts "medium account"
elseputs "small account„
endSources: http://pastie.org/785268
January 18, 2010 Radek Mika - Unicorn College 22
Case Statements# A simple case/when statementcase namewhen "John"puts "Howdy John!"
when "Ryan"puts "Whatz up Ryan!"
elseputs "Hi #{name}!"
endSources: 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 = $1city = $2num = $3
end
Sources: http://pastie.org/785732
January 18, 2010 Radek Mika - Unicorn College 24
Regular Expressions# Case statement with regular expressioncase langwhen /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 Arraypeople.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 methoddef thrice
yieldyieldyield
end
# Output "Blocks are cool!" three timesthrice { 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 methoddef thrice
yield(1)yield(2)yield(3)
end
# Output "Blocks are cool!" three times,# prefix it with the countthrice { | i |
puts "#{i}: Blocks are cool!"}Sources: http://pastie.org/785789
January 18, 2010 Radek Mika - Unicorn College 28
What about Ruby on Rails?
January 18, 2010 Radek Mika - Unicorn College 29
Enough talking about Ruby!...
Ruby on Rails Web framework
An extremely productive web-applicationframework that is written in Ruby byDavid 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
30Radek Mika - Unicorn CollegeJanuary 18, 2010
Ruby on Rails
MVC
Convention over Configurations
Don’t Repeat Yourself (DRY)
31Radek Mika - Unicorn CollegeJanuary 18, 2010
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
32Radek Mika - Unicorn CollegeJanuary 18, 2010
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
33Radek Mika - Unicorn CollegeJanuary 18, 2010
Active RecordObject/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
34Radek Mika - Unicorn CollegeJanuary 18, 2010
From Controller to ViewRails 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)
35Radek Mika - Unicorn CollegeJanuary 18, 2010
View TemplateERB –Embedded Ruby
Similar to JSPs <% and <%= syntax
Easy to learn and teach for designers
Execute in scope of controller
Denoted with .rhtml extension
36Radek Mika - Unicorn CollegeJanuary 18, 2010
View Template
XmlMarkup –Programmatic View Construction
Great for writing xhtml and xml content
Denoted with .rxml extension
Embeddable in ERB templates
37Radek Mika - Unicorn CollegeJanuary 18, 2010
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
38Radek Mika - Unicorn CollegeJanuary 18, 2010
Sources
39Radek Mika - Unicorn CollegeJanuary 18, 2010
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
External Links
40Radek Mika - Unicorn CollegeJanuary 18, 2010
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)
Between Q&A…
41Radek Mika - Unicorn CollegeJanuary 18, 2010
… do you still think that you have a fast computer? :)
… you can run this code …
Acknowledgments & Contact
42Radek Mika - Unicorn CollegeJanuary 18, 2010
Special thanks to Mgr. Veronika Kaplanová for English correction.
Radek [email protected]
@radekmika (twitter)
43Radek Mika - Unicorn CollegeJanuary 18, 2010