Primeros pasos con maven Parte I

Desde su nacimiento Maven ha ido consolidando y a su vez aumentando su posición como herramienta de gestión y construcción de software en lenguaje Java, poco a poco quitandole terreno a otra famosa herramienta presente en el mercado desde hace mas tiempo que de seguro mucho de ustedes la habran oido mencionar Apache Ant.

A continuación les dejo unas graficas sacadas con el software de estadistica de google donde se puede observar como ha ido incrementandose el interes de Maven con respecto a Ant en distintas categorias

 

estadísticas de Ant vs Maven en la categoria de Programación estadísticas de Ant vs Maven en la categoria Herramientas de desarrollo
estadísticas de Ant vs Maven en la categoría Lenguaje de programación Java estadísticas del crecimiento de las búsquedas de Ant y Maven vs  la categoria Lenguaje de programación Java
estadísticas de las búsquedas de Ant vs Maven en la categoría Software

Además es cuestión de revisar ofertas de trabajo para ver como cada vez piden mas el conocer Maven como requisito indispensable o como poco un requisito deseado a poseer por parte del candidato. Dada esta introducción quiero compartir con ustedes lo poco que se y he aprendido de maven con la finalidad de que pueda serles de utilidad o al menos como incentivo a aprender mas de esta poderosa herramienta.

Instalación

Debemos ir al sitio web de Maven y descargar los binarios, como vamos a ir haciendo cosas sencillas les recomiendo que empecemos con la versión 3 para ir familiarizandonos con las novedades de esta nueva versión (según he leido goza de mejoras de productividad, errores, además de escribir el fichero POM en otros lenguajes no XML como groovy, ruby, scala entre otros).

NOTA: Antes de realizar los siguientes pasos de la instalación, asumimos que ya de antemano existe la variable JAVA_HOME apuntando a la ruta donde tenemos instalado nuestra versión de Java y que a su vez los binarios de Java ya han sido añadidos al PATH del sistema.

Usuarios Windows XP

  1. Una vez descargado el software, descomprimirlo en la carpeta de preferencia, por ejemplo para usuarios windows podria ser la ruta C:\Archivos de programa\apache-maven,
  2. Creamos las variables de entorno en panel de control->Sistema->Opciones avanzadas->variables de entorno. Alli crearemos 2 nuevas variables del sistema. La primera será M2_HOME su valor será la ruta (path) donde hallamos instalado maven p.e. C:\Archivos de programa\apache-maven\apache-maven-3.0.4. La segunda variable será M2 y su valor será %M2_HOME%\bin.
  3. Editamos la variable del sistema PATH, y agregamos al final del contenido del valor de la variable PATH, el valor de la variable M2, de la siguiente manera:valor_variable_path;%M2%.
  4. Probamos que los pasos anteriores se han efectuado correctamente, Por linea de comandos (inicio->ejecutar: cmd.exe) tecleamos mvn -version y deberá aparecer la información de maven, como por ejemplo la versión java, la versión maven, la ruta de instalación, etc.

Usuarios Linux/Mac Os X

  1. Una vez descargado maven, lo extraemos en nuestro lugar de preferencia, pero podriamos utilizar la ruta /usr/local/apache-maven.
  2. En el terminal por linea de comando, exportamos la variable M2_HOME con el valor de la ruta donde hemos instalado maven por ejemplo,  export M2_HOME = /usr/local/apache-maven/apache-maven-3.0.4. De igual manera hacemos con la variable M2, de la siguiente manera, export M2=$M2_HOME/bin.
  3. Agregamos al PATH la variable M2, de la siguiente manera, export PATH=$M2:$PATH.
  4. Probamos que los pasos anteriores se han efectuado correctamente, Por linea de comandos  tecleamos mvn -version y deberá aparecer la información de maven, como por ejemplo la versión java, la versión maven, la ruta de instalación, etc.

Configuración opcional

Si entramos en la ruta donde hemos instalado maven encontraremos el fichero settings.xml dentro de la carpeta conf, este fichero nos permite configurar aspectos adicionales, como pueden ser modificar la ruta por defecto donde se alojara nuestro repositorio o indicar una conexón proxy, entre otras cosas.

Si estamos conectados por medio de un servidor proxy sencillamente descomentamos el contenido de la etiqueta proxies y alli indicamos los valores con lo cual accedemos a conectarnos. por ejemplo

