Mostrando postagens com marcador ruby. Mostrar todas as postagens
Mostrando postagens com marcador ruby. Mostrar todas as postagens

24.3.07

Plugins on Rails

Uma das features mais interessantes do Rails é o mecanismo de Plugins. Até bem pouco tempo, escrever extensões para RoR era uma tarefa confusa, já que o framework suportava plugins, engines e components.
Agora decidiram entender que nem toda flexibilidade é benéfica e unificaram a coisa toda ao redor dos plugins. No Wiki do Rails já existe bastante material sobre como utilizar os milhões de plugins já existentes. Em alguns casos, dá para desenvolver aplicações inteiras apenas juntando plugins e aparando as pontas...
Agora, se o seu negócio é mesmo desenvolver o seu próprio plugin, recomendo começar por aqui. Ao contrário da maioria das coisas no universo Ruby, o processo de desenvolvimento de plugins está bem documentado e cheio de exemplos.

14.3.07

Ruby para Javeiros: classForName()

Um dos recursos mais utilizados do pacote de reflection do Java, o classForName permite instanciar uma classe sabendo apenas o seu nome. Praticamente todo programador Java já utilizou este método - mesmo que sem perceber, para localizar drivers JDBC.
No Ruby, classes são símbolos - e a sua carga dinâmica pode ser feita da mesma forma que qualquer outro símbolo: utilizando-se o método const_get(), definido na classe Module.
O fato de basicamente tudo no Ruby "extender" Module de uma forma ou de outra faz com que o const_get() possa ser usado de maneiras bem feias: trata-se basicamente de um método estático de qualquer classe!
Um exemplo básico de como inicializar uma classe a partir de seu nome:

class Bla
def initialize
puts "tada!"
end
end

instancia = Module.const_get("Bla")
puts instancia.class => "Bla"


ou então, quem sabe, de um jeio mais elegante:

instancia = Kernel.const_get(:Bla)

Bonito. Mas ei, e se meu objetivo for escrever código ilegível???

instancia = "yadayada".class.const_get "Bla"

ah... Muito melhor agora. As vezes essa flexibilidade toda do Ruby cai como uma bela feijoada antes de dormir...

13.3.07

Ruby 1.8.6!

Recém saído do forno! A lista completa de novidades do novo release você encontra aqui e aqui. Basicamente algumas melhorias (a mais relevante parece ser no gerenciamento de threads) e muitos, MUITOS bugfixes!

11.3.07

Problema rúbico do dia: formatando números

A primeira impressão de quase todo mundo para quem tenho mostrado o Ruby é a mesma: "puxa, como é fácil!", "nossa, como é conciso", "só isso de código?". Só flores, até que surge aquele probleminha bobo que se está acostumado a resolver em outra linguagem, e pronto. Uma das principais falhas da linguagem (sua falta de documentação organizada) salta aos olhos.
O problema do dia é: como formatar um número?
O desenvolvedor Java médio está familiarizado com os NumberFormatters da vida, e vai certamente procurar por algum mecanismo similar no Ruby. Em vão. O negócio, neste caso, funciona como no C: a formatação tem que ser feita em uma representação String do número, ou nada feito:

meu_numero = 1.234465
puts meu_numero # vai sempre imprimir o número sem formatação
puts "%.2f" % meu_numero # => 1.23

Em tempo: a lib facets inclui uma maneira elegante de formatar números:

meu_numero = 1.234465
puts meu_numero.round_at(2) # => 1.23

Muito mais limpo. Aliás, o Facets inclui maneiras elegantes de resolver muitos outros pequenos problemas, para quem não tiver problemas em depender de libs "não core"...

10.3.07

Dojo Toolkit

Uma biblioteca de Javascript com muita coisa similar ao Scriptaculous - e algo a mais.
Pra os programadores RoR, já existe também um plugin para integrar o Dojo com Rails de forma transparente, do mesmo jeito que funciona a integração scriptaculous/rails na ditribuição padrão. O componente de edição de texto (com suporte a formatação, como o editor do próprio blogger.com) é um dos mais interessantes.

8.3.07

Ferret

Na verdade um port para código nativo da ferramenta Apache Lucene, o Ferret é uma engine de texto ("full text search") rápida e com suporte a uma sintaxe bastante rica de indexação e busca. O suporte a Rails (através do plugin acts_as_ferret) é tão simples que dá até medo: vamos supor um sistema hipotético de (surpresa!) blogging. Depois de longos 5 minutos de desenvolvimento, eu já tenho meu modelo de Post:

class Post < ActiveRecords::Base
attr_accessor :text, :user, :title, :creation_date
end

Para utilizar o Ferret, é preciso primeiramente instalar o gem da engine:

gem install ferret

Após concluído o processo de instalação, precisamos também do plugin, em nosso projeto:

ruby script/plugin install svn://projects.jkraemer.net/acts_as_ferret/tags/stable/acts_as_ferret

Muito bom, muito bonito. Agora vamos à difícil tarefa de implementar o suporte a busca full text nos meus posts. Que rufem os tambores...

class Post < ActiveRecords::Base
acts_as_ferret
attr_accessor :text, :user, :title, :creation_date
end

E-pronto. Sempre que precisar fazer uma busca utilizando texto em qualquer dos campos do Post, basta utilizar-se o método find_by_contents(), definido pelo acts_as_ferret:

