sábado, 21 de noviembre de 2009

Conferencia Rails 2009

El próximo miércoles 25 comienza la Conferencia Rails 2009. Este año me han colocado las cosas como a mí me gustan, casi sin colisiones entre temas interesantes. Además hay mucha presencia internacional, tanto en ponentes como en asistentes: Obie Fernández, Yehuda Katz, David Black, Scott Chacon... Aquí podéis ver la nota de prensa oficial.

En CameraWC he subido un vídeo para saludar tanto a los asistentes como a los no asistentes. Y en unvlog hay muchos más.

Bueno, tengo fundadas esperanzas en que este año todo va a ser mucho mejor que el pasado. La semana que viene lo comentamos. Salud y rocanrol!

I was getting kind of tired of her endless chatter.
Nothing I could say ever seemed to matter.
So I took a little drive just to clear my head,
and I saw a flashing neon, up ahead.
It looked like a place to find some satisfaction
with a little less talk and a lot more action.

I paid the man at the door and pushed my way to the bar.
Shouted for a drink over a screaming guitar.
A drunk on a stool tried to mess with my head
but I didn't even listen to a word he said.
I knew somewhere amid all this distraction.
Was a little less talk and a lot more action

jueves, 12 de noviembre de 2009

Generando un avatar

Inventemos una palabra en castellano para traducir avatar. Podemos castellanizarla directamente, avatario o ávatar, porque parece que no podemos traducirla y, algo como, imagencilla, imagen de usuario o imagen en twitter, no me convence del todo.

Y dicha la tontería, vamos a lío. Supongamos que tenemos una imagen cuya ruta es C:/Users/danimata/full_body.jpg. Vamos a recortar un trozo de la imagen cuyo vértice superior izquierdo es (x1, y1) e inferior derecho (x2, y2). Además, para que el recorte nos quede bien en nuestra página de perfil de usuario, lo vamos a escalar para que tenga altura h y anchura w. Finalmente, lo guardaremos como C:/Users/danimata/avatar.jpg

Si utilizamos RMagick haremos lo siguiente:

require 'RMagick'

img = Magick::Image.read("C:/Users/danimata/full_body.jpg").first
tmp_avatar = img.crop(x1, y1, (x2 - x1 + 1), (y2 - y1 + 1))
avatar = tmp_avatar.resize(w, h)
temp = Tempfile.new("C:/Users/danimata/avatar.jpg") avatar.write "png:" + temp.path

Sin embargo, si utilizamos image_science haremos lo siguiente:

require 'image_science'

temp = Tempfile.new("C:/Users/danimata/avatar.jpg")
ImageScience.with_image "C:/Users/danimata/full_body.jpg" do |image|
  image.with_crop x1, y1, x2, y2 do |cropped|
    cropped.resize w, h do |avatar|
      avatar.save temp.path
    end
  end
end

Y listo. Como siempre, salud y rocanrol!

La noche se está cayendo
y con ella cae el tiempo.
El día no sirvió de nada,
tarde de nubes sin agua.
Hoy el cielo es de cemento,
parece que dios está muerto.
Golpean la puerta de casa,
mensajeros de desgracia...
¡malas noticias!