miércoles, 2 de noviembre de 2011

Rmagick en windows

Qué gusto da trabajar en Ruby sobre Windows desde que existen Pik y DevKit. Aún así, todavía se me resisten algunas gemas y utilidades, como el puñetero SystemTimer, que sinceramente, me da lo mismo.

Ayer instalé la última versión de Rmagick y tuvo tela. Primero instalé la versión 2.12.0 de Rmagick que viene con Imagemagick 6.5.6. Antes esto era lo más seguro pero con bundler no funciona. Después de dar mil vueltas encontré la solución en uno de mis sites favoritos: stackoverflow. En la primera respuesta a esta pregunta está la solución, que además te ayuda a dejar la última versión de Rmagick e Imagemagick instalada.

Por el camino, encontré que para indicarle a bundler que la version que necesitas de una gema es windowsera, se especifica con el parámetro...

:platform => :mswin

Mucha más información aquí.

Y nada más. ¡Salud y rock'n'roll!

Now I've been hanging out with my rebel son Mr Rock,
and I don't really like the stuff they call hip-hop.
But he's sure been good to me, and I'm bound to make him see,
that in Country Music you just can't say the 'F' word.

My son Shelton says he's been having a hard time.
Yeah he does great shows but he's just gotta speak his own mind.
Now, Hank, I wonder where that came from, you know that he's a real son of a gun.
Take the old man's advice, be nice and lose the 'F' word.

Oh no, in country music you just can't say the 'F' word.
We've come a long way but it's best if that one's not heard,
Oh we've had some hell's and damm's, we don't say 'bitch' we say 'why, yes ma'am'.
In country music you just can't say the 'F' word!


sábado, 8 de octubre de 2011

SaSS sí. CoffeeScript no.

Después de asistir al FOWA y ver al propio Hampton Catlin hablar de su SaSS, creo que me voy a convertir a SaSSero en breve.

SaSS es simplemente una forma de escribir CSS de manera más elegante y sencilla, eliminando muuuuuuucho contenido que no tiene sentido repetir. Sin saber CSS no se puede codificar SaSS.

Sin embargo, no puedo decir lo mismo de CoffeeScript. Escribir algo parecido a Ruby para generar javascript me parece de vagos. Y más después de escuchar la conferencia de Sam Stephenson. Me parece que con JQuery tengo más que suficiente y no tengo ninguna necesidad de reaprender algo que ya sé (un poco). No me parece que cueste tanto escribir javascript como para que merezca la pena hacer el esfuerzo de aprender este CoffeeScript.

Del mismo modo que no creo que merezca la pena aprender a escribir Haml cuando lo suyo es ecribir HTML limpio y estructurado.

Pero esta es sólo mi opinión. ¡Salud y Rocanrol!

Son ya las ocho, el ruido en mi calle es infernal.
Perforan la acera por cuarta vez o por quinta ya.
Son como hormigas que buscan comida sin parar.
La rompen, la cierran, mañana otra vez vuelta a empezar.

Comienza un nuevo día en mi ciudad.
Tendré que levantarme sin descansar.
El autobús no llega, estoy fatal.
El metro viene lleno, tendré que andar.

¿Cuándo los gobernantes funcionarán de un modo racional?
Ellos que se pasaron media vida en la universidad.

Cuándo el gobierno te manda una carta, has de temblar.
Señor ciudadano tiene que pagar un poco más.
Mañana pagará por su aparcamiento.
Pasado pagará por cualquier invento.
No te perdonan ni una, viene la grúa.
La fórmula para ellos siempre es multar.

¿Cuándo recibiremos alguna buena nueva del poder?
¿Cuándo? Creo que nunca, pues desde siempre nos tocó perder.

Y si protestas te acusarán de antisocial.
Joven melenudo acate usted la autoridad.
Pues de lo contrario, ya sabe muy bien a donde irá.

viernes, 8 de julio de 2011

¿Oculto suena? (Aprendiendo de los errores III)


¡Atención, pregunta! Si en una div oculto embebo (y cigala) un vídeo de Youtube... ¿sonará y no se verá? ¿se quedará sin voz hasta mostrarlo? ¿hará otra cosa totalmente distinta?

