¿A quién no le ha pasado?
Me ha hecho gracia porque a mi -Pomodoro arriba, Pomodoro abajo- me ocurre mínimo una vez al día ¿A vosotros también os pasa?

RT @Loldwell
Me ha hecho gracia porque a mi -Pomodoro arriba, Pomodoro abajo- me ocurre mínimo una vez al día ¿A vosotros también os pasa?

RT @Loldwell
Hoy se celebra el BlogDay 2010. Algunos lo considerareis una tontuna viral. Otros, como una celebración del medio que disfrutamos cada dia: Internet.
El BlogDay se creo con la idea de que los bloggers deberían dedicar un día a dar a conocer otros blogs de diferentes países o temáticas a sus lectores habituales. Yo he conocido la iniciativa a través de un blogger que me ha elegido para su propio artículo del BlogDay, Proyectos Beta.
Las normas son muy sencillas:
Y aquí van mis cinco elegidos para este BlogDay:
Gracias a todos y ¡Feliz BlogDay 2010!

Los trackbacks son una de las herramientas más importantes de los blogs, sin embargo, poca gente los utiliza. Son enlaces inversos. Es decir, una lista de enlaces a artículos que citan o enlazan a uno de tus artículos.
Contrariamente a lo que muchos piensan, no son un mecanismo de alimentar tu ego sino una herramienta para favorecer la conversación que, al fin y al cabo, es sobre lo que va esto de los blogs. Y lo más importante, te dan la oportunidad de conocer a gente interesante. Parece bastante probable que alguien que escribe sobre un tema del que ya has escrito tú diga cosas que te interesen ¿no?.
Es una lastima que haya tenido que conocer el blog de Jorge Muria a través de los referrers de enlaces entrantes de la web casi dos meses después de que escribiera un artículo -citándome- sobre la Técnica Pomodoro, en vez de en el momento en que lo escribió. Si lo hubiese visto antes, podría haber participado en los comentarios, podríamos habernos retroalimentado y haber seguido la conversación.
Pero, sobre todo, me habría permitido conocer mucho antes este artículo suyo. Delicioso y bastante más interesante que los míos. Un artículo que os recomiendo a todos por su simpatía e interés: ¿Cómo hacer bilingüe a tu hijo pequeño?
Enhorabuena por el artículo Jorge y ¡por Dios! la próxima vez utiliza los trackbacks.
Descubrí este juego como muchos otros niños españoles, jugando a ese juegazo que venía en la memoria de la Sega Master System 2: Alex Kidd in Miracle World.
Durante años, he crecido pensando que Piedra, Papel o Tijera era un juego de niños. Durante años he creído que era un juego basado completamente en el azar. Estaba equivocado…
RT@ChaCha
Sí, sé lo que estáis pensando: “¿Un artículo sobre logging en Glassfish?” Los que visitan este blog y no son técnicos ni siquiera habrán llegado a esta línea y los que sí lo sois pensaréis “¿Qué tiene de interesante?”.
Y, sin embargo, lo es. El modo en el que Glassfish trabaja con logs es peculiar y guarda algún oscuro secreto. Sólo te pido dos cosas:
Lo peor que te puede pasar es que salgas de aquí aprendiendo algo nuevo y, por supuesto, siempre puedes tirarme tomates virtuales en los comentarios del artículo. ¿Te animas?
Como parte de mi asedio y conquista al entorno de trabajo de STORETTO, comencé a estudiar nuestro sistema de traza y la configuración del mismo. Parecía algo relativamente sencillo (una configuración típica de log4j) Sin embargo, algo no encajaba. Ni las trazas aparecían por donde debían ni tenían el formato que queríamos. Nada se parecía ni remotamente a lo que teníamos configurado.
Tampoco entendía por qué el equipo de STORETTO había configurado el sistema de log4j habitual de la compañía mediante una variable de sistema, en vez de colocar el fichero de configuración en el classpath de la aplicación.
¿Qué estaba pasando? ¿Era todo esto real o era un sueño? ¿Estaba soñando dentro de un sueño? ¿Cómo distinguir la realidad del sueño?
Como en el anterior caso de las JSPX desestructuradas, yo tenía un poco más de tiempo disponible que el equipo para comprender qué estábamos haciendo y por qué lo estábamos haciendo. Lo que averigüé fue SORPRENDENTE.
Antes de nada, era importante conocer qué sistema de registro de trazas utiliza Glassfish y cómo funciona el mismo.
He resumido todo lo que se necesita saber en un par de párrafos:
Glassfish utiliza para su sistema de trazas la implementación por defecto de la especificación JSR-047, una API de logging, y recomienda el uso de la misma, aunque permite el uso de otras como Apache Commons Logging o log4j.
El uso de la API de logging del JDK implica varias cosas a tener en cuenta:
La primera diferencia que chocará a todos los que venimos de usar log4j es que todo se configura programándolo. Es decir, no tienes una manera de poder configurar de forma flexible el formato de tus trazas. Si quieres un Formatter que saque el patrón de tu traza de un fichero de propiedades, vas a tener que programártelo.
Para trabajar con log4j en Glassfish v2 se recomendaba configurar la librería de traza como librería del sistema para evitar problemas con el classloading pero esto ya no puede hacerse con Glassfish v3 así que la solución pasa por indicar al servidor la ruta del fichero de configuración de log4j.
En log4j se configuran Appender (el equivalente de los Handler en JSR-047) El Appender típico que todo el mundo utiliza al desarrollar es el org.apache.log4j.ConsoleAppender, que publica los logs en la salida por defecto de System.out.
El problema es que las trazas no salen por la consola habitual que esperamos todos los programadores sino en un fichero server.log que se encuentra en la ruta /midominio/logs/.
Eso es bastante fácil de explicar porque ese fichero es la salida por defecto del servidor, así que, ésa es su consola.
Lo que no tiene ni pies ni cabeza es que nuestras trazas salgan con el formato de las trazas de la API de logging de JDK o, más exactamente, envueltas por su formato, puesto que nuestro traza aparece… pero sólo como parte del mensaje de la traza de logging del JDK.
Bueno… podemos pensar que, de alguna manera, el sistema está ignorando nuestra configuración de log4j. Sin embargo, si configuramos cualquier otro Appender, por ejemplo uno que publique en un fichero inception.log, log4j funciona PERFECTAMENTE.
¿Entonces? ¿Qué está pasando? ¿Por qué salen todas mis trazas rodeadas de almohadillas ‘#’ y con un retorno de carro cuando las publico por consola?
No, no estamos soñando. Nuestras trazas son reales y nuestra configuración también. No estamos haciendo nada mal. Simplemente, alguien ha estado jugando con nosotros. Alguien ha estado haciendo trampas.
Glassfish, utiliza una implementación propia y sobrescrita del objeto System cuyo método out devuelve un PrintWriter que redirige todas las salidas al sistema de logging del servidor. Probadlo, hacer un System.out.println en una clase desplegada en Glassfish. No sólo aparecerá en la salida por defecto -server.log- sino que, además, aparecerá con el formato específico del sistema de logging.
Lo más grave de todo esto es que System es una clase final. Es decir, que no puede ser extendida, precisamente para evitar lo que Glassfish ha conseguido: que nuestro código tenga un comportamiento extraño y nos desconcierte. Que nos tengamos que frotar los ojos para comprobar que no estamos soñando.
De acuerdo, Glassfish nos ha engañado pero ahora, después de leer este artículo sabemos cómo vencerlo:
Glassfish ha luchado contra nosotros y ha perdido, por lo menos a nivel de logging. Nosotros le dominamos. No él, a nosotros. Y, desde luego, no estamos soñando… ¿o sí?
BONILINKS:
Vaya… parece que a Steve Jobs y a los chicos de Apple se les ha ido un poco la pinza con el iPhone, ¿no? Primero fue la eliminación unilateral de la tecnología Flash de sus dispositivos móviles. Después, el affaire del borracho olvidadizo. Y, finalmente, todo este revuelo sobre posibles problemas de cobertura del nuevo iPhone 4 que Steve resolvió con un “agárralo por el otro lado“. No me extraña que algunos vean la evolución de Apple de esta forma…

