Histórico de Octubre de 2009
Hace tiempo que decidí adoptar el método GTD a la hora de ir tratando con las tareas tanto personales como profesionales del día a día. Y aunque para seguir el GTD no haría falta usar ninguna aplicación, en mi caso decidí, después de probar varias, empezar a utilizar Things, junto a Things para iPhone.

Como hay gente que ya ha explicado muchísimo mejor de lo que podría hacerlo yo qué es Things os voy a dejar con un screencast de GTD con Things obra de Berto Pena, el genio que está detrás de Think Wasabi, bitácora de obligado seguimiento si estás interesado en mejorar tu productividad sea en la plataforma que sea (que eso acaba siendo lo de menos).
Paperclip es un plugin para Ruby on Rails que, debido a su potencia y sencillez, ha conseguido ser la elección de la mayoría de los desarrolladores a la hora de implementar de manera sencilla una solución a la hora de tener ficheros adjuntos a un modelo. Además está muy bien documentada tanto en su wiki como en los RDoc.
El ejemplo más básico de uso de paperclip sería el siguiente:
class User < ActiveRecord::Base
has_attached_file :avatar
end
Aparte de facilitarnos la vida a la hora de la subida de ficheros, mediante su integración con ImageMagick nos permite poder generar todas las miniaturas que necesitemos de una imagen dada:
has_attached_file :image,
:styles => { :normal => ["610x610>", :jpg], :mini => ["100x100#", :jpg] },
:convert_options => { :all => "-strip" },
:path => ":rails_root/public/images/articles/:id/:style.:extension",
:url => "/images/articles/:id/:style.:extension"
En este ejemplo estamos definiendo que, para el atributo image de nuestro modelo generaremos dos miniaturas: normal, cuyo tamaño será nunca superior a 610 de ancho o de alto (lo que primero suceda) y un tamaño mini, el cual será una imagen a 100×100 px haciendo crop y en caso de que la imagen sea más ancha que alta o viceversa. Además, para ambas miniaturas se quitarán todos los datos extra de la imagen (como el EXIF) para asegurarnos de que generaremos el menor tamaño posible de imagen (más opciones para los estilos o la conversión en la documentación de ImageMagick.
Desde nuestras vistas para hacer referencia al estilo mini no tendríamos más que hacer algo como lo siguiente:
<%= image_tag article.image.url(:mini) %>
En los parámetros :path y :url vemos que se hacen uso de etiquetas del estilo :id, :style o :rails_root. Es lo que dentro de Paperclip se conoce como interpolaciones, y que a la hora de su uso se sustituyen sobre la marcha por el dato que corresponda (:style se sustituiría por "mini", basándonos en el ejemplo anterior).
Una de las opciones más interesantes, aunque quizá de las menos usadas por la gente, son la posibilidad de definir nuestras propias interpolaciones. Por ejemplo, podríamos definir una interpolación de nombre :username, incluyendo el siguiente código en el fichero config/initializers/paperclip.rb:
Paperclip.interpolates :username do |attachment, style|
attachment.instance.username
end
El anterior código define que :username será sustituida por el atributo username de la instancia del modelo desde el que estemos usando Paperclip. De esta manera, si hiciesemos algo como lo siguiente:
class User < ActiveRecord::Base
has_attached_file :avatar, :path => ":rails_root/public/images/:username.:extension"
end
Como resultado, al llamar a user.avatar.path tendríamos "./public/images/mayoral.png". Pensad por ejemplo en el uso de permalink_fu y una interpolación que hiciese referencia al campo que alberga el permalink de un artículo… :P
En mi caso, otra línea que suele estar frecuentemente en config/initializers/paperclip.rb es la siguiente:
Paperclip.options[:command_path] = '/opt/local/bin'
De esta manera le indico a Paperclip donde reside el ImageMagick que instalé a través de MacPorts.
Para una segunda parte de esta entrada me dejo pendiente el uso de Amazon S3 como almacenamiento y la personalización del post-procesado de los ficheros adjuntos, con los denominados processors.