EnvyCasts #1 - Advanced ActiveRecord

by AkitaOnRails on Aug.27.2008 at 10:04am

Ontem o Gregg Pollack me pediu para fazer um review do primeiro episódio da nova série de screencasts sobre Ruby on Rails que ele e o Jason Seifer estão fazendo. É o Envycasts

Vocês conhecem o Gregg e o Jason dos vídeos humorísticos do RailsEnvy e do famoso podcast RailsEnvy Podcast

“E qual a diferença desse para os famosos PeepCode, RailsCasts e agora os da Pragmatic Programmer?”

Primeiro, o assunto é mais avançado – daí o título “Advanced” ActiveRecord. Segundo, o nível de produção é muito maior do que um screencast. Pense numa palestra virtual onde eles mesmos aparecem e dão as caras. Terceiro, eles usam o recurso do humor para não deixar a bola cair e o pessoal perder interesse no meio do caminho. Um problema com screencasts longos é que eles ficam cansativos. Eu assisti a série toda de Erlang da PragProg, por exemplo e, apesar do conteúdo ser muito bom, me peguei ‘pescando’ na frente do monitor várias vezes pela morosidade do narrador.

Já o pessoal do EnvyCasts usa o bom e velho recurso de chroma-key para se sobreporem aos slides e, dessa forma, eles mesmos aparecerem na tela. Veja a imagem acima para entender o que quero dizer.

Além disso, eles não ficaram no básico “use scaffold, rode migrate e boom!”, eles falam de performance, algumas otimizações, recursos novos do 2.1 como named_scope, más-práticas. Realmente ajudará o pessoal que só seguiu os tutoriais básicos a complementar seus conhecimentos.

Em quase 40 minutos de conteúdo, eles conseguem dar um bom overview sobre aspectos pouco comentados do ActiveRecord e isso é importante pois se fosse algo simples de apenas googlar o video já perderia metade do seu valor.

Por US$ 9 é uma pechincha, altamente recomendado para Railers de qualquer nível, do iniciante ao avançado.

Vulnerabilidade de Denial of Service no REXML - Atualizem seus Rails!

by AkitaOnRails on Aug.23.2008 at 09:42am

O Michael (provavelmente o Koziarski) avisou hoje no Riding Rails que a equipe do ruby-security publicou uma recomendação sobre um bug de DoS afetando usuários de REXML. A maioria das aplicações Rails que recebem input de XML são afetados por essa vulnerabilidade e todos são fortemente recomendados a tomar os passos para mitigar esse problema.

Para resumir:

Rails 2.0.2 e anteriores

  1. Copie este arquivo de correção em RAILS_ROOT/lib
  2. Coloque a linha require ‘rexml-expansion-fix’ no seu config/environment.rb

Rails 2.1.0 e Edge Rails

  • Copie este arquivo de correção em ‘RAILS_ROOT/config/initializers’, isso fará com que esse arquivo seja carregado automaticamente.

Lembrando que: RAILS_ROOT é o seu projeto Rails.

Segundo o Michael essa correção será disponibilizada como gem nas próximas 24 horas para facilitar a distribuição, esse post será atualizado com instruções de upgrade nesse momento. Mesmo assim ainda será necessário fazer o require a partir do seu environment.rb. A gem pode ser reconstruída a partir dos código-fonte caso você tenha uma VPS ou máquina que você mesmo administre. Se estiver numa hospedagem compartilhada execute agora mesmo a correção acima e atualize sua aplicação em produção.

Webcast #3: Deploying Rails na Locaweb

by AkitaOnRails on Aug.22.2008 at 05:25pm

Acabei de gravar o terceiro episódio do Webcast da Locaweb sobre Rails, ao vivo, com uma hora de duração. A gravação já está disponível neste link. Além disso fiquem sempre de olho nos próximos webcasts através do Blog da Locaweb. O legal de participar ao vivo é poder fazer perguntas em tempo real. Eu respondi várias perguntas hoje, espero que tenha conseguido solucioná-las.