RT @Dary Cagle

Todos los que hemos trabajado con páginas y aplicaciones web conocemos la entidad   o, al menos, creemos conocerla… Pero, sorprendentemente, la mayoría de nosotros no sabemos qué es exactamente y eso hace que aparezcan problemas en la transición desde HTML hacia XTHML.
¿Queréis enteraros de qué es eso de   en apenas cinco minutos, mientras leéis una apasionante historia de intriga y misterio? Entonces, no lo dudéis y seguid leyendo…
Hace poco que empecé a sacar algo de tiempo libre para aportar al desarrollo puro y duro de STORETTO. Al instalar el entorno de trabajo en Eclipse, casi me caigo de la silla golpeado por un error rojo y horrible que señalaba a una JSPX traidora y maligna donde, según el IDE, había errores en la estructura del XML, la etiqueta de cerrado ‘</h:form>‘ no se correspondía con ninguna etiqueta de apertura.
Cuando les pregunté a los desarrolladores por qué daba el error, me dijeron que era un error de Eclipse porque la estructura XML de la página estaba bien, funcionaba y la famosa etiqueta ‘ </h:form>‘ tenía su correspondiente etiqueta de apertura.
¡Tenían razón! Entonces… ¿Qué estaba ocurriendo? ¿Qué era lo que estaba rompiendo el Chi del Eclipse? Era un claro caso para Bonilla Holmes…
Cuando oficialmente eres Jefe de Equipo, Project Manager o Code Leader, te puedes permitir ciertas licencias, como pararte a ver porqué algo falla aunque el error no sea crítico, que casi compensa el horrible título con el que definen tu puesto.
Así que me enfrenté al error con valentía y decisión. Era evidente que el el Eclipse fallaba a la hora de analizar la estructura de la página, la pregunta era: ¿Por qué?.
Al principio pensé que era por un código comentado que incluía la etiqueta en cuestión, pero lo borré y el error seguía. La cosa se ponía difícil, pero, entonces, observé un montón de errorcillos (perdonad por mi léxico, no soy un experto en Eclipse, yo soy más de IDEA) provocados por el uso de la extraña combinación de caracteres ‘&amp;nbsp;‘.
¿Para qué diantres estábamos escapando el carácter & para, a su vez, escapar el carácter espacio? No tenía sentido. Cuando lo cambié a &nbsp; sin más, el error de estructura en Eclipse dejó de aparecer, pero la página daba un error al cargarse. No un error de maquetación, sino en la compilación en servidor.
Raro, raro, raro…
Cuando volví a preguntar a los desarrolladores si tenían idea alguna de por qué podía fallar la carga de la página web, me dijeron que no tenían ni idea pero que, por algún motivo, JSF -el framework que utilizamos- no se comía directamente el &nbsp; y, por eso, teníamos que escapar el carácter & utilizando &amp;.
ELEMENTAL, QUERIDO WATSONNo tenía sentido. Una cosa es que al tocar la página web descoyuntara la maquetación y otra cosa es que rompiera el código del servidor. No comprendía muy bien qué tenía que ver JSF con los caracteres de escape del código HTML, así que le pedí al tío que más sabe de JSF a este lado del Pecos, César Vivero, que mirara conmigo las trazas de servidor.
No nos hizo falta más de 10 segundos para localizar el error -”The entity “nbsp” was referenced, but not declared.“- e, inmediatamente, mi mente de viejo rockero sufrió un espectacular flashback peliculero cuando recordé que había tenido el mismo problema al trabajar con hojas de estilo XSLT que producían HTML.
Miré a mi compañero y le dije “Lo tenemos César. Ya sé quién mató a Laura Palmer“.
El error en servidor no lo daba el uso de JSF en sí, sino el validador del XML de la página web. Sí, amigos, porque nuestras páginas son JSPX, lo cual quiere decir que utilizan XML y XHTML como lenguaje de marcas, no HTML… y ahí estaba el problema.
&nbsp; es una entidad usada para representar el carácter espacio en HTML, pero no en XML. Aunque a veces se nos olvide y haya cierta confusión al respecto porque algunas de las entidades, como la utilizada para representar el carácter ‘&‘ -&amp;- sean idénticas, las entidades de caracteres en XML y HTML no son iguales.
Así, lo que está cantando el validador de XML es, traducido al cristiano, “no sé qué me estás contando, brother“. Y eso es así porque &nbsp; para XML no es absolutamente NADA. El carácter espacio en XML es &nbsp; o, lo que es lo mismo, el carácter 160 de UNICODE.
Este error trivial es relativamente normal ya que, muchas veces, los desarrolladores trabajan directamente con una maqueta en HTML proporcionada directamente por un diseñador y la adaptan al lenguaje de plantillas correspondiente para que en java acabe siendo una JSP -con HTML incrustado- o una JSPX con XHTML.
Para poder solucionar este problema tenemos dos posibilidades:
1. Utilizar el DOCTYPE al comienzo de nuestra página XHTML para que identifique la entidad &nbsp; tal y como se especifica en este enlace:
Por ejemplo, para una página XHTML cuyo nodo raíz es jsp:root, escribiríamos:
<!DOCTYPE jsp:root [
<!ENTITY nbsp "&nbsp;">
]>
2. Haciendo una sustitución masiva de la entidad &nbsp; por la entidad &#160 que sí es una entidad reconocida en XML.
Lo que nunca descubrimos fue por qué Eclipse se volvía loco, pero el chi de los programadores ahora descansa tranquilo porque la pestaña de avisos y errores ya no muestra ninguna inquietante aspa roja. El misterio de la JSPX desestructurada había sido resuelto.
Hay muchísimos desarrolladores que son unos monstruos de la programación por haber diseñado la arquitectura de una aplicación de registro de incidencias o la web de un restaurante que admite reservas on-line. Sin embargo, la verdad es que, hasta que no te enfrentas a una aplicación con miles de clases y centenares de páginas web, a una de las temibles siglas, al desarrollo de un ERP, un CMS o un WMS, no eres más que un gallito de pelea con más orgullo que experiencia.
Para programar software para empresas hay que ser un machote (o machota), un auténtico pro, un técnico que tiene lo que hay que tener. Por ejemplo, a la hora del diseño gráfico de interfaces: no os creáis que porque hayáis trabajado 10 o 12 años con Photoshop o ganado algún premio Webby estáis preparados para diseñar interfaces de usuario de software corporativo. Para esto no basta querer, hay que valer…
RT @Geek and Poke
La semana pasada, escribí un artículo sobre los derechos de autor en el que quería incluir un vídeo de Blip TV que carecía de la opción para enlazar e incrustar directamente en tu blog. Ante esta barrera a mi creatividad, el hacker de todo a 100 que todos llevamos dentro se despertó en mí y pensé: “¡Qué memez es poner puertas al campo! Ahora abro el código fuente de la página donde he visto el vídeo y lo copio tal cual en la pestaña donde puedo editar directamente el HTML de los artículos. Nada se me resiste.“
Craso error. A la cuarta vez que copias el código HTML relacionado con el vídeo -que es una etiqueta <embed> como una casa- y te das cuenta de que al grabar el borrador del artículo ésta desaparece misteriosamente, empiezas a pensar que no te has pasado con las cervezas del aperitivo sino que tienes un problema.