def buscar_comida
comida = Post.find_by_contents("torta OR bolo OR bigmac OR pizza")
end

A sintaxe utilizada para as buscas é a mesma do Lucene, que permite utilizar agrupamentos lógicos de palavras, busca por proximidade, similaridade...

Tão fácil que deu até medo.

6.3.07

JRuby 0.9.8

Saiu! A nova versão do JRuby suporta Rails, ja cobre com sucesso 98% dos test cases da linguagem original e solucionou diversos problemas de performance da versão anterior. E a versão 1.0 já está a caminho...

3.3.07

NetBeans + Ruby

Talvez não seja uma notícia muito nova, mas o NetBeans agora suporta Ruby - com direito a code completion e tudo mais!
A novidade apareceu discretamente, um tempo depois da Sun ter contratado os desenvolvedores do JRuby.
A partir da versão 6.0, a IDE suporta (ainda um tanto "extra-oficial") o Ruby. E (e em breve a PHP, Javascript e Python)
O download do NetBeans pode ser feito aqui.

Rake for N00bs

Rake é a "linguagem de build" utilizada pelo Ruby on Rails. Trata-se de uma Domain Specific Language desenvolvida em Ruby - mais ou menos como o famoso Ant (só que sem toda a complexidade desnecessária do XML). Este artigo do Martin Fowler trás uma visão geral do Rake e suas aplicações. E para quem trabalha com Rails, uma relação das tasks incluidas no RoR.

1.3.07

Rails Handbook

Uma coletânea de referências, cheat sheets, screencasts e tutoriais sobre o Rails. Bookmark obrigatório!

26.2.07

Diários de um Captcha!

Recentemente tive o prazer de descobrir que meu sitezinho cresceu, e já é até alvo de ferramentas de spam automatizado! Quanta honra...
Ok, passado o orgulho inicial, vamos ao problema. A solução mais simples (e atualmente mais comum, Internet afora) para combater os spammers é conhecida por CAPTCHA. Em resumo, são aquelas imagens com texto distorcido, as vezes ilegíveis até mesmo por seres humanos convencionais.
Como qualquer solução no mundo Ruby, existe pelo menos uma dezena de bibliotecas de Captcha diferentes. Após testar um punhado, decidi por utilizar o plugin simple_captcha, por ser um dos mais simples de configurar e com menos dependências (somente o RMagick, veja você!). Este post mostra direitinho os passos para instalação e configuração do plugin.
Em 2 minutos estava com o plugin no ar, gerando texto distorcido para validar os posts de meus usuários. Tudo bom, tudo bonito.

Bug da Hora: unable to read font '(null)'
Como nada costuma funcionar logo de cara, o plugin resolveu entrar em greve quando fiz o deployment no servidor de produção (um box Linux):

ActionView::TemplateError (unable to read font `(null)') on line #49 of app/views/xxx/_xxxxx.rhtml:
46: <% end %>
47: <% if @map.captchaValidate %>
48:
49: <%= show_simple_captcha %>
50:
51: <% end %>

Não se trata de um problema com o simple_captcha, mas sim com o RMagick. Phew. Mais um dragão para derrubar...

25.2.07

Mephisto e o mistério do cache

Então você começou a brincar de Rails, precisava botar um Blog no ar por algum motivo e resolveu testar o Mephisto. A instalação veio fácil, o blog entrou no ar em minutos...
...e 5 dias depois, ninguém comentou no seu blog ainda - se muito, aparecia um comentário eventual por post - mesmo aquele post polêmico, xingando a mãe dos desenvolvedores Java.
Se você utiliza Apache + cgi/fcgi, é bem provável que seja um problema de configuração do Apache...

21.11.05

On Rails!

Pra quem ainda não conhece Ruby (e seu "filho" mais famoso, o framework Ruby on Rails), talvez seja hora de dar uma olhada. O videozinho introdutório do Ruby on Rails é impressionante (salvas as medidas proporções de hype, show business e exibicionismo explícito)...

12.8.05

Ruby + Eclipse

Pra quem anda se aventurando no Ruby on Rails e não é habituado com Ruby, existe um plugin interessante para a IDE Eclipse: o RDT faz syntax highlighting, code completion, teste de expressões regulares... Nice!

27.6.05

Ruby on Rails !

Ruby é uma "linguagem dinâmica" orientada a objetos com forte influência de Python e Smalltalk. Apesar de relativamente pouco conhecida, conseguiu fãs com um certo nome na indústria de IT, como os Pragmatic Programmers Andy Hunt e Dave Thomas. É geralmente considerada limpa, expressiva e elegante.

Mas se tem uma coisa que dá para aprender estudando a história das linguagens de programação é que a popularidade delas tem muito pouco a ver com suas qualidades intrínsecas, e muito mais com o seu uso em alguma aplicação que ela torna muito mais simples de usar que as outras.

Agora Ruby já tem sua killer application, e ela se chama Ruby on Rails: um sistema completo para criação de aplicações web que vem ganhando adeptos rapidamente, a maioria dos quais sequer tinha ouvido falar da linguagem antes. Enquanto isso, a comunidade Perl se digladia em torno da versão 6 da linguagem e os pythonistas se mordem de inveja por causa do Rails (não, Zope não conta). Talvez o balanço de poder dessas linguagens se altere significantemente no futuro próximo e, se isso acontecer, o rubi nos trilhos deve ter sido o responsável.