Nesse webcast explico como funciona o sistema de deployment na Locaweb para Ruby on Rails e apresento ao vivo o funcionamento da gem akitaonrails-locarails que publiquei esses dias (ainda em fase experimental, portanto nada de abrir chamado para isso, mandem e-mail para mim ou comentem aqui no meu blog).

Ainda mostrei ao vivo o andLinux em funcionamento, mostrando como rodar Linux lado-a-lado com Windows, para aqueles que ainda se vêem obrigados a ter que rodar Windows.

Também falei rapidamente sobre cache no Rails onde mostrei este outro tutorial que publiquei ontem e ainda, num behind-the-scenes vocês viram a conta do akitaonrails.com sendo acessada via ssh :-)

Tutorial de Rails Caching - Parte 1

by AkitaOnRails on Aug.21.2008 at 07:02pm

Em fevereiro deste ano, o Gregg Pollack – do podcast RailsEnvy – publicou uma série em 2 partes sobre o sistema básico de cache do Rails. Resolvi traduzir uma parte porque vi muito pouca gente falando sobre isso e é algo muito importante.

Apesar do tutorial dele ser muito bom, não vou traduzí-lo ao pé-da-letra e sim adaptá-lo um pouco para torná-lo mais simples. Todo o código mostrado nesse artigo está disponível no Github

Cache é importante e, no Rails, é razoavelmente simples para a maioria dos casos. Continue lendo!

Nova gem: Locarails :-)

by AkitaOnRails on Aug.19.2008 at 09:05pm

Pessoal, eu ainda estou batendo cabeça aqui na Locaweb – no bom sentido. Uma coisa que, como Gerente de Produtos, preciso fazer, é tentar tornar os produtos mais fáceis para os clientes. Então fiquei imaginando como um usuário que ainda não é avançado em Rails poderia tirar proveito da hospedagem da Locaweb sem precisar ter muito medo de errar alguma coisa.

Comecei pensando num tutorial etc. Mas resolvi ir um passo além e rapidamente montar uma nova gem, que chamei de Locarails. Ainda é um pouco crua. Para quem já entende: é um configurador automático de Capistrano. Nesta primeira versão estou usando apenas a estratégia de cópia – sem svn, nem git, por enquanto! Mas para iniciantes, já ajuda!

Só para ter uma idéia, partindo do princípio que você já tem uma aplicação Rails (e está em Linux! Eu não testei isso no Windows ainda!):


gem sources -a http://gems.github.com
sudo gem install akitaonrails-locarails

cd seu_projeto
locarails .
[... responder as questoes ...]
cap deploy:setup
cap deploy

Pronto! Só isso: criou a aplicação, contratou a hospedagem, rodou o locarails e já está online! A única coisa que (ainda) não é automática é apontar o dominio para o diretório, que é feito via Painel de Controle. Mas uma coisa de cada vez :-) Me digam o que acham.

Publiquei um tutorial um pouco maior do que este no Blog de Produtos da Locaweb.

Novo tema do site: RedWhite

by AkitaOnRails on Aug.18.2008 at 02:09am

Eu já estava meio cansado do antigo tema micro-tabbed, ele tinha vários problemas: no IE 7 dava alguns desajustes nos boxes, no IE 6 quebrava completamente, o design era pouco flexível. O maior problema é que, diferente do famoso Wordpress, o pobre Mephisto tem muito pouco tema para ele.

Pois bem, resolvi botar a mão na massa: como não estava a fim de migrar para Wordpress, só me restava tentar converter um tema de Wordpress para Mephisto! Foi o que eu fiz: fui Google afora procurando por temas de Wordpress que fossem bonitos, limpos e compatíveis com a maioria dos browsers. Nessa procura cruzei com o RedWhite. Baixei os phps e montei um tema de Mephisto equivalente.

