viernes, 22 de febrero de 2008

Assume vs Assure

En ocasiones nos encontramos con que te instalas algo que siempre ha funcionado bien pero que cuando le cambias un poco el entorno, le tiemblan las canillas.

Por ejemplo, para una nueva aplicación instalamos l10n-simplified para menejar los mensajes de la aplicación porque siempre ha funcionado. Y todo va bien, correcto, sin complicacines. Pero me llevo la aplicación a su entorno real, corriendo en un servidor Windows y atacando SQL Server 2005 a través de un conector ODBC y me encuentro con que algo o alguien ejecuta constantemente

SET NAMES 'UTF8'

contra la base de datos y ésta responde que va a ser que no.

Jodo¡ En un mundo sin sorpresas, la primera en la frente. Rebuscando y con ayuda de Javi encontramos que en localization_simplified.rb es donde se ejecuta esta sentencia. Después de blasfemar leemos el comentario

# Currently this modifies MySQL. Please add other databases you find necessary

que por una parte me hace pensar en todas las librerías que uso sin molestarme en mirar qué tienen y por otra en que quizás un plugin no deba asumir nada respecto a qué base de datos se utiliza.

En fin, solucionado. Pero hay objetos que no se borran, casualmente todos los que están configurados como acts_as_list.

Vuelvo a blasfemar (parezco Gurb). Y veo que de nuevo alguien o algo está poniendo position = NULL en el registro a borrar justo antes de destruirlo para siempre. Tengo por costumbre poner los campos position como not NULL para las tablas que contienen registros configurados como acts_as_list. Porque si son una lista el campo siempre debe contener un valor.

Y en otro orden de cosas, para qué se pone a NULL? Para avisarle de que vas a borrarlo? Los registros, hasta la fecha, no tienen sentimientos. No hay que avisarles de nada. Se crean, se borran, se modifican... y punto¡¡¡

Y porqué MySql traga con ello y SQL Server no? Pues no lo sé y la verdad, después de todo qué más me da? Si yo lo que quiero es irme a comer a mi casa¡¡¡ Comento la línea enferma y listo.

Salud y rocanrol¡

jueves, 21 de febrero de 2008

CSS en Sitepoint

En Sitepoint acaban de sacar esta referencia que parece bastante completa. Hay un listado alfabético de propiedades para ir a tiro hecho y hasta una página de hacks que nostá mal como comienzo.

En otro orden de cosas y perdón por la expresión, me cago aquí y ahora en los puñeteros charsets. Luego mexplico.

Salud¡

jueves, 14 de febrero de 2008

Más SEO

En su newsletter para empresas, Microsoft también ofrece una serie de indicaciones para que tu site le guste más a los buscadores. Más de lo mismo, explicado en detalle: que si enlaces bien puestos, que si urls únicas, que nada de popups ni frames... en fin, un poquito de sentido común más una pizca de conocimiento.

Salud¡

miércoles, 13 de febrero de 2008

Mongrel service

Levantar un servidor mongrel como servicio de Windows es un dolor hasta que leyendo leyendo... llegamos aquí. Con mongrel_service es prácticamente trivial:
  • instalamos la gema (que por cierto depende de win32-service)
  • gem install mongrel_service
  • y creamos el servicio
  • mongrel_rails service::install -N app3000 -c c:\rails_apps\app -p 3000 -e production
En la URL original se indica cómo arrancarlo, cómo pararlo, cómo eliminarlo y cómo cambiar sus propiedades (dependencias, tipo de servicio...).

Si además instalamos algún servidor web que permita balancear carga, como Apache con mod_proxy, podemos levantar tantos servicios como deseemos y dejarlos enganchados al servidor web de manera sencilla. Pero eso, otro día.

Salud¡

SEO - resumen

Antier (que diría mi abuela) publicaron en este blog un resumen de cosillas a tener en cuenta para que tu web se posicione razonablemente en los buscadores más usados. Lo de siempre: sitemap.xml, herramientas propias de cada buscador para dar a conocer tus páginas y, sobre todo, sentido común.

Salud¡

sábado, 9 de febrero de 2008

Otro lapsus: Güindous Libre¡

Está disponible hace años pero desconocía WinLibre. Es una aplicación libre para descargar todo tipo de programas libres para güindous(que no es libre).

Vale, la mayor parte de las aplicaciones que ofrece son las que todos conocemos, pero está bien tenerlas todas a mano y que te puedas olvidar de estar pendiente de actualizaciones. Habrá que echarle un ojo, no?

Salud¡

jueves, 7 de febrero de 2008

Lapsus

No entiendo como en 12 años no he visto esto en ningún sitio. Primero picaba una css por cada navegador y por javascript cargábamos la que se ajustase mejor. Luego decidí que eso de ajustar al pixel las páginas para todos los navegadores es una idiotez y que basta con que su aspecto sea razonable (mi listón está bastante alto, aviso). Y ahora veo esto.

Con estos estilos

.ie .example {background-color: yellow}
.ie7 .example {background-color: orange}
.gecko .example {background-color: gray}
.win.gecko .example {background-color: red}
.linux.gecko .example {background-color: pink}
.opera .example {background-color: green}


conseguimos ajustar las propiedades para cada navegador.

La referencia completa está aquí.

Vivir para ver, Liborio¡ Vivir para ver¡

miércoles, 6 de febrero de 2008

Tócala otra vez, Sam

... y va Sam (songerize.com) y la toca.

Con un campo para meter cuatro palabras de la letra que te suenan de la canción que no te acuerdas, sería la booooooomba¡

lunes, 4 de febrero de 2008

GRUFF: una pega

Trasteando con GRUFF me he encontrado pintando 4 ó 5 gráficas y teniendo que acortar las leyendas de cada una de ellas para que no se me salieran de la imagen. Y es que no está muy bien resuelto este tema.

Como solución intermedia e inmediata, por una parte le he pasado las leyendas con saltos de línea '\n' y por otra he cambiado un par de líneas de la librería, para que se dé cuenta que a un string cuando le pones saltos pierde anchura.

base.rb versión 0.2.9

cambiamos

698 metrics = @d.get_type_metrics(@base_image, @legend_labels.join(''))

por

698 temp_legend_labels = @legend_labels.map{|l| l.split('\n').sort {|x,y| y.size <=> x.size }[0]}
699 metrics = @d.get_type_metrics(@base_image, temp_legend_labels.join(''))


y

738 metrics = @d.get_type_metrics(@base_image, temp_legend_labels[index].to_s)

por

738 metrics = @d.get_type_metrics(@base_image, legend_label.to_s)

Y listo para jugar.