278
Apresentando Ruby e Ruby on Rails a apresentação já vai começar ...

SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Embed Size (px)

DESCRIPTION

Apresentação sobre Ruby e Ruby on Rails para o SEMAC da UNESP de São José do Rio Preto.

Citation preview

Page 1: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Apresentando Rubye Ruby on Rails

a apresentação já vai começar ...

Page 2: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Apresentando Rubye Ruby on Rails

Page 3: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Fabio Akitawww.akitaonrails.com

@akitaonrails

Page 4: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Fabio Akitawww.akitaonrails.com

@akitaonrails

1990

Page 5: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 6: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 7: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 8: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 9: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 10: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 11: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 12: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 13: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 14: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 15: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Ruby(linguagem)

1994

Ruby on Rails(framework web)

2004

Page 16: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Ruby1.8.7

Ruby 1.9.2Ruby1.9.3-dev

Ruby on Rails2.3.11

Ruby on Rails 3.0.7Ruby on Rails3.1-RC1

Page 17: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Ruby1.8.7

Ruby 1.9.2Ruby1.9.3-dev

Ruby on Rails2.3.11

Ruby on Rails 3.0.7Ruby on Rails3.1-RC1

Page 18: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Ruby1.8.7

Ruby 1.9.2Ruby1.9.3-dev

Ruby on Rails2.3.11

Ruby on Rails 3.0.7Ruby on Rails3.1-RC1

Page 19: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Orientação a Objetos

Page 20: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 21: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 22: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 23: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

UMLDiagrama de Classes

Page 24: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

UMLDiagrama de Classes

!?

Page 25: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

UMLDiagrama de Classes

!?

POO?

Page 26: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

UMLDiagrama de Classes

!?

POC!

Page 27: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Alan Kay

“A melhor maneirade prever o futuro

é inventá-lo”

Page 28: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Alan Kay

“Eu inventei o termoOrientação a Objetos

e posso dizer queeu não tinha

C++ em mente”

Page 29: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Alan Kay

“Eu inventei o termoOrientação a Objetos

e posso dizer queeu não tinha

C++ em mente”

Page 30: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 31: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 32: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Hello World

Page 33: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Hello World

Page 34: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

#include <stdio.h>

int main(){ printf("Hello world\n"); return 0;}

Page 35: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); }}

Page 36: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Transcript show: 'Hello, world!'.

Page 37: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'

Page 38: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Procedures??

Page 39: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Procedures??

Page 40: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Page 41: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

Page 42: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

puts self.class

Page 43: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

puts self.classthis

Page 44: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

puts self.class => Object

this

Page 45: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

puts self.class => Object

Object.ancestors => [Object, Kernel, BasicObject]

this

Page 46: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

puts 'Hello World'=> Hello World

Kernel.puts 'Hello World'=> Hello World

puts self.class => Object

Object.ancestors => [Object, Kernel, BasicObject]

this

Page 47: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

Page 48: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class

Page 49: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

Page 50: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

true.class => TrueClass

Page 51: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

true.class => TrueClass

nil

Page 52: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

true.class => TrueClass

nil .class => NilClass

Page 53: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

true.class => TrueClass

nil .class => NilClass

NullPointerException!?

Page 54: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

"teste".class => String

1.class => Fixnum

true.class => TrueClass

nil .class => NilClass

Page 55: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

1 + 2

Page 56: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

1 + 2

1.+(2)

Page 57: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) return "Hello, " + nameend

puts hello("Fabio") => "Hello, Fabio"

Page 58: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) return "Hello, " + nameend

puts hello "Fabio" => "Hello, Fabio"

Page 59: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) return "Hello, " + nameend

puts hello "Fabio" => "Hello, Fabio"

ParêntesesOpcionais

Page 60: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) "Hello, " + nameend

puts hello "Fabio" => "Hello, Fabio"

Page 61: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) "Hello, " + nameend

puts hello "Fabio" => "Hello, Fabio" return

automático

Page 62: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) "Hello, #{name}"end

puts hello "Fabio" => "Hello, Fabio"

Page 63: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

def hello(name) "Hello, #{name}"end

puts hello "Fabio" => "Hello, Fabio" Interpolação

Page 64: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class String def hello(name) "#{self}, #{name}" endend

Page 65: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class String def hello(name) "#{self}, #{name}" endend

"Hello".hello "Fabio" => "Hello, Fabio"

Page 66: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class String def hello(name) "#{self}, #{name}" endend

"Hello".hello "Fabio" => "Hello, Fabio"

ClassesAbertas!

Page 67: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

module Legal def bu! "Buuu!" endend

class String include Legalend

class Fixnum include Legalend

"foo".bu! => "Buuu!" 10.bu! => "Buuu!"

Page 68: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

module Legal def bu! "Buuu!" endend

class String include Legalend

class Fixnum include Legalend

"foo".bu! => "Buuu!" 10.bu! => "Buuu!"

Page 69: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

ModuleMixin

module Legal def bu! "Buuu!" endend

class String include Legalend

class Fixnum include Legalend

"foo".bu! => "Buuu!" 10.bu! => "Buuu!"

Page 70: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

ModuleMixin

module Legal def bu! "Buuu!" endend

class String include Legalend

class Fixnum include Legalend

"foo".bu! => "Buuu!" 10.bu! => "Buuu!"

Page 71: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

ModuleMixin

module Legal def bu! "Buuu!" endend

class String include Legalend

class Fixnum include Legalend

"foo".bu! => "Buuu!" 10.bu! => "Buuu!"

Page 72: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'active_support'

Time.now + 1.day => 2011-05-18 11:44:20 -0300

Time.now + 1.week => 2011-05-24 11:44:24 -0300

(1.gigabyte - 100.megabytes) / 1.megabyte => 924

Page 73: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'active_support'

Time.now + 1.day => 2011-05-18 11:44:20 -0300

Time.now + 1.week => 2011-05-24 11:44:24 -0300

(1.gigabyte - 100.megabytes) / 1.megabyte => 924

Page 74: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'active_support'

Time.now + 1.day => 2011-05-18 11:44:20 -0300

Time.now + 1.week => 2011-05-24 11:44:24 -0300

(1.gigabyte - 100.megabytes) / 1.megabyte => 924

Page 75: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'active_support'

Time.now + 1.day => 2011-05-18 11:44:20 -0300

Time.now + 1.week => 2011-05-24 11:44:24 -0300

(1.gigabyte - 100.megabytes) / 1.megabyte => 924

Page 76: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]soma = 0

for i in list soma += iend

puts soma => 15

