Rails Summit 2008 - 21/10/08

Nessa semana aconteceu o Rails Summit Latin America, evento organizado pelo Fabio Akita e o pessoal da Locaweb.

O evento foi sensacional. A organização estava impecável, ainda mais para uma primeira edição. O melhor evento voltado para programadores que eu participei. 

Estiveram presentes grandes nomes da comunidade internacional como Chad Fowler, Dr. NicChris Wanstrath, os caras da Phusion, Jay Fields, David Chelimsky, Obie Fernandez. O pessoal da comunidade brasileira também fizeram bonito: Fabio Akita, Carlos Brando, George Guimarães, Danilo Sato, Manoel Lemos e o pessoal da WebCo, Vinícius Telles, Fabio Kung, entre outros.

Com certeza, o mais interessante foi conhecer as pessoas por trás de URLs. Pessoas como: TaQ, Davis Cabral, Ozéias Santana, Spicee, Carlos Eduardo, Júlio Monteiro, Marcos Tapajós, e muitas outras pessoas. Rever todo o pessoal que eu já conhecia também foi muito legal.

Já estou no aguardo para o evento do ano que vem! :)

Acompanhe o relato de outros blogueiros sobre o evento.

Já tem algum tempo que eu venho usando o Phusion Passenger no ambiente de desenvolvimento.

Um dos problemas que eu tinha era quando precisava usar o ruby-debug. Cheguei até a perguntar no IRC, mas ninguém sabia me dar uma resposta de como usá-lo em conjunto com o Passenger. Na época, resolvi usar o Mongrel para fazer o debugging e nem me preocupei mais.

Hoje, precisei de novo. E não queria usar o Mongrel. Então, fui novamente atrás de uma solução. Vamos à ela:

No arquivo: config/environments/development.rb coloque o seguinte código:

# Load ruby-debug
require "ruby-debug"
Debugger.start_remote

Este código ativa o modo remoto do ruby-debug.

Agora, vamos reiniciar o passenger:

$ touch tmp/restart.txt

Agora, vamos conectar remotamente ao ruby-debug através do terminal:

$ rdebug -c
Connected.

Pronto! Sempre que quiser depurar algum erro em sua aplicação, coloque a palavra chave debugger e espere o rdebug. Só não se esqueça dos testes para não depender tanto de debugging. :)

O pessoal da Dreamhost anunciou hoje que todos clientes tem suporte para o mod_rails.

Resolvi migrar esse blog para o mod_rails, então, se alguma coisa de estranho aparecer por aqui, me avisem, pode ser isso. :)

Espero que o blog fique mais responsivo do que antes e não caia tanto também.

Boa sorte pro pessoal da Dreamhost e que eles possam resolver o ‘maior’ problema deles e de outros SharedHosts. :)

RejectConf’07 - 19/11/07

Neste final de semana aconteceu o RejectConf’07. Muitas palestras e cases de sucesso. Mas com certeza o melhor foi finalmente poder conhecer a galera da comunidade Ruby/Rails pessoalmente. Akita, Carlos Brando, Eduardo Fiorezi, o pessoal do Pagestackr, entre outros feras. Agora precisamos marcar um “Nerds On Beer” com essa galera para trocarmos mais idéias.

E que venha a RailsConf Brasil! ;)

Um plugin que eu costumava usar muito era o Sexy Migrations. Era, pois uma sintaxe inspirada nele foi adicionado ao Rails Edge.

Agora que estou usando o Edge em alguns projetos meus, sinto falta do foreign_key (ou simplesmente fkey) que usava no Sexy Migrations e não está presente no Edge. Por isso, criei um patch que adiciona o suporte à foreign_key na sintaxe das migrations.

Então, onde você escrevia (com o Edge):

create_table :user do |t|
    t.integer :country_id
    [....]
end

Poderá escrever assim:

create_table :user do |t|
    t.foreign_key :country
    [....]
end

É uma mudança sutil, porém, útil.

Para ele fazer parte do Rails 2.0 é preciso que pelo menos 3 pessoas testem-no e comentem com um simples +1, de acordo com as novas regras para que um patch seja aceito no Rails.

Se você gostou da idéia, dê uma passadinha lá no ticket, aplique o patch e vote. :)

Update: O Patch agora faz parte do Rails 2.0. Com algumas modificações e novas funcionalidades.

