/ 27.Mar.2008 at 02:43am
De vez em quando nos deparamos com o cenário onde precisamos gerar um ID único não-sequencial (auto increment do banco de dados não serve). Pode ser para várias coisas, por exemplo, um link que você quer enviar por e-mail ao seu usuário que, quando ele clickar, vai levar diretamente a uma página customizada para mudar de senha sem que ele precise logar antes. Ou algo assim.
Uma das diversas maneiras é usar um gerador de UUIDs ou “Universally Unique Identifier”, um número de 128-bits representado como uma string de 36 caracteres. Existem algumas bibliotecas para isso em Ruby, uma delas é o uuidtools, que você instala simplesmente assim:
sudo gem install uuidtools
Ele funciona muito bem, mas há alguns ‘poréns’, principalmente se estiver usando Windows. Veja aqui por que.
/ 25.Mar.2008 at 05:58pm
Semana passada fui apresentar os recursos de consumo de APIs REST usando ActiveResource como client.
Em resumo, é uma ótima biblioteca, mas não é perfeita ainda, ela deve melhorar nas próximas versões. E por outro lado, a maioria das APIs ditas ‘REST’ não são REST de verdade. Flickr e Youtube são dois exemplos. Veja este link para aprender a conversar com o Twitter. Este outro link para aprender como estender o ActiveResource para APIs não-REST e este link para entender como consumir o YouTube.
Mas além disso encontrei uma pequena surpresa: o ActiveResource tem uma documentação afirmando ter suporte a validações porém ele não as implementa! Então resolvi ver o que seria necessário para isso.
/ 25.Mar.2008 at 01:18pm
Essa semana muita gente instalou o novo Safari 3.1, tanto para Mac quanto para Windows. Um excelente browser, diga-se de passagem. Só abro o Firefox agora quando sou forçado a usar Firebug, senão eu prefiro não tê-lo aberto.
Enfim, depois da atualização um projeto que estou trabalhando começou a dar problemas. O problema foi com o Active Scaffold. Erros de Javascript começaram a aparecer. Esse erro foi reportado no activescaffold-talk
Em seguida, no caboose saiu uma informação sobre um método javascript chamado getElementsByClassName que existe no Prototype mas agora existe implementado nativamente tanto no Safari 3.1 quanto no Firefox 3. Ou seja, eles conflitam e a versão nativa em vez de devolver um Array devolve um NodeList.
Para solucionar isso, no caso do ActiveScaffold, precisei editar o arquivo active_scaffold.js (o plugin copia para public/javascripts), perto da linha 266 troquei esta linha:
1 2 |
this.adapter.getElementsByClassName('cancel').each(function(elem) {
|
Por esta:
1 2 |
this.adapter.select('.cancel').each(function(elem) {
|
Isso resolveu meu problema. Dêem uma olhada no link acima para o site do caboose para mais detalhes.
/ 15.Jan.2008 at 05:50pm
Update 18/01: Caramba, a DHL foi bem rápida. Menos de uma semana. A globalização é sensacional :-) Agora só preciso arranjar tempo pra devorar tudo isso …

Falta apenas meia-hora para começar o esperadíssimo keynote do Steve Jobs, no Moscone Center. Não se falou de outra coisa. “Something is in the Air …”
Espero, espero que eles finalmente lancem o famoso sub-notebook, menor e mais leve que meu atual Macbook, com pelo menos as mesmas especificações técnicas dos Macbooks atuais (C2D 2.2Ghz, até 2Gb de RAM, pelo menos 120Gb de HD solid-state). E se vier realmente uma versão 100% wireless (com recarga de energia por indução magnética) aí já é meu!! :-)
No espírito Macworld resolvi fazer umas compras, mas de livros. Alguns tinha PDF – que eu prefiro – alguns tive que comprar impresso. Segue abaixo minha lista de recomendações do dia:
/ 05.Jan.2008 at 12:48pm
Já está circulando na internet – principalmente por causa do Zed Effect – a possível nova infraestrutura que poderá substituir o Mongrel. É o Thin baseado no mesmo excelente parser do Mongrel (ignorem os palavrões, Zed desenvolveu de longe uma das melhores bibliotecas do mundo Ruby), a camada de I/O Event Machine e o Rack.
sudo gem install thin
Acabei de testar em uma aplicação complexa em Rails que tenho e – surpresa – funcionou sem nenhum problema. Mas o autor do artigo acima deixa bem claro: isso ainda é alpha você definitivamente não deve colocar isso em produção ainda a menos que goste de viver perigosamente.
thin start
Apenas isso é suficiente para iniciar o Thin a partir da raíz do seu aplicativo Rails. E funciona. Para testar é uma boa. Se você tem tempo para fazer profiling, rodar suites de testes de segurança, etc é uma boa hora para colaborar.

Notem como a performance escala de maneira estável quando se aumenta a carga, o que não acontece com o Mongrel atual.
E parece que depois do Linus Torvalds ter chamado todos nós de idiotas por usar Subversion, muitas pessoas prestaram atenção e começaram a usar Git como eu já falei ano passado. O projeto Rubinius é todo dentro de Git e o Thin também.
Para fazer o checkout do Thin – tendo o Git instalado como explica neste artigo – basta fazer o seguinte:
git clone http://code.macournoyer.com/git/thin.git
Eu venho usando Git há algum tempo também, para desenvolver meu plugin Acts As Replica (ainda é bastante ‘alpha’ também, ganhando novas features o tempo todo e implorando por uma refatoração e uma suite de testes mais completa). O que mais gosto no Git é o git-svn, que permite que meu código fique todo no Subversion do Google mas eu possa desenvolver internamente num repositório Git. A integração é perfeita e ainda não tive problemas com isso. Uma boa alternativa para transitar entre svn e git. E para quem usa Piston, já existe também o Giston.
2008, começando um ano novo com coisas novas a aprender.
/ 22.Dec.2007 at 02:50pm
Resolvi criar essa nova categoria tidbits para que eu possa simplesmente escrever sobre diversos assuntos sem que eles tenham necessariamente uma relação entre si. Hoje quero falar sobre 37signals, iPhones e Erlang.
Para começar, ontem a 37signals divulgou alguns números internos sobre suas aplicações online que devem ajudar a demonstrar que tipo de exercício Rails suporta dentro da empresa dos seus criadores.
Basecamp (Gerenciador de Projetos)
/ 21.Dec.2007 at 04:05pm
Eu acabei de falar sobre SimpleDB e bancos de dados não-relacionais. Este é um mundo estranho mas cheio de grandes possibilidades. Infelizmente a maioria dos programadores já cresceu num mundo dominado pelos RDBMS, as commodities da tecnologia.
Durante a RejectConf tive o prazer de conhecer o Carlos Villela, atual ThoughtWorker que palestrou no nosso evento. Agora uma curiosidade que eu não sabia: ele foi desenvolvedor do projeto Java Prevayler.
Prevayler é um sistema de persistência de objetos. Neste momento a maioria vai pensar “hmm, mais um ORM, mais um Hibernate” e aqui está o primeiro erro pois Prevayler nada tem a ver com RDBMS. Estamos falando de objetos, o segundo pensamento é “hmm, ODBMS, Zope Database”
Errado novamente. Como o próprio nome diz Prevayler é baseado no conceito de Object Prevalence que o próprio Carlos explica neste artigo no IBM developerWorks de 2002. A grosso modo você lida com persistência de objetos em memória, de maneira robusta suportado por um sistema de journaling (tipo transaction log) e um snapshot em disco. Desta forma, se o sistema cai, ele pode ser recuperado até exatamente o estado imediatamente anterior ao crash.
Uma das características mais marcantes: prevalence é algumas ordens de grandeza mais rápido do que um RDBMS.
Object Pravalence é um conceito, sendo a implementação mais importante o Prevayler em Java, mas outras linguagens também tem suas implementações, incluindo Ruby, que tem o projeto Madeleine, inspirado na arquitetura do Prevayler. Infelizmente não é um projeto com o mesmo nível de reconhecimento que o ActiveRecord e mereceria mais atenção para evoluir melhor.
Por outro lado, não estou dizendo que devemos jogar fora os RDBMS e usar Prevalence para tudo. Vamos parar com esse pensamento binário “ou um ou outro”. É apenas mais uma tecnologia que merece ser estudada e que pode ser muito útil em vários cenários. Quem sabe, talvez até seja possível usar Rails + Madeleine, Merb + Madeleine em alguns casos. Alguém se habilita?
/ 17.Dec.2007 at 06:26am
Parece que as gems ainda não foram atualizadas para 2.0.2, acabei de tentar atualizar mas ainda não vieram. Mesmo assim a tag rel-2_0_2 já existe em o DHH deve anunciar em algumas horas no blog oficial. Se houver algum bug de última hora pode ser que ele vire 2.0.3 antes mesmo do anúncio, como aconteceu com o 2.0 para 2.0.1.
Update 15:00hs: Como eu disse, o DHH acabou de fazer o anúncio sobre essa nova release ;-)
Latest Comments
"Aí vai uma lista com livros que cobrem Rails 2: ..."
lucas húngaro / 11.May.2008 at 10:38pm
"Akita, great post, and great help with this pdf + movie!
jose / 11.May.2008 at 05:39pm
"Ressuscitando este post! Muito bom o texto, no momento me e..."
raul souza lima / 10.May.2008 at 07:53pm
"Akita, perguntei isso em outro tópico mas tive resposta. O..."
raul souza lima / 10.May.2008 at 06:38pm
"Opa, Muito bom ver que os railers brasileiros est..."
thiago pradi / 10.May.2008 at 11:53am
"Amigo, procuro por empresas que prestem serviço ..."
guilherme / 10.May.2008 at 06:53am
"É muito bom ver que os americanos estão procurando por br..."
felipe / 09.May.2008 at 11:35pm
"@Bruno Eu discordo, apesar de ter apenas ótimos livros naq..."
thiago freire / 09.May.2008 at 05:47pm
"Eu li o Agile Web etc, e achei bom. Apesar de ter 700 pagin..."
thiago freire / 09.May.2008 at 05:40pm
"“se querem livros”, eu diria pra não ler uma p..."
bruno zanchet / 09.May.2008 at 05:36pm