La respuesta es la de siempre: depende del navegador. Según mis pruebas, en Firefox, Safari e Internet Explorer 7 no suena y no se ve, mientras que en Chrome e Intenet Exlorer 8 suena y no se ve. Seguro que hay una respuesta en el modo en que se renderizan los elementos ocultos de una página, pero no me he molestado en buscarla la verdad.

Claro que os preguntaréis (o no) qué narices haré yo ocultando un vídeo de Youtube. Pues eso, que está bien hacerse preguntas :o)

Y este fin de semana, los Maiden en Madrid. Así que, más que nunca... ¡Salud y rocanrol!

Tell me why I had to be a Powerslave
I don't wanna die, I'm a God.
Why can't I live on?
When the Life Giver dies,
All around is laid waste.
And in my last hour, I'm a Slave to the Power of Death.

domingo, 3 de julio de 2011

¡Qué gracia tiene!

¡Qué arte! ¡Qué duende! ¡Qué tronío tiene Internet Explorer! Pero no sólo el 6, ¡todos! Y yo sin enterarme... de nuevo me caigo del guindo.

Resulta que si capturas el evento resize del objeto window del navegador, todo va bien mientras no se te ocurra recolocar y/o cambiar de tamaño cualquier elemento de la página. Es entonces cuando Internet Explorer decide que lo vuelve a lanzar y lanzar y relanzar... y termina su gran actuación con el mítico chiste Out of memory.

El bug está documentado por todas partes para IE6 e IE7 pero yo también lo he visto en plena acción en IE8. De las soluciones que he encontrado, las dos más utilizadas son: utilizar un timeout que rompa la cadena de recoloco-capturo_evento-recoloco-capturo_evento y eliminar el manejador del evento en el momento que se empiezan a recolocar elementos y reponerlo al terminar.

Yo he optado por una mezcla. Con JQuery...

function manageResize(){
 $(window).unbind('resize');

 ...haz lo que tengas que hacer...

 setTimeout('$(window).resize(function(e){manageResize();})', 25);
}

Es decir, elimino el manejador y, al terminar, lo recupero con un timeout de unos pocos milisegundos para darle tiempo a que los eventos que genera la recolocación de elementos se pierdan en el infierno de los bytes.

Y nada más. ¡Salud y rocanrol!

All aboard!

Crazy, but that's how it goes
Millions of people living as foes
Maybe it's not too late
To learn how to love
And forget how to hate

Mental wounds not healing
Life's a bitter shame
I'm going off the rails on a crazy train!

I've listened to preachers
I've listened to fools
I've watched all the dropouts
Who make their own rules
One person conditioned to rule and control
The media sells it and you live the role

Mental wounds still screaming
Driving me insane
I'm going off the rails on a crazy train!

I know that things are going wrong for me
You gotta listen to my words
Yeah!

Heirs of a cold war
That's what we've become
Inheriting troubles I'm mentally numb
Crazy, I just can not bare
I'm living with something
that just isn't fair

Mental wounds not healing
Who and what's to blame
I'm going off the rails on a crazy train!

jueves, 23 de junio de 2011

Un par de librerías javascript interesantes

Jopelines, qué poco tiempo tengo para escribir! Bueno, sólo voy a apuntar un par de librerías javascript que me han resultado útiles recientemente.

JQuery Rotate sirve para rotar imágenes. Me ha resultado muy útil para hacer una especie de potenciómetro, como una rueda de búsqueda de emisoras en las radios antiguas. En breve estará en vivo para que podáis ver cómo funciona.

JQuery Masonry sirve para dinamizar el layout de una página eliminando los espacios en blanco que se quedan con los habituales floats.

Y nada más. Salud y rocanrol!

Darling you gotta let me know
Should I stay or should I go?
If you say that you are mine
I'll be here til' the end of time
So you got to let know
Should I stay or should I go?

Always tease tease tease (siempre coqueteando y engañando)
You're happy when I'm on my knees (me arrodilla y estas feliz)
One day is fine, next is black (un día bien el otro negro)
So if you want me off your back (alrededor en tu espalda)
Well come on and let me know (me tienes que decir)
Should I stay or should I go? (me debo ir o quedarme)