Devo dizer que foi mais fácil do que pensei, eu devo ter levado umas 3 horas para ajustar o grosso. Mas infelizmente não tem uma receita que seja possível automatizar ainda, tem que ser no “olho” mesmo. Entendendo como funciona a estrutura do Mephisto, vocês vão ver que ele equivale à estrutura do Wordpress, pelo menos na questão de temas. É necessário entender um pouco de Liquid também. Mas nada que um bom Railer não consiga fazer, de repente é até um bom exercício para os iniciantes: montar um blog em Mephisto e tentar migrar um tema de Wordpress para ele.

E então, o que acharam desse novo design? :-)

Tradução: O que Rails (2.2) Thread-safe significa?

by AkitaOnRails on Aug.17.2008 at 07:45pm

Desde meu relato sobre a RailsConf eu já havia dito que Josh Peek tinha um branch do Rails no Github, num trabalho para o Google Summer of Code, tendo Michael Koziarski como mentor.

Finalmente, David Hansson anunciou que Josh Peek passa a fazer parte do Core Team, e uma das coisas que isso implica é finalmente fazer o merge do branch de thread-safe do Josh para dentro do trunk oficial!

Agora, Charles Nutter – sempre à frente dessas polêmicas iniciais – resolveu escrever uma lista de perguntas e respostas (Q/A) sobre que efeitos thread-safety causa no Rails, e especialmente sobre o mundo JRuby. Naturalmente existem muitas opiniões do próprio Charles aqui, mas a maior parte deve ser factualmente correta.

Segue a tradução do artigo dele:

Internacionalização no Rails 2.2: Tutorial

by AkitaOnRails on Aug.14.2008 at 10:19pm

O Peter Cooper publicou hoje sobre um tutorial de Clemens Kofler sobre a nova funcionalidade de internacionalização (i18n) do futuro Rails 2.2. O interessante é que ele fez isso de uma maneira muito prática: fazendo o tutorial ser uma aplicação Rails executando exatamente como ele explica.

Achei a idéia muito legal e, graças ao Github, fiz um fork do projeto dele e já traduzi para português. Portanto vocês podem clonar diretamente do meu fork e já entender como tudo funciona :-) Apenas faça:


git clone git@github.com:akitaonrails/i18n_demo_app.git
cd i18n_demo_app
./script/server

Ou faça download do código-fonte zipado. De qualquer forma, basta abrir o browser depois de iniciar o servidor e carregar http://localhost:3000. Bom aprendizado!

Salvação para usuários Windows: andLinux!

by AkitaOnRails on Aug.14.2008 at 10:12pm

Hoje eu fiquei muito contente! Depois de muito quebrar cabeça para imaginar meios de um usuário Windows finalmente ter uma boa experiência com Rails, meu colega Juliano Martinez aqui na Locaweb me deu uma excelente solução: andLinux !!

Este artigo é especialmente para você, amigo desenvolvedor que infelizmente não tem como se liberar das amarras do Windows: seja porque sua empresa o obrigada a viver essa tortura, seja porque você depende de meia dúzia de aplicações que não existem no Linux, ou mesmo porque você não se sente seguro ainda para utilizar somente Linux. E, mesmo assim, gostaria muito de desenvolver aplicações Ruby on Rails.

Há anos eu tinha ouvido falar do projeto coLinux ou Cooperative Linux, que é uma kernel modificada de Linux feito para rodar lado-a-lado, cooperativamente, com o Windows. Mais do que isso, ele instala drivers especiais e roda com praticamente a mesma performance do que se fosse instalado sozinho. Antigamente – se não me falha a memória – ele tinha uma limitação de apenas conseguir usar 64 Mb de RAM. Mas não mais: agora ele suporta até pelo menos 1 Gb de RAM.

Veja na imagem abaixo meu desktop Windows – não! eu continuo usando meu Macbook Pro, mas por acaso tem um PC do meu lado … – com gVim, Windows Explorer, Synaptic, o painel do XFCE, todos rodando lado-a-lado!

