217
Web in the Cloud with Ruby Tuesday, October 23, 12

Wewebconf

Embed Size (px)

Citation preview

Page 1: Wewebconf

Web in the Cloud with Ruby

Tuesday, October 23, 12

Page 2: Wewebconf

Rafael Macedo

@macedorafael

github.com/rafaelmacedo

Tuesday, October 23, 12

Page 3: Wewebconf

Ruby é...

uma linguagem dinâmica, interpretada, e open source com foco

em simplicidade e produtividade. Possui uma sintaxe elegante que é natural de ler e fácil de escrever.

http://ruby-lang.org/en

Tuesday, October 23, 12

Page 4: Wewebconf

Ruby é...“Eu queria uma linguagem que fosse mais poderosa que o Perl e mais orientada a objetos do

que o Python.”

Yukihiro “Matz” Matsumoto

Tuesday, October 23, 12

Page 5: Wewebconf

smalltalk

python

eiffel

lisp

perl

Tuesday, October 23, 12

Page 6: Wewebconf

Como aprender???

Tuesday, October 23, 12

Page 7: Wewebconf

http://www.ruby-lang.org/enTuesday, October 23, 12

Page 8: Wewebconf

http://www.ruby-doc.orgTuesday, October 23, 12

Page 9: Wewebconf

http://www.rubydoc.infoTuesday, October 23, 12

Page 10: Wewebconf

http://api.rubyonrails.orgTuesday, October 23, 12

Page 11: Wewebconf

http://guides.rubyonrails.orgTuesday, October 23, 12

Page 12: Wewebconf

http://stackoverflow.com/search?q=ruby+rubyonrailsTuesday, October 23, 12

Page 13: Wewebconf

http://git-scm.comhttp://try.github.com

http://github.comTuesday, October 23, 12

Page 14: Wewebconf

http://git-scm.comhttp://try.github.com

http://github.comTuesday, October 23, 12

Page 15: Wewebconf

http://google.comTuesday, October 23, 12

Page 16: Wewebconf

http://google.com

FTW!!!!Tuesday, October 23, 12

Page 17: Wewebconf

Por que Ruby???

Tuesday, October 23, 12

Page 18: Wewebconf

~ 1 milhão

de desenvolvedores 4M até 2013 (Gartner)

Tuesday, October 23, 12

Page 19: Wewebconf

Tuesday, October 23, 12

Page 20: Wewebconf

Tuesday, October 23, 12

Page 21: Wewebconf

• 112 bibliotecas 100% documentadas

• Comunidade ativa

• Diversos tutoriais e em diversos níveis

• Bibliotecas em ruby são empacotadas e distribuidas como gems

Documentação

Tuesday, October 23, 12

Page 22: Wewebconf

Rubygems

Tuesday, October 23, 12

Page 23: Wewebconf

Rubygems

+ 40K gems

Tuesday, October 23, 12

Page 24: Wewebconf

Rubygems

+ 40K gems62.837 users

Tuesday, October 23, 12

Page 25: Wewebconf

Github

Tuesday, October 23, 12

Page 26: Wewebconf

Sintaxe elegante e limpa

• dasdasdasd

1 def say_good_morning(name) 2 return "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning("folks") 6 >> Good morning folks!!!

Tuesday, October 23, 12

Page 27: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 return "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning("folks") 6 >> Good morning folks!!!

opcionais

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 28: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 return "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning "folks" 6 >> Good morning folks!!!

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 29: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 return "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning "folks" 6 >> Good morning folks!!!

retorno automático

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 30: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning "folks" 6 >> Good morning folks!!!

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 31: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 "Good morning " + name + "!!!" 3 end 4 5 puts say_good_morning "folks" 6 >> Good morning folks!!!

interpolação

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 32: Wewebconf

• dasdasdasd

1 def say_good_morning(name) 2 "Good morning #{name}!!!" 3 end 4 5 puts say_good_morning "folks" 6 >> Good morning folks!!!

Sintaxe elegante e limpa

Tuesday, October 23, 12

Page 33: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

Tuesday, October 23, 12

Page 34: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

Tuesday, October 23, 12

Page 35: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

Tuesday, October 23, 12

Page 36: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

Tuesday, October 23, 12

Page 37: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

Tuesday, October 23, 12

Page 38: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

tudo é um objeto

Tuesday, October 23, 12

Page 39: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

sim, eu disse tudo!!!

Tuesday, October 23, 12

Page 40: Wewebconf

Orientada a objetos

