Sincronización de Rainlendar con Google Calendar en Ubuntu

Hace tiempo que quedé impresionado por la calidad del calendario Rainlendar. Rainlendar2 es un calendario multiplataforma que se integra perfectamente en el escritorio.







Puedes descargar la versión para tu plataforma en la página de descargas:

La única pega es que yo usaba Google Calendar y Rainlendar2 sólo soporta la integración con Google Calendar en la versión de pago. De todas formas esto ya ha cambiado gracias a GCALDaemon. GCALDaemon es un proyecto de software libre implementado en Java que implementa una sincronización de Rainlendar2 con Google Calendar. Este programa proporciona dos modos de trabajo:
  1. Un demonio o proceso ejecutándose en segundo plano y que mantiene sincronizados los calendarios de Google y Rainlendar2
  2. Un script que al ejecutarlo sincroniza los calendarios

En la página oficial se dan las instrucciones para configurar el modo 1. En esta entrada voy a explicar una solución basada en la segunda opción, en concreto vamos a configurar GCALDaemon para que sincronice los calendarios al entrar en Ubuntu y al salir o reiniciar.

Navegar a un enlace interno tras un action en JSF

En este post voy a dar una solución a un problema común que consiste en navegar a un enlace interno tras pulsar en un botón o en un enlace que ejecuta una acción en el servidor.

Si simplemente quisiéramos navegar a un enlace interno sin ejecutar nada en el servidor podríamos hacerlo con un outputLink:

<h:outputLink value="pagina.jsf#ancla" ><h:outputText value="Ir a la página"/> </h:outputLink>

Sin embargo, puede que lo que necesitemos es ejecutar un método en el servidor y luego navegar hacia un ancla. Esto podemos hacerlo con un método actionListener al que enviaremos el nombre del ancla y que se encargará de redireccionar al usuario al ancla especificada tras hacer su trabajo.

Automatización de Pruebas Web con Selenium RC y Ant

En este post vamos a ver cómo realizar pruebas sobre páginas web de una forma sencilla y rápida. En primer lugar vamos a explicar qué es Selenium:
Selenium es un framework de pruebas portable para aplicaciones web. Las pruebas pueden ser escritas directamente en tablas HTML o codificadas en un gran número de lenguajes de programación (PHP, Ruby, Java, JavaScript, etc.) y se ejecutan directamente sobre el navegador (soporta Firefox, IE, Opera, Safari y algunos más). Además podemos desplegar Selenium en distintos sistemas operativos.
Selenium está formado por varios proyectos:
  • Selenium Core: Es el sistema de pruebas original basado en JavaScript. Actualmente es usado por Selenium Remote Control aunque puede utilziarse como un sistema de pruebas JavaScript/HTML
  • Selenium IDE: Es un plugin de Firefox que facilita la tarea de grabar y ejecutar pruebas HTML. Podemos incluso exportar dichos test HTML a los distintos lenguajes de programación.
  • Selenium Remote Control: Es un sistema cliente/servidor que nor permite controlar los navegadores web localmente o sobre otros ordenadores usando un lenguaje de programación y el framework de pruebas.
  • Selenium Grid: Permite la ejecución de pruebas en varios servidores de una forma distribuida
  • Otros proyectos: Selenium on Rails, Selenium on Ruby y CubiText (Eclipse)

Como puede verse, disponemos de muchas herramientas para hacer pruebas dentro de Selenium. En el siguiente blog se muestra un tutorial sobre cómo hacer pruebas mediante Selenium IDE:

En este tema mostraré cómo crear un proyecto Ant que ejecute las pruebas de forma automática. Para ello ejecutaremos una prueba simple sobre la página DZone.

Componentes Redimensionables en Swing

Hace unos días descubrí un post en el que se explicaba cómo crear elementos redimensionables con Swing de una manera sencilla y rápida. La entrada está explicada bastante bien y puedes consultarla aquí. Las principales características de la solución aportada por Santhosh Kumar T son:
  • Se trabaja con una clase JResizer que contiene el elemento redimensionable
  • Podemos redimensionar cualquier componente
  • Los bordes y los puntos de agarre son totalmente configurables
En esta entrada veremos cómo aplicar esta solución y un aporte realizado por mí.

Tooltips en celdas de JTable

Hace poco, trabajando con el proyecto discography-generator me encontré el problema de hacer que las celdas de un javax.swing.JTable mostraran un tooltip o "mensaje emergente" cuando el ratón estuviera encima.

Lo único que estaba buscando era que se mostrara el contenido de la celda, algo muy simple a priori pero que, como ocurre casi siempre en Swing, acaba siendo algo rebuscado. La solución la encontré en la documentación oficial de SUN:
En este post veremos el código necesario para implementar este comportamiento.

Sistema de plantillas en menos de 50 líneas

En este post presentaré una solución cómoda y rápida (que no tiene porqué ser la mejor) para crear un sistema de plantillas basado en Java. En primer lugar voy a aclarar a qué quiero referirme cuando hablo de "sistema de plantillas". La idea es la siguiente, partiendo de un texto como el siguiente:
Hola ${usuario}, hoy es ${fecha}

Vamos a diseñar un sistema que reciba este texto (en forma de String o InputStream) y un mapa de propiedades, de forma que sustituya todo lo que encuentre del tipo ${clave} por el valor correspondiente en el mapa.

Estructura de directorios de Maven

En esta breve entrada se expondrá la estructura estándar de directorios de Maven. Se expondrán la estructura para cada tipo de proyecto.

Proyecto J2SE (JAR):

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target


Proyecto WAR:

proyecto
|-src
|_|-main
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|_|_|-webapp
|_|_|_|-<contenido-web>
|_|_|_|-WEB-INF
|_|_|_|-META-INF
|_|-test
|_|_|-java
|_|_|_|-<paquetes-java>
|_|_|-resources
|_|_|_|-<ficheros-recursos>
|-target