Should I stay or should I go now?
Should I stay or should I go now?
If I go there will be trouble
And if I stay it will be double
So come on and let me know

This indecision's bugging me (esta indecisión me molesta)
If you don't want me, set me free (si no me quieres, librame)
Exactly whom I'm supposed to be (digame que tengo ser)
Don't you know which clothes even fit me? (saves que robas me querida?)
Come on and let me know (me tienes que decir)
Should I cool it or should I blow?

Should I stay or should I go now?
Should I stay or should I go now?
If I go there will be trouble
And if I stay it will be double
So come on and let me know
Should I stay or should I go?

miércoles, 30 de marzo de 2011

El arte de medir

Este es un post especial. No va de rails, ni de html, ni de javascript... ni si quiera es técnico. ¡Mi chica ha escrito un libro! Pero no un libro cualquiera... Ha escrito el mejor libro de analítica web en castellano (al menos a mí me lo parece).

Comparte autoría con Tristán Elósegui, experto en marketing online.

El nombre del libro es El Arte de Medir y tiene página web. Si os apetece, echad un ojo.

¡Salud y rocanrol!

Cierro mis ojos y creo ver
tus labios rojos junto a mi piel.
Sueño contigo y tengo sed.
Cuando despierto pierdo la fe.
Pero un día alcanzaré
besarte siempre que desee.
Aunque no puedas comprender,
quiero besarte otra vez ¡Mua!.

sábado, 19 de marzo de 2011

Una mañana en Mountain View, CA


En Mountain View hay un montón de de cosas: hayyyyyyyyyy... mmmmmmmmm... estoooooooo... tienennnnnnnnn... y también están las oficinas de Google. Que no digo yo que no haya otras cosas interesantes, ni otras empresas que molen, pero el martes pasado mi chica y yo estuvimos en Google y nos convertimos al instante al Googlismo.

Para empezar, no tienes que pasar superfiltros de seguridad, ni cacheos, ni escáners, ni nada parecido. Además, las personas en recepción son muy amables y te ayudan en todo momento. Tú mismo te registras en un ordenador a la entrada, te da una pegatina, te la pones y listo.

Esperamos muy poco a nuestro anfitrión, Avinash Kaushik, un auténtico crack lo mires por donde lo mires. Nos enseñó las oficinas por dentro y por fuera, cada rincón interesante, cada detalle digno de mención... Nos habló de su trabajo, tanto de lo que hace como de lo que piensa. Nos hizo sentir como en casa y por ello le estamos muy agradecidos.

Éstas son las cosas que más me molaron de Google. El orden es un poco aleatorio, incluso puede que me repita:
  • Tienen bicis de colores para moverse entre unos edificios y otros y puedes cogerlas libremente.
  • Hay muchas cafeterías. Desde auténticos comedores hasta puntos de relax con sofás y café, y ¡TODO ES GRATIS! Si una cafetería tiene éxito la replican, si no, la cierran y abren una de otro tipo o reutilizan su espacio.
  • Los WC's tienen la tapa calentita. Además, en los urinarios hay una balda para que puedas dejar lo que lleves en la mano (esto en los bares de copas sería un triunfo).
  • Todos los edificios tienen paneles solares, lo que les permite generar cerca del 40% de la energía que utilizan. Además están llenos de detalles que mejoran la eficiencia de uso: superficies luminosas, zonas semicerradas que no pierden temperatura...
  • Hay despachos pero nadie trabaja sólo. En cada uno hay 3 o 4 personas mínimo.
  • Repartidas entre los edificios hay multitud de esculturas de todo tipo. Las que más molan son las dedicadas a cada versión de android.
  • Hay wifi gratis por todo el complejo. ¡Y va a toda leche!
  • Salas y auditorios de todos los tamaños y en todos los edificios. Una sala de reuniones es una piscina de bolas, como las de los parques infantiles. Cuando la vi casi lloro.
  • Tienen eventos a diario, tanto de personas de fuera que van a contar cosas, como de temas de Google para empresas externas, sin dejar nunca de lado la formación interna...
  • Hay espacios para todo: un gimnasio (perdón, un pedazo de gimnasio), piscinas de corriente, zona de barbacoa, fiestas, cine, salas de masaje, zonas de siesta... Voy a repetirlo despacito: ¡ZO NAS DE SIES TAAAAA! Vimos una especie de sofá cibernético donde sólo se veían unas piernas y, claro, preguntamos qué era eso. Resulta que es una especie de diván en el que, una vez sentado, te cubre una burbuja que te aisla de todo tipo de ruido. Acojonante.
  • Entre edificios, terrazas, aparcamientos de bicicletas y demás, aún queda sitio para un pequeño huerto. Las zonas verdes, llenas de flores y arbustos aromáticos, están también por todas partes
  • Nadie lleva corbata ni traje. Bueno, algunos de los que vienen de fuera sí. De hecho, hay personas que van a trabajar corriendo o en bicicleta y hacen muchos kilómetros. Todo son facilidades para ellos.
  • Hay un pequeño taller de reparaciones, tanto hw como sw, donde pueden acudir con su portáil sin tener que pasar por las esperas y burocracia del típico helpdesk.
  • Hay una extraña mezcla de personas de todos los tipos, colores, aspectos y procedencias; muchísima gente joven.
  • No se fomentan para nada las horas extra. Cada uno se organiza su trabajo de la mejor forma y, con tanta cosa para hacer no parece fácil.
