martes, 17 de marzo de 2009

Apoyando a los colegas

Mi compi, Dani Cabrera, presenta Freelancit en el BBVA Open Talent. Desde aquí le apoyo e invito a los que leáis esto a que también lo hagáis. Sin duda, el proyecto lo merece.

Freelancit es una comunidad online para profesionales freelance y está, cómo no, desarrollada en Ruby on Rails por ASPgems



Salud y rocanrol¡

Carry on, my sons forever
Carry on, when I am gone
Carry on, when the day is long
Forever carry on
For as long as were together
Then, forever carry on


lunes, 9 de marzo de 2009

No es lo mío , pero bueno...

Ayer desplegué www.procesosmadrid.es, el site de la empresa de mi amiga Julia. Se dedican a control de plagas y ahora también a evitar que los rayos te caigan encima.

Yo no soy diseñador, pero bueno, algo ha mejorado el site. Hemos aprovechado para darlo de alta en Google Analytics para aprender un poco de analítica web.

Visitas, visitas, queremos visitas¡¡¡

Salud y rocanrol

Porque sé que es un baile salvaje
combate a mala cara
veo todo en blanco y negro, blanco y negro...
Sólo quiero ser más rápido que ellos
y echar todo a perder, un día trás otro
y un buen rato después saber llegar a casa
antes de que el sol me diga que es de día.


jueves, 5 de marzo de 2009

El principio de la mínima sorpresa

Me dice un amigo que tiene un problema con el plugin acts_as_feeder. Tiene un modelo en el que ha incluido ese comportamiento y a la hora de lanzar la carga sobre una de sus instancias el sistema canta por soleares.

Escarbando, escarbando llegamos a que el casque ocurre al ejecutar el método open pasándole como parámetro un StringIO. Ese parámetro es el resultado de ejecutar también open pasándole la URL de un feed.

Ponemos trazas y vemos que al primer open le llega un String, como esperábamos; pero al segundo le llega unas veces un Tempfile y otras un StringIO. El primer caso funciona pero el segundo no y, además, lo que ocurre no tiene sentido.

Pues sí lo tiene. Sólo nos queda mirar qué hace el método open de open-uri y observamos este pedazo de código:

217 StringMax = 10240
218 def <<(str)
219 @io << str
220 @size += str.length
221 if StringIO === @io && StringMax < @size
222 require 'tempfile'
223 io = Tempfile.new('open-uri')
224 io.binmode
225 Meta.init io, @io if Meta === @io
226 io << @io.string
227 @io = io
228 end
229 end


Ahí la llevas. Si se trae más de 10Kb te lo mete en un Tempfile; si no, te devuelve un StringIO.

Y claro, esto ha dejado de funcionar al meter un blog nuevo en la BD. Por eso el proceso que lee no trae casi nada y de ahí todo el problema.

¿Me sorprende? No. El principio de la mínima sorpresa vuelve a triunfar.

Salud y rocanrol.

Navega, velero mío,
sin temor, que ni enemigo navío,
ni tormenta, ni bonanza
tu rumbo a torcer alcanza,
ni a sujetar tu valor.

Veinte presas hemos hecho
a despecho del inglés,
y han rendido sus pendones
cien naciones a mis pies.

Que es mi barco mi tesoro,
que es mi dios la libertad,
mi ley, la fuerza y el viento,
mi única patria, la mar.