filosofia ruby e rails (ufop e inforuso 2010)

Post on 05-Sep-2014

2.357 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Filosofia do Ruby/Rails e valores da comunidade.

TRANSCRIPT

FILOSOFIA RUBY E RAILS

@danielvlopes

areacriacoes.com.br

software + design

ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS

http://bit.ly/unapos

SLIDESHARE.NET/DANIELVLOPES

FILOSOFIA RUBY E RAILS

• Código

• Cultura

• Criatividade

POR QUE ME INTERESSA?

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

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

Mark Gardner http://bit.ly/railsecosystem

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

Matz Ruby World Keynote http://bit.ly/bH4hA2

Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um

mês, porque não usar Ruby?"

Matz Ruby World Keynote http://bit.ly/bH4hA2

Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um

mês, porque não usar Ruby?"

Mais de 60% dos VCs usam Ruby para criar seus sistemas

POR QUE STARTUPS?

VOCÊ DEVE SE COMPORTAR COMO

UMA STARTUP

Yukihiro Matsumoto(criador do Ruby)

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

não é bom?”

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

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

• 100% orientada a objetos

• Linguagem dinâmica

• Esperados 4 milhões até 2013

• FREE e Open Source

• As vezes chamada de “scripting” language

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

Dave Thomas

2001Dave Thomas

2004

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

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

FICAMOS EMPOLGADOS !!!

Vídeo Java VS Rails

JRubyCharles Nutter

JRubyCharles Nutter

MacRubyL. Sansonetti

JRubyCharles Nutter

JQuery/RailsYehuda Katz

MacRubyL. Sansonetti

Ruby 1.8.7

Ruby 1.8.7

Ruby 1.9.2

JRuby 1.5.X

JRuby 1.5.X

Rubinius 1.1

JRuby 1.5.X

Rubinius 1.1

Mac Ruby 0.6

JRuby 1.5.X

Rubinius 1.1

Mac Ruby 0.6

Iron Ruby 1.0

RUBY NA WEB

RUBY ON RAILS

JASON FRIED

DAVID HANSSON

DHH

DHH

2004

Vídeo 37Signals

código gerando código

código gerando código

convention over configuration

código gerando código

convention over configuration

don’t repeat your self

código gerando código

convention over configuration

don’t repeat your self

desenvolvimento ágil

EXTREME PROGRAMMING

recursos restful

recursos restful

Unicode, TimeZone, i18n

recursos restful

Unicode, TimeZone, i18n

Segurança (XSS, XSRF, Injection)

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

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

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

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

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

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

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

<%= 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

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 @category end

def update end

def destroy endend

controller

CLEAN CODE

190

40VS

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

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

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

mais importante, facilitou a dificuldade que tinham em manutenção.

A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java

mais importante, facilitou a dificuldade que tinham em manutenção.

Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.

mais importante, facilitou a dificuldade que tinham em manutenção.

Eles 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

ECOSSISTEMA

Repositórios Github e Codebase

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

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Repositórios Github e Codebase

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

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Repositórios Github e Codebase

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

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Repositórios Github e Codebase

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

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

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

COMO ACHAR ?

DEPLOY

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

# GIT SETTINGSset :scm, :gitset :repository, "git@github.com: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

TESTES

RSpec Steak

Cucumber Test::Unit

Minitest Bacon Should

Factory Girl Fabrication

Machinist Mocha RR

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 | testing@man.net | | 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

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

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

COMUNIDADE

guides.rubyonrails.org

peepcode.com

railscasts.com

akitaonrails.com

egenial.com.br/cursos

github.com

MITOS

Ruby é Lento

slideshare.net

Home 331 ms

Total 5.45 ms

http://railsmg.org/meetings/1

Rails NÃO ESCALA

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

“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

RAILS é a SALVAÇÃO

VAMOS SER AGILE

http://www.vimeo.com/1752667

Recapitulando

entregue rápido

entregue rápidoentregue sempre

entregue rápidoentregue sempre

com qualidade

SEJA SEMPRE PROFISSIONAL

Vídeo Uncle Bob

Aprender Ruby e Railsvão te tornar um

profissional melhor

CURSOS

egenial.com.br/cursorails

egenial.com.br/imersaorubyonrails

CONTATOS

blog.areacriacoes.com.br

twitter @danielvlopes

danielvlopes@areacriacoes.com.br

top related