En fin, me pareció un lugar muy chulo. No dejéis de ir si tenéis oportunidad. Salud y rocanrol.

El enemigo se ha ido pero pronto ha de volver,
cuando suenen sus tambores de seguro moriré.
Han muerto todos los míos, sólo yo... sigo en pie.
Todos eran mis amigos pero pronto los veré.
Pues yo también estoy herido, herido de gravedad.
Lo sé al ver correr mi sangre ávida de mí escapar.
De este cuerpo malherido que nunca dudo en arriesgar
su vida en pos de un sueño que ya no conseguirá.
Me ataré a mi estandarte, fiel símbolo de mi fe,
si llega antes la muerte que ellos me encuentren en pie.
En pie y desafiante como yo siempre viví,
que tengan claro en sus mentes que yo jamás me rendí.
Y estoy perdiendo el sentido, ya casi no puedo ver,
muerte espera un momento que pronto han de volver.
Veo venir una dama sonriendo hacia mí.
Si esa dama es la muerte, ¿quién tiene miedo a morir?
Viene cantando una nana de mi tierra natal,
me la cantaba mi madre, nunca la podré olvidar.
oh. oh. oh...

lunes, 21 de febrero de 2011

Twitter updates

He perdido ya la cuenta de en cuantos sites/aplicaciones/páginas/blogs he tenido que poner una caja con los últimos twitts de un usuario X. A veces he tenido que ir guardando los mensajes en BD para luego mostrarlos; otras veces he tenido que hacerlo con javascript, leyendo directamente el feed que twitter proporciona.

Lo más cómodo, si sólo necesitas mostrar los mensajes y no almacenarlos, es utilizar Twitter Badge. En sólo dos pasos (1- seleccionar el tipo de de badge: flash o html 2- customizar el número de twitts y el título) generamos el código que tenemos que pegar en la página en cuestión. Después si es necesario, le damos un toque en nuestra CSS y listo. Además es un código muy fácil de tocar, que ya somos mayorcitos. Podéis ver el resultado en el blog de FACTURAgem.

Y si lo que tienes es un blog basado en Wordpress, existe un plugin que hace todo esto por ti: Twitter Widget.

Como otras veces, la solución fácil ha estado ahí todo el tiempo... En fin, salud y rocanrol.

When there's lightning, it always bring me down.
Cause it's free and I see that it's me who's lost and never found.
I cry for magic. I feel it dancing in the light.
But it was cold. I lost my hold to the shadows of the night

There's no sign of the morning coming.
You've been left on your own...
Like a Rainbow in the Dark

In memoriam Ronnie James Dio.


martes, 18 de enero de 2011

Soy un incompetente

Para variar, me pasan cosas. Cosas rarunas. Os cuento.

Trabajando con Ruby 1.8.7 y Rails 2.3.8 y un código como este presente en un observer...