Page 77: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]soma = 0

for i in list soma += iend

puts soma => 15

Page 78: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]soma = 0

for i in list soma += iend

puts soma => 15

Page 79: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) { |total, i| total += i }

puts soma => 15

Page 80: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) { |total, i| total += i }

puts soma => 15

Page 81: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) { |total, i| total += i }

puts soma => 15

Page 82: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) { |total, i| total += i }

puts soma => 15

Page 83: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) { |total, i| total += i }

puts soma => 15

Page 84: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) do |total, i| total += iend

puts soma => 15

Page 85: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) do |total, i| total += iend

puts soma => 15

Anonymous Inner Class?

Page 86: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) do |total, i| total += iend

puts soma => 15

Page 87: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

list = [1,2,3,4,5]

soma = list.inject(0) do |total, i| total += iend

puts soma => 15 CLOSURE!

Page 88: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Foo def method_missing(method) print "#{method} called" endend

Foo.new.bar => "bar called" Foo.new.send(:bar) => "bar called"

Page 89: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Foo def method_missing(method) print "#{method} called" endend

Foo.new.bar => "bar called" Foo.new.send(:bar) => "bar called"

Page 90: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Foo def method_missing(method) print "#{method} called" endend

Foo.new.bar => "bar called" Foo.new.send(:bar) => "bar called"

Messages!

Page 91: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 92: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

Page 93: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

require 'builder'xml = Builder::XmlMarkup.new

xml.instruct! :xml

xml.Hello "World!"xml.date do xml.year "2006" xml.month "01" xml.day "01"end

Page 94: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

require 'builder'xml = Builder::XmlMarkup.new

xml.instruct! :xml

xml.Hello "World!"xml.date do xml.year "2006" xml.month "01" xml.day "01"end

Page 95: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

require 'builder'xml = Builder::XmlMarkup.new

xml.instruct! :xml

xml.Hello "World!"xml.date do xml.year "2006" xml.month "01" xml.day "01"end

Page 96: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

require 'builder'xml = Builder::XmlMarkup.new

xml.instruct! :xml

xml.Hello "World!"xml.date do xml.year "2006" xml.month "01" xml.day "01"end

Page 97: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

<?xml version="1.1" encoding="US-ASCII"?><Hello>World!</Hello><date> <year>2006</year> <month>01</month> <day>01</day></date>

require 'builder'xml = Builder::XmlMarkup.new

xml.instruct! :xml

xml.Hello "World!"xml.date do xml.year "2006" xml.month "01" xml.day "01"end

Page 98: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 99: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'mechanize'

a = Mechanize.new do |agent| agent.user_agent_alias = 'Mac Safari'end

a.get('http://google.com/') do |page| search_result = page.form_with(:name => 'f') do |search| search.q = 'Hello world' end.submit

search_result.links.each do |link| puts link.text endend

Page 100: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'mechanize'

a = Mechanize.new do |agent| agent.user_agent_alias = 'Mac Safari'end

a.get('http://google.com/') do |page| search_result = page.form_with(:name => 'f') do |search| search.q = 'Hello world' end.submit

search_result.links.each do |link| puts link.text endend

Page 101: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'mechanize'

a = Mechanize.new do |agent| agent.user_agent_alias = 'Mac Safari'end

a.get('http://google.com/') do |page| search_result = page.form_with(:name => 'f') do |search| search.q = 'Hello world' end.submit

search_result.links.each do |link| puts link.text endend

Page 102: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

require 'rubygems'require 'mechanize'

a = Mechanize.new do |agent| agent.user_agent_alias = 'Mac Safari'end

a.get('http://google.com/') do |page| search_result = page.form_with(:name => 'f') do |search| search.q = 'Hello world' end.submit

search_result.links.each do |link| puts link.text endend

Page 103: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 104: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Twitter include HTTParty base_uri 'twitter.com' basic_auth 'username', 'password'end

Twitter.post('/statuses/update.json', :query => { :status => "It's an HTTParty and everyone is invited!" })

Page 105: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Twitter include HTTParty base_uri 'twitter.com' basic_auth 'username', 'password'end

Twitter.post('/statuses/update.json', :query => { :status => "It's an HTTParty and everyone is invited!" })

Page 106: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 107: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 108: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 109: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 110: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 111: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 112: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 113: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Fortran 90 ISO1991

SML ‘901990

Oakjune 1991

Perl 4.000march 21, 1991

PostScript level 21992

Perl 5.000october 18, 1994

Common Lisp ANSIdecember 8, 1994

Scheme IEEE1990

Python1991

NetRexx1991

ISO C(C90)

december 15, 1990

Caml 2-6.11991

Caml 3.11993

Visual Basic 1.0may 20, 1991

Oberon-21991

Sather 0.1june 1991

Sather 1.0mid-1994

Rubyfebruary 24, 1993

Haskell 1.1april 1, 1990

Haskell 1.2march 1992

Cmm1992

1990

MUMPS ISO1992

M1994

A+1992

J1990

Visual Basic 2.0march 1992

Visual Basic 3.0june 93

Eiffel 31993

MS PDS 7.11990

SML ‘971997

Java 2 (v1.2)december 8, 1998

PostScript level 3september 11, 1996

C++98 ANSI/ISO1998

APL961996

OO COBOL1997

Scheme R5RS1998

Ada 951995

Java 1may 23, 1995

Delphimarch 2, 1995

Delphi 5august, 1999

Modula-2 ISOjune 1, 1996

Tcl/Tk 8.1april 1999

Python 1.5.2april 13, 1999

Perl 5.005_50july 26, 1998

NetRexx 1.150july 23, 1999

Object Rexxfebruary 25, 1997

Prolog IV1997

ISO C(C95)

april 1, 1996

ISO C (C99)december 1, 1999

Objective Caml1996 O’Caml 2

1998

Visual Basic 6.0june 16, 1998

Sather 1.1september 1995

Sather 1.2.1november 4, 1999

Ruby 0.95december 1995

Ruby 1.1 alpha 0august 13, 1997 Ruby 1.3.2

april 2, 1999

Haskell 1.3may 1996

Haskell 1.4april 1997

Haskell 98february 1999

Fortran 95 ISOdecember 15, 1997

LiveScript1995

JavaScriptdecember 1995

JavaScript 1.5

ECMAScriptjune 1997

ECMAScript ed3december 1999

JScriptmay 1996

Self 4.0july 10, 1995

PHP/FI1995 PHP 2.0

nov. 13, 1997PHP 3.0

june 6, 1998

O’Caml 1.0.7december 11, 1997

