Apuntes de Rails

y de otras cosas

Quitar los metadatos exif de las fotos

Ahora que he empezado a escribir un blog con mis cacharreos con Arduino, se me ha presentado la necesidad de quitar los metadatos exif de las fotos que subo, porque no quiero publicar tanta información en cada foto.

Una solución, si no quieres redimensionar o recomprimir la imagen, es la que dan en esta pregunta de stackoverflow usando ExifTool:

exiftool -all= image.jpg

Como además de quitar los datos quiero redimensionar las fotos para que pesen menos y encajen mejor en el blog, al final he optado por usar ImageMagick desde línea de comandos para hacerlo todo del tirón con el comando:

convert image.jpg -resize 600 -quality 95 -strip converted_image.jpg

La opción -strip quita todos los datos exif de la imagen.

Para convertir todos las imágenes de golpe me he hecho un pequeño script en ruby que hace justo lo que necesito:

#!/usr/bin/env ruby

size = ARGV.shift || 600

Dir.glob('*.{jpg,png,gif}', File::FNM_CASEFOLD).each do |file|
  puts "Converting image #{file}"
  system("convert #{file} -resize #{size} -quality 95 -strip #{file}")
  Dir.mkdir("converted") unless File.exists?("converted")
  File.rename file, "converted/#{file}"
end

RubyPair.com, pair programming en Ruby

RubyPair.com es una web donde encontrar gente con la que hacer pair programming en Ruby, ya sea en remoto o de forma local. En realidad la web es bastate sencilla, te das de alta a través de tu cuenta de GitHub y rellenas tu perfil con unos pocos datos como tu cuenta de twitter y tus intereses y apareces en el listado donde la gente puede buscar pares. También puedes marcar tu perfil como disponible en ese momento y saldrás en otro listado de gente disponible.

Lo descubrí hace poco escuchando el capítulo 12 del podcast Ruby Freelancers y me pareció buena idea, pero cuando fui a darme de alta había un problema con el login a través de GitHub. Como tenía ganas de darme de alta y resulta que el código del sitio está en GitHub hice un pull request con los cambios que hacían falta para que el login volviese a funcionar.

El error se solucionaba actualizando la versión de la gema omniauth, así que en el Gemfile había que asegurarse que la versión de omniauth era la 1 y añadir omniauth-github para utilizar esta estrategia de autenticación, ya que a partir de la versión 1 de omniauth cada una de las estrategias de login (facebook, twitter, github, etc) va en una gema aparte. Al cambiar de versión de OmniAuth cambian algunos nombres en el auth hash que devuelve omniauth, pero con un par de cambios en los métodos que lo utilizan y sus correspondientes tests queda todo arreglado. Se pueden ver los cambios en concreto en https://github.com/rubypair/rubypair/pull/54/files.

Ahora que el login vuelve a funcionar, ¿te animas a apuntarte?

Rails Starter Box

En los últimos días he estado componiendo una box para Vagrant con las cosas básicas instaladas para poder empezar a desarrollar aplicaciones Rails. Mi idea es que se pueda usar por gente que esté empezando o quiera probar Rails sin tener que pelearse mucho con su sistema operativo para instalar rvm o las dependencias de rmagick, por ejemplo.

La idea se me ocurrió leyendo el libro Deploying Rails y está muy basada en la rails-dev-box de fxn.

El siguiente paso será empaquetarla para que se pueda user directamente como base box en Vagrant.

De momento aquí está el código:

https://github.com/amaia/rails-starter-box

Newsletters semanales para estar al día

Una de newsletters semanales para estar al día de lo que pasa por el mundo del desarrollo web y alrededores:

Y si te va el tema de startups Rahul Chaudhary hace otra llamada Founder Weekly.

Seguro que hay muchas más pero estas son las que yo conozco, si sabes de otras ponlas en los comentarios, por favort.

Instalación de Vagrant en Ubuntu 12.04

Ahora que estoy leyendo el libro Deploying Rails, estoy volviendo a trastear un poco con Vagrant.

Antes la forma recomendada de instalar Vagrant era mediante Rubygems, pero ahora la forma recomendada es mediante paquetes del sistema operativo, así que descargué vagrant_1.0.3_x86_64.deb para mi Ubuntu 12.04 y lo instalé. Pero resulta que la instalación se hace en /opt/vagrant y ese directorio no está en el path, hay que hacer un enlace simbólico en /usr/local/bin (por ejemplo, o en otro directorio que sí esté en el path) o añadir /opt/vagrant al path. Lo pone en la documentación, pero a mí se me había pasado al leerlo.

Para hacer un enlace simbólico:

sudo ln -s /opt/vagrant/bin/vagrant /usr/local/bin/vagrant

Para añadir el directorio de instalación al path, en ~/.bashrc añadir la línea:

PATH=$PATH:/opt/vagrant/bin

Y para jugar con distintos sistemas las “base boxes” están en:

Official boxes: https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Boxes

Other boxes: http://vagrantbox.es

Migrando el blog a Octopress

