SlideShare a Scribd company logo
1 of 43
Download to read offline
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

More Related Content

Similar to Programming language Ruby and the Rails framework

Understanding the Standards Gap
Understanding the Standards GapUnderstanding the Standards Gap
Understanding the Standards GapDan Brickley
 
Ks2008 Semanticweb In Action
Ks2008 Semanticweb In ActionKs2008 Semanticweb In Action
Ks2008 Semanticweb In ActionRinke Hoekstra
 
Graph databases & data integration v2
Graph databases & data integration v2Graph databases & data integration v2
Graph databases & data integration v2Dimitris Kontokostas
 
Why Python?
Why Python?Why Python?
Why Python?Adam Pah
 
Applying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesApplying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesData Ninja API
 
MySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New WorldMySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New WorldFrederic Descamps
 
Ruby on Rails and the Semantic Web
Ruby on Rails and the Semantic WebRuby on Rails and the Semantic Web
Ruby on Rails and the Semantic WebNathalie Steinmetz
 
OO and Rails...
OO and Rails... OO and Rails...
OO and Rails... adzdavies
 
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...datascienceiqss
 
Bentobox exercise by Rails Girls
Bentobox exercise by Rails Girls Bentobox exercise by Rails Girls
Bentobox exercise by Rails Girls Rails Girls Warsaw
 
06 gioca-ontologies
06 gioca-ontologies06 gioca-ontologies
06 gioca-ontologiesnidzokus
 
LINEデリマでのElasticsearchの運用と監視の話
LINEデリマでのElasticsearchの運用と監視の話LINEデリマでのElasticsearchの運用と監視の話
LINEデリマでのElasticsearchの運用と監視の話LINE Corporation
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2rusersla
 
The story of language development
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
 
Scala Days Highlights | BoldRadius
Scala Days Highlights | BoldRadiusScala Days Highlights | BoldRadius
Scala Days Highlights | BoldRadiusBoldRadius Solutions
 

Similar to Programming language Ruby and the Rails framework (20)

Understanding the Standards Gap
Understanding the Standards GapUnderstanding the Standards Gap
Understanding the Standards Gap
 
Ks2008 Semanticweb In Action
Ks2008 Semanticweb In ActionKs2008 Semanticweb In Action
Ks2008 Semanticweb In Action
 
Graph databases & data integration v2
Graph databases & data integration v2Graph databases & data integration v2
Graph databases & data integration v2
 
LabTech Introduction
LabTech IntroductionLabTech Introduction
LabTech Introduction
 
Why Python?
Why Python?Why Python?
Why Python?
 
Applying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesApplying large scale text analytics with graph databases
Applying large scale text analytics with graph databases
 
MySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New WorldMySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New World
 
Ruby on Rails and the Semantic Web
Ruby on Rails and the Semantic WebRuby on Rails and the Semantic Web
Ruby on Rails and the Semantic Web
 
Ruby tutorial
Ruby tutorialRuby tutorial
Ruby tutorial
 
OO and Rails...
OO and Rails... OO and Rails...
OO and Rails...
 
Ruby
RubyRuby
Ruby
 
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...
Data FAIRport Skunkworks: Common Repository Access Via Meta-Metadata Descript...
 
Bentobox exercise by Rails Girls
Bentobox exercise by Rails Girls Bentobox exercise by Rails Girls
Bentobox exercise by Rails Girls
 
06 gioca-ontologies
06 gioca-ontologies06 gioca-ontologies
06 gioca-ontologies
 
LINEデリマでのElasticsearchの運用と監視の話
LINEデリマでのElasticsearchの運用と監視の話LINEデリマでのElasticsearchの運用と監視の話
LINEデリマでのElasticsearchの運用と監視の話
 
NLP@DATEV: Setting up a domain specific language model, Dr. Jonas Rende & Tho...
NLP@DATEV: Setting up a domain specific language model, Dr. Jonas Rende & Tho...NLP@DATEV: Setting up a domain specific language model, Dr. Jonas Rende & Tho...
NLP@DATEV: Setting up a domain specific language model, Dr. Jonas Rende & Tho...
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2
 
20110728 datalift-rpi-troy
20110728 datalift-rpi-troy20110728 datalift-rpi-troy
20110728 datalift-rpi-troy
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
Scala Days Highlights | BoldRadius
Scala Days Highlights | BoldRadiusScala Days Highlights | BoldRadius
Scala Days Highlights | BoldRadius
 

Recently uploaded

IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 

Recently uploaded (20)

IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 

Programming language Ruby and the Rails framework

  • 1. Ruby programming language and Ruby on Rails framework
  • 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
  • 4. Principles of Ruby January 18, 2010 Radek Mika - Unicorn College 4
  • 5. Principles of Ruby January 18, 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 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
  • 14. Merge Sort Algorithm January 18, 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 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
  • 43. January 18, 2010 Radek Mika - Unicorn College 43