Canon in D, Pachelbel

October 30th, 2008

Para quem já jogou Kung Fu Kim e não sabia o nome da música da última “fase”… :-)

Um amigo meu me disse o nome hoje. Agora já posso continuar com minha vida.

Ah, sim. O jogo é esse: http://www.yukyuk.com/games_downloads/games_kfk.shtml

permalink_fu e RESTful

September 16th, 2008

Querendo fazer funcionar o permalink_fu, acabei topando com esse post: http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu

Basicamente, ele diz que eu preciso adicionar, no meu modelo o seguinte:

  1. class Post < ActiveRecord::Base
  2.   has_permalink :title
  3.  
  4.   def to_param
  5.     permalink
  6.   end
  7. end

Em minhas rotas:

  1. map.connect ‘article/:permalink’, :controller => ‘article’, :action => ‘view’

E em minhas views:

  1. link_to "View #{article.title}", {:controller => ‘designer’, :action => ‘view’, :permalink => article.permalink}

O problema é: o código que eu tenho que colocar nas minhas rotas e nas minhas views não usa aquela praticidade do link_to “Text”, my_url_path(@stuff).

A solução que eu estou usando, agora, é deixando minhas rotas na maneira padrão do Rails 2.x e nas minhas views usando um simples: link_to “Text”, post_url(@post.permalink).

Limpo. :-)

Navigation Bar no Rails

August 15th, 2008

Esses dias eu achei um template pronto na internet (modestamente, sou um péssimo designer) que vinha com uma navbar. Achei bacana e comecei a pensar num jeito Rails de fazer algo bonitinho: ao clicar num item da navbar, esse item fica selecionado.

A primeira coisa que eu pensei, foi em algo como:

minha.url/do/site?current=ATUAL

Tendo, digamos, algo como HomeController, PostController e CommentController, ATUAL podia variar entre Home, Post e Comment. Uma solução, relativamente, clean. Então voltei à Ruby on Rails: Talk e fiz a pergunta: qual a melhor forma de abordar esse problema?

O resultado foi essa discussão: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/0c0378e25f2d9343

O código que comentei na discussão é o que segue:

app/helpers/home_helper.rb

  1. module HomeHelper
  2.   def build_navbar(items)
  3.     # If I reached the site right now, params[:current]
  4.     # is null.
  5.     params[:current] = "home" if params[:current].nil?
  6.  
  7.     menu=""
  8.  
  9.     items.each do |item|
  10.       menu += content_tag :li, :class => is_current?(item) do
  11.         link_to item, send( "#{item}_url", { :current => item } )
  12.       end
  13.     end
  14.  
  15.     return menu
  16.   end
  17.  
  18.   # Methods ending by ‘?’ returns either "true" or "false"
  19.   # But using it here in "other" context increases
  20.   # readbility.
  21.   def is_current?(item)
  22.     (item == params[:current]) ? "current" : nil
  23.   end
  24. end

#app/views/layouts/post.html.erb

  1. [...]
  2. <div  id="nav">
  3. <ul>
  4. <%= build_navbar %w(home posts articles photos) %>
  5. </ul>
  6. </div>
  7. [...]

É um código bonitinho, até… Mas eu podia ter usado um params[:current] ||= “home”. :-P

Mas esse código não funciona perfeitamente. Se eu entrar no site via minha.url/do/site/posts, por exemplo, params[:current] não está setada e será setada para “home”, apesar de eu não estar em HomeController. :-)

Então eu comecei a pensar: o que eu posso fazer pra deixar esse código melhor e funcionando sempre? Eu tenho MESMO que usar algo feio como “?current=[home|post|whatever]“? O Rails não tem nada que facilite isso também?

Comecei a procurar no Google por isso. Não lembro as keywords, mas deve ter sido algo como “current controller name rails”, eu descobri um tal de controller.controller_name. E funciona muito bem. :-)

O resultado?

  1. module HomeHelper
  2.   # Build an navbar with items from the givem
  3.   # array. Current nav item would get an
  4.   # "current" CSS’ class.
  5.   def build_navbar(items)
  6.     menu=""
  7.  
  8.     items.each do |item|
  9.       menu += content_tag :li, :class => is_current?(item) do
  10.         link_to item, send( "#{item}_url" )
  11.       end
  12.     end
  13.  
  14.     return menu
  15.   end
  16.  
  17.   # Methods ending by ‘?’ returns either "true" or "false"
  18.   # But using it here in "other" context increases
  19.   # readbility.
  20.   def is_current?(item)
  21.     (item == controller.controller_name) ? "current" : nil
  22.   end
  23. end

MUITO melhor. :-)

Rails não escala

August 8th, 2008

Ainda sobre o mi-mi-mi sobre “Rails não escala” por causa do que aconteceu com o Twitter.

Apenas assista esse vídeo.

http://www.techcrunch.com/2008/08/08/the-rise-and-fall-of-twitter/

C’est la vie

July 28th, 2008

