Instalando o memcached no Mac OS X

10/07/08

O memcached é um sistema distribuído de cache em memória utilizado por muitos sites com tráfego intenso como Youtube, Wikipedia e Digg. Para instalá-lo no Mac OS X Leopard[bb], siga os passos abaixo, que seguem a velha receita de bolo configure-make-install.

Iniciando a instalação

Antes de instalar o memcached, é preciso instalar a biblioteca libevent. Acesse o site http://monkey.org/~provos/libevent/ e faça o download da última versão. Após extrair seus arquivos, execute os comandos abaixo para compilar e instalar esta biblioteca.

cd libevent-1.4.5-stable
./configure
make
sudo make install

Agora, você pode instalar o memcached propriamente dito! O código-fonte do memcached pode ser encontrado em http://www.danga.com/memcached/. Faça o download e, depois de extrair os arquivos, execute:

cd memcached-1.2.5
./configure
make
sudo make install

Se você pretende utilizar o memcached em uma aplicação Ruby on Rails, você precisa instalar a gem de mesmo nome. Antes, você precisa instalar a biblioteca libmemcached. Acesse o site http://download.tangent.org/ e faça o download da última versão. Extraia os arquivos e execute os comandos abaixo.

cd libmemcached-0.21
./configure
make
sudo make install

E para finalizar, instale a gem memcached.

sudo env ARCHFLAGS="-arch i386" gem install memcached

Criando objetos de dados com OpenStruct

06/07/08

Imagine que você tenha um hash cujos atributos serão chamados muitas vezes durante um trecho de código.

user = {
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
}
 
puts user[:name]
puts user[:blog]
puts user[:style]
 

O hash, embora útil, ainda não é a forma mais prática. Seria muito mais conveniente se você pudesse acessar cada um dos atributos como se fossem métodos. Algumas pessoas que não conhecem a linguagem muito bem iriam estender a classe Hash, sobrescrevendo o método method_missing, como já vi algumas implementações por aí. Mas como você é um cara esperto, iria utilizar o OpenStruct.

O OpenStruct permite que você crie objetos com atributos que não estão atrelados a uma classe, mas ainda assim respondem como se fossem métodos, com getters e setters.

require 'ostruct'
 
user = OpenStruct.new({
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
})
 
puts user.name
puts user.blog
puts user.style
 

Muito melhor! Os atributos também podem ser modificados. Basta atribuir um valor qualquer.

user.style = 'emo'

Conheça a linguagem que está programando. O Ruby é muito simples de ser adaptado às suas necessidades, mas se você não conhecer a linguagem irá reinventar a roda e, quase sempre, sua solução não será a melhor nem a mais rápida.

Redimensionando imagens com Ruby e Image Science no Mac OS X

02/07/08

Se você precisa criar miniaturas de imagens com Ruby, esqueça o RMagick. Embora ele tenha muito mais funcionalidades que, convenhamos, quase ninguém usa, chegou a hora de conhecer o Image Science que, segundo seus autores, não sofre dos mesmos problemas de memory leak que o RMagick.

O Image Science possui algumas funções específicas para a geração de miniaturas, como redimensionamento e crop, utilizando o Free Image. Segundo os criadores do projeto, ele não sofre dos mesmos problemas de memory leak que RMagick.

Como instalar

Para instalar o Free Image, você precisará do XCode. Não se esqueça de adicionar o SDK para o Mac OS X 10.3.9, que não vem selecionado por padrão.

Tela de instalação do XCode

Instalando o Free Image

Baixe o código-fonte do Free Image na página do projeto SourceForge. A versão que instalei foi a 3.10.0.

Após extrair os arquivos, abra o arquivo "MakeFile.osx" e altere as linhas abaixo de

LIBRARIES_PPC = -Wl,-syslibroot /Developer/SDKs/MacOSX10.3.9.sdk 
LIBRARIES_I386 = -Wl,-syslibroot /Developer/SDKs/MacOSX10.4u.sdk

para

LIBRARIES_PPC = -Wl,-syslibroot /Developer/SDKs/MacOSX10.3.9.sdk/usr/lib 
LIBRARIES_I386 = -Wl,-syslibroot /Developer/SDKs/MacOSX10.4u.sdk/usr/lib

Agora, basta compilar!

make
sudo make install

Instalando o Image Science

Para finalizar, basta instalar o Image Science.

sudo gem install RubyInline
sudo gem install image_science

O Image Science é muito simples. Para redimensionar imagens proporcionalmente, limitando o maior tamanho, faça algo como o exemplo abaixo.

ImageScience.with_image(file) do |img|
  img.thumbnail(100) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end

Se você quiser redimensionar a imagem sem se preocupar com a proporção, você pode usar o método resize.

ImageScience.with_image(file) do |img|
  img.resize(100, 150) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end

E, por último, existe o método cropped_thumbnail, que recorta a imagem no tamanho especificado.

ImageScience.with_image(file) do |img|
  img.cropped_thumbnail(100) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end