/ 10.May.2008 at 02:36pm
Muita gente me pergunta sobre isso:
“Akita, comprei o livro X, mas ele não é de Rails 2, eu consigo aprender com esse livro? Os exemplos vão funcionar?”
Vamos lá: se eu não estou enganado, tirando o livro do Obie Fernandez, nenhum outro livro cobre tudo do Rails 2 até agora (o do Dave Thomas ainda está em beta). Portanto, o que fazer? Esperar para comprar quando sair um livro novo?
/ 19.Apr.2008 at 05:08pm
O pessoal do Phusion lançou semana passada o tão esperado mod_rails que é um módulo Apache para gerenciar dinamicamente pools de processos Rails sem a necessidade de um cluster Mongrel.
Ele deve facilitar deployment, eliminar os clássicos problemas de Fast CGI e eliminar o overhead que é gerenciar grandes clusters Mongrel. Se um processo Rails dá crash por alguma razão, o mod_rails é capaz de reiniciar um novo processo.
Porém, antes de mod_rails, um dos integrantes do grupo Phusion, Hongli Lai saiu numa jornada mais difícil: tornar Ruby mais eficiente.
/ 16.Apr.2008 at 04:53pm
A semana passada teve grandes anúncios que chacoalharam a comunidade Ruby on Rails. Uma delas, foi sem dúvida o lançamento do tão esperado mod_rails, por Hongli Lai que vêm investindo recursos em maneiras de melhorar o MRI para funcionar com fork (o resultado disso é o lançamento futuro do que eles estão chamando de Ruby Enterprise Edition – sim, o nome é para ser uma piada).
Vejamos como usar o Passenger e alguns números de benchmark!
/ 06.Apr.2008 at 10:02pm
O James Mead, do blog Floehopper publicou a respeito de um pequeno bug que pode afetar o resultado de seus testes unitários.
Antes de mais nada rode o seguinte:
>> ruby --version
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0]
Acontece o seguinte, no Ruby 1.8.6, entre os patchlevels 0 a 7 a partir de um hook em Kernel.at_exit, uma chamada a Kernel.exit(false) resultará em 0, ou seja, que o processo completou com sucesso. Porém, o resultado correto deveria ser 1, indicando que o processo finalizou com falha.
Isso significa que seu teste pode indicar que está terminando com sucesso quando na realidade está com erro. James apenas menciona testes que ele realizou em Rubys no Mac OS X, mas provavelmente isso aconteça em outros ambientes.
Portanto a recomendação é: chequem e atualizem suas versões de Ruby, principalmente se você não o atualiza desde o fim de maio de 2007.
/ 03.Apr.2008 at 01:02pm
Se vocês ainda não sabem muito bem como usar o Git no dia-a-dia, recomendo primeiro ler meu micro-tutorial de Git.
Muito bem, a primeira reclamação que eu sempre ouço é a falta de suporte a Windows. Não tem equivalente a TortoiseSVN, precisa instalar Cygwin pra usar git-svn. Blá blá. So sorry guys. Existem 3 opções: usar no Cygwin, que funciona bem. Instalar uma virtual machine linux com VMWare ou coisa que o valha. Parar de reclamar e, no bom espírito open source, tentar contribuir de volta. Não sei para que as reclamações. O problema não é reclamar, o problema é a atitude de ‘eu sou importante e vocês precisam fazer do jeito que eu gosto’. Bom, pare de usar open source se este for o caso. Não é suficiente já estarmos usando ferramentas de graça?
/ 02.Apr.2008 at 11:57pm
Como acabei de postar, todo o repositório do Ruby on Rails vai migrar do antiquado Subversion para Git, em particular ficará no excelente serviço Github. O David recomenda ler o tutorial Git – SVN Crash Course que é um guia para quem é usuário de SVN se acostumar com os comandos de Git. Mas eu resolvi fazer o meu próprio para tentar convencê-los de porque Git é importante.
/ 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 06:24pm
Last week I presented ActiveResource’s capabilities to some friends.
In summary, it’s a great library, but not perfect just yet, and should improve in the next versions. On the other hand, the majority of ‘REST’ APIs available – as they say – are not actually RESTful. Flickr and YouTube come to mind. Check out this link to learn on how to talk to Twitter. This other link to learn how to extend ActiveResource for non-REST APIs and this link to understand how to consume YouTube feeds.
But besides that I found out a small surprise: ActiveResource is documented in a way to imply that it has working client-side validations, but it’s not fully implemented! So I decided to investigate what would it take to have it working.
/ 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.
/ 23.Mar.2008 at 03:51pm
Durante a Campus Party eu conheci o Hugo, que é aluno de Ciências da Computação na USP e também é monitor de aulas de Smalltalk (é isso? :-)
Estávamos conversando sobre Seaside e agora ele fez o primeiro screencast apresentando o ambiente Squeak. Ainda não é o Seaside, mas apenas algo para se acostumar com alguns dos aspectos do Squeak.
Então, sem mais delongas, dêem uma olhada no blog dele para baixar o vídeo.
/ 24.Feb.2008 at 02:35pm
Como vocês devem ter visto neste post que publiquei algum tempo atrás, meu blog está rodando sobre o novíssimo Mephisto 0.8 e Rails 2.0.2, com ambos os trunks (do Mephisto e o meu) sincronizados com facilidade graças ao poder do GIT :-)
Porém, um problema vem me atormentando desde que migrei do Typo para Mephisto há vários meses atrás: o sistema de caching do Mephisto não estava funcionando para mim. Na época eu não fui atrás do erro e simplesmente desliguei o cache. Mas desde o fim do ano passado os acessos do meu site aumentar exponencialmente e agora a falta de cache começou a me dar rasteiras – com meu blog saindo do ar mais vezes do que deveria.
Quando mudei para um plano de VPS foi quando me lembrei que o cache estava desligado esse tempo todo! Depois que sincronizei meu blog com o trunk do Mephisto comecei a fazer um pente fino (git diff) entre os dois branches e depois de muito procurar finalmente achei a droga do erro! Ei-lo:
/ 22.Feb.2008 at 01:28pm
De vez em quando saem alguns comentários interessantes no Ruby on Rails: Core. Esta semana um cara chamado Stephen estava com uma dúvida: ele começou a fazer testes para entender isso.
Ele criou um script que mede o uso real de memória depois de cada request a uma aplicação Rails 2.0 simples de um único model. Ele faz 4 requests para a página default e depois mais 4 vezes acessando a listagem desse model e daí mede a memória.
Ele notou que a cada conjunto desse o processo do Rails consumia um pouco mais de memória (algo em torno de 8 a 20bytes por request). Então ele criou 100 cópia do model, cada um com cerca de 1kb de dados e duplicou os testes.
Daí ele repetiu para 1000 e depois 10.000 objetos do model. Entre 0 e 1.000 cópias do model, o tamanho do processo variou entre 55 e 70Mb. Mas quando ele foi para 10.000 objetos o processo passou a consumir 220Mb!
O banco de dados é SQLite com apenas 11Mb quando está com 10.000 linhas.
Agora vem a dúvida dele: “se o Ruby tem Garbage Collector, porque continua consumindo mais e mais memória?”
/ 21.Feb.2008 at 10:03pm
Fazia muito tempo que eu não via um bom artigo sobre Estruturas de Dados. Na verdade, acho que desde o tempo da faculdade eu não lia um texto tão legal. Este achado veio do blog matasano chargen e resolvi traduzir para que todos possam apreciar a idéia. Mas avisando: um mínimo de ciências da computação é necessário para entender este texto.
O tema é Binary Radix Trie. Segue a tradução:
/ 18.Feb.2008 at 07:53am
Para quem acha que toda a estrutura de diretórios, ambientes, etc que o Rails cria é muita coisa, o Pratik Naik fez um experimento muito interessante: criou uma aplicação Rails de uma única página em apenas um único arquivo Ruby muito curto e fácil de entender.
Para deixar as coisas ainda mais simples, ele ligou tudo com o Thin , o web server que promete ser uma alternativa mais leve e adaptável do que o atual Mongrel; e também Rack , que deve se tornar a interface universal para todo web server HTTP em Ruby (Merb já usa, mod_rubinius deve usar). Continue lendo para ver como ficou:
Latest Comments
"Somos uma empresa de desenvolvimento de aplicações web. J..."
elza di sirio / 12.May.2008 at 10:44pm
"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