Por otro lado si desearamos modificar la ruta por defecto del repositorio, solo descomentariamos el contenido de la etiqueta local_repository y colocamos la ruta donde deseemos que este ubicado nuestro repositorio, por ejemplo en windows podría ser algo como esto:

 

Ahora que ya tenemos maven instalado, configurado y tenemos constancia de ello (habiendo efectuado las pruebas), vamos a crear nuestro primer proyecto Maven, lo haremos por linea de comandos y tecleamos lo siguiente:

mvn archetype:generate -DgroupId=com.josedeveloper.app -DartifactId=PruebaMaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Esta sentencia nos creara todo el esqueleto del Proyecto incluyendo un fichero de pruebas y un main (con un “Hola mundo!”), la primera vez puede que tarde un poco, ya que maven estara descargandose las ultimas versiones de los plug-ins a nuestro repositorio, incluso en el sitio web de Maven nos indican que puede que esta sentencia debamos ejecutarla en más de una oportunidad ya que pueden ocurrir time out antes de que se haya terminado la descarga (esperemos que no sea nuestro caso).

Una vez creado el proyecto veremos una carpeta de nombre PruebaMaven (o cualquier otro que hayamos utilizado) si entramos en esa carpeta nos encontraremos con el fichero pom.xml y este no es mas que el fichero que maneja la configuración de nuestro proyecto (haciendo una analogia vendria siendo algo asi como el build.xml de Ant).

Maven funciona en torno a fases, y una fase no es más que un paso dentro del ciclo de vida de construcción de un proyecto, es importante tener en cuenta que para llegar a una fase es necesario haber pasado previamente por las fases que le preceden. Las fases por defecto más comunes de un proyecto serían las siguientes:

  • validate: Valida que el proyecto esta correcto y dispone de la información necesaria.
  • compile: Compila el código fuente del proyecto.
  • test: Prueba el código fuente compilado haciendo uso de frameworks para pruebas unitarias (JUnit).
  • package: Empaqueta el código fuente compilado (por ejemplo creando un jar o war).
  • integration-test: Procesa y despliega el paquete dentro de un entorno de test de integración.
  • verify: Ejecuta los controles necesarios para  verificar si el paquete es válido y cumple con los criterios de calidad.
  • install: Instala el paquete dentro del repositorio local, para poder usarlo como dependencia en otro proyecto.
  • deploy: Copia el paquete final al repositorio remoto para compartir con otros desarrolladores y proyectos.

Analizando lo anterior  y volviendo a lo de las fases, nos damos cuenta que tiene mucha logica el enfoque de fases de Maven, ya que para poder probar un código, es necesario haberlo compilado de antemano, lo cual implica haber pasado por la fase compile, así como para poder instalar un proyecto como dependencia en el repositorio es necesario que el código haya sido compilado, se haya probado, luego empaquetarlo, lo que se traduce que al invocar la fase install previamente tuvo que haber pasado por las fases, compile, test, package… y asi sucesivamente.

Ahora procedamos a construir el proyecto, sencillamente ubicandonos dentro de la carpeta del proyecto, introducimos por linea de comandos, lo siguiente

mvn package

Si navegamos por la estructura de directorio veremos que en la carpeta target nos habra creado un fichero .jar, además que durante la ejecución de la ultima sentencia podemos ver como se van ejecutando las fases previas al empaquetado.

Ya empaquetado el proyecto procedemos a ejecutarlo y lo haremos también por linea de comandos introduciendo la siguiente sentencia

>java -cp .\target\PruebaMaven-1.0-SNAPSHOT.jar com.josedeveloper.app.App

Podremos ver nuestro Hola Mundo! con nuestro primer proyecto maven.

Por ultimo quizás se hayan dado cuenta que algunos warning se arrojaron por linea de comando al momento del empaquetado, eso podemos resolverlo muy facilmente agregando a nuestro fichero pom.xml la siguiente linea

 

quedando este ultimo así

Conclusión

