ecossistema ruby e rails (serpro bh)

171
FILOSOFIA RUBY E RAILS

Upload: daniel-lopes

Post on 05-Sep-2014

2.510 views

Category:

Technology


1 download

DESCRIPTION

Palestra aplicada no Serpro BH cobrindo uma introdução ao Rails e ao Ruby em conjunto com seu ecosistema.Obrigado Fábio Akita por ceder vários slides (http://www.slideshare.net/akitaonrails)

TRANSCRIPT

Page 1: Ecossistema Ruby e Rails (Serpro BH)

FILOSOFIA RUBY E RAILS

Page 2: Ecossistema Ruby e Rails (Serpro BH)

@danielvlopes

Page 4: Ecossistema Ruby e Rails (Serpro BH)

areacriacoes.com.br

software + design

Page 9: Ecossistema Ruby e Rails (Serpro BH)

ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS

http://bit.ly/unapos

Page 10: Ecossistema Ruby e Rails (Serpro BH)

FILOSOFIA RUBY E RAILS

Page 11: Ecossistema Ruby e Rails (Serpro BH)

POR QUE ?

Page 12: Ecossistema Ruby e Rails (Serpro BH)

OBRIGADO @AKITAONRAILS PELO CONTEÚDO

DE VÁRIOS SLIDES DESTA APRESENTAÇÃO

Page 13: Ecossistema Ruby e Rails (Serpro BH)

O QUE EU TENHO COM ISSO?

Page 14: Ecossistema Ruby e Rails (Serpro BH)

... um aclamado instrutor aplicando um curso descobriu que um de seus pupilos era um venture capitalist.

Page 15: Ecossistema Ruby e Rails (Serpro BH)

Quando questionado sobre o motivo de estar em uma turma de “Ruby on Rails” ... , ele respondeu simplesmente:

Page 16: Ecossistema Ruby e Rails (Serpro BH)

todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”.

Mark Gardner http://bit.ly/railsecosystem

Page 17: Ecossistema Ruby e Rails (Serpro BH)

Entrevista Steve Jobs (momento entre 1:00 e 1:01): http://itunes.apple.com/us/podcast/steve- jobs-at-d8-conference/id377953458

Page 18: Ecossistema Ruby e Rails (Serpro BH)

VOCÊ DEVE SE COMPORTAR COMO

UMA STARTUP

Page 19: Ecossistema Ruby e Rails (Serpro BH)
Page 20: Ecossistema Ruby e Rails (Serpro BH)

Ruby 1.8.7

Page 21: Ecossistema Ruby e Rails (Serpro BH)

Ruby 1.8.7

Ruby 1.9.2

Page 22: Ecossistema Ruby e Rails (Serpro BH)

Ruby 1.8.7

Ruby 1.9.2

Ruby on Rails 2.3.8

Page 23: Ecossistema Ruby e Rails (Serpro BH)

Ruby 1.8.7

Ruby 1.9.2

Ruby on Rails 2.3.8

Ruby on Rails 3.0.0

Page 24: Ecossistema Ruby e Rails (Serpro BH)
Page 25: Ecossistema Ruby e Rails (Serpro BH)
Page 26: Ecossistema Ruby e Rails (Serpro BH)

Yukihiro Matsumoto(criador do Ruby)

Page 27: Ecossistema Ruby e Rails (Serpro BH)

“Se você terminar seu trabalho rápido e de forma divertida, isso

não é bom?”

Matz http://www.artima.com/intv/ruby3.html

Page 28: Ecossistema Ruby e Rails (Serpro BH)

“Tornar as coisas simples fáceis e as coisas complexas possíveis”

Page 29: Ecossistema Ruby e Rails (Serpro BH)

• 100% orientada a objetos

• Linguagem dinâmica

• Esperados 4 milhões até 2013

• FREE e Open Source

• As vezes chamada de “scripting” language

Page 30: Ecossistema Ruby e Rails (Serpro BH)
Page 31: Ecossistema Ruby e Rails (Serpro BH)

Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.

Page 32: Ecossistema Ruby e Rails (Serpro BH)
Page 33: Ecossistema Ruby e Rails (Serpro BH)

Dave Thomas

Page 34: Ecossistema Ruby e Rails (Serpro BH)

2001Dave Thomas

Page 35: Ecossistema Ruby e Rails (Serpro BH)
Page 36: Ecossistema Ruby e Rails (Serpro BH)
Page 37: Ecossistema Ruby e Rails (Serpro BH)

2004

Page 38: Ecossistema Ruby e Rails (Serpro BH)

“Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.”

Kent Beck, Criador do "Extreme Programming" e "TDD"

Page 39: Ecossistema Ruby e Rails (Serpro BH)

FICAMOS EMPOLGADOS !!!

Page 40: Ecossistema Ruby e Rails (Serpro BH)
Page 41: Ecossistema Ruby e Rails (Serpro BH)

JAVA vs RAILS: http://www.youtube.com/watch? v=SsYKd37r26s

Page 42: Ecossistema Ruby e Rails (Serpro BH)
Page 43: Ecossistema Ruby e Rails (Serpro BH)
Page 44: Ecossistema Ruby e Rails (Serpro BH)

JRubyCharles Nutter

Page 45: Ecossistema Ruby e Rails (Serpro BH)

JRubyCharles Nutter

MacRubyL. Sansonetti

Page 46: Ecossistema Ruby e Rails (Serpro BH)

JRubyCharles Nutter

JQuery/RailsYehuda Katz

MacRubyL. Sansonetti

Page 47: Ecossistema Ruby e Rails (Serpro BH)
Page 48: Ecossistema Ruby e Rails (Serpro BH)
Page 49: Ecossistema Ruby e Rails (Serpro BH)

JRuby 1.5.X

Page 50: Ecossistema Ruby e Rails (Serpro BH)

JRuby 1.5.X

Rubinius 1.0

Page 51: Ecossistema Ruby e Rails (Serpro BH)

JRuby 1.5.X

Rubinius 1.0

Mac Ruby 0.6

Page 52: Ecossistema Ruby e Rails (Serpro BH)

JRuby 1.5.X

Rubinius 1.0

Mac Ruby 0.6

Iron Ruby 1.0

Page 53: Ecossistema Ruby e Rails (Serpro BH)

APLICANDO NA WEB

Page 54: Ecossistema Ruby e Rails (Serpro BH)
Page 55: Ecossistema Ruby e Rails (Serpro BH)
Page 56: Ecossistema Ruby e Rails (Serpro BH)

David Heinemeier Hansson “DHH”

Page 57: Ecossistema Ruby e Rails (Serpro BH)

David Heinemeier Hansson “DHH”

2004

Page 58: Ecossistema Ruby e Rails (Serpro BH)
Page 59: Ecossistema Ruby e Rails (Serpro BH)
Page 60: Ecossistema Ruby e Rails (Serpro BH)
Page 61: Ecossistema Ruby e Rails (Serpro BH)

código gerando código

Page 62: Ecossistema Ruby e Rails (Serpro BH)

código gerando código

convention over configuration

Page 63: Ecossistema Ruby e Rails (Serpro BH)

código gerando código

convention over configuration

don’t repeat your self

Page 64: Ecossistema Ruby e Rails (Serpro BH)

código gerando código

convention over configuration

don’t repeat your self

desenvolvimento ágil

Page 65: Ecossistema Ruby e Rails (Serpro BH)

EXTREME PROGRAMMING

Page 66: Ecossistema Ruby e Rails (Serpro BH)
Page 67: Ecossistema Ruby e Rails (Serpro BH)

recursos restful

Page 68: Ecossistema Ruby e Rails (Serpro BH)

recursos restful

Unicode, TimeZone, i18n

Page 69: Ecossistema Ruby e Rails (Serpro BH)

recursos restful

Unicode, TimeZone, i18n

Segurança (XSS, XSRF, Injection)

Page 70: Ecossistema Ruby e Rails (Serpro BH)
Page 71: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 72: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 73: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 74: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 75: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 76: Ecossistema Ruby e Rails (Serpro BH)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 77: Ecossistema Ruby e Rails (Serpro BH)
Page 78: Ecossistema Ruby e Rails (Serpro BH)
Page 79: Ecossistema Ruby e Rails (Serpro BH)
Page 80: Ecossistema Ruby e Rails (Serpro BH)
Page 81: Ecossistema Ruby e Rails (Serpro BH)
Page 82: Ecossistema Ruby e Rails (Serpro BH)
Page 83: Ecossistema Ruby e Rails (Serpro BH)
Page 84: Ecossistema Ruby e Rails (Serpro BH)
Page 85: Ecossistema Ruby e Rails (Serpro BH)
Page 86: Ecossistema Ruby e Rails (Serpro BH)
Page 87: Ecossistema Ruby e Rails (Serpro BH)
Page 88: Ecossistema Ruby e Rails (Serpro BH)
Page 89: Ecossistema Ruby e Rails (Serpro BH)

class Post < ActiveRecord::Base # ASSOCIATIONS has_and_belongs_to_many :categories belongs_to :author has_many :comments, :dependent => :destroy

# VALIDATIONS validates_presence_of :title, :body, :author, :slug, :published_at validates_uniqueness_of :slug validates_inclusion_of :draft, :in => [true, false] validates_associated :author

# SCOPES (custom queries) default_scope :order => 'published_at DESC' scope :published, lambda { where(:draft => false) }

# CALLBACKS before_validation :generate_slug

protected def generate_slug self.slug = title unless slug.present? self.slug = slug.parameterize endend

model

Page 90: Ecossistema Ruby e Rails (Serpro BH)

<%= form_for [ post, comment ], :remote => true do |f| %> <%= error_messages_for comment %> <div class="field"> <%= f.label :author %><br /> <%= f.text_field :author %> </div>

<div class="field"> <%= f.label :url %><br /> <%= f.text_field :url %> </div>

<div class="field"> <%= f.label :body %><br /> <%= f.text_area :body, :rows => 10, :cols => 90 %> </div>

<%= render "submit_or_cancel" %><% end %>

views

Page 91: Ecossistema Ruby e Rails (Serpro BH)

class Admin::PostCategoriesController < ApplicationController def index @categories = PostCategory.all respond_with @categories end

def show @category = PostCategory.find(params[:id]) respond_with @category end

def new @category = PostCategory.new respond_with @category end

def edit @category = PostCategory.find(params[:id]) end

def create @category = PostCategory.new(params[:post_category]) flash[:notice] = 'Category was successfully created.' if @category.save respond_with @post end

def update end

def destroy endend

controller

Page 92: Ecossistema Ruby e Rails (Serpro BH)

CLEAN CODE

Page 93: Ecossistema Ruby e Rails (Serpro BH)
Page 94: Ecossistema Ruby e Rails (Serpro BH)
Page 95: Ecossistema Ruby e Rails (Serpro BH)
Page 96: Ecossistema Ruby e Rails (Serpro BH)
Page 97: Ecossistema Ruby e Rails (Serpro BH)

190

40VS

Page 98: Ecossistema Ruby e Rails (Serpro BH)
Page 99: Ecossistema Ruby e Rails (Serpro BH)

Eles servem mais de 23 milhões de visitantes/mês.

Page 100: Ecossistema Ruby e Rails (Serpro BH)

Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em 20 mil linhas de Ruby em vez

de 125 mil linhas de Java

Page 101: Ecossistema Ruby e Rails (Serpro BH)

Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em 20 mil linhas de Ruby em vez

de 125 mil linhas de Java e, mais importante, facilitou a dificuldade que tinham em manutenção.

Page 102: Ecossistema Ruby e Rails (Serpro BH)

“Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em 20 mil linhas de Ruby em vez

de 125 mil linhas de Java e, mais importante, facilitou a dificuldade que tinham em manutenção. Eles

também finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores. Uma vez completo e

otimizado, o site deles agora é mais rápido que antes.”

http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails

Page 103: Ecossistema Ruby e Rails (Serpro BH)

ECOSSISTEMA

Page 104: Ecossistema Ruby e Rails (Serpro BH)
Page 105: Ecossistema Ruby e Rails (Serpro BH)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 106: Ecossistema Ruby e Rails (Serpro BH)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 107: Ecossistema Ruby e Rails (Serpro BH)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 108: Ecossistema Ruby e Rails (Serpro BH)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 109: Ecossistema Ruby e Rails (Serpro BH)
Page 110: Ecossistema Ruby e Rails (Serpro BH)
Page 111: Ecossistema Ruby e Rails (Serpro BH)

source 'http://rubygems.org'

gem 'rails', '3.0.0.rc'gem 'devise', '1.1.1'gem 'paperclip', '2.3.3'gem 'menu_builder', '0.3.3'gem 'RedCloth', '4.2.3'gem 'will_paginate', '3.0.pre2'gem 'reverse_captcha', '0.0.1'gem 'capistrano', '2.5.19'gem 'mysql', '2.8.1'

group :development do gem 'sqlite3-ruby', :require => 'sqlite3' gem "rspec", ">=2.0.0.beta.11" gem "rspec-rails", ">=2.0.0.beta.11" gem "ruby-debug"end

group :test do gem 'capybara' gem 'database_cleaner' gem 'steak', '>= 0.4.0.beta.1' gem 'factory_girl_rails'end

Gemfile

Page 112: Ecossistema Ruby e Rails (Serpro BH)

COMO ACHAR ?

Page 113: Ecossistema Ruby e Rails (Serpro BH)
Page 114: Ecossistema Ruby e Rails (Serpro BH)

DEPLOY

Page 115: Ecossistema Ruby e Rails (Serpro BH)
Page 116: Ecossistema Ruby e Rails (Serpro BH)

deploy.rbset :application, "producer"set :ip_address , "208.88.125.20"

# GIT SETTINGSset :scm, :gitset :repository, "[email protected]:danielvlopes/producer.git"set :branch, "master"set :deploy_via, :remote_cache

# SSH SETTINGSset :user , "rails"set :deploy_to, "/home/rails/#{application}"set :shared_directory, "#{deploy_to}/shared"set :use_sudo, falseset :group_writable, falsedefault_run_options[:pty] = true

# ROLESrole :app, ip_addressrole :web, ip_addressrole :db, ip_address, :primary => true

# HOOKSafter 'deploy:setup', 'db:setup'

after 'deploy:update_code' do db.symlink assets.symlinkend

Page 117: Ecossistema Ruby e Rails (Serpro BH)
Page 118: Ecossistema Ruby e Rails (Serpro BH)

TESTES

Page 119: Ecossistema Ruby e Rails (Serpro BH)
Page 120: Ecossistema Ruby e Rails (Serpro BH)

RSpec Steak

Cucumber Test::Unit

Minitest Bacon Should

Factory Girl Fabrication

Machinist Mocha RR

Page 121: Ecossistema Ruby e Rails (Serpro BH)

Feature: Authenticate In order to see my previous links As a user I want to be able to create an account

Scenario: Creating a new account Given I am not authenticated When I go to register And I fill in the following: | Email | [email protected] | | Password | 123456 | | Password confirmation | 123456 | And I press "Sign up" Then I should see "You have signed up successfully"

Cucumber

http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature

Page 122: Ecossistema Ruby e Rails (Serpro BH)

feature "Catalog", %q{ In order to display a catalog in devices As registered publisher I want to manage a catalog.} do

background do ensure_not_logged_in @owner = Factory :app, :name => "1Password" end

scenario "Create catalog for 1Password", :js => true do visit new_catalog_page_for(@owner)

select "shelf/metal", :from => "Theme" fill_in "Title", :with => "Appextras"

drag_to_catalog available_app click "Create Catalog"

should_have_notice "Catalog was successfully created." end

Steak

Page 123: Ecossistema Ruby e Rails (Serpro BH)

describe Guest do before do @room = Room.new("Room 35", Type::Master.new) @hosting = Hosting.new(@room, 5) @guest = Guest.new("Daniel Lopes", @hosting) end

it "should have a name" do assert_equal "Daniel Lopes", @guest.name end

describe "when print the invoice" do it "should have the guest name" do assert_match /Daniel Lopes/, @guest.invoice end

it "should have the room name" do assert_match /Room 35/, @guest.invoice end

it "should have the total amount" do assert_match /Valor total: 1000/, @guest.invoice end

it "should have the discount points earned with that hosting" do assert_match /Você ganhou 6 ponto\(s\)/, @guest.invoice end endend

Minispec

Page 124: Ecossistema Ruby e Rails (Serpro BH)

COMUNIDADE

Page 125: Ecossistema Ruby e Rails (Serpro BH)

guides.rubyonrails.org

Page 126: Ecossistema Ruby e Rails (Serpro BH)

peepcode.com

Page 127: Ecossistema Ruby e Rails (Serpro BH)

railscasts.com

Page 128: Ecossistema Ruby e Rails (Serpro BH)

akitaonrails.com

Page 129: Ecossistema Ruby e Rails (Serpro BH)

egenial.com.br/cursos

Page 130: Ecossistema Ruby e Rails (Serpro BH)

github.com

Page 131: Ecossistema Ruby e Rails (Serpro BH)
Page 132: Ecossistema Ruby e Rails (Serpro BH)

MITOS

Page 133: Ecossistema Ruby e Rails (Serpro BH)
Page 134: Ecossistema Ruby e Rails (Serpro BH)

Ruby é Lento

Page 136: Ecossistema Ruby e Rails (Serpro BH)

slideshare.net

Page 137: Ecossistema Ruby e Rails (Serpro BH)
Page 138: Ecossistema Ruby e Rails (Serpro BH)

Home 331 ms

Total 5.45 ms

http://railsmg.org/meetings/1

Page 139: Ecossistema Ruby e Rails (Serpro BH)
Page 140: Ecossistema Ruby e Rails (Serpro BH)

Rails NÃO ESCALA

Page 141: Ecossistema Ruby e Rails (Serpro BH)
Page 142: Ecossistema Ruby e Rails (Serpro BH)

Friendster foi escrito em Java e mudaram para PHP.

MySpace foi escrito em ColdFusion e mudaram ASP.NET.

Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a linguagem é o problema, mas eu acho que isso raramente é a realidade.

http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter

Page 143: Ecossistema Ruby e Rails (Serpro BH)

“O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das eleições em quase tempo

real em um de seus sites mais acessados de todos os tempos.”

http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1

Page 144: Ecossistema Ruby e Rails (Serpro BH)

RAILS é a SALVAÇÃO

Page 145: Ecossistema Ruby e Rails (Serpro BH)
Page 146: Ecossistema Ruby e Rails (Serpro BH)
Page 147: Ecossistema Ruby e Rails (Serpro BH)
Page 148: Ecossistema Ruby e Rails (Serpro BH)

VAMOS SER AGILE

Page 149: Ecossistema Ruby e Rails (Serpro BH)
Page 150: Ecossistema Ruby e Rails (Serpro BH)
Page 151: Ecossistema Ruby e Rails (Serpro BH)
Page 152: Ecossistema Ruby e Rails (Serpro BH)
Page 153: Ecossistema Ruby e Rails (Serpro BH)
Page 154: Ecossistema Ruby e Rails (Serpro BH)
Page 155: Ecossistema Ruby e Rails (Serpro BH)
Page 156: Ecossistema Ruby e Rails (Serpro BH)
Page 157: Ecossistema Ruby e Rails (Serpro BH)
Page 158: Ecossistema Ruby e Rails (Serpro BH)
Page 159: Ecossistema Ruby e Rails (Serpro BH)

http://www.vimeo.com/1752667

Page 160: Ecossistema Ruby e Rails (Serpro BH)

http://www.vimeo.com/1752667

Page 161: Ecossistema Ruby e Rails (Serpro BH)

Recapitulando

Page 162: Ecossistema Ruby e Rails (Serpro BH)

entregue rápido

Page 163: Ecossistema Ruby e Rails (Serpro BH)

entregue pouco, mas sempre

Page 164: Ecossistema Ruby e Rails (Serpro BH)

mas com qualidade para manutenção

Page 165: Ecossistema Ruby e Rails (Serpro BH)

Rails e Ruby vão ajudar MUITO mas não fazem milagres

Page 166: Ecossistema Ruby e Rails (Serpro BH)

todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”.

Page 167: Ecossistema Ruby e Rails (Serpro BH)

o “grande lance” é que Rails é uma ferramentapara empreendedores.

Page 168: Ecossistema Ruby e Rails (Serpro BH)
Page 169: Ecossistema Ruby e Rails (Serpro BH)
Page 170: Ecossistema Ruby e Rails (Serpro BH)

MUITO OBRIGADO

Page 171: Ecossistema Ruby e Rails (Serpro BH)

CURSOS

egenial.com.br/cursorails

egenial.com.br/imersaorubyonrails

CONTATOS

blog.areacriacoes.com.br

twitter @danielvlopes

[email protected]