Tcl/Tk 8.2.3dec. 16, 1999

Eiffel 4december 11, 1996

Eiffel 4.2february 6, 1998

1995

M ANSIdec 8, 1995

Open Mdec 11, 1995

M ISO1999

K1996

Visual Basic 4.0september 1995

Visual Basic 5.0april 1997

ANSI Rexx

ISO Forth1997

ANSI Smalltalkmay 19, 1998

Modula-2 ISOGeneric Extensiondecember 19, 1998

JavaScript 2.0(draft 1)

february 18, 1999

Pascal AFNOR1983

Object Pascal1985

PostScript1982

Smalltalk-801980

ANSI C(C89)1989

Objective-C1983

C with Classesapril 1980 C++

july 1983

Concurrent C1984

Eiffel1986

nawk1985

COBOL 85 ISO/ANSI1985

Common Lisp1984

Scheme 841984

Ada 83 ANSIjanuary 1983

Ada ISO1987

Oberon1987

Prolog IIoctober 1982

OO Forth1987

Clos1989

Object Logo1986

Prolog III1984

APL 2august 1984

SML1984

Modula 31988

Perl 3.000october 18, 1989

Perl 2.000january 5, 1988

Perl 1.000december 18, 1987

Tclmid 1988

Tcl/Tkend 1988

Rex 2.001980

Rex 3.001982

Rexx 3.201984

Caml1987

Eiffel 21988

ABC1987

B1981

Haskell 1.01987

Self

BorlandTurbo Pascal

Cedar1983

1980 1985

MUMPS (FIPS)1986

Sharp APL

A1988

Miranda1982

KRC1981

Forth-831983

ANS Forth1986

ARM C++1989

BASICA1981

GW-Basic1983

MS Basic PDS 7.01989

QuickBasic 1.01985

QuickBasic 4.51988

Page 114: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Fortran 90 ISO1991

SML ‘901990

Oakjune 1991

Perl 4.000march 21, 1991

PostScript level 21992

Perl 5.000october 18, 1994

Common Lisp ANSIdecember 8, 1994

Scheme IEEE1990

Python1991

NetRexx1991

ISO C(C90)

december 15, 1990

Caml 2-6.11991

Caml 3.11993

Visual Basic 1.0may 20, 1991

Oberon-21991

Sather 0.1june 1991

Sather 1.0mid-1994

Rubyfebruary 24, 1993

Haskell 1.1april 1, 1990

Haskell 1.2march 1992

Cmm1992

1990

MUMPS ISO1992

M1994

A+1992

J1990

Visual Basic 2.0march 1992

Visual Basic 3.0june 93

Eiffel 31993

MS PDS 7.11990

SML ‘971997

Java 2 (v1.2)december 8, 1998

PostScript level 3september 11, 1996

C++98 ANSI/ISO1998

APL961996

OO COBOL1997

Scheme R5RS1998

Ada 951995

Java 1may 23, 1995

Delphimarch 2, 1995

Delphi 5august, 1999

Modula-2 ISOjune 1, 1996

Tcl/Tk 8.1april 1999

Python 1.5.2april 13, 1999

Perl 5.005_50july 26, 1998

NetRexx 1.150july 23, 1999

Object Rexxfebruary 25, 1997

Prolog IV1997

ISO C(C95)

april 1, 1996

ISO C (C99)december 1, 1999

Objective Caml1996 O’Caml 2

1998

Visual Basic 6.0june 16, 1998

Sather 1.1september 1995

Sather 1.2.1november 4, 1999

Ruby 0.95december 1995

Ruby 1.1 alpha 0august 13, 1997 Ruby 1.3.2

april 2, 1999

Haskell 1.3may 1996

Haskell 1.4april 1997

Haskell 98february 1999

Fortran 95 ISOdecember 15, 1997

LiveScript1995

JavaScriptdecember 1995

JavaScript 1.5

ECMAScriptjune 1997

ECMAScript ed3december 1999

JScriptmay 1996

Self 4.0july 10, 1995

PHP/FI1995 PHP 2.0

nov. 13, 1997PHP 3.0

june 6, 1998

O’Caml 1.0.7december 11, 1997

Tcl/Tk 8.2.3dec. 16, 1999

Eiffel 4december 11, 1996

Eiffel 4.2february 6, 1998

1995

M ANSIdec 8, 1995

Open Mdec 11, 1995

M ISO1999

K1996

Visual Basic 4.0september 1995

Visual Basic 5.0april 1997

ANSI Rexx

ISO Forth1997

ANSI Smalltalkmay 19, 1998

Modula-2 ISOGeneric Extensiondecember 19, 1998

JavaScript 2.0(draft 1)

february 18, 1999

Pascal AFNOR1983

Object Pascal1985

PostScript1982

Smalltalk-801980

ANSI C(C89)1989

Objective-C1983

C with Classesapril 1980 C++

july 1983

Concurrent C1984

Eiffel1986

nawk1985

COBOL 85 ISO/ANSI1985

Common Lisp1984

Scheme 841984

Ada 83 ANSIjanuary 1983

Ada ISO1987

Oberon1987

Prolog IIoctober 1982

OO Forth1987

Clos1989

Object Logo1986

Prolog III1984

APL 2august 1984

SML1984

Modula 31988

Perl 3.000october 18, 1989

Perl 2.000january 5, 1988

Perl 1.000december 18, 1987

Tclmid 1988

Tcl/Tkend 1988

Rex 2.001980

Rex 3.001982

Rexx 3.201984

Caml1987

Eiffel 21988

ABC1987

B1981

Haskell 1.01987

Self

BorlandTurbo Pascal

Cedar1983

1980 1985

MUMPS (FIPS)1986

Sharp APL

A1988

Miranda1982

KRC1981

Forth-831983

ANS Forth1986

ARM C++1989

BASICA1981

GW-Basic1983

MS Basic PDS 7.01989

QuickBasic 1.01985

QuickBasic 4.51988

Page 115: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Languagesfebruary 27, 2011

! Éric Lévénez 1999-2011<http://www.levenez.com/lang/>

FORTRAN II1957

FORTRANnovember 1954

FORTRAN Ioctober 1956

FORTRAN IIIend-1958

Flow-Matic1958

ALGOL 581958

Lisp1958

Lisp 11959

COBOL1959

B-O1957

1954 1957

IAL1958

JOVIAL1959

Forth1968

BASICmay 1, 1964

COBOL 611961

COBOL1965

FORTRAN IV(Fortran 66 ANS)

1966FORTRAN IV

1962

