Para aprender Ruby on Rails

Esse post é para indicar 2 dicas matadoras que mostram como a comunidade Ruby on Rails é organizada e colaborativa. Essa semana foi finalmente terminado a tradução/edição/revisão d’O Guia (comovente) de Ruby do Why. Essa é tradução do livro do Why the Lucky Stiff, um cara que ensina fantasticamente bem.

RailsGuides

Já ontem o Daniel Lopes anunciou a publicação do RailsGuides. O RailsGuides existe para mostrar como as peças do framework funcionam e como trabalhar com toda a produtividade que o Rails proporciona aos desenvolvedores. Boa viagem!

 

Integração contínua no autosimulado

Assim como no codestacker, não lancei o autosimulado com todos os features prontos. Naturalmente, lançar um projeto sem estar com 100% dos recursos completos pode ser um risco, mas é uma gostosa corrida contra o tempo – e mais uma chance para avaliar se essa ou aquela funcionalidade é realmente útil para o aplicativo. Como disse Steve Jobs em uma apresentação sobre a iTunes Music Store, “Inovação não é dizer sim para tudo. É dizer NÃO para tudo exceto as funcionalidades mais cruciais”.

Hoje eu estou postando para falar de uma nova funcionalidade do autosimulado. Agora, o seu desempenho é salvo e você pode acompanhar o resultado dos testes em uma página exclusiva e com gráficos. Para ilustrar:

autosimulado

 

Nasceu: autosimulado

autosimulado é um aplicativo web com simulados de provas de legislação, aquelas que você faz quando vai tirar sua carteira de motorista. A inspiração para o autosimulado apareceu quando minha namorada foi tirar carteira, e ao tentar ajudá-la procurando provas, só encontrei coisas chatas, feias e sem usabilidade. Provas do Detran metem medo em muita gente – eu mesmo só passei da segunda tentativa – e ser simples, rápido, inteligente e grátis é o objetivo do site, que nasceu sobre a concepção do Getting Real e da integração contínua.

autosimulado

 

Documentação do Rails e Ruby no Spotlight

Essa é uma dica bem interessante: um cara chamado Priit Haamer migrou as documentações do Rails e do Ruby para o dicionário do Mac OS. Como o Spotlight do sistema busca – além de arquivos, emails, músicas e o que for – as entradas do dicionário, você ganha mais uma forma rápida de acesso a documentação de sua linguagem favorita.

 

Edge Rails: método render mais esperto

Quem já está usando o Rails 2.2 já deve estar vendo um warning: no Rails 2.3, o método render está mais esperto e dispensará a instrução sobre qual tipo de renderização ele está fazendo. Confira:

Agora, você não precisa especificar se quer renderizar uma action, template ou file. Isso é bem legal e mostra cada vez mais o minimalismo do framework.

 

gem cheat

Essa é uma gem do Chris Wanstrath que muita gente não conhece e que só hoje me deparei. Para instalar:

Para usar, basta executar no terminal o comando cheat acrescido do assunto desejado, como por exemplo: cheat rails_svn

A saída, para esse cheat, é uma lista de comandos para ignorar arquivos temporários e de log do seu aplicativo rails no subversion é:

A lista de todas cheats é encontradada executando:

 

PHP junto com o Passenger no Leopard

Na minha máquina de desenvolvimento uso o Passenger para trabalhar com o Rails e hoje eu precisei fazer alguns testes com PHP. Deixar o PHP junto com o Passenger é tão simples como 2 + 2 são 4. Vamos lá.

Abra o arquivo de configuração do Apache (/etc/apache2/httpd.conf) como superusuário e procure a linha que chama o módulo do PHP (linha 114):

LoadModule php5_module        libexec/apache2/libphp5.so

Basta descomentar essa linha. Em seguida, no fim desse arquivo, crie um host virtual chamado php:

