03
Sep

¿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? :)

ipod_trabajo

RT @Loldwell



free blog themes
31
Ago

BlogDay 2010

Blog Day 2010Hoy 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:

  1. Encontrar 5 nuevos blogs que consideras interesantes.
  2. Informar o advertir a los autores seleccionados tu recomendación para el BlogDay.
  3. Escribir una descripción corta de cada blog y enlazarlos.
  4. Publicar una entrada el 31 de agosto, el BlogDay, mencionando los 5 blogs que recomiendas
  5. Agregar el tag BlogDay y un enlace al sitio BlogDay: http://www.blogday.org

Y aquí van mis cinco elegidos para este BlogDay:

  • David de Jorge, por mantener un blog esplendido, emocionante y diferente sobre gastronomía y, lo que es más importante, sobre SABER VIVIR la vida ¡Viva Rusia!
  • Último Nivel, por demostrar que se puede hablar de videojuegos con profesionalidad y pasión sin perder la inocencia y la brillantez… y por haberme acompañado durante muchos días en el gimnasio.
  • Rosaura Ochoa, por escribir BIEN sobre un mundo lleno de pelagatos y abrazafarolas, el llamado social media.
  • Dos Ideas, por aportar al mundo del agilismo y la gestión de personal. Por enseñar que otra forma de trabajar es posible… y rentable.
  • Think Wasabi, o, lo que es lo mismo, Alberto Pena. Por enseñar tantas y tantas cosas pero, sobre todo, porque su blog permite recordar una y otra vez a un reciente switcher como yo, cómo se hacen las capturas de pantalla en Mac.

Gracias a todos y ¡Feliz BlogDay 2010!



free blog themes
31
Ago

Los trackbacks son importantes

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.



free blog themes
27
Ago

Piedra, Papel o Tijera

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…

Piedra, Papel o Tijera

Pulsa en la imagen para verla aún mas grandota

RT@ChaCha



free blog themes
24
Ago

Arquitectura de logging en Glassfish

GlassfishSí, 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:

    1. Cinco minutos de tu tiempo para que juzgues si lo he conseguido.
    2. Que, para vivir una experiencia completa, escuches la canción ‘Old Souls de la banda sonora de Origen mientras lees el artículo.

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?

EL MISTERIO DE LAS TRAZAS INEXPLICABLES

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.

FRAMEWORK DE LOGGING DE GLASSFISH

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:

  1. Se basa en un sistema de Handlers, clases que heredan de java.util.logging.Handler y que son los que encapsulan tanto la lógica de publicación de trazas como la configuración de las mismas.
  2. Estableciendo un level o nivel por Handler podemos establecer el nivel mínimo de traza que queremos que recoja el HANDLER. Estableciendo un nivel determinado se recogerán todas las trazas de ese nivel y de los niveles superiores jerárquicamente (para conocer más sobre los nieles de traza, pinchar aquí). También se puede establecer el nivel mínimo de traza por paquete de clases, independientemente del nivel implementado por paquete (se usará la configuración más restrictiva)
  3. Además del nivel, se puede establecer un control secundario y opcional sobre lo que se registra o no, mediante la asignación de un filtro o Filter (clase que hereda de java.util.logging.Filter) a un Handler. Un Filter, básicamente, implementa un método isLoggeable que devuelve un booleano que indica si un log se debe trazar o no.
  4. Si se quiere formatear las trazas generadas con alguna estructura especifica, se debe implementar un Formatter (clase que herede java.util.logging.Formatter) y asignarlo al Handler deseado.
  5. Toda esta configuración se hace a través de un fichero denominado logging.properties

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.

TRABAJANDO CON LOG4J

¿Son mis logs reales o sólo un sueño?

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?

