segunda-feira, setembro 20, 2010

Duvidando do óbvio: Gravidade?

Não sou nenhuma sumidade no assunto, aliás, sou uma porta de leigo nessa bagaça... mas... e se ao invés de vivermos um mundo redondo, estivermos na verdade em um mundo chato, mas com a gravidade torcendo o espaço sobre si mesmo?

sábado, setembro 18, 2010

Ruby 1.9.2 - diferenças com expressões regulares

O Ruby 1.9.2 veio com algumas poucas incompatibilidades com as versões anteriores. Duas delas me parecem um pouco "inconvenientes", a primeira comentei no post anterior. A segunda tem a ver com mudanças em expressões regulares.

Do ruby-lang.org (http://svn.ruby-lang.org/repos/ruby/tags/v1_9_2_0/NEWS)

* \d, \s, and \w are now ASCII only; use POSIX bracket classes and \p{} for Unicode semantics

O que significa que no Ruby 1.8.7, isso aqui funciona:

> irb -Ku
> "você" =~ /\w$/
=> 3

Mas não no Ruby 1.9.2:

> irb
> "você" =~ /\w$/
=> nil

Para que a coisa funcione corretamento no 1.9.2 é preciso usar "\p{Alpha}":

> irb
> "você" =~ /\p{Alpha}$/
=> 3

Perfeito, mas se você tenta a mesma solução no Ruby 1.8.7:

> irb -Ku
> "você" =~ /\p{Alpha}$/
(irb):1: warning: regexp has invalid interval
(irb):1: warning: regexp has `}' without escape
=> nil

Okay... nada que seja um absurdo, mas para quem trabalha com a língua portuguesa isso fica um pouco chato.

terça-feira, setembro 14, 2010

Ruby 1.9.2 primeiras experiências

A versão final do Ruby 1.9.2 foi liberada mês passado (agosto/2010), e só agora comecei a meter a mão na massa nele pra valer.

Logo de cara, já tive alguns problemas menores, mas importantes:

O primeiro foi no "require", a partir dessa versão o diretório atual não está mais incluído no $LOAD_PATH. O que significa que essa construção passa a ter problemas:
require File.dirname(__FILE__) + '/algum_subdiretorio/algum_ruby'
Para resolver isso, duas soluções:

A primeira é expandir o caminho:
require File.expand_path(File.dirname(__FILE__)) + '/algum_subdiretorio/algum_ruby'
A segunda, mais sensata, é adicionar especificamente o diretório "raiz" da aplicação ao $LOAD_PATH, como sugerido aqui)
$LOAD_PATH << File.expand_path(File.dirname(__FILE__)) + '/../lib'
require 'algum_subdiretorio/algum_ruby'
require 'outro_subdir_dentro_de_lib/outro_arquivo_ruby'
Com algum esforço, dá até pra criar um script pra arrumar isso automaticamente ;-)