<virtualhost *:80>
  ServerName php
  DocumentRoot "/Users/leonardofaria/Sites/php"
  <directory "/Users/leonardofaria/Sites/php">
	Options Indexes MultiViews
	AllowOverride None
	Order allow,deny
	Allow from all
  </directory>
</virtualhost>

Pronto. Agora a url http://php/ responderá pelo conteúdo da pasta “/Users/leonardofaria/Sites/php”. Lá dentro, você pode criar um index.php e para testar se está tudo ok, use o conhecido phpinfo()

< ?php
phpinfo();
?>

Se tudo der certo, você terá uma tela como a seguinte :)

 

Migrations sem timestamp

No Rails 2.0, os arquivos de migração eram gerados com o prefixo do timestamp. Exemplo: 20080614155951_create_users.rb. Nas versões anteriores, o prefixo era numérico. Para o Rails 2.2, será possível você mesmo configurar isso, definindo no environment.rb:

Vale a pena a leitura do Release Notes do Rails 2.2 e, se você ainda não pegou o RC 1 do Rails, lembre-se:

gem install rails -s http://gems.rubyonrails.org -v 2.2.0
 

RubyMine: Textmate-killer?

Essa semana apareceu uma nova IDE para Ruby: a RubyMine, que se auto-denomina com a mais inteligente IDE para Ruby. O software é multiplataforma e parece ser bem interessante. Notei algumas coisinhas numa primeira-impressão:

1) há templates para testes (RSpec e TestUnit)
2) integração com o Mac OS: o look’n feel não combina muito (= feia) com o sistema e ele está mais para NetBeans e Eclipse do que para um Textmate. Nada de maçã + w para fechar um arquivo nem maçã + n para um novo arquivo. A velocidade dele também está mais para NetBeans/Eclipse do que para um Textmate
3) inspetor: ele possui um inspetor interessante: para CSS, por exemplo, ele verifica suas folhas de estilo e informa por imagens quebradas, seletores não usados e código desnecessário (como escrever ‘0px’, onde somente ‘0’ já resolve). Para Ruby, ele verifica, entre vários itens, referências não resolvidas e erros em chamadas de métodos (apesar de que, no meu projeto, o que ele inspencionou estava certo)
4) parece ter uma integração interessante com controle de versão (Git, Subversion e CVS)
5) ele também tem um Go to File, como no Textmate
6) ele tem uma janela amigável para rodar scripts (como o RadRails)

Essa próxima semana vou utilizá-lo e ver se ele pode ser um Textmate-killer ou uma boa alternativa para Windows e Linux.

 

Integração contínua no codestacker

Meses atrás lancei o codestacker. Para seu desenvolvimento segui a conhecida metodologia Getting Real e lancei o serviço sem os principais features. Pouco a pouco estou acrescentando recursos ao site.

Internet é isso. Caia na real e tenha integração contínua em seu serviço.

[update 22/11/08] corrigido bugs no ie.
[update 16/11/08] implementado busca e agora o código pode ser ’embedado’. Exemplo:

[update 02/11/08] corrigido alguns bugs (valeu os toques, André!) e refatorado muito código.
[update 23/10/08] implementado textile.

 

Ruby on Rails Portable

Você não precisa mais ficar querendo o novo Macbook para levar suas aplicações Rails para qualquer lugar. Um sujeito chamado Etienne Savard criou o Ruby on Rails Portable. O pacote, com uns trinta e poucos megabytes vem com o Scite – um editor de código – também portátil.

PS. só falta saber se um aplicativo Rails rodando em um pendrive vai escalar :P

PS2. o autor desse projeto também fez um Cygwin portátil.

PS3. ainda não testei, talvez pelo estranho fato de ter um pen-drive de 256 mb da Toshiba que só é detectado após 15 minutos ligado na usb.

 

Artigos da semana sobre Rails