BCPLjuly 1967

ALGOL 68december

1968

PL/I1964

B1969

Simula 671967

COBOL 68 ANS1968

APL1960

ALGOL 601960

SNOBOL1962

Simula I1964

Lisp 1.51962

SNOBOL 2april 1964

SNOBOL 31965

SNOBOL 41967

Logo1968

COBOL 61 Extended

1962

CPL1963

1960 1965

MUMPS1966

ISWIM1966

JOVIAL I1960

JOVIAL II1961

JOVIAL 31965

CORAL 641964

CORAL 661966

TELCOMP1965

JOSS1964

GOGOL1964

GOGOL III1967

Sail1968

sh1969

ALGOL W1966

Ada1979

FORTRAN V(Fortran 77 ANSI)

april 1978

CLU1974

COBOL 74 ANSI1974

Modula1975

Modula 21979

C (K&R)1978

C1971

awk1978

cshoctober 1978

Scheme MIT1978

Scheme1975

Prolog1970

Icon1977

Smalltalk-721972

PL/1 ANS1976

PL/M1972

Smalltalk-761976

Smalltalk-741974

Smalltalk-781978

Rex 1.00may 1979

MS Basic 2.0july 1975

Pascal1970

ML1973

Mesa1977

1970 1975

MUMPS (ANSI)september 15, 1977

SASL1976

sed1973

FIG-Forth1978

Mainsail1975

SL51976

Smalltalk1971

Classic C

Pascal AFNOR1983

Object Pascal1985

PostScript1982

Smalltalk-801980

ANSI C(C89)1989

Objective-C1983

C with Classesapril 1980 C++

july 1983

Concurrent C1984

Eiffel1986

nawk1985

COBOL 85 ISO/ANSI1985

Common Lisp1984

Scheme 841984

Ada 83 ANSIjanuary 1983

Ada ISO1987

Oberon1987

Prolog IIoctober 1982

OO Forth1987

Clos1989

Object Logo1986

Prolog III1984

APL 2august 1984

SML1984

Modula 31988

Perl 3.000october 18, 1989

Perl 2.000january 5, 1988

Perl 1.000december 18, 1987

Tclmid 1988

Tcl/Tkend 1988

Rex 2.001980

Rex 3.001982

Rexx 3.201984

Caml1987

Eiffel 21988

ABC1987

B1981

Haskell 1.01987

Self

BorlandTurbo Pascal

Cedar1983

1980 1985

MUMPS (FIPS)1986

Sharp APL

A1988

Miranda1982

KRC1981

Forth-831983

ANS Forth1986

ARM C++1989

BASICA1981

GW-Basic1983

MS Basic PDS 7.01989

QuickBasic 1.01985

QuickBasic 4.51988

1 2 3 4

Page 116: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Pascal AFNOR1983

Object Pascal1985

PostScript1982

Smalltalk-801980

ANSI C(C89)1989

Objective-C1983

C with Classesapril 1980 C++

july 1983

Concurrent C1984

Eiffel1986

nawk1985

COBOL 85 ISO/ANSI1985

Common Lisp1984

Scheme 841984

Ada 83 ANSIjanuary 1983

Ada ISO1987

Oberon1987

Prolog IIoctober 1982

OO Forth1987

Clos1989

Object Logo1986

Prolog III1984

APL 2august 1984

SML1984

Modula 31988

Perl 3.000october 18, 1989

Perl 2.000january 5, 1988

Perl 1.000december 18, 1987

Tclmid 1988

Tcl/Tkend 1988

Rex 2.001980

Rex 3.001982

Rexx 3.201984

Caml1987

Eiffel 21988

ABC1987

B1981

Haskell 1.01987

Self

BorlandTurbo Pascal

Cedar1983

1980 1985

MUMPS (FIPS)1986

Sharp APL

A1988

Miranda1982

KRC1981

Forth-831983

ANS Forth1986

ARM C++1989

BASICA1981

GW-Basic1983

MS Basic PDS 7.01989

QuickBasic 1.01985

QuickBasic 4.51988

Fortran 90 ISO1991

SML ‘901990

Oakjune 1991

Perl 4.000march 21, 1991

PostScript level 21992

Perl 5.000october 18, 1994

Common Lisp ANSIdecember 8, 1994

Scheme IEEE1990

Python1991

NetRexx1991

ISO C(C90)

december 15, 1990

Caml 2-6.11991

Caml 3.11993

Visual Basic 1.0may 20, 1991

Oberon-21991

Sather 0.1june 1991

Sather 1.0mid-1994

Rubyfebruary 24, 1993

Haskell 1.1april 1, 1990

Haskell 1.2march 1992

Cmm1992

1990

MUMPS ISO1992

M1994

A+1992

J1990

Visual Basic 2.0march 1992

Visual Basic 3.0june 93

Eiffel 31993

MS PDS 7.11990

SML ‘971997

Java 2 (v1.2)december 8, 1998

PostScript level 3september 11, 1996

C++98 ANSI/ISO1998

APL961996

OO COBOL1997

Scheme R5RS1998

Ada 951995

Java 1may 23, 1995

Delphimarch 2, 1995

Delphi 5august, 1999

Modula-2 ISOjune 1, 1996

Tcl/Tk 8.1april 1999

Python 1.5.2april 13, 1999

Perl 5.005_50july 26, 1998

NetRexx 1.150july 23, 1999

Object Rexxfebruary 25, 1997

Prolog IV1997

ISO C(C95)

april 1, 1996

ISO C (C99)december 1, 1999

Objective Caml1996 O’Caml 2

1998

Visual Basic 6.0june 16, 1998

Sather 1.1september 1995

Sather 1.2.1november 4, 1999

Ruby 0.95december 1995

Ruby 1.1 alpha 0august 13, 1997 Ruby 1.3.2

april 2, 1999

Haskell 1.3may 1996

Haskell 1.4april 1997

Haskell 98february 1999

Fortran 95 ISOdecember 15, 1997

LiveScript1995

JavaScriptdecember 1995

JavaScript 1.5

ECMAScriptjune 1997

ECMAScript ed3december 1999

JScriptmay 1996

Self 4.0july 10, 1995

PHP/FI1995 PHP 2.0

nov. 13, 1997PHP 3.0

june 6, 1998

O’Caml 1.0.7december 11, 1997

Tcl/Tk 8.2.3dec. 16, 1999

Eiffel 4december 11, 1996

Eiffel 4.2february 6, 1998

1995

M ANSIdec 8, 1995

Open Mdec 11, 1995

M ISO1999

K1996

