Diretamente do blog. Aqui vai a tradução para todos acompanharem:

Capistrano é um utilitário para gerenciar servidores remotos e automatizar tarefas remotas. É popularmente usado para deployment de aplicações Rails (mas pode fazer muito mais!). A versão 2.2.0 está disponível agora:

gem install capistrano

A versão 2.2.0 tem as seguintes mudanças:

O Carlos Eduardo tem andado ocupado ultimamente :-) O que é um bom sinal! Ele anunciou neste fim de semana que a Universidade Federal de Pelotas (UFPel), do Rio Grande do Sul, adquiriu 2 licenças do Treina TOM e 1 licença do TOM Conference. O objetivo é melhorar o processo deles de cursos à distância utilizando as novas versões dessas excelentes ferramentas da e-Genial. Quem nunca viu como é uma palestra/aula via Treina TOM, inclusive, terá agora a oportunidade de assistir o ciclo de palestra...

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:

Estou na minha temporada de traduções :-) Felizmente a blogosfera produz muitos artigos interessantes. Desta vez foi Steven Devijver que fez um artigo explicando sobre as diferenças entre os termos tipagem dinâmica e linguagem dinâmica.

Vamos à tradução:

Acabei de ler algo que me desagradou profundamente: foi confirmado a versão holywoodiana live-action do clássico Akira.

A premissa do filme? “Blade Runner encontra Cidade de Deus” (!!!) Mais? Em vez de Neo-Tokyo teremos New Manhatan (!!!) Isto definitivamente não vai prestar. Akira é meu mangá favorito desde que saiu no Japão nos anos 80. Lembro de ter assistido esse filme 40 vezes no começo dos anos 90, desde que saiu a versão original no Japão em 1988. É absolutamente impossível fazer esse...

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?”

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:

Isso já foi coberto pelo Engadget, o próprio Port25 e TechCrunch. O motivo da gritaria? Este anúncio da Microsoft entitulado “Microsoft Makes Strategic Changes in Technology and Business Practices to Expand Interoperability New interoperability principles and actions will increase openness of key products.” Como o TechCrunch disse, parece que Ray Ozzie – atual Chief Software Architect da Microsoft (e para quem não lembra, o criador do Lotus Notes) -, está fazendo valer um pouco da sua posiçã...

This week I interviewed another person from the Microsoft camp, Scott Hanselman. I know him from his podcast Hanselminutes. In one episode he interviewed both Martin Fowler and David Hansson at last year’s RailsConf, a truly remarkable conversation.

He also posted a great screencast about Microsoft’s new alternative MVC framework and I thought it would be great to have him at my blog to talk about technology and web frameworks. As I said before I think that we should not become alienated about what’s going on in other fronts and Scott is a very forward thinking and open minded person as well.

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:

Thomas Enebo e Charles Nutter anunciaram o JRuby 1.1 Release Candidate 2 Além de mais de 250 correções de bugs ainda conseguiram arrancar mais performance. Veja algumas análises prematuras aqui e aqui Em alguns testes o JRuby 1.1 ultrapassa não somente o Ruby 1.8 como também o YARV 1.9. Outro projeto que está em ritmo muito acelerado é o Rubinius. Eu venho acompanhando os últimos commits e este fim de semana eles acrescentaram mais testes em relação ao YARV 1.9 também. Parece que tanto JRuby ...

Update 15/02: Mais fotos! Vejam mais abaixo.

Cortesia do meu amigo Luis Martinez Cardoso, cá estou, perambulando pela noite da Campus Party, que está acontecendo durante esta semana inteira até o domingo. Acho que não vou “acampar” por aqui mas acabei vindo ver como estão as coisas.

Se algum Railer está aqui presente, o Fabrício, do IME/USP, dará uma palestra para iniciantes sobre Rails 2.0 no sábado. Não deixe de conferir.

Daqui a pouco publico mais fotos :-)

GIT é uma ferramenta muito nova, portanto, ao contrário do Subversion, não tem nem perto do mesmo nível de suporte multi-plataforma, integração de sistemas, nem ferramentas. GIT é o Rails do mundo de SCM (Source Code Management) ;-)

Uma das suas deficiências é que não há nada tão simples quanto um setup.exe para instalar o Subversion ou um TortoiseSVN para gerenciar graficamente seus repositórios. Quem é do mundo Linux/Mac já está acostumado a utilizar o poderoso ambiente Unix. Sim, o Shell é mandatório para qualquer bom desenvolvedor, get over it.