Toparse de repente con maven en un proyecto, al principio puede ser un dolor de cabeza, genera muchas interrogantes, además que la curva de aprendizaje a mi modo de ver no es de la mas rapidas, lo cual puede que nos genere uno que otro enfado, impotencia, pero a medida que se va aprendiendo y poniendo a prueba las bondades de esta herramienta  ocurre un cambio como decir el pasar del odio al amor jajajaja, esto no lo tomen como una generalización sino que es una opinion personal, pero es lo que he percibido a medida que voy avanzado con Maven, entre los beneficios (gracias a la gran cantidad de plugins) pues yo brevemente destaco el poder tener un repositorio centralizado, identificando las dependencias por sus respectivas versiones, es decir, olvidemonos de la cantidad infinita de jars repetidos en cada proyecto, además de poder utilizarlo para temas de testing e integración continua, además de poder crear esqueletos de proyectos adaptados a nuestras necesidades, ya para mi lo anteriormente expuesto ya hace que valga la pena aprender a usar la herramienta, es más si les soy sincero yo aun estoy conociendo las ventajas de usar Maven y espero en medida de lo posible poderlo compartir con ustedes. De igual manera les invito a compartir sus experiencias con maven, que otras ventajas o desventajas observan ustedes de usarlo así como compartir material de interés.

Lo nuevo en Java 7

Tal como dice el titulo, si deseas conocer algunas de las novedades de Java 7, descárgate de forma gratuita este ebook y accede a el con tu aplicación kindle desde cualquiera de tus dispositivos, ya sea tu computadora, teléfono móvil (celular), tablet o dispositivo kindle.

Mas libros aquí

NOTA: Amazon también proporciona una aplicación Web en HTML5 para visualizar tus ebooks, que al igual que la app nativa te sincroniza tus notas, resaltados y ultima pagina alcanzada en la lectura del libro.

 

Como desplegar un servicio web sin utilizar un Java EE container

Desde la javaSE 6 es muy sencillo la creación de servicios Web ya que las annotations incluidas (proyecto Metro) en el jsdk nos permiten que un POJO pueda fácilmente convertirse en un servicio.

NOTA: Desde javaSE 5 podíamos crear servicios web con annotations, pero para entonces el jsdk no incluía al proyecto Metro, por lo cual era necesario descargar los jar necesarios del proyecto Metro e incluirlos en nuestra aplicación.

En esta oportunidad les traigo un pequeño ejemplo de un servicio Web pero con la particularidad de que lo desplegaremos sin hacer uso del un Java EE container (contenedor de servlet, servidor de aplicaciones).

Nuestro primer paso será crear el SEI (Service Endpoint Interface), aunque no es requisito indispensable, resulta en una buena practica de programación.

Una vez definido el SEI procedemos a realizar la implementación del servicio o lo que es lo mismo el SBI (Service Bean Implementation).

Ahora viene una parte que a mi me resulta interesante, creamos el Publisher, el cual no es mas que la clase encargada de crear y publicar el endPoint de nuestro servicio Web.

Para aquellos que no lo sepan, el servicio Web que acabamos de crear y publicar lo hemos hecho utilizando jax-ws y por ende nuestro servicio web es del tipo SOAP.

Como comprobar que nuestro servicio esta funcionando correctamente, teniendo en cuenta que no nos arroja ningún mensaje de error por consola? Sencillamente iniciemos nuestro navegador (browser) de preferencia e introduzcamos la ruta http://localhost:9876/helloworld?wsdl ó http://127.0.0.1:9876/helloworld?wsdl y les aparecerá un mensaje como este:

Ese documento XML que hemos obtenido no es mas que el WSDL (Web Service Definition Language) que es una especie de contrato donde están definidas las operaciones y características del servicio Web.

NOTA: Los usuarios de Safari verán sencillamente una pagina en blanco, pero si revisan el código fuente de dicha pagina podrán ver el documento XML, es esta la razón por la cual he optado por utilizar Firefox.

Ahora bien, ya hemos hecho un servicio Web, lo hemos publicado e incluso hemos podido ver su WSDL, queda realizar lo más esperado, poder ejecutar y probar nuestro servicio Web, para esta labor haré uso de SoapUI una herramienta gratuita que nos permite hacer pruebas de servicios web de forma sencilla, para esto crearemos un nuevo proyecto de SoapUI y le indicamos el WSDL de nuestro servicio Web, como verán en la siguiente imagen:

Esta herramienta utilizara el WSDL para construir los sobres SOAP haciendo muy sencilla la tarea de hacer las pruebas. Para finalizar haremos una ejecución editando el XML de petición que por defecto nos elabora soapUI y le colocaremos una cadena de caracteres, en este caso he utilizado mi nombre (Uds. tienen todo el derecho de colocar el suyo/vuestro jejeje) y procedemos a pulsar el símbolo de play o triángulo de ejecución y podrán ver el mensaje de respuesta de nuestro servicio.

Aqui les dejo una imagen de la ejecución hecha por mi.