Visual Basic 4.0september 1995

Visual Basic 5.0april 1997

ANSI Rexx

ISO Forth1997

ANSI Smalltalkmay 19, 1998

Modula-2 ISOGeneric Extensiondecember 19, 1998

JavaScript 2.0(draft 1)

february 18, 1999

Perl 5.6.0march 28, 2000

Java 2 (v1.3)may 8, 2000

O’Caml 3.00june 2000

C#june 26, 2000

Python 1.6september 5, 2000

Python 2.0october 16, 2000

Ruby 1.6.1september 27, 2000

Perl 5.7,0september 2, 2000

Ruby 1.6.5september 19, 2001

Python 2.2december 21, 2001

Python 2.1april 17, 2001

C#(ECMA)

december 13, 2001

Java 2 (v1.4)early access

february 6, 2002

JScript

Self 4.1august 7, 2001

O’Caml 3.02july 30, 2001

O’Caml 3.03dec 10, 2001

PHP 4.0may 22, 2000

PHP 4.1.0december 8, 2001

O’Caml 3.04dec 12, 2001

Tcl/Tk 8.3october 22, 2001

Delphi 6may 1, 2001

2000

VB.NET(Visual Basic 7.0)

2001

ISE Eiffel 52001

Unicon2001

Active Oberon2001

1 2 3 4

Page 117: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Perl 5.6.0march 28, 2000

Java 2 (v1.3)may 8, 2000

O’Caml 3.00june 2000

C#june 26, 2000

Python 1.6september 5, 2000

Python 2.0october 16, 2000

Ruby 1.6.1september 27, 2000

Perl 5.7,0september 2, 2000

Ruby 1.6.5september 19, 2001

Python 2.2december 21, 2001

Python 2.1april 17, 2001

C#(ECMA)

december 13, 2001

Java 2 (v1.4)early access

february 6, 2002

JScript

Self 4.1august 7, 2001

O’Caml 3.02july 30, 2001

O’Caml 3.03dec 10, 2001

PHP 4.0may 22, 2000

PHP 4.1.0december 8, 2001

O’Caml 3.04dec 12, 2001

Tcl/Tk 8.3october 22, 2001

Delphi 6may 1, 2001

2000

VB.NET(Visual Basic 7.0)

2001

ISE Eiffel 52001

Unicon2001

Active Oberon2001

Ruby 1.6.7march 1, 2002

Python 2.2.1april 10, 2002

Perl 5.8.0july 18, 2002

PHP 4.2.0april 22, 2002

PHP 4.2.2july 22, 2002

Java 2 (v1.4.0_01)june 4, 2002

O’Caml 3.05july 29, 2002

O’Caml 3.06august 20, 2002

Java 2 (v1.4.1)september 2002

PHP 4.2.3september 6, 2002

Fortran 2000(draft)

september 30, 2002

Tcl/Tk 8.4september 10, 2002

Delphi 7august 6, 2002

Self 4.1.6september 2002

Python 2.2.2october 14, 2002

PHP 4.3.0december 27, 2002

2002

PHP 4.3.1feb. 17, 2003

Ruby 1.6.8december 24, 2002

Java 2(v1.4.1_02)

february 27, 2003

Python 2.3a2february 19, 2003

Tcl/Tk 8.4.1october 22, 2002

C#(ISO)

march 28, 2003

Tcl/Tk 8.4.2march 3, 2003

Tcl/Tk 8.4.3may 20, 2003

PHP 4.3.2may 29, 2003

Python 2.2.3may 30, 2003

Java 2 (v1.4.2)april 29, 2003

COBOL 2002 ISO/ANSIdecember 2002

JavaScript 2.0(draft 4)

april 26, 2002ECMAScript ed4 (draft)

2002

Haskell 98(revised)

december 2002

Python 2.3july 29, 2003

Java 2 (v1.4.1_03)june 11, 2003

2003

PHP 4.3.3august 25, 2003

Java 2 (v1.4.2_01)august 26, 2003

Ruby 1.8august 4, 2003

Python 2.3.1september 23, 2003

Perl 5.8.1september 26, 2003

Java 2 (v1.4.2_02)october 22, 2003

C# 2.0(beta)

july 2003

Delphi 8november 2003

PHP 4.3.4november 3, 2003

Java 2 (v1.4.2_03)december 13, 2003

Python 2.3.2october 3, 2003

Python 2.3.3december 19, 2003

Ruby 1.8.1december 25, 2003

Java 2 (v1.5.0)(beta 1)

february 5, 2004

O’Caml 3.07september 29, 2003

Tcl/Tk 8.4.6march 1, 2004

Self 4.2.1april 3, 2004

PHP 4.3.5march 26,

2004

Perl 5.8.2november 5, 2003

Perl 5.8.3january 1, 2004

Tcl/Tk 8.4.5november 24, 2003

Tcl/Tk 8.4.4july 22, 2003

PHP 4.3.6april 15,

2004

Java 2 (v5.0) (beta 2)june 28, 2004

Java 2 (v1.4.2_04)march 8, 2004

Java 2 (v1.4.2_05)june 30, 2004

PHP 4.3.7june 3,2004

Python 2.3.4may 27, 2004

Perl 5.8.4april 23, 2004

2004PostScript level 3

v 30162003

C++03 ISO/IEC2003

PHP 4.3.8july 13, 2004

PHP 5.0.0july 13, 2004

O’Caml 3.08.0july 13, 2004

Java 2 (v5.0)september 30, 2004

Python 2.4november 30, 2004

PHP 4.3.10december 15, 2004

PHP 5.0.3december 15, 2004

Java 2 (v6.0 beta)december 2004

Tcl/Tk 8.4.7july 25, 2004

Tcl/Tk 8.4.8nov. 22, 2004

Tcl/Tk 8.4.9december 7, 2004

Ruby 1.8.2december 25, 2004

Perl 5.8.5july 21, 2004

Perl 5.8.6november 30, 2004

Java 2 (v1.4.2_06)november 23, 2004

Delphi 2005november 2004

Fortran 2003november 30, 2004

Java 2 (v5.0 update 3)april 28, 2005

Ada 2006 (draft)2005

2005

ECMA Eiffeljune 2005

Python 2.4.1march 30, 2005

O’Caml 3.08.2november 2004

Perl 5.8.7june 3, 2005

PHP 5.0.4april 3, 2005

PHP 5.0.5september 6, 2005

PHP 4.4.1october 31, 2005

Ruby 1.8.3september 21, 2005

Python 2.4.2september 28, 2005