Alguns dizem que GIT não roda no Windows. Nada mais longe da verdade. Eu disse que não é tão “simples” mas nem por isso é difícil (se bobear é até mais fácil do que com o MacPorts :-). Acabei de configurar meu Windows (rodando em Parallels, claro) com GIT e ele funciona perfeitamente. Tanto o GIT normal quanto o poderoso git-svn. Como? Simples, instale Cygwin. Ele já é um pacote compilado para Cygwin.

If anyone is trying to install the ImageScience gem (sudo gem install image_science) for your Rails projects, and used MacPorts, you might be having strange problems. The usual command:

sudo port install freeimage

Will fail miserably. That’s because the newest FreeImage port, version 3.10.0, is broken. If you check it out at /opt/local/var/macports/distfiles/freeimage/FreeImage3100.zip, the checksums are invalid as the port command states. I tried to download directly from sourceforge.net. But this zip is corrupted. Can’t unzip it manually. Dunno why.

Este artigo é bem introdutório e mais uma curiosidade de como funciona parte dos intestinos do Git. Apenas para quem tem interesse e começar a entender o raciocínio do Linus na arquitetura desse tipo de repositório.

Eu traduzi do artigo de Tommi Virtanen, do blog Tv’s cobweb. Mas para quem quer aprender a utilização do Git, eu sugiro esses outros artigos:

Porque eu acho que Git está rapidamente pegando velocidade nas comunidades em detrimento de Darcs, Mercurial ou Bazaar? Não acho que seja uma única resposta, mas alguns fatores que contribuem: Git, de fato, é uma tecnologia excelente, com um enfoque novo a um problema antigo. Assim como Rails não seria Rails sem DHH, acho que faz diferença ter o Linus como criador do Git.

Finalmente, git-svn. Acho que este é o principal motivo. Outras ferramentas conseguem integrar com SVN, eu não conheço os outros em detalhes, mas a maioria acho que só tem acesso read-only a um repositório remoto Subversion. Já o git-svn tem integração read-write. Você literalmente pode trabalhar com Git e Svn em paralelo sem nenhum grande problema. Se precisar pode até ter equipes mistas, com alguns trabalhando em Git e outros – que preferem – em Svn. Isso é importantíssimo porque hoje quase todos usam Subversion nas empresas. Integrar com o SVN é como o Mac bootar Windows. O que os outros precisam fazer é uma integração decente com Svn primeiro.

Claro, não é 100% que vai funcionar. Um dos obstáculos pode ser svn:externals, mas este artigo dá algunas alternativas que podem ser até melhores. Railers que usam Piston agora tem Giston e assim por diante.

O único “problema” aparente do Git é que ele tem baixo suporte em Windows. Mas pelo menos lá fora isso não é um problema já que parece que a maioria dos que são “desenvolvedores” usam ou Linux ou Mac. Portanto, como os americanos dizem, isso é um non-issue. Quem desenvolve em Windows acaba tendo que usar Team System :-P eca

Bom, vamos à tradução:

Como todos sabem, o Leopard vem pré-instalado com Ruby 1.8, RubyGems, Rails 1.2, etc. O segundo ‘service pack’ 10.5.2 acabou de sair e já instalei o meu (dica: depois de instalar o 10.5.2, ele vai reiniciar e logo em seguida rode o Software Update novamente para instalar o Leopard Graphics Update). Eu acabei de rodar o XBench e esse update deu pequenos pontos extras de performance. CPU, Floating Point, Threads, Memory, OpenGL, Graphics, tudo ficou um pouquinho mais rápido. Parece que a cada ...

It was Avi Bryant that evangelized the neat idea of “turtles all the way”, meaning that for a language to be called ‘complete’ it should be able to extend itself. So, the ideal world would have Ruby being extended in Ruby, not in C. JRuby goes as far as it can building up a sandbox for Ruby code to run under the JVM. As cool as it is, we still rely on Java to fully extend it.

Enter Rubinius and its author Evan Phoenix, currently a full-time employee for EngineYard. Rubinius borrows heavily from Smalltalk’s concepts of a virtual machine and does as little as possible in C just for the bootstrap and all the rest is developed over pure Ruby.

Rubinius answers lots of questions about going forward over the current Ruby MRI but also raises several other questions that I hope we can nail down today in this interview with Evan himself.

So let’s get started.

Seguindo minha entrevista com Evan Phoenix, seu amigo na EngineYard, Ezra Zygmuntowics acabou de postar um call to arms para a abertura do projeto mod_rubinius. Eles contrataram o Eero Saynatkari para trabalhar full-time nesse projeto e nesse ponto a arquitetura ainda está em aberto. A única certeza é que ele será baseado em Rack, agora se será um processo embedded no Apache, um process manager independente, eles ainda estão discutindo. É a hora dos experts darem sua opinião, o Ezra pede fee...