Hacía siglos que no escribía en este blog, al principio pensé que era sólo que no tenía nada que escribir, pero después me di cuenta que una de las cosas que más pereza me daba de ponerme a escribir algo era usar una interfaz web para publicar, que además iba bastante lenta en el hosting donde tenía el blog. Había migrado el blog del Simplelog original a Drupal hacía unos cuantos meses, incluso hice la migración de Drupal 6 a Drupal 7, pero no me decidía a escribir nada.

Últimantente le he cogido el gustillo a Git como control de verisones y a editar ficheros en Vim y pensé que me resultaría más cómodo usar un gestor de blogs como Octopress para publicar. En Octopress los posts son ficheros que editas con cualquier editor y el sitio web se genera como html estático que luego subes a algún sitio, en mi caso a Heroku. Además puedes ver cómo queda todo en local antes de subirlo al servidor.

Así que me puse manos a la obra y aquí está el blog con Octopress, con un theme de Alessandro Melandri, que ya iré modificando más a mi gusto, y los comentarios con Disqus, ya que al pasar a un blog con html estático la gestión de comentarios hay que externalizarla.

Los comentarios de los posts antiguos los he dejado como comentarios estáticos dentro de cada post, porque no me parecía buena idea importarlos a Disqus con los datos (p.ej. email) de gente que cuando hizo el comentario no lo hizo ahí, y yo no soy nadie para darle el email de otra persona a un servicio externo.

Creo que con este cambio le daré un poco más de vidilla al blog.

Desactivar servicios en el arranque de Ubuntu

Últimamente he instalado muchos servicios nuevos en mi portátil para ir probando, pero que no uso a diario, como PostgreSQL, Redis, MongoDB, CouchDB, etc. y no quiero que se arranquen automáticamente al inicio para que no consuman recursos innecesarios si no los estoy usando. Como siempre google tiene la respuesta y esta vez estaba en http://superuser.com/a/418012.

sudo update-rc.d mysql disable 2

This will rename the sym link to start with ‘K’ and the service won’t start-up on boot. You can then re-enable it at any time if you do decide you want it to start-up on boot.

Presentaciones de la Conferencia Rails 2011

Estaba esperando a que se publicasen los vídeos de la Conferencia Rails 2011 para hacer un post con los enlaces, pero como parece que los vídeos se retrasan y que ya no habrá más ediciones de la conferencia, dejo aquí un enlace al gist en el que recopilé en su momento los enlaces a las presentaciones de las charlas que se dieron.

Conferencia Rails 2010

La semana pasada tuvo lugar la 5ª Conferencia Rails, la 4º a la que asisto.

Este año ha habido un sólo track y además la conferencia se ha hecho más internacional y todas las charlas fueron en inglés. Lo de un único track me ha gustado bastante, así no hay dilemas a la hora de escoger a qué charla asistir y supongo que es más fácil para la organización gestionar sólo una sala. Sobre el idioma, a los hispanos prefiero escucharlos en español, pero la verdad es que me da igual, siempre que los ponentes no tengan un acento de esos complicados de pillar (el año pasado hubo un par que me costaba seguir).

Pronto estarán disponibles los vídeos pero mientras hago aquí una lista de las slides publicadas hasta ahora para encontrarlas más fácilmente.

[ACTUALIZACIÓN] Videos publicados en http://globalplaza.org/spaces/conferencia-rails/events/conferencia-rails-2010

Migración de ficheros de FileColumn a Paperclip

Dejo aquí una chuletilla para migrar los attachments de FileColumn a Paperclip que tenía por ahí guardada desde hace meses.

En este caso lo hice en la migración pero se puede hacer en una tarea rake, o directamente desde la consola. Una vez que tienes los campos necesarios para Paperclip, y los datos del attachment definidos en el modelo, puedes hacer:

Modelo.all.each do |f| 
  f.fichero = File.open("#{RAILS_ROOT}/public/modelo/fichero/#{f.id}/#{f.fichero_viejo}",'rb')
  f.save
end 

Se puede mejorar mucho, pero como era sólo una vez esto me sirvió, lo dejo aquí por si a alguien más le sirve como punto de partida.

class FdsAPaperclip ActiveRecord::Migration                                                                                                                
  def self.up
    rename_column :fds, :fichero, :fichero_viejo
    add_column :fds, :fichero_file_name, :string
    add_column :fds, :fichero_content_type, :string
    add_column :fds, :fichero_file_size,    :integer
    add_column :fds, :fichero_updated_at,   :datetime

    Fds.all.each do |f| 
      f.fichero = File.open("#{RAILS_ROOT}/public/fds/fichero/#{f.id}/#{f.fichero_viejo}",'rb')
      f.save
    end 

  end 

  def self.down
    rename_column :fds, :fichero_viejo, :fichero
    remove_column :fds, :fichero, :fichero_file_name
    remove_column :fds, :fichero_content_type
    remove_column :fds, :fichero_file_size
    remove_column :fds, :fichero_updated_at
  end 
end