O andLinux usa o coLinux e empacota tudo de maneira super simples e trivial de se usar. Na atual versão ele te dá um ambiente Ubuntu Gutsy Gibbons completo! Ele tem duas versões: uma maior de 653 Mb já com KDE pré-instalado e outra mais minimalista de apenas 113 MB com XFCE. Recomendo essa última versão.

Lançados: novos Ruby Enterprise Edition e Passenger

by AkitaOnRails on Aug.10.2008 at 01:27pm

Eu estava conversando com o Hongli Lai sobre isso esse fim de semana, e ele publicou hoje como tinha me dito: um novo Ruby Enterprise Edition

Vocês vão se lembrar que quando surgiu a primeira leva de vulnerabilidades recentes, tivemos o seguinte problema: se você atualizasse para o patchlevel com as correções, corria o risco de ter suas aplicações quebrando, pois esse patchlevel não era 100% compatível com o 1.8.6-p114 que estávamos acostumados.

O que aconteceu foi que cada distro teve que fazer o backport apenas das correções de segurança de volta para o patchlevel 114. A Phusion™ foi uma das que fizeram o fork e o backport. Agora, foi descoberta mais uma vulnerabilidade, conforme reportado pelo Peter Cooper.

A correção está no patchlevel oficial 286 (ou patchlevel 70, no caso do 1.8.7). Será que vamos ter o mesmo problema? Foi o que indaguei com o Hongli e pelo visto ele também ficou curioso.

Ele testou o patchlevel 286 contra várias suítes de teste, incluindo a do RubySpec e deles próprio, e a conclusão foi que o patchlevel 286, ao contrário do desastrado 114, está sim estável. Portanto as distros podem retornar a acompanhar o branch oficial a partir desse patchlevel sem problemas. A Phusion™ fez isso e já lançou o Enterprise Editon baseado nesse branch.

Eu estou, inclusive, usando o Enterprise Edition como meu Ruby padrão no meu Mac e até agora tudo funcionou muito bem.

Fora isso, semana passada a Phusion™ tinha lançado o Passenger™ 2.0.3. Tem pequenas correções de bugs e algumas pequenas otimizações. Claro, a Locaweb já está instalando essas novas atualizações em todas as suas máquinas ;-)

Brazilian Rails Blogs

by AkitaOnRails on Aug.08.2008 at 08:37pm

Depois de listar alguns dos Sites e Projetos Open Source brasileiros, finalmente é a vez dos blogs. Blogueiros: start your engines! Na lista Rails-br perguntei quem tem blogs e além disso aproveitei o trabalho do Paulo Lins, que publicou uma lista na Rubyonbr.

Eu filtrei, usei o bom e velho Hpricot (alguns snippets aqui) para atualizar os títulos e feeds e para determinar qual está fora ou inválido. Totalizou 58 blogs com feeds.

Abaixo segue uma lista e você ainda pode fazer download do arquivo OPML para ficar fácil importar no seu feed reader (como o Google Reader) favorito e ficar de olho na blogosfera brasileira de Rails.

E não esqueçam de ajudar na divulgação do Rails Summit Latin America colocando os diversos banners e stickers no seu próprio blog! ;-)

Vejam a lista:

Brazilian Open Source Rails Projects

by AkitaOnRails on Aug.04.2008 at 01:05pm

Leitores Brasileiros: clique aqui

Going forward with my previous post about Brazilian Rails Websites, here I go with a second post about “Open Source Brazilian Rails Projects”. The goal: motivate developers to create new stuff and to make them known in the international community.

It is not possible to become a great artist without ever visiting a museum and research the art of others. Inspiration does’t come out of nowhere. Open Source is excellent for artists to study different solutions for the same problems and guide even more creative new solutions. So, here they go:

Motiro, from Thiago Arrais. Motiro is an ancient tupy word for a work gathering. During a motiro, people help each other in order to achieve a common goal like harvesting food or building houses. Motiro is also a project tracking tool. An excellent tool for project management built in Ruby, one of the pioneer open source projects in Ruby I can remember.