Ando muito sem tempo para postar, basicamente devido aos meus dois trabalhos. Essa semana vi várias coisas interessantes e abaixo um comentário para cada uma delas.

Rails Security Checklist – dicas básicas para implementar segurança em suas views, models e controllers.
Getting Started with Rails e DataMapper – estou num meio de um projeto onde cogitamos a possibilidade de substituir o ActiveRecord pelo DataMapper. Para quem não conhece a solução, é um bom start.
Meaning 400s and 500s – um rápido código abordando erros
Clone Pastie with Sinatra and DataMapper – Sinatra é um pequeno framework em Ruby bem interessante. O link levanta como fazer um app que manipula dados em um banco através do DataMapper.

ps.: quem está assinando o rss do site está recebendo meus códigos no codestacker.

 

Edge Rails no Windows Vista

Uma das mudanças do Rails 2.2 é não inclusão do bundle do MySQL, responsável por conectar seu projeto ao banco. Mês passado eu postei sobre isso e hoje, ao tentar instalar o gem do MySQL no Windows Vista de um co-worker, me deparei com um problema na DLL libmySQL.dll.

A solução encontrada foi copiar esse arquivo (geralmente em C:\Program Files\MySQL\MySQL Server 4.1\bin\) para a pasta bin do Ruby (por exemplo: C:\ruby\bin).

Que fique documentado ;)

 

Acelerando seu Textmate

Estou trabalhando em um projeto usando o Edge Rails. No Textmate, a tecla de atalho CMD + T é uma mão na roda para localizar e abrir qualquer arquivo, entretanto, com o Edge estando na pasta /vendor/rails, a busca pode se tornar lenta e encontrar, além dos seus arquivos, os arquivos do framework. Foi então que encontrei essa dica do Dr. Nic (sempre ele):

É possível mudar a forma default de como funciona os patterns para localizar os arquivos. Para isso, acione as preferências do software, escolha Advanced, depois Folder References e substitua, em Folder Pattern, o valor padrão, pelo seguinte:

!.*/(\.[^/]*|vendor/rails|doc|rails_root|CVS|log|data_dump|build|_darcs|pkg |_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)? |bundle))$ 

Caso queira reverter, o valor padrão é:

!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$

Após isso, alguns diretórios não serão mais ‘encontrados’ e você terá uma busca mais rápida.

 

Ruby on Rails na WebMobile

Ruby on Rails é um framework minimalista que chama cada vez mais atenção do mainstream. Dia-a-dia a comunidade avança, com encontros (Rails Summit está chegando), publicações e artigos e reportagens em revistas especializadas. E é com grande satisfação que divulgo que a WebMobile, da editora DevMedia, traz, a partir dessa edição, um micro curso apresentando as funcionalidades do RoR.

Vale a pena correr a banca e me conferir lá ;)

P.S.: Mês que vem tem Minas on Rails ’08. Em breve novas informações desse evento.

 

Mudanças no Rails 2.2

O Rails 2.2 está chegando e ao baixar o Edge para testar o novo recurso de internacionalização (uma das grandes novidades), me deparei com a primeira diferença da versão: o arquivo de conexão com o MySQL não está mais integrado ao framework. É isso o que diz o log do development.log:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

Como o próprio log já sugere, é só instalar o gem, mas atenção: é preciso especificar o path do arquivo mysql_config, através do flag “–with-mysql-config”. Para o Mac OS X, a instalação pode ser feita com:

sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

e no Ubuntu, com:

sudo gem install mysql -- --with-mysql-config=/usr/bin/mysql_config

Depois disso, é só correr pro abraço!

 

Usando ApacheBench para testes: Apache/mod_rails e Nginx/mongrel

O ApacheBench é um software do Apache usado para fazer testes de perfomance de servidores web, independente do servidor usado. Isso é muito útil para comparar o desempenho de diversas configurações, mas nem sempre pode apresentar a realidade do ambiente.

