O RVM já se tornou a opção padrão para gerenciar múltiplas versões de Ruby. Ele permite instalar várias versões, alternar entre elas, instalar gems em cada versão independentemente… mas não funciona em ambiente Windows. Eu sei que este não é um ambiente muito popular para desenvolvimento Ruby, mas existem usuários de Windows (seja por opção ou por obrigação) programando em Ruby. Para estes, uma alternativa ao RVM é o Pik.

O Pik funciona de forma bastante semelhante ao RVM. Para instalá-lo, primeiro é necessário instalar o Ruby Installer, um pacote pré-configurado especialmente para instalar o Ruby no Windows. A documentação do Pik recomenda a versão 1.8.7. Em seguida, instale as gems rake, isolate e o próprio pik:

gem install rake isolate pik

Antes de instalar o isolate, talvez seja necessário atualizar o Rubygems com o comando abaixo:

gem update --system

O próximo passo é instalar o Pik no diretório de sua preferência. Um detalhe importante que já me custou um bom tempo é que o path completo não deve conter espaços. Execute o seguinte comando para instalar em C:\Ruby\pik, por exemplo:

pik_install C:\Ruby\pik

Concluída a instalação, o comando pik help commands exibe uma lista com os comandos disponíveis. Quem já usou o RVM não terá dificuldades, pois os comandos são bem semelhantes. Os comandos mais comuns são:

  • pik install ruby/jruby/ironruby [versão] -> instala a versão desejada do Ruby, JRuby ou IronRuby. A versão é opcional; se for omitida, será instalada a versão mais recente. Importante: antes de executar este comando, instale o 7zip e adicione-o ao path
  • pik list -> exibe as versões de Ruby atualmente instaladas
  • pik use [versão] -> seleciona uma versão instalada
  • pik gem [comando] -> executa um comando do Rubygems em todas as versões instaladas
  • pik ruby [parâmetros] -> executa Ruby em todas as versões instaladas

Inicialmente, o comando pik list exibe apenas a versão 1.8.7:

C:\Ruby\pik>pik list
* 187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]

Decidi instalar a última versão do Ruby e do JRuby. Após instalar estas duas versões, a saída do comando pik list ficou assim (o asterisco mostra a versão atualmente em uso):

C:\Ruby\pik>pik install ruby
...
C:\Ruby\pik>pik install jruby
...
C:\Ruby\pik>pik list
  161: jruby 1.6.1 (ruby-1.8.7-p330) (2011-04-12 85838f6) (Java HotSpot(TM) Client VM 1.6.0_24) [Windows XP-x86-java]
* 187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]

Para selecionar o JRuby, por exemplo, use o comando pik use 161 (é importante lembrar que neste caso os comandos mudam de nome: irb vira jirb, ruby vira jruby):

C:\Ruby\pik>pik use 161

C:\Ruby\pik>ruby -v
'ruby' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.

C:\Ruby\pik>jruby -v
jruby 1.6.1 (ruby-1.8.7-p330) (2011-04-12 85838f6) (Java HotSpot(TM) Client VM 1.6.0_24) [Windows XP-x86-java]

Para instalar gems, basta usar o comando gem install normalmente. A gem será instalada na versão atual do Ruby (ou seja, a que você selecionou com o comando pik use). O comando pik gem permite instalar uma gem em todas as versões:

C:\Ruby\pik>pik gem install mongo
jruby 1.6.1 (ruby-1.8.7-p330) (2011-04-12 85838f6) (Java HotSpot(TM) Client VM 1.6.0_24) [Windows XP-x86-java]

Fetching: bson-1.3.1-jruby.gem (100%)
Fetching: mongo-1.3.1.gem (100%)
Successfully installed bson-1.3.1-java
Successfully installed mongo-1.3.1
2 gems installed

ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]

Fetching: bson-1.3.1.gem (100%)
Fetching: mongo-1.3.1.gem (100%)
Successfully installed bson-1.3.1
Successfully installed mongo-1.3.1
2 gems installed
Installing ri documentation for bson-1.3.1...
Installing ri documentation for mongo-1.3.1...
Installing RDoc documentation for bson-1.3.1...
Installing RDoc documentation for mongo-1.3.1...

ruby 1.9.2dev (2010-05-31) [i386-mingw32]

Successfully installed bson-1.3.1
Successfully installed mongo-1.3.1
2 gems installed
Installing ri documentation for bson-1.3.1...
Installing ri documentation for mongo-1.3.1...
Installing RDoc documentation for bson-1.3.1...
Installing RDoc documentation for mongo-1.3.1...