Tcl/Tk 8.4.11june 28, 2005

PostScript level 3v 3017

september 11, 2005

C# 3.0(beta)

september 2005

C# 2.0november 2005

Tcl/Tk 8.4.12december 6, 2005

Delphi 2006october 30, 2005

Ruby 1.8.4december 24, 2005

PHP 5.1.0november 24, 2005

M ISOjanuary 6, 2005

1 2 3 4

Page 118: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

PHP 4.3.8july 13, 2004

PHP 5.0.0july 13, 2004

O’Caml 3.08.0july 13, 2004

Java 2 (v5.0)september 30, 2004

Python 2.4november 30, 2004

PHP 4.3.10december 15, 2004

PHP 5.0.3december 15, 2004

Java 2 (v6.0 beta)december 2004

Tcl/Tk 8.4.7july 25, 2004

Tcl/Tk 8.4.8nov. 22, 2004

Tcl/Tk 8.4.9december 7, 2004

Ruby 1.8.2december 25, 2004

Perl 5.8.5july 21, 2004

Perl 5.8.6november 30, 2004

Java 2 (v1.4.2_06)november 23, 2004

Delphi 2005november 2004

Fortran 2003november 30, 2004

Java 2 (v5.0 update 3)april 28, 2005

Ada 2006 (draft)2005

2005

ECMA Eiffeljune 2005

Python 2.4.1march 30, 2005

O’Caml 3.08.2november 2004

Perl 5.8.7june 3, 2005

PHP 5.0.4april 3, 2005

PHP 5.0.5september 6, 2005

PHP 4.4.1october 31, 2005

Ruby 1.8.3september 21, 2005

Python 2.4.2september 28, 2005

Tcl/Tk 8.4.11june 28, 2005

PostScript level 3v 3017

september 11, 2005

C# 3.0(beta)

september 2005

C# 2.0november 2005

Tcl/Tk 8.4.12december 6, 2005

Delphi 2006october 30, 2005

Ruby 1.8.4december 24, 2005

PHP 5.1.0november 24, 2005

M ISOjanuary 6, 2005

Objective-C 2.0august 7, 2006

2006

Tcl/Tk 8.4.13april 19, 2006

Python 2.5september 19, 2006

Java 2 (v5.0 update 8)august 11, 2006

Ruby 1.8.5august 25, 2006

Perl 5.8.8february 2, 2006

PHP 5.1.6august 24, 2006

PHP 4.4.2january 13, 2006

PHP 4.4.4august 17, 2006

O’Caml 3.09.2april 14, 2006

Self 4.3june 30, 2006

Scheme R6RS (draft)september 14, 2006

Tcl/Tk 8.4.14october 19, 2006

PHP 5.2.0november 2, 2006

Java 6december 11, 2006

Tcl/Tk 8.4.15may 25, 2007

Python 2.5.1april 19, 2007

Ruby 1.8.6march 13, 2007

PHP 4.4.7may 3, 2007

PHP 5.2.3may 31, 2007

Java 2 (v5.0 update 12)may 31, 2007

2007

Tcl/Tk 8.5december 20, 2007

Java 6 update 2july 5, 2007

O’Caml 3.10.0may 16, 2007

Perl 5.10december 18, 2007

Ada 2005march 9, 2007

Python 3.0a2december 7, 2007

PHP 5.2.4august 30, 2007

PHP 5.2.5november 9, 2007

Scheme R6RSaugust 28, 2007

C# 3.5november 19, 2007

Delphi 2007march 2007

C# 3.0november 6, 2006

2008

Java 6 update 7july 11, 2008

Java 2 (v5.0 update 16)july 11, 2008

Java 2 (v1.4.2_18)july 11, 2008Ruby 1.8.7

may 31, 2008

PHP 4.4.8january 3, 2008

PHP 5.2.6may 1, 2008

Tcl/Tk 8.5.5october 15, 2008

Python 2.6october 1, 2008

Python 3.0december 3, 2008

PHP 4.4.9august 7, 2008

O’Caml 3.10.2february 29, 2008

Java 6 update 11december 2, 2008

Java 2 (v1.4.2_19)december 2, 2008

Java 2 (v5.0 update 17)december 2, 2008

C++0x draft2008

Ruby 1.9.1january 30, 2009

PHP 5.2.7december 4, 2008

PHP 5.2.8december 8, 2008

Python 3.0.1february 13, 2009

Python 2.6.1december 4, 2008

2009

Tcl/Tk 8.5.6january 2009

Tcl/Tk 8.5.7april 15, 2009

Python 2.6.2april 14, 2009

Java 6 update 14june 10, 2009

Java 2 (v5.0 update 18)march 24, 2009

PHP 5.2.9february 26, 2009

O’Caml 3.11.0december 4, 2008

PHP 5.3june 30, 2009

Python 3.1june 27, 2009

O’Caml 3.11.1june 12, 2009

Delphi 2009august 2008

Ruby 1.9.2 preview 1july 18, 2009

C++1x draftjuly 22, 2009

Objective-C 2.1august 28, 2009

Perl 5.11.0october 2, 2009

Python 2.6.3october 2, 2009

Java 6 update 24february 15, 2011

Java 2 (v5.0 update 21)september 11, 2009

Delphi 2010august 2009

Haskell 2010(announced)

november 2009

Python 2.7july 4, 2010

Tcl/Tk 8.5.9september 8, 2010

Ruby 1.9.2august 18, 2010

Perl 5.12.0april 12, 2010

PHP 5.3.5january 6, 2011

Haskell HP 2010.2.0.0july 2010

O’Caml 3.12.0august 2, 2010

Fortran 2008september 2010

2010

C# 4.0april 12, 2010

2011

Python 3.2february 20, 2011

Python 2.7.1november 27, 2010

Perl 5.12.3january 21, 2011

1 2 3 4

Page 119: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Languagesfebruary 27, 2011

! Éric Lévénez 1999-2011<http://www.levenez.com/lang/>

FORTRAN II1957

FORTRANnovember 1954

FORTRAN Ioctober 1956

FORTRAN IIIend-1958

Flow-Matic1958

ALGOL 581958

Lisp1958

Lisp 11959

COBOL1959

B-O1957

1954 1957

IAL1958

JOVIAL1959

Page 120: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Languagesfebruary 27, 2011

! Éric Lévénez 1999-2011<http://www.levenez.com/lang/>

FORTRAN II1957

FORTRANnovember 1954

FORTRAN Ioctober 1956

FORTRAN IIIend-1958

Flow-Matic1958

ALGOL 581958

Lisp1958