Pessoa 1: Por favor, eu posso falar com a Pessoa 2?
Pessoa 2: É ela mesma. Pois não?
Pessoa 1: Bom. O Fulano me passou seu telefone e me disse com o que você trabalha. Você trabalha como? Por serviço ou por hora?
Pessoa 2: É por hora.
Pessoa 1: E quanto é por hora?
Pessoa 2: É R$ 45,00.
Pessoa 1: E você atende no local?
Pessoa 2: Sim. Mas aí custa mais R$ 45,00. A primeira hora, portanto, fica em R$ 90,00.

Minha conversa ao telefone com uma cliente, ontem a noite.

E ainda me perguntam por que motivo eu quero parar de trabalhar com informática…

UPDATE:

[07/28/08 15:53:06 ] garota : kkkkkkkkkkkkkkkkkkkkkkkkkkkk
[07/28/08 15:53:14 ] garota : aquele diálogo é sério?
[07/28/08 15:53:17 ] garota : haha
[07/28/08 15:53:53 ] davi : sim

Esse novo diálogo fala por si só.

Documentação do Rails

June 19th, 2008

Enfim o que eu precisava para começar, definitivamente, a programar em Ruby On Rails: http://rails-doc.org

Claro que se surgir uma ferramenta parecida para Ruby, as coisas ficam perfeitas. Mas enquanto isso não acontece, vou de irb e vou programando como programo em PHP/C/Perl… :-)

Parabéns aos idealizadores!

Ruby Enterprise Edition

June 13th, 2008

Hoje tomei vergonha na cara e instalei o Ruby Enterprise Edition (podia abreviar para Ruby EE, mas falar o nome inteiro dá um ar de importância a este post) no meu Gentoo.

Então ok. Instalei o mod_rails e comecei a brincar. É um negócio interessante e promissor. Então resolvi instalar o Ruby Enterprise Edition para ver se a história dos 33% é verdade mesmo ou se é só história e me deparei com esse erro:

/opt/ruby-enterprise-1.8.6-20080507/bin/ruby: no such file to load -- auto_gem (LoadError)

Gem faltando? OK. Basta abrir o código e descobrir qual é a Gem, certo? Não. O código é bem enxuto e não parecia ter nada faltando. E eu estava sem paciência de ler (:-) ). Então basta recorrer ao Google.

Caí nesse site: http://fatpenguinblog.com/scott-rippee/usrbinruby-no-such-file-to-load-auto_gem-loaderror/

E adaptei minha linha de comando:

RUBYOPT="" ./ruby-enterprise-1.8.6-20080507/installer

Agora vou lá conferir a história dos 33%… :-)

http://www.rubyenterpriseedition.com/comparisons.html

P.S.: Sim. Eu sei que a história dos 33% é apenas para efeitos de comparação e cada caso é um caso. E eu sei também que Rails não escala… :-)

Enquanto isso, na svn-pt_br…

March 19th, 2008

Retirei os cabeçalhos da mensagem.

Cavalheiro no tronco?

Piadinha

March 19th, 2008

http://xkcd.com/123/

É uma piadinha nerd, eu sei. Mas é o tipo de coisa que me faz rir… :-)

resource_controller x redirect_to

March 17th, 2008

Continuando minha eterna aventura com Ruby on Rails ontem, me deparei querendo usar o método redirect_to junto com o plugin resource_controller, do James Golick.

Bem, o que poderia dar errado? Aparentemente nada. Mas eis que surge um erro:

undefined method `redirect_to' for #<resourcecontroller::failableactionoptions:0x4b05b90>

“Sem problemas”, eu pensei. O que, provavelmente, estava acontecendo, era que o meu controller, de alguma forma, estava herdando apenas de ResourceController::Base e esqueceu do ActionController::Base. Logo, tudo o que eu tenho que fazer, é arrumar a herança e continuar usando o plugin. Certo? É… Digamos que sim…

De acordo com a documentação do plugin, bastava chamar o método resource_controller que ele se encarregaria de todo o trabalho sujo por mim. OK. Vamos lá:

  1. class CommentsController < ApplicationController
  2.   resource_controller
  3.  
  4.   belongs_to :post, :article, :photo
  5.  
  6.   create do
  7.     redirect_to :back
  8.   end
  9. end

Não tem como dar erro, né? Eu também achei…

undefined method `redirect_to' for ActionController::Base:Class

Perguntando na rubyonrails-talk, eu não consegui muita coisa. Por isso, fui além da terceira página do Google e encontrei a seguinte discussão:

http://groups.google.com/group/resource_controller/browse_thread/thread/b4657a4109d6eccd

Agora foi só mudar meu código:

  1. class CommentsController < ApplicationController
  2.   resource_controller
  3.  
  4.   belongs_to :post, :article, :photo
  5.  
  6.   create do
  7.     wants.html { redirect_to :back }
  8.   end
  9. end

E tudo funcionou perfeitamente.
O que mais me causou estranhamento, foi o fato de que a documentação não cita (pelo menos, não claramente para mim) esse porém, e não há (até onde procurei) nenhuma documentação online.

E, infelizmente, eu não posso fazer nada enquanto não dominar o plugin… :-(