Varal de Bits pegando um solzinho para aclarar as idéias…

3jan/090

Celta ou Uno? .erb ou .haml?

Dúvidas cruéis ou simplesmente gosto?

Bom como eu falei finalmente consegui tempo para fazer um teste de performance para tentar descobrir o que é melhor. Usar haml ou as bibliotecas do RoR para gerar html.

Fiz um teste bem básico de renderização para sanar minha grande curiosidade. Fiz uma busca de 70456 usuários e depois um loop básico.

RoR:

<ol>
<% @users.each do |user| %>
<li>
<%= link_to "#{user.first_name} #{user.last_name}", user %><br/>
<%= mail_to user.email, user.email %>
</li>
<% end %>
</ol>

#HAML

%ol
- @users.each do |user|
%li
%a{:href => "/users/#{user.id}"}= "#{user.first_name} #{user.last_name}"
%br
%a{:href => "mailto:#{user.email}"}= user.email

Fiquei surpreso com o resultado. Ao utilizar o #haml minha página renderizou em 34.34400 (12%) e para a minha surpresa sem o #haml em 31.95400 (11%). Uma diferença de pouco mais de 2sec. Para um loop simples e pouco conteúdo para renderizar é uma diferença muito grande. Se você pensar em uma página com bastante códigos #haml essa diferença pode aumentar considerávelmente.

Estes testes foram feitos na "janela", nem sempra esse janela está limpa com vidrex, por isso quero ainda fazer em um pc linux.

Bom é isso ai. Fica a seu critério. Visualmente o #haml é bem melhor, validação W3C também, porém para performance fica minhas dúvidas.

Sobre o Celta e o Uno. Fico com o Celta.

16dez/080

Isso leva o #haml ser ruim?

Bom estou aqui novamente falando do #haml. Exatamente agora acabei de converter um projeto todo para #haml encontrei alguns obstáculos na utilização do haml. Ainda não fiz o teste de performance, mas assim que terminar esse artigo farei alguns testes para possívelmente aplicar o #haml em um projeto que estamos trabalhando. Assim que tiver resultado post aqui para vocês.

Bom voltando aos obstáculos. Na verdade não sei se posso chamar de obstáculos, mas sim de qualidade de código. Uma das coisas que mais me chamou atenção no #haml foi a questão de economia de linhas como falei no artigo anterior. Porém em alguns pontos gastei mais linhas do que economizei.

Para gerar um menu assim:

ver álbum | adicionar mais fotos | editar álbum | excluir álbum

Você pode fazer assim:
<%= link_to 'ver álbum', 'url' %> |
<%= link_to 'adicionar mais fotos', 'url' %> |
<%= link_to 'editar álbum', 'url' %> |
<%= link_to 'excluir álbum', 'url' %>

Agora em #haml:
a%{:href => url} ver álbum
|
a%{:href => url} adicionar mais fotos
|
a%{:href => url} editar álbum
|
a%{:href => url} excluir álbum

Quase dobramos o número de linhas, de 4 para 7 linhas. Esse é um exemplo que você irá ter mais linhas do que se não usasse o #haml, com certeza irá bater com outros detalhes. Porém até agora ainda não considero o #haml ruim, olhando a documentação encontrei muitas coisas que não tinha reparado antes. Mas por hoje é só.

Vou aproveitar para dar um dica.
Quanto você for fazer um form em sua aplicação e utilizar a função "form_for" e derivados não coloque "=" e sim "-" pois senão seu "form" será duplicado.

12dez/087

#haml – Soluções em HTML?

Recentemente meu irmão Ronaldo Ferraz, apresentou uma coisinha chamada HAML a mim, comecei a "brincar" com ela no mesmo instante e comecei a achar esse bichinho interresante. O que ele exatamente faz pra você, resumidamente.

Ele ajuda a você a criar html. Você não precisa preocupar mais com identação, abrir e fechar tag, onde abre e onde fecha tag html e o melhor economiza código.

Estou aplicando esse bichinho em um site pessoal que estou desenvolvendo. Tive já alguns resultados gratificantes. A página que renderiza o layout tem 172 linhas, após converter para haml, terminei com 42 linhas e com o código perfeitamente identado e limpo.

Até este momento estava muito empolgado, mas estou começando a encontrar alguns obstáculos. Não grandes o suficiente para parar ou descatar o haml, mas que ainda não encontrei soluções.

Por exemplo:

<!--[if IE 7]>
<%= stylesheet_link_tag "ie7" %>
<![endif]-->

<!--[if lte IE 6]>
<%= stylesheet_link_tag "ie6" %>
<![endif]-->

Isso eu ainda não consegui aplicar ao haml, o que faço é criar um partial em htm.erb.
O que ainda não tive tempo de testar é performace, mas assim que der estarei aplicando a postando aqui.

Pessoal se vocês tiverem dicas e sugestões posta ai para a gente.

13mar/084

Tô precisando pegar um solzinho…

Preciso rever meus conceitos. Outro dia estava eu explicando a uma amiga que está fazendo ciência da computação com funciona a Web, o que é um framework, e não existe algo melhor para fazer uma média do que o RubyOnRails. Só tinha um pequeno detalhe que eu não levei em conta: eu aprendi na versão 0.9.3 e fui até 1.1.6; depois disso fui dar um rolé em outras linguagens e acabei ficando por lá.

O que eu não contava é que nosso amiguinho o Rails já estão na versão 2.0 e eu tinha dado uma atualizada na minha maquina. Então lá vou eu nos conceitos de 1.1.6 mexer em 2.0. A nossa conversa ficou mais ou menos assim:

Renato: Então você da este comando "rails myproject" e ele cria um conjunto de diretórios para você....
Amiga: Ohhhh!
Renato: Depois você da outro comando para iniciar o servidor...
Amiga: Ohhhhhhh!
Renato: Você cria o banco e dá outro comando para gerar o controller, model e view....
Amiga: Legal!
Renato: Ai você tem um sisteminha que já insere, edita...
Amiga: Ohhh! Legal...
Renato: Você pode mudar os nomes do campo é só vir aqui no form.html... é... é... uai deveria esta aqui... acho que deu um problema. QUÊ! Que isso "index.html.erb"?
Amiga: Hã?
Renato: Tá, esquece isso. Vamos no controller.
Amiga: Que que é controller mesmo?
Renato: Ai meu Deus. Que isso? respond_to do |format|... nossa mudou muita coisa.
Amiga: Hã... sei!
Renato: Então, acho que nosso tempo acabou... sábado que vem conversamos mais.
Amiga: Beleza... Tchau.
Renato: Tchau.
Renato: AMOR! Cadê meu celuar preciso ligar para o Ronaldo!

É preciso pegar um solzinho mesmo.

12mar/083

MinasOnRails

Ano passado organizamos um evento aqui em Minas sobre RubyOnRails, e falamos de vários assuntos.

Ruby: Passado, Presente e Futuro.
DSL: Criando linguagens para suas aplicações.
Test-Driven Development com Rails

dentre outros... mas o que mais me chamou a atenção foi a palestra de CakePHP. Por isso postei aqui o video.