Finalmente hemos realizado un servicio Web de tipo SOAP mediante jax-ws, lo hemos desplegado sin necesidad de un servidor de aplicaciones o contenedor Java EE (lo cual tiene sus limitantes, ya que solo puede recibir una petición a la vez) y hemos fácilmente hecho pruebas de nuestro servicio con una herramienta sencilla así como también útil que es soapUI. Espero les haya sido de utilidad y les haya resultado interesante.

Sabias que el serialVersionUID en las clases Java nos previene de errores en la deserialización

Estoy seguro que todos aquellos que hemos programado en Java en alguna oportunidad hemos visto como nuestro IDE nos arrojaba un warning (advertencia) indicandonos que “la clase serializable nombre_clase no declara un campo serialVersionUID final estatico de tipo long” y más seguro estoy (por experiencia propia) de que sin meditarlo mucho optamos por la opción que nos daba el IDE (eclipse, netbeans o cualquier otro) para que nos resolviera el warning y asi tener nuestro código limpio de mensajes de advertencia y errores.

Ejemplo de mensaje warning de serialVersionUID

¿Qué es serialVersionUID?

Es un número de versión que posee cada clase Serializable, el cual es usado en la deserialización para verificar que el emisor y el receptor de un objeto serializado mantienen una compatibilidad en lo que a serialización se refiere con respecto a la clases que tienen cargadas (el emisor y el receptor).

¿Qué pasa si no declaro un serialVersionUID?

El proceso de serialización asocia cada clase serializable a un serialVersionUID. Si la clase no especifica un serialVersionUID el proceso de serializacion  calculará un serialVersionUID por defecto, basandose en varios aspectos de la clase. Es muy recomendable que se declare un serialVersionUID en las clases serializables, ya que el calculo del serialVersoinUID es muy sensible a detalles de la clase, los cuales pueden variar entre compiladores, es decir, si trabajamos serializando/deserializando objetos y trabajamos con distintos compiladores Java podemos llegar a obtener una InvalidClassException durante el proceso de deserialización debido a discrepancias entre los serialVersionUID calculados por cada compilador. Por eso para garantizar un serialVersionUID que sea indiferente a la implementación del compilador es altamente recomendado declarar un valor explicito del serialVersionUID (de tipo long) y de ser posible que tenga el modificador de acceso private para que afecte unicamente a la clase que lo ha declarado y no a las clases hijas (subclases) que hereden de ella, forzando de alguna manera a cada clase hija a declarar su propio serialVersionUID (Ver imagen abajo).

Ejemplo de herencia de clase Serializable observando warning de serialVersionUID en clase hija

Para mas información no dejen de revisar en la API la interfaz Serializable

Como compilar código Java desde una clase Java

Días atras dandole un vistazo a la Java API, me encontre con una interfaz que no tenia idea que existiera y es la interfaz JavaCompiler. A continuación un ejemplo sencillo de como compilar una clase:

Para el ejemplo anteriormente mostrado, asumimos que hemos codificado una clase y ubicada en c:/Example.java. Como mi idea es demostrar como compilar, le dejo a ustedes la tarea de crear una clase cualquiera, con y sin errores para poder observar la salida de la ejecución de este programa.

Brevemente comento del código.

  • Clase ToolProvider, disponible desde la versión 6, esta clase nos permite obtener proveedores de compiladores.
  • Invocación del método run, método heredado de la interfaz Tool (presente desde la versión 6 de Java), es una interfaz utilizada para invocar programas, y en nuestro caso la utilizamos para la invocación del compilador. Incluso podríamos obtener las versiones soportadas por la herramienta invocando el método getSourceVersions();

La anterior no es la única forma de poder llevar a cabo la compilación, he aquí otro ejemplo, pero en este caso usando métodos propios de la interfaz JavaCompiler.

Esta ultima forma de llevar a cabo la compilación, particularmente es de mi preferencia ya que nos permite mejorar en rendimiento, en el caso de que llevemos a cabo la compilación de un grupo de ficheros (archivos) mientras reutilicemos el gestor de archivos, además de poder pasarle de una forma mas ordenada las opciones de compilación.

NOTA: En este segundo ejemplo también dejo de parte de ustedes la creación del fichero a compilar (C:/Example.java), que en este caso he hecho uso del mismo en ambos ejemplos.

espero les pueda ser de utilidad, incluso podríamos hasta crearnos nuestro propio IDE, donde compilemos y a su vez nos muestre los mensajes de error en caso de haberlos.

 

Cambiar estilos en tu tema de blog wordpress