LA SOLUCIÓN AL MISTERIO

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:

  • ¿Queremos modificar el formato de las trazas del servidor? Implementaremos nuestro propio Formatter y se lo asignaremos al ConsoleHandler del fichero logging.properties
  • ¿Queremos que nuestras propias trazas no se mezclen con las del servidor? Nos olvidaremos de utilizar el ConsoleAppender
  • ¿Queremos que sólo nuestras trazas de error salgan en la salida por defecto del servidor? Podremos utilizar un ConsoleAppender y configurarlo en nuestro log4j.properties para que sólo registre trazas de nivel ERROR o superiores (recordad que sea cual sea el nivel de traza de log4j, la salida se publicará en System.out y el logging de JAVA las publicará por defecto como trazas de nivel INFO)

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:



free blog themes
20
Ago

La evolución de Apple

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…

La evolución de Apple

RT @Dary Cagle



free blog themes
18
Ago

Usando ‘ ’ en XHTML

XHTML, ese lenguaje

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…

EL MISTERIO DE LA JSPX DESESTRUCTURADA

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…

LO MALO DE UN ECLIPSE, ES QUE NO TE DEJA VER

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;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 &amp;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 &amp;nbsp; y, por eso, teníamos que escapar el carácter & utilizando &amp;amp;.

HTML en estado puroELEMENTAL, QUERIDO WATSON

No 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 HTML NO ES XML, Y XHTML TAMPOCO

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.

&amp;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;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 &amp;nbsp; para XML no es absolutamente NADA. El carácter espacio en XML es &amp;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.

UNA SOLUCIÓN QUIERO…

Para poder solucionar este problema tenemos dos posibilidades:

1. Utilizar el DOCTYPE al comienzo de nuestra página XHTML para que identifique la entidad &amp;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 "&amp;nbsp;">
]>

2. Haciendo una sustitución masiva de la entidad &amp;nbsp; por la entidad &amp;#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.



free blog themes
13
Ago

Diseño de Interfaces para software empresarial

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…

Las skills que se piden para diseñar interfaces de usuarios

RT @Geek and Poke



free blog themes
11
Ago

Cómo incrustar Flash en Wordpress

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.

Como incrustar flash u objetos embed en Wordpress

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.

CÓMO FUNCIONA VODPOD

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:

  • Tiene un widget que te permite capturar cualquier vídeo que aparezca en una página web de una forma muy sencilla.
  • Existe un plugin de Wordpress, el Vodpod Embedder, que te permite incrustar tus vídeos capturados en tus artículos de una forma sencilla mediante la siguiente etiqueta:

[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:

  • En vodpod te proporcionan una API Key con la que puedes configurar el plugin de Wordpress. Se supone que eso te permite buscar directamente en tu biblioteca, entre los vídeos que has capturado, pero, en realidad, no funciona. He probado a buscar los vídeos que he subido de todas las maneras posibles, pero nunca los encuentro. Así que toca copiar la etiqueta y pegar el ID del vídeo a mano. Bueno, tampoco es tan grave…
  • El widget que captura los vídeos de cualquier página web te permite publicar directamente el vídeo en tu blog de Wordpress… Aunque lo único que he conseguido yo es que, efectivamente, publique un nuevo artículo; pero con un enlace al vídeo, no una etiqueta con el vídeo en sí.

De modo que, finalmente, la secuencia que he probado y FUNCIONA para poder publicar cualquier cosa en Flash en vuestro Wordpress es:

  1. Crearos una cuenta en vodpod
  2. Instalar y activar el plugin Vodpod Embedder
  3. Capturar el vídeo que deseéis publicar en vuestra colección de vodpod
  4. Insertar una etiqueta como la que os he copiado arriba en el artículo donde queráis incrustar el vídeo
  5. Sustituir el texto ID_DE_TU_VIDEO por el ID del vídeo en vodpod

Ale, a disfrutar…



free blog themes
09
Ago

Mis favoritos hablan por mí: bonilinks (3ª parte)

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!

ENLACES QUE PODRÍA HABER RECOPILADO UN CHIMPANCÉ

ENLACES SOBRE MONTAR CHIRINGUITOS

DEVELOPERS, DEVELOPERS, DEVELOPERS !!! (STEVE BALLMER)



free blog themes
free blog themes