1 "some dummy text".class 2 >> String 3 4 1.class 5 >> Fixnum 6 7 true.class 8 >> TrueClass 9 10 nil.class11 >> NilClass

1 String.class 2 >> Class

sim, eu disse tudo!!!

Tuesday, October 23, 12

Page 41: Wewebconf

Orientada a objetos

1 puts 1 + 12 >> 2

Tuesday, October 23, 12

Page 42: Wewebconf

Orientada a objetos

1 puts 1 + 12 >> 23 4 puts 1.+(1)5 >> 2

Tuesday, October 23, 12

Page 43: Wewebconf

Orientada a objetos

1 [1, 2, 3, 4, 5].average

Tuesday, October 23, 12

Page 44: Wewebconf

Orientada a objetos

1 [1, 2, 3, 4, 5].average 2 >> NoMethodError: undefined method `average' for [1, 2, 3, 4, 5]:Array

Tuesday, October 23, 12

Page 45: Wewebconf

Orientada a objetos

1 [1, 2, 3, 4, 5].average 2 >> NoMethodError: undefined method `average' for [1, 2, 3, 4, 5]:Array

e agora???????

Tuesday, October 23, 12

Page 46: Wewebconf

Orientada a objetos

1 class Array 2 def average 3 inject(0.0) do |sum, var| 4 sum + var 5 end / self.size 6 end 7 end 8 9 [1, 2, 3, 4, 5].average10 >> 3.0

Tuesday, October 23, 12

Page 47: Wewebconf

Orientada a objetos

1 class Array 2 def average 3 inject(0.0) do |sum, var| 4 sum + var 5 end / self.size 6 end 7 end 8 9 [1, 2, 3, 4, 5].average10 >> 3.0

open classes WINS!!!!

Tuesday, October 23, 12

Page 48: Wewebconf

“Se anda como um pato e fala como um pato, isso é um pato!”

Tuesday, October 23, 12

Page 49: Wewebconf

Desenvolvedores Ruby estão mais acostumados em definir objetos

pelo que eles podem fazer, do que por seu tipo. Esta técnica é

chamada de duck typing.

Tuesday, October 23, 12

Page 50: Wewebconf

Duck Typing

1 class Logger2 def initialize(io)3 @io = io4 end5 6 def log(message)7 @io << "#{Time.now} - #{message}\n"8 end9 end

Tuesday, October 23, 12

Page 51: Wewebconf

Duck Typing

1 array_logger = Logger.new([]) 2 array_logger.log("Hello World") 3 4 string_logger = Logger.new("") 5 string_logger.log("Hello World")

Tuesday, October 23, 12

Page 52: Wewebconf

Duck Typing

1 array_logger = Logger.new([]) 2 array_logger.log("Hello World") 3 4 string_logger = Logger.new("") 5 string_logger.log("Hello World")

Protocolo > Interface

Tuesday, October 23, 12

Page 53: Wewebconf

Instalação

Tuesday, October 23, 12

Page 54: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

Tuesday, October 23, 12

Page 55: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

$ curl -L https://get.rvm.io | bash -s stable

$ source ~/.rvm/scripts/rvm

$ type rvm | head -n 1rvm is a function

Tuesday, October 23, 12

Page 56: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && \ source "$HOME/.rvm/scripts/rvm"' > ~/.bash_profile

Tuesday, October 23, 12

Page 57: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

$ rvm list known

Tuesday, October 23, 12

Page 58: Wewebconf

Tuesday, October 23, 12

Page 59: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

$ rvm use ruby-1.9.3

$ rvm install ruby-1.9.3

Tuesday, October 23, 12

Page 60: Wewebconf

Instalando (Mac OS & Linux)

http://rvm.io

$ rvm list

Tuesday, October 23, 12

Page 61: Wewebconf

Tuesday, October 23, 12

Page 62: Wewebconf

Instalando (Windows)

http://rubyinstaller.org/downloads

Tuesday, October 23, 12

Page 63: Wewebconf

“Hello World”

Tuesday, October 23, 12

Page 64: Wewebconf

C

1 #include <stdio.h>2 3 int main(void){4 printf("Hello World\n");5 return 1;6 }

Tuesday, October 23, 12

Page 65: Wewebconf

Java

1 class HelloWorldApp {2 public static void main(String[] args) {3 System.out.println("Hello World");4 }5 }

Tuesday, October 23, 12

Page 66: Wewebconf

Ruby

1 puts "Hello World"

Tuesday, October 23, 12

Page 67: Wewebconf

Rodando códigos ruby