Tienes problemas con los estilos de tu blog wordpress y deseas cambiarlos, si es ese el caso, no te preocupes a continuación te mostrare una solución sencilla.

Primero que nada, no cambies directamente los estilos en el tema de tu blog, ya que si posteriormente actualizas la versión del tema, puede que pierdas los cambios realizados. La solución esta en crear un tema hijo (child theme) a partir de un tema de tu preferencia que hayas seleccionado para tu blog.

Para crear un tema hijo, debes seguir los siguientes pasos:
– Dentro de tu carpeta wp-content/themes, crea una carpeta con el nombre que pensaras darle a tu nuevo tema.
– Dentro de la carpeta de tu nuevo tema, crea un fichero style.css. Lo minimo necesario que ha de tener este fichero es lo siguiente

IMPORTANTE: Los campos “Theme Name” y “Template”, no los dejes vacíos. A continuación una breve explicación de los campos

  • Theme Name:  se utiliza para especificar el nombre del nuevo tema (hijo) que estas creando.
  • Theme URI: Sitio web del tema.
  • Description: Descripción del nuevo tema (hijo) a crear.
  • Author: Autor del nuevo tema.
  • Author URI: Sitio web del autor del tema
  • Template: Tema padre desde el cual estamos heredando estilos.
  • Version: Versión del tema a crear.

Por ultimo se puede notar la sentencia “@import url(“../twentyeleven/style.css”);”, aquí lo que se hace es importar el fichero de estilos del tema padre.

Cualquier estilo que deseas modificar o añadir, sencillamente agregalo al fichero style.css del nuevo tema a crear (ver ejemplo mas abajo).

Por ultimo indicarles que el funcionamiento será de la siguiente manera, para todos los estilos encontrados, se seleccionarán los estilos especificados en el nuevo fichero style.css del nuevo tema (hijo) creado, en caso de no encontrarlo, hará uso del estilo presente en el fichero style.css del tema padre. En caso de necesitar una personalización más profunda del nuevo tema, se puede crear el fichero functions.php en el nuevo tema y también se podrán añadir ficheros php y su funcionamiento será semejante al de los estilos, en caso de invocar un fichero .php tendrán prioridad los presentes en el tema hijo, en caso de no existir se utilizará el fichero presente en el tema padre.

Finalmente aquí les dejo el fichero (completo) style.css de mi nuevo tema.

Comunicación serial java y arduino

Voy a mostrarles a continuación un sencillo ejemplo de interacción y comunicación vía Serial con una placa Arduino (one). Tengo aproximadamente un mes jugando con mi arduino one y confirmo lo que me habían contado, “es sencillamente emocionante ver que haces encender y apagar un LED”, como me comento una amiga “es un juego para adultos”, no me queda mas que reirme y aceptar que en mi caso es así y disfruto del poco tiempo que he podido dedicarme a hacer ejemplos.

Ha sido de esta manera, haciendo ejemplos del libro Getting Started with Arduino y leyendo por internet que me nació el gusanillo (curiosidad) por hacer un sencillo ejemplo pero donde en vez de comunicar los lenguajes Processing y Arduino, lo hiciera usando Java, C o C++ (estos 2 últimos espero poder hacerlos y de ser posible publicarlos mas adelante). ¿Con qué finalidad? además de aprender, sencillamente poder gozar de las bondades y herramientas que nos ofrece el trabajar con los lenguajes anteriormente mencionados.

Ahora si vamos al grano, primero indicare los componentes utilizados:

  • 1 Placa arduino one
  • 1 bombillo LED
  • 1 cable usb AM/BM (para cargar programa arduino)

La conexión es muy sencilla, consiste únicamente de colocar el LED (la pata mas larga) en el pin 13 y la otra pata en GND (tierra).

Una vez, hecho esto pasamos a hacer el sketch Arduino.

Compilamos el sketch y lo cargamos en la placa Arduino. Cargado el sketch, procedemos entonces con el programa Java. Para poder conectarnos con la placa arduino será necesario que tengamos la biblioteca RXTX (una biblioteca semejante a la Java Communications API extension), esta biblioteca posee los jar necesarios para poder establecer comunicación vía serial con la placa. La instalación dependerá del sistema operativo que utilicen, así que les recomiendo seguir los pasos de instalación indicados en el fichero README de la versión de la biblioteca (así sea la versión con los binarios o los fuentes) que se descarguen, o en el sitio web en la sección de instalación.