O ApacheBench é distribuído nos ambientes Linux pelo pacote apache2-utils – versões para Mac OS e Windows podem ser encontradas no site do software. Em distribuições como o Ubuntu, para instalá-lo basta um apt-get install apache2-utils (como super-usuário). A partir daí, o comando ab fica disponível em seu terminal e é só correr para o abraço!

Um teste pode ser feito com o comando:

ab -n 100 -c 5 http://www.leonardofaria.net/

O Flag ‘-n’ indica o número de requisições, enquanto a opção ‘-c’ indica a ocorrência de conexões simultâneas. A saída do comando acima é semelhante a:

This is ApacheBench, Version 2.0.40-dev < $Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.leonardofaria.net (be patient).....done


Server Software:        Apache/2.2.8
Server Hostname:        www.leonardofaria.net
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      5
Time taken for tests:   16.460184 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      41600 bytes
HTML transferred:       0 bytes
Requests per second:    6.08 [#/sec] (mean)
Time per request:       823.009 [ms] (mean)
Time per request:       164.602 [ms] (mean, across all concurrent requests)
Transfer rate:          2.43 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      255  291  21.2    287     361
Processing:   442  506 131.1    485    1732
Waiting:      438  492  42.9    484     655
Total:        698  797 137.9    774    2040

Percentage of the requests served within a certain time (ms)
  50%    774
  66%    804
  75%    812
  80%    818
  90%    878
  95%    925
  98%    982
  99%   2040
 100%   2040 (longest request)

Dezenas de possibilidades podem ser traçadas com esses testes.
Nos meus benchmarks, realizei basicamente 2 testes: a renderização do index.html default do framework e a renderização de um Time.Now do Ruby. Em ambos os testes, o desempenho do nginx + mongrel_cluster foi superior ao Apache + mod_rails. Esse teste também foi feito por aí, e com resultados semelhantes ao meu.

Desse modo, em uma balança estão Apache/mod_rails e Nginx/mongrel_cluster. De um lado, pesam a facilidade de deployment e o crescente uso em shared hosts. De outro lado pesam a rapidez do servidor e a ‘dificuldade’ do deployment. E aí? De que lado você vai ficar?

 

Rails Screencasts

É incrível a qualidade de material existente sobre Rails. A comunidade está cada vez mais crescendo e para quem está vindo para o lado Rails da força, nada mau uns screencast para aprender.

  1. Learnivore é um agregador com diversos sites de screencasts, incluindo os listados a seguir.
  2. Railscasts: já são 117 episódios do mais conhecido site de vídeos.
  3. PeepCode: screencasts de ótima qualidade, entretanto, pagos (o Júlio fez um ótimo post sobre isso).
  4. Ruby Plus: outro site interessante de conteúdo.
  5. ThinkRefresh: um site com um bom número de screencasts.
  6. Learncasts: o Lucas Húngaro começou sua série de screencasts.
  7. Git: git parece ser ainda um mistério, mas não se você ver esses screencasts.
  8. TDD Screencast: não assisti ainda, mas promete ser um screencast bem bacana.
  9. [update] o Carlos Brando também tem screencasts brilhantes! (E não deixe de conferir o Rails Podcast Brasil, do qual ele também participa.)
  10. RubyPulse é um novo site de screencasts
  11. Sceencasts sobre o Textmate
  12. 17 videos cobrindo o básico sobre Ruby
 

Nasceu: codestacker.com

Nasceu meu projeto Rails de 2 fins-de-semana: codestacker (é em minúsculas, tá?) é um site para compartilhamento de código, anônimo ou não, público ou privado. Existem vários sites semelhantes ao codestacker, entretanto, quis fazer minha solução cobrindo minha abordagem para o problema e como posso solucioná-lo.

Tenho vários features que ainda não implementei, caí na real e lancei o básico do serviço. Existirão outros fins-de-semana para atualizações.

Então é isso, vejo todo mundo .