Tuesday, October 23, 12

Page 68: Wewebconf

via irb

IRB = Interactive RuByShell REPL (Read Eval Print Loop)

Tuesday, October 23, 12

Page 69: Wewebconf

via irb

Tuesday, October 23, 12

Page 70: Wewebconf

Tuesday, October 23, 12

Page 71: Wewebconf

via programas Ruby

$ ruby hello_world.rbHello World

Tuesday, October 23, 12

Page 72: Wewebconf

Ruby Basics

Tuesday, October 23, 12

Page 73: Wewebconf

Comentários

Tuesday, October 23, 12

Page 74: Wewebconf

Comentários

1 # comentar uma linha simples2 3 =begin4 para um bloco de códigos5 [1, 2, 3].each do |number|6 puts number * 27 end8 =end

Tuesday, October 23, 12

Page 75: Wewebconf

Variáveis

Tuesday, October 23, 12

Page 76: Wewebconf

Variáveis

1 age = 1 # local2 3 @name = 'rafael' # global4 5 @@count = 1 # class6 7 PATH = '~/' # constant

Tuesday, October 23, 12

Page 77: Wewebconf

Strings

Tuesday, October 23, 12

Page 78: Wewebconf

Strings

1 single_quote = 'this is a string with single quote'2 3 double_quote = "this is a string with double quote"4 5 escaped_string = 'i\'m a escaped string'

Tuesday, October 23, 12

Page 79: Wewebconf

Strings (interpolação)

1 puts "20 + 20 = #{20 + 20}"2 >> 20 + 20 = 40

Tuesday, October 23, 12

Page 80: Wewebconf

Symbols

Tuesday, October 23, 12

Page 81: Wewebconf

Symbols

1 def walk(direction) 2 case direction 3 when 1 then move_north 4 when 2 then move_east 5 when 3 then move_south 6 when 4 then move_west 7 else "Unknown direction" 8 end

Tuesday, October 23, 12

Page 82: Wewebconf

Symbols

1 def walk(direction) 2 case direction 3 when :north then move_north 4 when :east then move_east 5 when :south then move_south 6 when :west then move_west 7 else "Unknown direction" 8 end

Tuesday, October 23, 12

Page 83: Wewebconf

Symbols

1 def walk(direction) 2 case direction 3 when :north then move_north 4 when :east then move_east 5 when :south then move_south 6 when :west then move_west 7 else "Unknown direction" 8 end

Tuesday, October 23, 12

Page 84: Wewebconf

Numbers

Tuesday, October 23, 12

Page 85: Wewebconf

Numbers

1 number = 152 3 number_with_delimeter = 1_000_0004 5 float = 1.5

Tuesday, October 23, 12

Page 86: Wewebconf

Numbers (conversão automática entre tipos)

a = 1 a.class >> Fixnum

b = 5.5 b.class >> Float

Tuesday, October 23, 12

Page 87: Wewebconf

Numbers (conversão automática entre tipos)

a = 1 a.class >> Fixnum

b = 5.5 b.class >> Float

c = a + b >> 6.5

Tuesday, October 23, 12

Page 88: Wewebconf

Numbers (conversão automática entre tipos)

a = 1 a.class >> Fixnum

b = 5.5 b.class >> Float

c = a + b >> 6.5 c.class >> Float

Tuesday, October 23, 12

Page 89: Wewebconf

Arrays

Tuesday, October 23, 12

Page 90: Wewebconf

Arrays

1 items = [1, "two", :three, [4, 5, 6]]2 3 items << 74 5 items[12] = 'a'6 7 puts items[0]8 >> 1

Tuesday, October 23, 12

Page 91: Wewebconf

Arrays

1 puts items.inspect2 >> [1, "two", :three, [4, 5, 6], 7, nil, nil, nil, nil, nil, nil, nil, "..."]

Tuesday, October 23, 12

Page 92: Wewebconf

Arrays

