O mundo visto de dentro do Ruby

Post on 15-May-2015

931 views 1 download

description

Palestra realizada no DSC (Departamento de Sistemas e Computação) para alunos do curso de Ciência da Computação da UFCG. Agradecimentos: - Fábio Akita (/akitaonrails) - Daniel V. Lopes (/danielvlopes)

Transcript of O mundo visto de dentro do Ruby

O mundo visto de dentro doRuby

2007

Ciência da Computação

2007

E vocês, já ouviram falar ou usaram Ruby?

Yukihiro “Matz” Matsumoto

Yukihiro “Matz” Matsumoto

“Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?”

“Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?”

“Eu queria uma linguagem mais poderosaque perl, e mais orientada a objetos que

Python. Foi por isso que eu decidi projetarminha própria linguagem.”

Yukihiro “Matz” Matsumoto

1993Primeiros rabiscos

Yukihiro “Matz” Matsumoto

1993Primeiros rabiscos

1995Primeiro release público

Yukihiro “Matz” Matsumoto

Sintaxe simples, inspirada por Ada, Eiffel e Perl

Semântica compacta, inspirada por Smalltalk

Object Model igual ao de Smalltalk

Expressões regulares do Perl

Conceitos de linguagem funcional

Características do C e C++

Sintaxe simples, inspirada por Ada, Eiffel e Perl

Semântica compacta, inspirada por Smalltalk

Object Model igual ao de Smalltalk

Expressões regulares do Perl

Conceitos de linguagem funcional

Características do C e C++

Produtividade no desenvolvedor

Simplicidade

Linguagem humana

Linguagem dinâmica e reflexiva

Extensibilidade

Todas as classes são abertas

Herança simples e mixins

DSL’s

Garbage collector

Ruby 1.8.7 e 1.9.2

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Rubinius 1.0.1

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Rubinius 1.0.1

JRuby 1.5.X (Java)

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Rubinius 1.0.1

JRuby 1.5.X (Java)

MacRuby 0.6 (Objective-C)

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Rubinius 1.0.1

JRuby 1.5.X (Java)

MacRuby 0.6 (Objective-C)

MagLev Beta (Smalltalk)

Ruby 1.8.7 e 1.9.2

REE 1.8.7-2010.2

Rubinius 1.0.1

JRuby 1.5.X (Java)

MacRuby 0.6 (Objective-C)

MagLev Beta (Smalltalk)

IronRuby 1.1 (.NET)

Mas, por que Ruby?

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

Filosofia Ruby

Focado no humano

3.times doprint “Wee”

end

3.times doprint “Wee”

end

feed_dog if @dog.hungry?

Focado no humano

3.times doprint “Wee”

end

feed_dog if @dog.hungry?

['beer', 'vodka', 'wine'].each |drink| doprint drink.capitalize

end

Focado no humano

Verdadeiramente OO

Tudo é objeto, não há sequer tipo primitivo.

Verdadeiramente OO

Tudo é objeto, não há sequer tipo primitivo.

>> 1.class=> Fixnum>> 1.class.class=> Class>> nil.class=> NilClass

Código “bonito”

140vs

40

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

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

O que podemos fazer com Ruby...

No desktop

Bowline Titanium

Bowline

Shoes

Titanium

GTK+

Bowline

Shoes

wxRuby

Titanium

GTK+

Win32 widgetsAqua, GTK+

Bowline

Shoes

wxRuby

QtRuby

Titanium

GTK+

Win32 widgetsAqua, GTK+

Qt

Bowline

Shoes

wxRuby

QtRuby

Titanium

GTK+

Win32 widgetsAqua, GTK+

Qt

Ruby Cocoa Cocoa

Na web

David “dhh” Heinemeier Hansson

2004

David “dhh” Heinemeier Hansson

2004

David “dhh” Heinemeier Hansson

2.3.8 3.0.0

Código gerando código

Convenção sobre configuração

DRY (don't repeat yourself)

Produtividade sustentável

Desenvolvimento ágil

Diversão

Sinatra

require 'rubygems'require 'sinatra'get '/hi' do"Hello World!"

end

Ferramentas

1.8.7 + 1.9.2 + REE + JRuby + Rubinius +MagLev + IronRuby + MacRuby

RVM

=

1.8.7 + 1.9.2 + REE + JRuby + Rubinius +MagLev + IronRuby + MacRuby

Repositórios Github, Codebase

Repositórios

Integração contínua

Github, Codebase

Hudson, Cruise

Repositórios

Integração contínua

Deploy

Github, Codebase

Hudson, Cruise

Puppet, ChefCapistrano

Repositórios

Integração contínua

Deploy

Monitoramento

Github, Codebase

Hudson, Cruise

Puppet, ChefCapistrano

NewRelic, ScoutBackupMyApp

Repositórios

Integração contínua

Deploy

Monitoramento

Github, Codebase

Hudson, Cruise

Puppet, ChefCapistrano

NewRelic, ScoutBackupMyApp

Servidores Passenger,Mongrel, Thin

Testes

Cucumber, Steak, RSpec, Minitest, Test::Unit, Shoulda, Bacon,

Machinist, Factory Girl, Mocha

Minispec

http://gist.github.com/433067

Cucumber

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

Steak

Comunidade

Ué, mas não dizem queRuby é lento?

Performance

Escalabilidade

!=

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

real em um de seus sites mais acessados de todos ostempos.”

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

Agradecimentos

@akitaonrails (Fábio Akita)

@danielvlopes (Daniel V. Lopes)

OBRIGADO!

@vitoravelino

vitoravelino@octahedron.com.br