O comando pik ruby permite executar um código em todas as versões instaladas, útil para verificar incompatibilidades entre as versões, como por exemplo o construtor com parâmetros da classe Time:

C:\Ruby\pik>pik ruby -e "puts Time.new('2011-01-01')"
jruby 1.6.1 (ruby-1.8.7-p330) (2011-04-12 85838f6) (Java HotSpot(TM) Client VM 1.6.0_24) [Windows XP-x86-java]

ArgumentError: wrong number of arguments (1 for 0)
  (root) at -e:1

ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]

-e:1:in `initialize': wrong number of arguments (1 for 0) (ArgumentError)
        from -e:1:in `new'
        from -e:1

ruby 1.9.2dev (2010-05-31) [i386-mingw32]

2011-01-01 00:00:00 -0200

Mais detalhes sobre o funcionamento do Pik podem ser encontrados no Github do projeto.


A principal característica de projetos open source é que qualquer pessoa pode contribuir com eles. Geralmente quando falamos em contribuir com este tipo de projeto, logo pensamos em código fonte - corrigir um bug ou implementar uma melhoria. Mas na verdade podemos contribuir de várias formas (para mais informações sobre o modelo open source, recomendo a leitura do famoso artigo The Cathedral and the Bazaar, de Eric Raymond), mesmo sem conhecimento técnico. Outra possibilidade é através de ajuda na documentação - melhorar uma documentação incompleta ou traduzir para outras línguas. Porém, apesar de não exigir conhecimentos específicos, exige tempo, o que nem sempre as pessoas têm disponível.

No caso do Firefox, há uma outra forma de contribuir para o projeto, que não exige qualquer conhecimento específico. É através do Test Pilot, uma extensão que, ao ser instalada, exibe uma lista de estudos sendo conduzidos pela Mozilla. Sempre que surgir um novo estudo, você poderá ver os detalhes dele e optar por participar ou não. O estudo que acontece com mais frequencia é o “A Week in the Life of a Browser”, onde, caso você aceite participar, durante uma semana o Test Pilot monitorará informações sobre o seu uso do browser, como memória utilizada, número de abas abertas simultaneamente, número de downloads e de bookmarks - ou seja, nenhuma informação sensível do usuário é coletada. No final do período do estudo, esses dados são enviados para a Mozilla, mas antes você pode ver exatamente que informações serão enviadas através de gráficos como esse:

Test Pilot

Alguns estudos são pesquisas sobre usabilidade e funcionalidades específicas, como mecanismos de busca e uso de bookmarks e dos botões na toolbar. Para ver os estudos já realizados, acesse a página de test cases. Para participar, basta instalar a extensão.


A classe Time do Ruby é usada, como esperado, para representar uma data e hora. Existem várias formas de criar uma nova instância, a mais óbvia é usando Time.new (ou Time.now), que cria uma nova instância com a data e hora atuais:

irb(main):007:0> Time.new
=> Wed Feb 09 13:23:52 -0200 2011
irb(main):008:0> Time.now
=> Wed Feb 09 13:23:53 -0200 2011

Também é possível criar uma instância usando métodos como Time.at(time), que recebe um timestamp como parâmetro, Time.local(year, month, day, hour, min, sec_with_frac) e outros. Também há um construtor que recebe como parâmetro uma string representando a data:

irb(main):001:0> Time.new('2011-01-01')
=> Sat Jan 01 00:00:00 -0200 2011

Eu havia escrito um código que usava esse construtor no pidgin-logs-compressor, mas quando testei no JRuby 1.5.5, recebi uma exceção “ArgumentError: wrong number of arguments (1 for 0)”. Achei que fosse algum bug do JRuby, e realmente havia esse bug na versão que eu usava, mas já estava corrigido no JRuby 1.6RC1. Atualizei para esta versão, mas o erro continuou. Descobri que o erro que eu estava cometendo era relacionado com a versão do Ruby, e não do JRuby. Esse construtor com parâmetros é aceito no Ruby 1.9, mas não no 1.8.7, que é a versão usada por padrão pelo JRuby. Para fazer com que ele utilize a versão 1.9, basta acrescentar o parâmetro --1.9 na linha de comando:

jruby --1.9 -e 'puts Time.new("2011-02-16")'

Para manter compatibilidade com versões anteriores, é necessário usar algum dos outros métodos, como eu optei por fazer no pidgin-logs-compressor.

Para um overview de algumas novidades do Ruby 1.9: New Ruby 1.9 Features, Tips & Tricks.