English Readers: click here

Foi Avi Bryant que evangelizou a idéia de “tartarugas o caminho todo”, querendo dizer que para uma linguagem se considerar ‘completa’ ela deveria ser capaz de estender a si própria. Então, o mundo ideal teria Ruby sendo estendido por Ruby, não em C. JRuby vai tão longe quanto pode construindo um sandbox para código Ruby rodar sobre a JVM. Por mais legal que seja, ainda precisamos de Java para podermos estendê-la.

Entra Rubinius e seu autor Evan Phoenix, atualmente contratado em tempo integral pela EngineYard. Rubinius pega pesadamente emprestado dos conceitos de virtual machine de Smalltalk e faz o menos possível em C somente para conseguir o boot inicial e todo o resto é desenvolvido em Ruby puro.

Rubinius responde a várias questões sobre o futuro do Ruby MRI mas também levanta diversas perguntas que espero que possamos responder hoje nesta entrevista com o próprio Evan.

Então, vamos começar.

Este artigo sobre variáveis de instância do Rick DeNatale é muito fascinante. Na hora que bati o olho nesse texto já queria traduzí-lo. É um texto bastante longo e talvez um pouco difícil para quem não tem muita base sobre compiladores e arquitetura de computadores, mesmo assim vale a pena para ter uma breve introdução ao mundo dos registradores. Mais interessante é ver como Java, Smalltalk e Ruby implementam variáveis de maneiras diferentes e que efeitos isso tem na prática.

Aqui vai a tradução:

Este artigo é muito interessante e me deixou intrigado porque eu – que sou um amador em técnicas Ágeis – pela primeira vez vi um enfoque diferente na explicação de certos termos Ágeis, em particular, “iteração” vs “incremental”.

Segundo o perfil no site do autor: Jeff Patton tem focado em técnicas Ágeis desde 2000 e se especializou na aplicação de técnicas de design centradas no usuário para melhorar requirimentos Ágeis, planejamento e produtos. Alguns de seus artigos mais recentes podem ser encontrados na www.AgileProductDesign.com e na Crystal Clear de Alistair Cockburn. Seu próximo livro será lançado pela série de Desenvolvimento Ágil da Addison-Wesley que dará conselhos táticos para quem procura entregar software útil, usável e de valor.

Atualmente ele trabalha como consultor independente, é o fundador e moderador da lista agile-usability no grupo de discussão do Yahoo, um colunista na StickyMinds.com e IEEE Software, e vencedor do Gordon Park Award 2007 da Agile Alliance por contribuições ao desenvolvimento Ágil.

E aqui vai minha tradução do artigo em questão:

Engraçado como as coisas funcionam sem nenhum planejamento. Lá estou eu, lendo minhas notícias diárias, separando algumas para o podcast. Num parágrafo escondido de um post vejo um plugin de nome sugestivo: resource_controller. Interessante … Daí você vai e esperimenta. Hm, promissor! Sem pensar muito vem aquela vontade de mostrar aos outros o que você achou legal, a gente sempre tem vontade de dividir as coisas que acha legal. Daí saiu meu screencast Easy Restful Rails. Claro, você comunica ...

Eu recebo vários e-mails de Railers, nem sempre posso responder todos – falta tempo. Nesse caso, peço que procurem a rails-br. O William Namikawa foi um desses e-mails, mas ele enviou algumas perguntas interessantes e achei legal fazer um post com isso já que são perguntas recorrentes. Para responder algumas, eu pedi ajuda dos universitários :-) No caso, meu chefe Carl Youngblood.

Então, vamos ao e-mail:

Acabamos de lançar o 4o Episódio do Ruby on Rails Podcast Brasil. Um dos assuntos que mencionei neste episódio foi sobre o serviço RedeParede. Deixe-me explicar em mais detalhes.

Durante a WebDevCamp SP, no ano passado, o Manoel Lemos, do BlogBlogs nos apresentou um amigo seu, James Crane-Baker, que fundou a startup RedeParede, um website feito em Ruby on Rails para classificados no estilo Web 2.0.

Recentemente ele me comunicou que está para liberar as APIs do seu serviço para nossa comunidade Rails e por isso resolvi publicar mais sobre o que esse pessoal de Santa Barbara, CA está fazendo. O James morou no Rio por um tempo também e compreende mais sobre nossa cultura melhor do que o americano médio. Seu serviço deve cobrir toda a América Latina. Espero que todos dêem uma olhada nesse serviço, parece algo muito promissor, e cases de sucesso como esse só ajudam nossa comunidade como um todo.

Segue a palavra para o próprio James explicar o RedeParede:

Pronto! Acabei de colocar meu site em Mephisto 0.8 e usando Git também! Vamos à história:

“Em casa de ferreiro o espeto é de ferro!”

Desde que eu comecei a usar Mephisto uma coisa me incomoda: ok, o Mephisto muda pouco mas e quando mudar? Como atualizo meu código? Eu alterei vários pequenos pontos na minha instalação para ficar como eu quero, não gostaria de ter que refazer isso tudo de novo, nem copiar tudo por cima às cegas.

Baixar os patches e aplicar manualmente não é exatamente minha idéia de passar um bom fim de semana também. Com o repositório do Mephisto em subversion e o do meu site também em subversion, as opções são parcas, para dizer o mínimo. Como falei no meu post anterior, ano passado, quando ainda usava Typo, eu bem que tentei usar SVK. Chegou a funcionar mas a sensação era de “puxadinho”, na primeira chuva ia desabar. Muito complicado para configurar, muito complicado para manter, se eu esquecesse de anotar o número da última revision que dei merge ia dar trabalho. Nada intuitivo.

Update 05/02: Ironia, o próprio Piston agora está mantido em Git! :-) Um gerenciador de plugins para SVN mantido no Gitorius.

Update 06/02: Estava olhando a lista de projetos no Gitorius e tem muito mais projeto Ruby e Rails do que eu imaginava. Vejam a lista atualizada lá embaixo. Vejam outra discussão interessante em All that Git talk in the Rails world. What Gives?, outro interessante é o Git is the new Unix

O Mephisto – finalmente – saiu com uma nova versão, a 0.8 acelerando seu desenvolvimento para a tão esperada versão 1.0.

A maior mudança nesta versão? A mudança para suportar seu desenvolvimento sobre GIT! Isso mesmo, mais um projeto Ruby migrando de Subversion para Git.

Mike Moore, do Rubiverse, conseguiu entrevistar Zed Shaw em seu podcast.

Antes, aviso, Zed adora falar palavrão :-) Eu particularmente achei engraçado, é o jeito dele. Algumas coisas que ele disse: Sim, o “Rant” é um “Rant”, ele quis exagerar, porque essa é a idéia de um “Rant”, mas as ofensas não eram piadas, ofensas são ofensas.

Zed é um pragmático: ele não vai mais participar de conferências, listas, etc, mas se precisar implementar um projeto em Rails (como agora mesmo) ele vai continua...

Finalmente decidi colocar uma versão em PDF do meu famoso Primeiro Tutorial de Rails 2.0. Aqui vão: Parte 1

Parte 2

Não são perfeitos mas deve ser suficiente para quem prefere uma versão offline. Acabei de subir o video em Quicktime H.264 para baixar: Rapidshare Aproveitem.

Hey, I finally decided to deliver a PDF version of my famous First Rails 2.0 Tutorial So, here they go: Part 1

Part 2

They’re not perfect but should suffice for those of you that prefer to have an offline version. I also just uploaded the higher quality H.264 Quicktime video for you to download directly through Rapidshare. Rejoice!

Para o screencast que eu fiz, que inspirou este tutorial, clique aqui. Para ler a primeira parte deste tutorial, clique “aqui”::/2008/1/31/rolling-with-rails-2-0-o-primeiro-tutorial-completo-parte-1. O código completo está disponível aqui. E cliquem aqui se quiserem imprimir esta página.

Espero que todos aproveitem!

Estou muito feliz vendo que meu Rails 2.0 Screencast foi muito bem recebido. Mais de 9.000 visitantes únicos assistiram (e centenas lêem o tutorial todos os dias). A idéia era mostrar Rails 2.0 muito rápido, apresentando o que é possível fazer em menos de 30 minutos.

Agora, irei quebrar aquele vídeo em suas partes principais e criar o primeiro tutorial passo-a-passo sobre Rails 2.0.

Como qualquer outro tutorial, eu não cubro 100% do Rails 2.0, apenas algumas características principais agrupadas em uma aplicação coesa. Eu recomendo o Peepcode’s Rails2 PDF e o Railscasts.com de Ryan Bates para mais detalhes.

Algumas pessoas se ofereceram para traduzir o tutorial original, que eu escrevi em inglês. Um deles foi o Lucas Húngaro. O problema foi que eu demorei demais a dar continuidade. Daí o Rafael DX7 me enviou uma versão traduzida também. Fiz algumas alterações e finalmente temos o tutorial em português. Agradeço a colaboração.

Este tutorial possui 2 partes, para a Parte 2, clique aqui. Cliquem aqui se quiserem imprimir esta página. O código completo está disponível aqui

Vamos começar!