Una vez descargada e instalada la biblioteca RXTX, seguimos con nuestro programa Java, que consistirá unicamente de una interfaz grafica sencilla (un JFrame) con 2 botones para encender o apagar el LED.

Aqui les dejo el código fuente java:

NOTA: Tener en cuenta que para programar en Java podremos usar el IDE de nuestra preferencia, en mi caso he utilizado Eclipse. [Actualización] En el código Java no olvidar editar la constante PORT_NAME e indicar el puerto que utilicen[/Actualización]

Para compilar escribir en consola:
javac -classpath path_instalacion_biblioteca/RXTXcomm.jar:. JPanelTurnOnOffLED.java

Después de haber compilado nuestro programa Java, procedemos a ejecutarlo, de la siguiente manera:

java -Djava.library.path=. -cp path_instalacion_biblioteca/RXTXcomm.jar:. JPanelTurnOnOffLED

path_instalacion_biblioteca: Ruta de instalación de la biblioteca, es decir, donde estarán alojados los jar.

Voilà!!!, ya deberíamos poder visualizar el JFrame con sus respectivos botones de encendido y apagado. Así que, ¿qué esperas? empieza ya a encender y apagar tu LED.

Recomendación: En el libro Getting Started with Arduino, nos sugieren que en caso de mantener el LED mucho tiempo encendido usar una resistencia de 270 ohm, en cuyo caso necesitaríamos adicionalmente para hacer nuestro ejemplo una breadboard y par de cables.

Puntos importantes a tener en cuenta para usuarios Mac OS X (snow leopard)

– Si colocas (copiar con el comando sudo) la biblioteca RXTX en /Library/Java/Extensions, nuestro programa java podrá ser compilado y ejecutado de la siguiente manera:

javac JPanelTurnOnOffLED.java

java JPanelTurnOnOffLED

Aunque esta quizás no es la forma más recomendada en caso de que se llegase a trabajar con distintas versiones de la biblioteca, ya que en ese caso lo adecuado sería tener una instalación para cada versión y compilar y ejecutar nuestro programa Java de la manera indicada en un principio para poder indicarle al compilador y a la maquina virtual con que versión de la biblioteca estamos trabajando.

– Puede que te sea necesario al momento de ejecutar el programa Java indicar que se ejecute en 32 bits, si obtienes una exception similar a la que te muestro a continuación

“java.lang.UnsatisfiedLinkError: /Library/Java/Extensions/librxtxSerial.jnilib: no suitable image found. Did find: /Library/Java/Extensions/librxtxSerial.jnilib: no matching architecture in universal wrapper thrown while loading gnu.io.RXTXCommDriver”

Lo que implicará que tengamos que añadir un argumento a nuestro comando de ejecución , quedando de la siguiente manera

java -d32 JPanelTurnOnOffLED

– Ir a la carpeta /var/lock (si no existe, crearla) y otorgarle permisos de escritura al o los usuarios que vayan a ejecutar el programa, esto podrás hacerlo desde el finder o por linea de comandos con el comando chmod.

Conclusión

Cada día que pasa y me involucro más con mi nuevo hobbie, me fascino con su versatilidad, pues además de ser una arquitectura abierta, nos permite interactuar con una gran gama de lenguajes de programación entre los que les puedo mencionar C, C++, Java, Objective-C, entre otros, de una gran lista, lo cual como les dije antes, nos permite gozar de las bondades (ventajas) de un lenguaje o plataforma de software, como lo es en este caso Java, ya que podríamos aprovechar el gran numero de bibliotecas existentes, así como también de su variedad de frameworks (que son unos cuantos). Este ejemplo ha resultado interesante para mi, ya que además de lo mencionado anteriormente, es un ejemplo que podemos extrapolar a algo mas complejo, es decir, podemos imaginar que en vez de ser 2 botones, podemos crear una interfaz mas compleja con unos 5 o 6 botones y cada uno de ellos con una instrucción distinta, que nos permita por ejemplo dado el botón pulsado, ver en una pantalla, la temperatura, posicionamiento global, etc…, o incluso controlar un servomotor.

En fin, como comente en un post anterior, aquí el limite es nuestra imaginación y mas aun cuando podemos interactuar con una variedad de lenguajes, lo que no resulta en un impedimento el no saber Processing, pues si tu fuerte es Perl, Python o Java, no importa, puedes empezar a programar ya!!!.

Video de la aplicación Java en ejecución
[tube]http://www.youtube.com/watch?v=jwGwnlEBuAI[/tube]