jetty_rails is an awesome project for JRuby developers by Fabio Kung. You want to have the easy of use of developing with Mongrel but you also want to have servlet container facilities, jetty_rails is the answer for Agile JRuby on Rails development.

Brazilian Rails, from Improve It. This is a Brazil specific project to localize Rails to the Brazilian Portuguese region, including correct inflections for pluralization, correct money, datetime representations, translated error messages and so forth. This was made prior to the new i18n support in Rails Edge 2.2.

Integration, also from Improve it, is a Ruby on Rails plugin that provides a set of tasks to automate all steps of a synchronous continuous integration process, that is, continuous integration without a server such as CruiseControl. Recommended for any Agile team willing to improve their development processes.

Selenium Poetry, again from Improve it, is a library that extends SeleniumOnRails::TestBuilder, allowing you to write really readable tests for Selenium. If you know Selenium you’re aware about writing tests for it in Ruby, but it ends up being very unfriendly. Poetry brings Selenium tests back to the Ruby Way.

Bookmaker, from Carlos Brando and Marcos Tapajós, it is a framework to facilitate the creation of the programming books, using Markdown styling and even code colorization to generate really professional looking eBooks in PDF format. You probably heard about the famous e-Book Rails 2.1: What’s New

RGhost, is another pioneering project, by Shairon Toledo. Ruby Ghostscript is a library for document developers wanting a quick and easy way to generate pdf files. It’s optimized to work with larger documents.

RGhost Barcode, also from Shairon is an RGhost Adapter to easily generate 32 kinds of barcodes in Ruby. Check out the online catalog here

Ruby Finance, by Herval Freire, is a gem to access financial data from Yahoo! Finance (shares, indexes, currency, etc).

double_submit_protection, also from Herval, is a plugin to prevent double-submit with server-side control (instead of the default, and weak, javascript one). You’re probably aware of the problem of users double clicking the same checkout submit button ending up with you having duplicated transactions. This plugin will be a life saver.

Colorplan, from Caffo (Rodrigo Franco) is a different kind of todo list mixed with project tracking which makes use of colors to facilitate eye sight. Kind of difficult for me to explain so I recommend you to check out his website and see the screenshots for yourself.

Bookqueue is another app from Caffo which is, literally, a bookshelf built with Rails. Can be a good example app for beginners.

JSMask is a Rails plugin which offers support for HTML form field masking for dates, phone numbers, credit card numbers, ssn. By Ozéias Sant’ana.

piwik, by Rodrigo Tassinari de Oliveira, is a simple Piwik client built with Ruby for the Piwik API. Piwik is an open source web analytics tool. Should facilitate building visits reports, searches, hits and so forth.

Rails Footnotes was originally created by Duane and is now maintained by José Valim, who already added many new features. If I am now mistaken, this plugin adds a footer into your web application while you’re in development mode, so you can click on links to easily open the related controllers, views.

Easy HTTP Cache, also fom José Valim, is self-explanatory – even though it neither starts with acts_as_ nor ends with _fu – as José himself describes :-) Technically it allows Rails 2.1 apps to use the HTTP 1.1 cache specification. I particularly like this kind of project because it is reasonably simple and brutally lows the load on your web app.

Currency String, by Taq is a number to string representation converter.

That’s it folks, let us create more projects. Thanks to Github collaborative development became easier. Take a good look at the application you’re working right now: chances are that it can be refactored and packaged into a plugin, gem. And keep an eye open for our Brazilian community: we have some of the finest Rubyists growing up here!

Tradução: Por que você não deve codificar em Português

by AkitaOnRails on Jul.31.2008 at 04:41pm

Achei esse artigo interessante, o título original é Why you shouldn’t code in Spanish. E como o autor mesmo fala, a parte engraçada é que ele publicou esse artigo no site chamado CodeSpanish. Eu coloquei “Português” no título porque senão ninguém iria ler :-) Mas vou traduzir o artigo original. Seja português, seja espanhol, a noção é a mesma, então lá vai:

Testando Rails no IIS 6 com FastCGI

by AkitaOnRails on Jul.28.2008 at 10:34pm

Alguns meses atrás o pessoal da Phusion resolveu o problema de muitos de nós ao lançar o combo Passenger + Ruby Enterprise Edition. Isso facilitou nosso processo de deployment com Apache 2. Mesmo assim ainda existem muitos cenários onde não podemos usar Passenger, o mais óbvio deles sendo no Windows.

Pior: muitas vezes ainda é mandatório que o webserver seja IIS, porque se quer rodar aplicações ASP ou ASP.NET em paralelo, ou mesmo se quer reaproveitar a mesma infra-estrutura sem que o pessoal de operações precise ficar lidando com serviços externos como Apache. Além disso, normalmente a maioria não conhece – e não quer conhecer – o comportamento desses serviços, então, na dúvida, preferem não dar a opção.

Deployment não é um assunto simples. Para uma introdução à arquitetura do Rails em termos de instalação, assista a palestra que dei na FISL 9. Mas sigam em frente para ver este tópico específico sobre IIS e Windows.

Brazilian Rails Websites

by AkitaOnRails on Jul.27.2008 at 02:13pm

Leitores Brasileiros: cliquem aqui

I’ve recently asked at the Rails-BR Group what are the Brazilian websites built with Ruby on Rails. So I compiled a list from the answers to help promote them and motivate others to follow. This should also help beginners to understand that there is no idea that can’t be implemented on Rails. The sky is the limit.

This time I am focusing on websites only, maybe next time I’ll list tools, libraries, gems and plugins, for which I know there are many Brazilian ones.

  • Brasigo – Recently released, questions and answers online, such as Yahoo! Answers
  • BlogBlogs – The biggest blog indexer, such as Technorati
  • TreinaTom – The most well known Brazilian e-Learning system
  • just-remind.us – The virtual phonebook you can share
  • Pagestacker – Your memory for the web, such as del.icio.us
  • Ikwa – Professional networking community and services
  • O Curioso – Retrieves messages from your fellows at Orkut
  • beonthe.net – Create your online photo algums, such as Flickr
  • RubyOnda – Rss agregator for the Rails community
  • Codestacker – Code snippets sharing, such as Pastie.org
  • OrangoTag – Mediatracker for TV shows afficionados
  • Poxxa – Events website
  • Pelotas Center – Official Shopping Center
  • GoZub – “What are you doing now?”, such as Twitter
  • moourl.com – make your URLs smaller, such as Tinyurl.com
  • ViaRanking – Research for products, services and companies based on your location
  • Sismiko – Parties and events website
  • Mobbbi – Titles itself as “The Guide for Good Life” (careful, there are 3 “b”s)
  • trimboo – BitTorrent search engine
  • VoteBolsa – Online community to share information about the stock market
  • Investidor Virtual – Investment community and simulator.
  • BielBid – Online system for stock buyers and quotation requests
  • MyGuestmap – Google Maps Guestmap Service
  • spesa – Online personal budget manager
  • EmailFax – Online service to send/receive faxes
  • sua receita – Cooking recipes website
  • diHITT – Popular news, Digg style
  • Enterprysix – company simulator for administration courses, built for a college homework
  • tjnet – Cellphone entertainment website with rings, wallpapers, etc
  • Baú de Arquivos – Online file storage, so you can share and organize your files
  • Mapia – Directory for bars, restaurants, hotels
  • tecoteco.com.br – Flight prices research
  • Peneirando.com – Community to find the best answer for a question with many options
  • Meu Feirão!!! – Exchange and reselling of products

Disclaimer: The links are in no particular order. This website is not responsible for the content or any kind of problem related to the listed websites. The purpose is to promote those sites.

Rails Summit Latin America
Recommend me at Working with Rails
Vote no Rails Podcast Brasil!
Leia a tradução do livro Getting Real
Peepcode Supports AkitaOnRails.com
Compre Repensando a Web com Rails