Lisp 11959

COBOL1959

B-O1957

1954 1957

IAL1958

JOVIAL1959

FORTRAN

Page 121: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Languagesfebruary 27, 2011

! Éric Lévénez 1999-2011<http://www.levenez.com/lang/>

FORTRAN II1957

FORTRANnovember 1954

FORTRAN Ioctober 1956

FORTRAN IIIend-1958

Flow-Matic1958

ALGOL 581958

Lisp1958

Lisp 11959

COBOL1959

B-O1957

1954 1957

IAL1958

JOVIAL1959

FORTRAN

LISP

Page 122: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 123: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 124: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

$(':checkbox').map(function() { return this.id;}).get().join(',');

Page 125: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 126: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 127: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

em 2004 ...

Page 128: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 129: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 130: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 131: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

gem install rails

rails new nome_do_projeto

Page 132: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 133: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 134: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 135: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 136: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 137: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 138: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 139: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 140: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 141: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Request

Page 142: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Response Request

Page 143: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 144: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 145: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

~30 mil gems

~15 GB

Page 146: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 147: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

bundle install

Page 148: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

RubyGem “Jar”

Rake Ant, Make

Bundler* Maven

* não baixa toda a internet

Page 149: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

> bundle list

Gems included by the bundle: * abstract (1.0.0) * actionmailer (3.0.7) * actionpack (3.0.7) * activemodel (3.0.7) * activerecord (3.0.7) * activeresource (3.0.7) * activesupport (3.0.7) * arel (2.0.9) * builder (2.1.2) * bundler (1.0.13) * erubis (2.6.6) * i18n (0.5.0)

* mail (2.2.19) * mime-types (1.16) * polyglot (0.3.1) * rack (1.2.2) * rack-mount (0.6.14) * rack-test (0.5.7) * rails (3.0.7) * railties (3.0.7) * rake (0.8.7) * sqlite3 (1.3.3) * thor (0.14.6) * treetop (1.4.9) * tzinfo (0.3.27)

Page 150: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

> bundle list

Gems included by the bundle: * abstract (1.0.0) * actionmailer (3.0.7) * actionpack (3.0.7) * activemodel (3.0.7) * activerecord (3.0.7) * activeresource (3.0.7) * activesupport (3.0.7) * arel (2.0.9) * builder (2.1.2) * bundler (1.0.13) * erubis (2.6.6) * i18n (0.5.0)

* mail (2.2.19) * mime-types (1.16) * polyglot (0.3.1) * rack (1.2.2) * rack-mount (0.6.14) * rack-test (0.5.7) * rails (3.0.7) * railties (3.0.7) * rake (0.8.7) * sqlite3 (1.3.3) * thor (0.14.6) * treetop (1.4.9) * tzinfo (0.3.27)

Page 151: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

> rake -T

rake about rake db:create rake db:drop rake db:fixtures:load rake db:migrate rake db:migrate:status rake db:rollback rake db:schema:dump rake db:schema:load rake db:seed rake db:setup rake db:structure:dump rake db:versionrake doc:app

rake log:clear rake middleware rake notes rake notes:custom rake rails:template rake rails:update rake routes rake secret rake stats rake test rake test:recent rake test:uncommitted rake time:zones:all rake tmp:clear rake tmp:create

Page 152: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

> rails generateUsage: rails generate GENERATOR [args] [options]

General options: -h, [--help] # Print generator's options and usage -p, [--pretend] # Run but do not make any changes -f, [--force] # Overwrite files that already exist -s, [--skip] # Skip files that already exist -q, [--quiet] # Suppress status output

Please choose a generator below.

Rails: controller generator helper integration_test mailer migration model

observer performance_test plugin resource scaffold scaffold_controller session_migration stylesheets

Page 153: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

> rake middleware

use ActionDispatch::Staticuse Rack::Lockuse ActiveSupport::Cache::Strategy::LocalCacheuse Rack::Runtimeuse Rails::Rack::Loggeruse ActionDispatch::ShowExceptionsuse ActionDispatch::RemoteIpuse Rack::Sendfileuse ActionDispatch::Callbacksuse ActiveRecord::ConnectionAdapters::ConnectionManagementuse ActiveRecord::QueryCacheuse ActionDispatch::Cookiesuse ActionDispatch::Session::CookieStoreuse ActionDispatch::Flashuse ActionDispatch::ParamsParseruse Rack::MethodOverrideuse ActionDispatch::Headuse ActionDispatch::BestStandardsSupportrun Demo::Application.routes

Rack Middlewares

Page 154: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Response Request

Page 155: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Response Request

Page 156: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Response Request

Application Server Rack:

Mongrel,Thin,

Passenger,Unicorn

Page 157: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Web Server

Rack Middlewares

Routes

Controller

ModelView

Response Request

Web Server:NginX

Apache

Application Server Rack:

Mongrel,Thin,

Passenger,Unicorn

Page 158: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 159: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 160: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Opinionated Software™

Page 161: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 162: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 163: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

... e chegamos em 2011!

Page 164: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Tom MorniniCTO

Page 165: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

PatrocinadoresRubiniusJRuby

RailsInstallerRVM

BundlerJQuery

RubySpec

Page 166: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 167: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

+200 mil sites

Page 168: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 169: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 170: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

~1 milhãode desenvolvedores

4M até 2013 (Gartner)

Page 171: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 172: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 173: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 174: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 175: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 176: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 177: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 178: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 179: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Taxa/hora

Page 180: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Commodity!

Page 181: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

A maioria trabalha com tecnologia “X”,

portanto também vou

Page 182: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 183: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

“Commodity”

Page 184: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Um commodity é um bem ou serviço para o qual há demanda, mas que é ofertado sem diferenciação qualitativa notável por todo o mercado.

Commoditização acontece à medida que o mercado de bens e serviços perde diferenciação por toda sua base de fornecimento - normalmente porque todos estão fazendo a mesma coisa.

Wikipedia

Page 185: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Um commodity é um bem ou serviço para o qual há demanda, mas que é ofertado sem diferenciação qualitativa notável por todo o mercado.

Commoditização acontece à medida que o mercado de bens e serviços perde diferenciação por toda sua base de fornecimento - normalmente porque todos estão fazendo a mesma coisa.

Wikipedia

Page 186: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Um commodity é um bem ou serviço para o qual há demanda, mas que é ofertado sem diferenciação qualitativa notável por todo o mercado.

Commoditização acontece à medida que o mercado de bens e serviços perde diferenciação por toda sua base de fornecimento - normalmente porque todos estão fazendo a mesma coisa.