game = Game.find(some_id)
tmp_letters = cositas_varias(game.letters)
game.letters = String.new(tmp_letters)
game.save


me encuento con que no se genera un UPDATE sobre el registro correspondiente de la tabla GAMES. De hecho, ese código está tan adornado con el único objetivo de entontrar la manera de hacer que ese UPDATE se ejecute. Y habiendo probado de todo, el UPDATE sobre la tabla sólo se producía si a game.letters le asignaba un string constante...

game.letters = 'quecojonespasa'

Lo más sorprendente (o no) es que la asignación

game.letters = String.new(tmp_letters)

produce que game.changed? sea false.

He leído aquí que algunos operadores que se ejecutan sobre atributos de tipo String hacen que efectivamente changed? sea false y que por tanto no se ejecute UPDATE alguno. Y efectivamente, avisando al modelo de que el atributo ha cambiado con

game.letters_will_change!

hace que changed? sea true y el UPDATE se ejecute.

Y esto me hace retrotraerme a cuando en C y C++ te tenías que preocupar de pasar una variable por valor o por referencia y de si se genera copia o no y tal y pascual... Y como no recuerdo que nada así me haya pasado anteriormente en ruby on rails... o he tenido mucha 'suerte', que me extraña, o en esta versión de Ruby y Rails algo cambia o soy un incompetente. Que va a ser eso.

¡Salud y rocanrol!

The old man was covered with tattoos and scars
He got some in prison and others in bars
The rest he got workin' on old junk cars in the daytime
They looked like tombstones in our yard
And I never seen him when he wasn't tired and mean
He sold used parts to make ends meet
Covered with grease from his head to his feet
Cussin' the sweat and the Texas heat and mosquiters
And the neighbors said we lived like hicks
But they brung their cars for pa to fix anyhow
He was veteran-proud tried and true
He'd fought till his heart was black and blue
Didn't know how he'd made it through the hard times
He bought our house on the GI Bill
But it wasn't worth all he had to kill to get it
He drank pearl in a can and Jack Daniels black
Chewed tobacco from a mail pouch sack
Had an old dog that was trained to attack sometimes
He'd get drunk and mean as a rattlesnake
And there wasn't too much that he would take from a stranger
There were thirteen kids and a bunch of dogs
A house full of chickens and a yard full of hogs
I spent the summertime cuttin' up logs for the winter
Tryin' like the devil to find the Lord
Workin' like a slave for my room and board
Coal-burin' stove no natural gas if that ain't country I'll kiss your ass
If that ain't country it'll hairlip the pope
If that ain't country it's a damn good joke
I've seen the Grand Ole Opry and I've met Johnny Cash
If that ain't country I'll kiss your ass

lunes, 17 de enero de 2011

Como broma ya está bien

Hace casi tres semanas que Gemma lanzó su nueva web. En ella ofrece sus servicios como consultora y analista web.

Puedo decir tantas cosas buenas de ella, que no sé por dónde empezar, y aunque no sé si es la mejor puedo asegurar que le pone toda su energía a lo que hace, que es una apasionada de su trabajo y que una vez que has trabajado con ella, no te deja indiferente: o la quieres o la adoras.

Por todo ello y por todo lo demás, tanto si tenéis la certeza de que necesitáis contar con los servicios de un analista web como si tenéis una mínima duda de que vuestra web podría hacerlo mejor, visitad su página (que, por cierto, la he hecho yo :o) y dadle un toque. Seguro que no os arrepentís.

¡Salud y rocanrol!

She's sun and rain, she's fire and ice,
a little crazy but it's nice,
and when she gets mad, you best leave her alone.
Because she'll rage just like a river,
then she'll beg you to forgive her.
She's every woman that I've ever known.

She's so New York and then L.A.
and every town along the way.
She's every place that I've never been.
She's makin love on rainy nights,
she's a stroll through Christmas lights
aAnd she's everything I want to do again.

She's anything but typical,
she's so unpredictable.
Oh but even at her worst it ain't that bad.
She's as real as real can be
and she's every fantasy.
Lord she's every lover that I've ever had!
And she's every lover that I've never had.