Efectivamente, por seguridad, Wordpress elimina automáticamente las etiquetas <embed>, lo que impide que puedas incrustar plugins en tu página, desde Flash a vídeo o molestos sonidos.
Puede ser una buena idea para el usuario tipo de Wordpress, pero recordad amigos que ¡yo soy un hacker! Así que, en general prefiero gestionarme todo yo, MI (in)seguridad y las cosas que pongo en MI blog y, por supuesto, he encontrado una solución.
Existe una maravillosa y altamente desconocida aplicación web llamada vodpod, cuyo objetivo es crear tu propio canal de vídeos, importándolos de distintas fuentes (no sólo de YouTube vive el hombre) y pudiendo compartir dicho canal en tu blog, tu cuenta de Facebook o en Twitter.
Vodpod funciona como un profiláctico sobre cualquier widget Flash que encuentres en la red y lo que le hace tan maravilloso para publicar en Wordpress son las siguientes características:
[vodpod id=Video.ID_DE_TU_VIDEO&w=600&h=495&fv=]
Por supuesto, no todo es perfecto y yo he encontrado dos pequeños-grandes fallos:
De modo que, finalmente, la secuencia que he probado y FUNCIONA para poder publicar cualquier cosa en Flash en vuestro Wordpress es:
Ale, a disfrutar…
Finalmente, llega la tercera y definitiva entrega de mis favoritos en Twitter. Una vez más, encontraréis enlaces de lo más variado, pero con una clara tendencia a la tecnología y la creación de empresas.
No tengo ni idea de si esta serie de artículos sobre mis favoritos os han gustado o si creéis que han sido un soberano aburrimiento. Me habéis dado poco feedback y tenía verdadera curiosidad por conocer vuestra opinión sobre lo que me interesa.
En cualquier caso, creo que ha llegado el momento de hacer borrón y cuenta nueva, así que, voy a empezar a borrar mi larga lista de favoritos. Si después de poder conocer mis gustos, queréis proponerme algún enlace o favorito vuestro, ¡bienvenidos sean!