1 year_months = %w[seg ter qua qui sex sab dom] 2 >> ["seg", "ter", "qua", "qui", "sex", "sab", “dom"]

Tuesday, October 23, 12

Page 93: Wewebconf

Arrays

1 year_months = %w(seg ter qua qui sex sab dom) 2 >> ["seg", "ter", "qua", "qui", "sex", "sab", “dom"]

Tuesday, October 23, 12

Page 94: Wewebconf

Arrays

1 items = Array.new(5) { |i| 2 ** i } 2 >> [1, 2, 4, 8, 16]

Tuesday, October 23, 12

Page 95: Wewebconf

Hashes

Tuesday, October 23, 12

Page 96: Wewebconf

Hashes

1 market_list = {:rice => 1, "vegetables" => [ :spinach => 1, :broccoli => 2]}2 3 market_list = {rice: 1, vegetables: [ spinach: 1, broccoli: 2 ]}4 5 market_list[:rice]6 7 market_list[:coca] = 2

Tuesday, October 23, 12

Page 97: Wewebconf

Ranges

Tuesday, October 23, 12

Page 98: Wewebconf

Ranges 1 (1..10).to_a 2 >> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 3 4 (1...10).to_a 5 >> [1, 2, 3, 4, 5, 6, 7, 8, 9] 6 7 ("a".."z").to_a 8 >> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

Tuesday, October 23, 12

Page 99: Wewebconf

Ranges

1 string = "1a".."2g" 2 string.cover "2a" 3 >> true 4 5 string.cover "2h" 6 >> false

Tuesday, October 23, 12

Page 100: Wewebconf

Expressões Regulares

Tuesday, October 23, 12

Page 101: Wewebconf

Expressões regulares1 regexp = /(a-z)+/2 3 regexp = %r((a-z)+)

Tuesday, October 23, 12

Page 102: Wewebconf

Expressões regulares1 regexp = /(a-z)+/2 3 regexp = %r((a-z)+)

Metacaracteres devem ser escapados

( ) [ ] { } . ? + *

Tuesday, October 23, 12

Page 103: Wewebconf

Expressões regulares

Tuesday, October 23, 12

Page 104: Wewebconf

Estruturas condicionais

Tuesday, October 23, 12

Page 105: Wewebconf

Estruturas condicionais (if/elsif/else)

1 if expression 2 # do something 3 elsif expression2 4 # do something else 5 elsif expressionN 6 # do something else 7 else 8 # do something else 9 end

Tuesday, October 23, 12

Page 106: Wewebconf

1 if !expression 2 # do something 3 end

Estruturas condicionais (if/elsif/else)

Tuesday, October 23, 12

Page 107: Wewebconf

1 if !expression 2 # do something 3 end

Estruturas condicionais (if/elsif/else)

Tuesday, October 23, 12

Page 108: Wewebconf

1 if !expression 2 # do something 3 end 4 5 unless expression 6 # do something 7 end

Estruturas condicionais (if/elsif/else)

Tuesday, October 23, 12

Page 109: Wewebconf

Estruturas condicionais (if/elsif/else)

1 count == 1 ? 'singular' : 'plural'

Tuesday, October 23, 12

Page 110: Wewebconf

Estruturas condicionais (case)

1 case2 when x == 1 then "one"3 when x == 2 then "two"4 when x == 3 then "three"5 else"other"

Tuesday, October 23, 12

Page 111: Wewebconf

Estruturas condicionais (case)

1 case number2 when 0..103 "Between 0 and 10" 4 when 11..205 "Between 11 and 20"6 else7 "You're outside my limits" 8 end

Tuesday, October 23, 12

Page 112: Wewebconf

Estruturas condicionais (case)1 case text2 when /\bruby\b/3 "You passed a lowercased Ruby" 4 when /\bRuby\b/5 "You passed a capitalized Ruby" 6 when /\bRUBY\b/7 "You passed an uppercased Ruby" 8 else9 "WAT? NO RUBY?"10 end

Tuesday, October 23, 12

Page 113: Wewebconf

Iteradores

Tuesday, October 23, 12

Page 114: Wewebconf

Iteradores

Objetos das class Hash, Array e Range são iteráveis

1 1.upto(3) do |number|2 puts number3 end4 5 [1, 2, 3].map { |number| number * 2 }6 >> [2, 4, 6]7 8 (1..10).reject { |number| number.odd? }9 >> [2, 4, 6, 8, 10]

Tuesday, October 23, 12

Page 115: Wewebconf

Métodos

Tuesday, October 23, 12

Page 116: Wewebconf

Métodos

1 def greet(name)2 puts "Hello #{name}"3 end4 5 greet "Rafael"

Tuesday, October 23, 12

Page 117: Wewebconf

Métodos (argumento padrão)

1 def greet(name="there")2 puts "Hello #{name}"3 end4 5 greet

Tuesday, October 23, 12

Page 118: Wewebconf

Métodos (escopo) 1 x, y = 2, 1 2 3 def cube(x) 4 y = x**3 5 return y 6 end 7 8 puts cube(x) 9 >> 810 11 puts y12 >> 1

Tuesday, October 23, 12

Page 119: Wewebconf

Métodos (retorno automático)

1 x, y = 2, 1 2 3 def cube(x) 4 x**3 5 end 6 7 puts cube(x) 8 >> 8 9 10 puts y11 >> 1

Tuesday, October 23, 12

Page 120: Wewebconf

Classes

Tuesday, October 23, 12

Page 121: Wewebconf

Classes

1 class Person 2 end 3 4 p = Person.new

Tuesday, October 23, 12

Page 122: Wewebconf

Classes (métodos de instância)

1 class Person 2 def introduce 3 puts "Hello" 4 end 5 end 6 7 p = Person.new 8 p.introduce 9 >> Hello

Tuesday, October 23, 12

Page 123: Wewebconf

Classes (construtor)

1 class Person2 def initialize(name)3 @name = name # variavel de instância4 end5 6 def introduce7 puts "Hello my name is #{@name}"8 end9 end 1 p = Person.new('rafael')

2 p.introduce3 >> Hello my name is rafael

Tuesday, October 23, 12

Page 124: Wewebconf

Classes (métodos de classe)

1 class Animal2 def self.species3 ["alligator", "bat", ..., "bear"]4 end5 end6 7 puts Animal.species

Tuesday, October 23, 12

Page 125: Wewebconf

Classes (getters e setters)1 class Person2 def name=(name)3 @name = name4 end56 def name7 @name8 end9 end10 11 p = Person.new('rafael')12 p.name = 'macedo'13 puts p.name14 >> macedo

Tuesday, October 23, 12

Page 126: Wewebconf

Classes (getters e setters)

1 class Person2 attr_accessor :name3 end4 5 p = Person.new('rafael')6 p.name = 'macedo'7 puts p.name8 >> macedo

Tuesday, October 23, 12

Page 127: Wewebconf

Classes (getters)1 class Person2 attr_reader :name3 end4 5 p = Person.new('rafael')6 p.name = 'macedo'7 NoMethodError: undefined method `name='8 puts p.name8 >> macedo

Tuesday, October 23, 12

Page 128: Wewebconf

Classes (setters)

1 class Person2 attr_reader :name3 end4 5 p = Person.new('rafael')6 p.name = 'macedo'7 puts p.name8 NoMethodError: undefined method `name'

Tuesday, October 23, 12

Page 129: Wewebconf

Classes (inheritance)

1 class Studend < Person2 attr_accessor :register3 end4 5 s = Studend.new('rafael')6 s.register = '13286'7 s.name = 'macedo'

Tuesday, October 23, 12

Page 130: Wewebconf

Classes (modules)

1 module Swimmer 2 def swim 3 puts 'I\'m swimming!' 4 end 5 end

Tuesday, October 23, 12

Page 131: Wewebconf

Classes (modules)

1 class Person 2 include Swimmer 3 end 4 5 Person.new.swim 6 >> I'm swimming!

Tuesday, October 23, 12

Page 132: Wewebconf

Quem usa?

Tuesday, October 23, 12

Page 133: Wewebconf

Tuesday, October 23, 12

Page 134: Wewebconf

Tuesday, October 23, 12

Page 135: Wewebconf

Tuesday, October 23, 12

Page 136: Wewebconf

Tuesday, October 23, 12

Page 137: Wewebconf

Tuesday, October 23, 12

Page 138: Wewebconf

Tuesday, October 23, 12

Page 139: Wewebconf

Tuesday, October 23, 12

Page 140: Wewebconf

Tuesday, October 23, 12

Page 141: Wewebconf

Tuesday, October 23, 12

Page 142: Wewebconf

Tuesday, October 23, 12

Page 143: Wewebconf

O que posso fazer?

Tuesday, October 23, 12

Page 144: Wewebconf

Aplicações de voz

• Interactive voice response systems (IVRs)

• Call Center Automation

• Data Gathering

• Voice 2.0

http://adhearsion.com

Tuesday, October 23, 12

Page 145: Wewebconf

Aplicações linha de comando

Tuesday, October 23, 12

Page 146: Wewebconf

Games

https://github.com/qwertyreddy/rubysteinTuesday, October 23, 12

Page 147: Wewebconf

Aplicações desktop

Tuesday, October 23, 12

Page 148: Wewebconf

Desktop Applications

Tuesday, October 23, 12

Page 149: Wewebconf

Web Applications

Tuesday, October 23, 12

Page 150: Wewebconf

Web Applications

Tuesday, October 23, 12

Page 151: Wewebconf

Web Applications

Tuesday, October 23, 12

Page 152: Wewebconf

Web Applications

Tuesday, October 23, 12

Page 153: Wewebconf

Web Applications

Tuesday, October 23, 12

Page 154: Wewebconf

Rails is...Ruby on Rails® is an open-source web

framework that’s optimized for programmer happiness and sustainable productivity. It lets you write beautiful

code by favoring convention over configuration

http://rubyonrails.orgTuesday, October 23, 12

Page 159: Wewebconf

$ rails new my-app -d mysql

$ gem install rails

Tuesday, October 23, 12

Page 160: Wewebconf

Tuesday, October 23, 12

Page 161: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 162: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 163: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 164: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 165: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 166: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 167: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 168: Wewebconf

Controller

Routes

ModelView

Tuesday, October 23, 12

Page 169: Wewebconf

Tuesday, October 23, 12

Page 170: Wewebconf

Tuesday, October 23, 12

Page 171: Wewebconf

Tuesday, October 23, 12

Page 172: Wewebconf

Tuesday, October 23, 12

Page 173: Wewebconf

Tuesday, October 23, 12

Page 174: Wewebconf

bundle install

Tuesday, October 23, 12

Page 175: Wewebconf

Tuesday, October 23, 12

Page 176: Wewebconf

rake -T

Tuesday, October 23, 12

Page 177: Wewebconf

Tuesday, October 23, 12

Page 178: Wewebconf

Tuesday, October 23, 12

Page 179: Wewebconf

Tuesday, October 23, 12

Page 180: Wewebconf

Tuesday, October 23, 12

Page 181: Wewebconf

rake db:create

Tuesday, October 23, 12

Page 182: Wewebconf

Tuesday, October 23, 12

Page 183: Wewebconf

rails generate

Tuesday, October 23, 12

Page 184: Wewebconf

Tuesday, October 23, 12

Page 185: Wewebconf

Tuesday, October 23, 12

Page 186: Wewebconf

Tuesday, October 23, 12

Page 187: Wewebconf

Tuesday, October 23, 12

Page 188: Wewebconf

rake routes

Tuesday, October 23, 12

Page 189: Wewebconf

Tuesday, October 23, 12

Page 190: Wewebconf

Tuesday, October 23, 12

Page 191: Wewebconf

rake db:migrate

Tuesday, October 23, 12

Page 192: Wewebconf

Tuesday, October 23, 12

Page 193: Wewebconf

rails s

Tuesday, October 23, 12

Page 194: Wewebconf

rails s

Tuesday, October 23, 12

Page 195: Wewebconf

Tuesday, October 23, 12

Page 196: Wewebconf

Tuesday, October 23, 12

Page 197: Wewebconf

Tuesday, October 23, 12

Page 198: Wewebconf

WIN!!!!Tuesday, October 23, 12

Page 199: Wewebconf

...

Tuesday, October 23, 12

Page 200: Wewebconf

Ajuda adicional

Tuesday, October 23, 12

Page 201: Wewebconf

http://try.github.comTuesday, October 23, 12

Page 202: Wewebconf

http://caelum.com.brTuesday, October 23, 12

Page 203: Wewebconf

http://railscasts.comTuesday, October 23, 12

Page 204: Wewebconf

http://howtocode.com.brTuesday, October 23, 12

Page 205: Wewebconf

10 dicas para o sucesso

Tuesday, October 23, 12

Page 206: Wewebconf

1. Faça apenas uma tarefa por vez

Tuesday, October 23, 12

Page 207: Wewebconf

2. Conheça o problema

Tuesday, October 23, 12

Page 208: Wewebconf

3. Aprenda a ouvir

Tuesday, October 23, 12

Page 209: Wewebconf

4. Faça perguntas

Tuesday, October 23, 12

Page 210: Wewebconf

6. Aceite mudanças

Tuesday, October 23, 12

Page 211: Wewebconf

7. Admita seus erros

Tuesday, October 23, 12

Page 212: Wewebconf

8. Mantenha as coisas simples

Tuesday, October 23, 12

Page 213: Wewebconf

9. Mantenha calma

Tuesday, October 23, 12

Page 214: Wewebconf

10. Sorria

Tuesday, October 23, 12

Page 215: Wewebconf

10. Sorria

Tuesday, October 23, 12

Page 216: Wewebconf

Tuesday, October 23, 12

Page 217: Wewebconf

OBRIGADO!!!

https://speakerdeck.com/u/rafaelmacedo

Tuesday, October 23, 12