Wikipedia

Page 187: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 188: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

2x

Page 189: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 190: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

100x

ZOMG!

Page 191: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Jack of All Tradesmaster of none

Page 192: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Renaissance ManPolymath

Page 193: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 194: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();

job = new JobDetail("job2", "group1", SimpleJob.class);

trigger = new CronTrigger("trigger2", "group1", "job2", "group1", "15 0/2 * * * ?");

sched.addJob(job, true);

Page 195: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler();

JobDetail job = newJob(SimpleJob.class) .withIdentity("job1", "group1") .build();

CronTrigger trigger = newTrigger() .withIdentity("trigger1", "group1") .withSchedule(cronSchedule("0/20 * * * * ?")) .build();

sched.scheduleJob(job, trigger);

Page 196: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Domain Speci!c Language (DSL)

Page 197: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

describe Account do it "has a balance of zero when first created" do Account.new.balance.should eq(Money.new(0)) endend

Page 198: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 199: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 200: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 201: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 202: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 203: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 204: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Perl

Page 205: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 206: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Python

Page 207: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 208: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

PHP

Page 209: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 210: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Ruby

Page 211: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

OMG!

Page 212: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 213: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 214: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 215: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 216: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 217: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 218: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 219: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 220: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 221: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 222: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Core Team

Page 223: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 224: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

+30 mil gems

+15 GB

Page 225: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

• Mais Fácil de aprender?

• Mais Produtivo?

• Mais Qualidade?

Page 226: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Depende do Desenvolvedor!

Page 227: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 228: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 229: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

500 mercados44 países

Page 230: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

38.5M assinantes(EUA)

Page 231: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 232: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

2 meses(tempo desenv. 50% menor)

Page 233: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 234: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 235: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 236: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 237: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Variáveis/* CSS */

.content-navigation { border-color: #3bbfce; color: #2b9eab;}

.border { padding: 8px; margin: 8px; border-color: #3bbfce;}

$blue: #3bbfce;$margin: 16px;

.content-navigation { border-color: $blue; color: darken($blue, 9%);}

.border { padding: $margin / 2; margin: $margin / 2; border-color: $blue;}

Page 238: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Nestingtable.hl { margin: 2em 0; td.ln { text-align: right; }}

li { font: { family: serif; weight: bold; size: 1.2em; }}

/* CSS */

table.hl { margin: 2em 0;}table.hl td.ln { text-align: right;}

li { font-family: serif; font-weight: bold; font-size: 1.2em;}

Page 239: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Mixins@mixin table-base { th { text-align: center; font-weight: bold; } td, th {padding: 2px}}

@mixin left($dist) { float: left; margin-left: $dist;}

#data { @include left(10px); @include table-base;}

/* CSS */

#data { float: left; margin-left: 10px;}#data th { text-align: center; font-weight: bold;}#data td, #data th { padding: 2px;}

Page 240: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Selector Inheritance.error { border: 1px #f00; background: #fdd;}.error.intrusion { font-size: 1.3em; font-weight: bold;}

.badError { @extend .error; border-width: 3px;}

/* CSS */

.error, .badError { border: 1px #f00; background: #fdd;}

.error.intrusion,

.badError.intrusion { font-size: 1.3em; font-weight: bold;}

.badError { border-width: 3px;}

Page 241: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 242: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

class Animal constructor: (@name) ->

move: (meters) -> alert @name + " moved " + meters + "m."

class Snake extends Animal move: -> alert "Slithering..." super 5

class Horse extends Animal move: -> alert "Galloping..." super 45

sam = new Snake "Sammy the Python"tom = new Horse "Tommy the Palomino"

sam.move()tom.move()

var Animal, Horse, Snake, sam, tom;var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child;};Animal = (function() { function Animal(name) { this.name = name; } Animal.prototype.move = function(meters) { return alert(this.name + " moved " + meters + "m."); }; return Animal;})();Snake = (function() { __extends(Snake, Animal); function Snake() { Snake.__super__.constructor.apply(this, arguments); } Snake.prototype.move = function() { alert("Slithering..."); return Snake.__super__.move.call(this, 5); }; return Snake;})();Horse = (function() { __extends(Horse, Animal); function Horse() { Horse.__super__.constructor.apply(this, arguments); } Horse.prototype.move = function() { alert("Galloping..."); return Horse.__super__.move.call(this, 45); }; return Horse;})();sam = new Snake("Sammy the Python");tom = new Horse("Tommy the Palomino");sam.move();tom.move();loadrun

Page 243: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 244: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 245: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

102

Page 246: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Rails 3.1:Release Candidate

THIS WEEK!(may 2011)

Page 247: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Material

Page 248: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 249: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 250: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 251: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 252: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 253: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 254: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 255: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 256: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 257: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 258: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 259: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 260: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 261: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

RubyConfBrasil

3 e 4 de Novembro

Page 262: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

@pedroh96

Pedro Franceschi

Page 263: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

15 anos

@pedroh96

Pedro Franceschi

Page 264: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

9 anos

@pedroh96

Pedro Franceschi

Page 265: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

6 anos

@pedroh96

Pedro Franceschi

Page 266: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

@pedroh96

Pedro Franceschi

Page 267: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 268: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 269: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 270: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 272: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

One more thing ...

Page 273: SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Page 274: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Sorteio de Bolsas de Estudo Online (3)

Page 275: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Curso de Ruby on Rails 3 do básico ao avançado com o Daniel V. Lopes

(http://egenial.com.br/cursorails)

Curso de Node.js com Emerson Leite da Globo.com

(http://egenial.com.br/nodejs)

Curso de HTML5+CSS3 com o Cleiton Francisco da Jus Navegandi

(http://egenial.pro/pt/html5)

Page 276: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Curso de Ruby on Rails 3 do básico ao avançado com o Daniel V. Lopes

(http://egenial.com.br/cursorails)

Curso de Node.js com Emerson Leite da Globo.com

(http://egenial.com.br/nodejs)

Curso de HTML5+CSS3 com o Cleiton Francisco da Jus Navegandi

(http://egenial.pro/pt/html5)

Page 277: SEMAC 2011 - Apresentando Ruby e Ruby on Rails

Curso de Ruby on Rails 3 do básico ao avançado com o Daniel V. Lopes

(http://egenial.com.br/cursorails)

Curso de Node.js com Emerson Leite da Globo.com

(http://egenial.com.br/nodejs)

Curso de HTML5+CSS3 com o Cleiton Francisco da Jus Navegandi

(http://egenial.pro/pt/html5)