Dica rápida de Ruby: se ao tentar instalar uma Rubygem no Ubuntu você receber uma mensagem como essa:

[email protected]:~$ sudo gem install mechanize
Building native extensions.  This could take a while...
ERROR:  Error installing mechanize:
    ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
extconf.rb:5:in `require': no such file to load -- mkmf (LoadError)
    from extconf.rb:5

A solução é simples: basta instalar o pacote ruby-dev: sudo apt-get install ruby-dev. Este pacote é necessário para a instalação de gems nativas, que precisam ser compiladas na instalação.


Alguns anos atrás, comecei a sentir necessidade de manter meus bookmarks sincronizados entre os diversos computadores que eu utilizava. Até que conheci o Delicious. Isso foi em 2007, e desde então eu comecei a usá-lo constantemente. Cada vez que eu usava o Firefox em algum computador pela primeira vez, a primeira extensão que eu instalava era a do Delicious. Através desta extensão, um simples Control+D abre a janela para adicionar a página atual ao seus bookmarks do Delicious, e Control+B abre a barra lateral com seus bookmarks, organizados por tags.

Há alguns meses, eu havia pensado em migrar meus bookmarks para o Google Bookmarks, mas desisti, pois eu já estava bastante acostumado com o Delicious. Até que no início de dezembro veio a bomba: o Yahoo, que havia comprado o Delicious em 2005, anunciou que encerraria o serviço! Imediatamente comecei a pensar em alternativas, e o Google Bookmarks foi minha primeira opção. Alguns dias depois, o Yahoo voltou à cena informando que iria vender, e não fechar o serviço, e o próprio Delicious publicou uma nota sobre o assunto. Mas, mesmo assim, para mim foi a deixa para fazer a migração para outro serviço. Apesar de existirem várias alternativas ao Delicious, escolhi o Google Bookmarks pela simplicidade, e por já estar integrado à minha conta no Google.

A primeira parte da migração foi fácil: exportar os bookmarks do Delicious, através da opção Settings -> Export/Backup Bookmarks. Para importá-los no Google Bookmarks, uma das maneiras mais simples é importar os bookmarks do Delicious no Firefox e sincronizá-los com o Google Toolbar. Também é possível fazer a importação usando o Google Chrome, ou usar algum script (como este) ou serviço, como o del.icio.us to Google Bookmarks.

Em seguida, procurei as opções para integração com o browser (adicionar e pesquisar nos bookmarks). No Firefox existem diversas extensões para Google Bookmarks. Testei algumas, e a que achei melhor foi o GMarks. Com ela, é possível adicionar bookmarks com Control+D, de forma bem semelhante à extensão do Delicious, e também há uma barra lateral, acionada com Alt+M. Porém, não há integração com a barra de endereços, ou seja, não é possível pesquisar nos bookmarks digitando diretamente o endereço (como permitem as versões mais recentes da extensão do Delicious). Porém, há duas maneiras de pesquisar (além de acessar diretamente a página do Google Bookmarks para fazer a pesquisa):

  1. Ao digitar a tecla Home duas vezes, aparecerá uma caixa de texto para pesquisa. É só digitar qualquer coisa e depois escolher um resultado e apertar Enter (ou Alt+Enter para abrir em outra aba)
  2. Criando um atalho para a busca: acesse o Google Bookmarks, clique com o botão direito sobre o campo de busca e selecione a opção “Add a keyword for this search”. O Firefox adicionará a pesquisa nos bookmarks locais, e você poderá adicionar um keyword a este bookmark. Digite “gb”, por exemplo, e clique em OK. Agora, ao digitar qualquer texto precedido desta keyword na barra de endereços (por exemplo: “gb teste”), o Firefox pesquisará este texto no Google Bookmarks. Mas os resultados não aparecem diretamente, você precisa escolher a opção “Search Google Bookmarks” entre as sugestões que aparecem

Para integrar o Google Bookmarks ao Chrome é ainda mais simples, pois não é necessário instalar qualquer extensão (afinal, ambos são do Google). Para adicionar bookmarks, acesse a página de ajuda. Ela disponibiliza um botão que pode ser arrastado para a barra de bookmarks, e ao clicar nele, a página atual será adicionada. Para adicionar a pesquisa no Google Bookmarks à barra de endereços, clique na barra com o botão direito, selecione “Edit search engines” e adicione um novo, com as seguintes configurações:

Nome: Google Bookmarks

Keyword: gb

URL: http://google.com/bookmarks/find?&q=%s

Agora, a pesquisa integrada à barra de endereços funcionará da mesma forma que no Firefox (“gb texto para pesquisa”).