Para começar, “t.foreign_key” virou “t.references” com alias para “t.belongs_to”. E foi adicionado também uma opção “: polymorphic => true” que cria a coluna com _type no final.

Finalizando, se antes você escrevia assim (com o Rails Edge):

create_table :taggings do |t|
  t.integer :tag_id, :tagger_id, :taggable_id
  t.string  :tagger_type
  t.string  :taggable_type, :default => 'Photo'
end

Agora passa a escrever assim:

create_table :taggings do |t|
  t.references :tag
  t.references :tagger, :polymorphic => true
  t.references :taggable, :polymorphic => { :default => 'Photo' }
end

Edge Rails - 26/09/07

Você tem acompanhado as mudanças do Edge Rails, e quer testá-las naquele projeto que está começando?

Fácil, é só digitar no terminal:

rails myapp
cd myapp
rake rails:freeze:edge
# e se você for sortudo e tiver o textmate :)
mate myapp

Certo? Não, errado! Infelizmente, estes comandos não atualizam sua app para o Edge (é engraçado, mas estes comandos funcionam em algumas máquinas e na grande maioria não). Como saber se você está rodando o Edge? Verifique a pasta config, tem uma pasta initializers dentro dela? Se estiver rodando o edge tem que ter. Então, o que fazer para rodar o edge rails de verdade?

No Edge de verdade

Você precisa usar o comando rails de dentro do edge para gerar seu novo projeto.

cd ..
ruby myapp/vendor/rails/railties/bin/rails myapp_edgier
# e se você for sortudo e tiver o textmate :)
mate myapp_edgier

Agora verifique a pasta config. Hmm, legal! Aproveite e dê uma olhada na nova estrutura do environment.rb. Observe também que a pasta components não é mais criada.

Ok, agora você já está rodando um projeto no Edge, e resolveu criar mais um projeto. Vamos melhorar um pouco o processo. De volta ao terminal:

cd ~
svn co http://svn.rubyonrails.org/rails/trunk rails_edge
ruby ~/rails_edge/railties/bin/rails my_second_edgier_app
cd my_second_edgier_app/
# Você ainda precisa ter o edge rails dentro de sua aplicação
ln -s ~/rails_edge/ vendor/rails
# e se você for sortudo e tiver o textmate :)
mate .

Dessa maneira, você pode manter várias aplicações rodando o Edge, e atualizar o código em um local apenas. Quando você notar alguma mudança no Edge, rode:

cd ~/rails_edge
svn up

Um pouco de shell script

Vamos criar uma função em shell script para gerar novas aplicações já usando o Edge

mate ~/.bash_profile

Coloque a seguinte função no seu profile:

function edgie() {
  ruby ~/rails_edge/railties/bin/rails $1 && cd $1 && ln -s ~/rails/trunk vendor/rails && mate .
}

Atualizando nosso profile:

source ~/.bash_profile

Pronto! Agora você pode rodar:

edgie my_edge_app

Boa diversão com o Edge Rails! :)

Fonte: RailsTips: Even Edgier Than Edge Rails

O Carlos Brando levantou uma questão que, acredito eu, não deve ser do conhecimento de muitos: Quem disse que você podia usar o logotipo do Rails?.

Bom, há um tempo atrás eu me interessei em fazer camisetas com o logo do Rails. E, eu sabia sobre o copyright, então, entrei em contato com o DHH, pedindo autorização para uso do mesmo.

Segue meu e-mail:

Hi David!

I’m a Brazilian Rails developer.

Next month I’ll be teaching a RoR training in a local university, and I
want permission to make some RoR T-Shirts. Can I use the logo on those
t-shirts?

If yes, there’s a high-resolution available somewhere in the net?

Thanks in advance,

Arthur Zapparoli
http://www.arthurgeek.net

E a resposta do DHH:

As long as you don’t sell them, it’s ok.

http://wiki.rubyonrails.org/rails/pages/RubyOnRailsMedia

Como o próprio DHH comentou , casos como esse, não são exclusividade do Rails. Muitos projetos Open Source tem seu logo como marca registrada. O DHH menciona o MySQL, JBoss, e eu menciono um caso mais “famoso” como o do Firefox vs Debian que resultou no fork Iceweasel.

O comentário do DHH:

The use of the logo is restricted as it always is when talking about a trademark. When the logo is used in a commercial setting, such as part of the promotion of a book, it legally requires that the trademark holder has been involved and stands behind the quality of the book. If that’s not the case, you’re on the way to lose your trademark.

So I only grant promotional use for products I’m directly involved with. Such as books that I’ve been part of the development process for or conferences where I have a say in the execution.

I simply don’t have the time (or, frankly, the inclination) to be intimately involved with every book being written about Rails.

Isso faz do DHH um “bad guy”? Eu não acho! Pode ser ruim para a divulgação de livros sobre Rails? Pode até ser que sim, mas preste atenção nos livros da O’Reilly, a maioria não usam o logo na capa.

O DHH tem que se preocupar com toda a qualidade de qualquer material que use o nome e o logo do Rails. E isso, não é bom somente para o DHH, e sim, para toda a comunidade.

O Carlos menciona o fato de ter sempre que pedir permissão à uma pessoa apenas. Sobre isso, eu acho, que poderia ser criado uma “Rails Foundation” que passaria a ter o copyright sobre o logo, e os nomes. E os membros dessa fundação analisariam dar permissão sobre o uso do logo. Acho que seria uma boa solução, adotada em alguns projetos como o Mozilla e o Gentoo.

Ah, e sobre as camisetas: o curso acabou não dando certo (não fechamos uma turma com o mínimo de alunos necessários), então, não fiz a camiseta. Ainda. Mas, eu ainda estou interessado. :)

Em alguns projetos, é necessário utilizar os nomes de meses, ou dias da semana em português. Eu sempre usei o método de sobrescrever as constantes que o Ruby usa, colocando o seguinte código no config/environment.rb:

silence_warnings do
  Date::MONTHNAMES = [nil] + %w(Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro)
  Date::DAYNAMES = %w(Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado)
  Date::ABBR_MONTHNAMES = [nil] + %w(Jan Fev Mar Abr Mai Jun Jul Aug Set Out Nov Dez)
  Date::ABBR_DAYNAMES = %w(Dom Seg Ter Qua Qui Sex Sab)
 
  Time::MONTHNAMES = Date::MONTHNAMES
  Time::DAYNAMES = Date::DAYNAMES
  Time::ABBR_MONTHNAMES = Date::ABBR_MONTHNAMES
  Time::ABBR_DAYNAMES = Date::ABBR_DAYNAMES
end

Acontece, que quando usamos a função strftime, estes nomes não são traduzidos. Eles funcionam apenas nos helpers date_select, entro outros. Em um projeto meu, eu precisava usar estes nomes traduzidos, justamente com a função strftime, então, cheguei à este código:

class Time
  alias :strftime_nolocale :strftime
 
  def strftime(format)
    format = format.dup
    format.gsub!(/%a/, Date::ABBR_DAYNAMES[self.wday])
    format.gsub!(/%A/, Date::DAYNAMES[self.wday])
    format.gsub!(/%b/, Date::ABBR_MONTHNAMES[self.mon])
    format.gsub!(/%B/, Date::MONTHNAMES[self.mon])
    self.strftime_nolocale(format)
  end
end

E funcionou!

Fica aqui a dica então, para quem estiver com este mesmo problema.

Uma das coisas que eu mais gosto no Rails, é o rewriting das URLs, nada de ficar usando: dispatch.cgi?controller=people&action=edit&id=1, é simplesmente: /people/edit/1. É algo simples, é algo besta, mas vamos concordar, é muito mais fácil de lembrar e muito mais bonito. não? Porém, com o Rails 1.2 e o suporte à REST eu reclamo toda vez que olho para URLs assim:

/people/1;edit
/orders;recent

Que coisa feia esse ”;”!

Ainda bem que o Rails 2.0 voltará a usar a boa, velha e bonita ”/”! :)

Acompanhe como usar este recurso nos seus projetos sem precisar esperar pelo Rails 2.0!

Continue lendo…

Test Helpers - 04/06/07

Desde que entrei no mundo do Test-Driven-Development, venho colecionando alguns helpers, específicos para testes. Estes helpers me ajudam a não-ficar-se-repetindo (DRY ).

Acompanhe a lista de helpers que eu passei a utilizar.

Continue lendo…

 Página 1 de 2  1  2 »