Documental de Arduino

Aqui les dejo el documental de Arduino, espero que lo disfruten tanto como yo, que grande son estos innovadores (para mi mas que soñadores, ya que lo hicieron realidad).

Documental con subtítulos en español

 

Por ultimo aprovechare este medio para solicitarles ayuda, todo material sea tutorial, biblioteca (library), sitio web, etc.. que conozcan, que trate acerca de XBEE explorer serial  en Mac os X y la XBEE communication  shield.

Estos son mis nuevos juguetes que me han regalo con motivo de mi cumpleaños y ya estoy deseoso de hacer algo con ellos.

Serialización de objetos Java en XML

JAXB (Java Architecture for XML Binding) nos proporciona una API que nos permite mapear (mapping) entre  documentos XML y objetos Java automaticamente. Será con este framework que llevaremos a cabo la serialización de un objeto Java en un fichero (que será un documento XML) persistiendo el estado del objeto, además de crear un objeto Java a partir de un documento XML (recuperando el estado que tenia dicho objeto al ser serializado).

Crearemos las siguientes clases:

1. Clase Localidad

2. Clase Provincia

Nada fuera de lo normal en estas clases salvo las annotations presentes.

@XmlType: Indica a JAXB que debería generar un tipo de dato XML schema a partir de un tipo de dato Java.

@XmlRootElement: Indica que JAXB debería generar un documento XML (la raíz) a partir de una clase Java

Por ultimo la clase con el main donde se llevará a cabo la serialización/deserialización de los objetos

Como pueden ver resulta bastante sencillo la serialización de objetos a XML, quizás aquí no podamos apreciar todo su potencial, pero les puedo mencionar que es justo esto lo que utiliza el framework jax-ws en los servicios web SOAP con tipos de datos complejos, por supuesto cuando trabajamos con jax-ws no nos percatamos de esto ya que el framework esconde este proceso de convertir los datos XML recibidos en objetos Java y los objetos Java enviados con el cliente del servicio web convertidos a XML (Los servicios web envían XML para de esta manera ser interoperables e independientes de plataformas y lenguajes), siendo transparente para el programador, de esta manera el programador se enfoca en desarrollar la lógica de la aplicación (sea la creación del servicio web o la aplicación que hace uso del cliente del servicio).

Además de esta funcionalidad JAXB también nos ofrece otras herramientas como xjc que nos permite crear clases Java a partir de un XML schema (XSD) y schemagen que lleva a cabo la función inversa, es decir, crear un XML schema (XSD) a partir de una clase Java.

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.

 

Ipad 2 presentado a la sociedad

El pasado 2 de marzo fue presentado a la sociedad, el tan esperado y muy rumoreado Ipad 2, se podría decir que no se había llegado aun al tope de ventas del Ipad y ya se estaba especulando con la segunda versión del mismo. Se comentaban muchas cosas de esta keynote, un nuevo ipad con camara(s), capacidad de expansión de memoria con tarjetas SIM, pantalla con retina display, quizás más pequeño, nuevo procesador y mas… A su vez se comentaba la posibilidad de una nueva versión de iOS y un MobilMe gratuito, en fin había tantos rumores que dudo que los mejores adivinos del mundo incluso pudieran acertar en sus predicciones.

Y se hizo la luz, el tan esperado dispositivo fue presentado por Steve Jobs, con unas características hasta ahora muy bien valoradas por la critica y que a mi particularmente me han encantado. Señalo a continuación las características (resumidas) del Ipad 2:

  • Procesador A5 dual core de 1 GHz, que le permite procesar hasta 9 veces mas rápido el desempeño gráfico.
  • Doble cámara, una frontal VGA y otra trasera HD 720p 30 frames por segundo y zoom 5X.
  • 10 horas de duración de la batería en uso continuo (9 horas en caso de hacer uso continuo de redes 3G).
  • Dimensiones (alto x ancho x grueso): 24,12 cm x 18,57 cm x 0,88 cm y un peso de 601 gramos (607 o 613 gramos en el caso de ser la versión con 3G para redes CDMA y GSM respectivamente).
  • Pantalla LED de 9,7 pulgadas y resolución 1024 x 768 (misma pantalla del primer Ipad).
  • Giroscopio de 3 ejes, acelerometro, brújula digital y GPS asistido en la versión 3G además de funciones de teléfono.

Además de estas características también se presentaron 2 nuevos accesorios, la funda smart cover y el adaptador AV digital de Apple, cada uno con un valor añadido que no caeré en detalles sino que les dejo par de vídeos y les den un vistazo y luego me comentan que opinan al respecto. Por ultimo nos presentaron 3 estupendas aplicaciones  para Ipad que darán que hablar y desde ahora les auguro un éxito rotundo como lo fueron GarageBand, PhotoBooth e iMovie, sencillamente ESPECTACULARES en especial me ha impactado iMovie, da la impresión de poder llevar a cabo la edición de video casi en un modo profesional y sencillamente con tus dedos, ni mas ni menos.

 

En conclusión en esta oportunidad Apple nos ha traído un dispositivo muy mejorado, cuyas características traen consigo un valor agregado importante, como lo son el poder hacer uso de FaceTime para videoconferencias un nuevo procesador que nos da la oportunidad de crear mejores aplicaciones y aprovechar al máximo su velocidad así como su desempeño para tratar gráficos, un set de aplicaciones (y las que vendrán) que sencillamente y sin ser demagogo son ESPECTACULARES. Hay ciertas tablets con Android que me han llamado la atención como lo son la Xoom de Motorola, la nueva Galaxy tab de 10 pulgadas de Samsung y el prospecto de Sony la S1, que gozarán (y gozan) de una arquitectura de mucho poder, pero después de lo mostrado por Apple a día de hoy pienso que ninguno de estos dispositivos presenta la fluidez y amigabilidad que nos da el Ipad2 (y el Ipad) y por mencionarles algo y a su vez hacerles ver mi punto de vista, es cuestión de ver solo un pedazo de la keynote y ver la presentación de las aplicaciones  iMovie y de GarageBand aquí los hechos valen más que las palabras (con ello no quiero decir que no recomiendo adquirir uno de esos tablets, ya que se, que tienen su gama de usuarios ansiosos de mas control sobre el sistema, amantes de android, etc…). Es más en mi opinión ha sido una de las keynote donde la opinión de casi todos ha sido favorable al nuevo dispositivo y sus respectivos accesorios y aplicaciones, es mas no me extrañaría que surjan nuevos accesorios a usar con adaptador AV digital y darle a su vez mucho mas potencial del que tiene (visualizar películas en HD con o sin home sharing, video en espejo).

En fin para mi acabó la espera y he reservado uno para  el 25 de marzo, día que estará a la venta el Ipad en Europa. Estén pendientes, apenas lo tenga en mis manos tengo pensado hacer un video de unboxing.

y tu ¿Que opinas del nuevo Ipad? ¿Estas conforme con sus nuevas características?¿le agregarías y/o quitarías algo?

Aqui les dejo el video de la keynote

javaDB embebido en archivo jar ejecutable

Hace tiempo atrás revisando en que diferían JavaSE 5 y JavaSE 6, observe que el jsdk de la versión 6 incluía javaDB y me asombro el saber que Java traia consigo su propio gestor de base de datos, así que desde entonces tenia el gusanillo de trastear con el mencionado gestor y Java.

Para quien no lo sepa aun javaDB es el mismo apache Derby, un gestor de base de datos relacional «ligero» 100% Java (tiene un tamaño de 2MB).

He aquí mi primer encuentro con javaDB.

El entorno es Mac OS X snow leopard con la ultima versión de java (1.6.0_22) distribuida para este entorno de parte de Apple y como IDE Eclipse. Mi primera decepción fue el darme cuenta que la versión del jsdk distribuido por parte de Apple no trae consigo javaDB asi que procedí a descargarlo desde este enlace, por otro lado es agradable mencionar que el archivo a descargar es en formato .dmg, una vez ya relatada mi primera decepción (esperaba que mi jsdk fuera igual de completo que cualquier otro distribuido de parte de Oracle para los entornos Linux o Windows), procederé a explicarles como obtener un Jar  que traiga consigo javaDB y fuese un ejecutable a mi modo de verlo fácilmente distribuible.

Como mi idea principal consistía en probar javaDB, procedi a buscar un ejemplo en la red, lo bueno es que encontré uno casi perfecto, que cumplía casi a la perfección todo lo que quería, consiste en el ejemplo del libro de direcciones (AddressBook). Antes de continuar será necesario que descarguemos el código fuente del ejemplo y aquellos que hagan uso de un IDE importemos el código fuente en un proyecto (ver figura)

Una vez importado el código, podemos detallar que nuestro proyecto tendra una carpeta «lib» allí estará un jar de nombre derby.jar, que no es mas que nuestro javaDB en una versión vieja (si prestan atención el ejemplo data del 2006), si quisiéramos trabajar con una versión mas nueva pues sencillamente copiaríamos al proyecto el  derby.jar ubicado en la carpeta de instalación de javaDB,  además también podemos notar que el proyecto también contará con un build.xml (para quien no conozca Ant, ir al menu Windows->show view y seleccionar la vista de Ant, una vez se muestra la vista arrastrar el archivo build.xml a la vista). En la vista de Ant ejecutar la tarea «dist», la cual es la tarea por defecto. Una vez ejecutada la tarea procedemos a refrescar el proyecto (F5) y veremos que se nos ha creado una carpeta de nombre «dist» que contendrá a su vez una carpeta «lib» con la dependencia (que no es mas que nuestro derby.jar) y un fichero de nombre AddressBook.jar  que será un jar ejecutable. Si hacemos doble click sobre este fichero o sencillamente ejecutamos la tarea «run» de Ant, y podremos ver como se ejecuta nuestra aplicación y como podemos guardar, editar y eliminar registros, sencillamente fabuloso.

Pero ustedes se preguntarán ¿Si es tan fabuloso por qué no lo definí como perfecto? y la razón es la siguiente, si copiamos ese archivo ejecutable AddressBook.jar, lo pegamos por ejemplo en nuestro escrito y procedemos a ejecutarlo, se darán cuenta que no es del todo distribuible, ya que para que se ejecute perfectamente sería necesario haber copiado y pegado la carpeta «lib» con su respectivo derby.jar. A mi modo de ver las cosas no es muy elegante distribuir un «supuesto» jar ejecutable y a su vez hacerlo con una carpeta aparte con sus respectivas dependencias, incluso el embebido lo pondría en entre dicho porque nuestra aplicación no es autocontenida, es decir la aplicación por si sola no tiene todo lo que requiere (excluyendo la JVM de esos requerimientos). Así que me puse a investigar el tener todo en 1, es decir que fuese un único jar ejecutable.

El problema esta en que un jar (asumamos AddressBook.jar) al ejecutarse, por defecto no puede cargar las clases contenidas en otro jar  (asumamos derby.jar) que este dentro del primero, es decir aunque agregásemos nuestra carpeta «lib» con el derby.jar dentro de AddressBook.jar no podríamos ejecutar la aplicación ubicada en nuestro escritorio (o en cualquier otro lugar donde lo hayamos pegado), aquí les dejo un enlace del tutorial donde se menciona. ¿Que alternativa tendríamos?  una de ellas seria usar Java Web Start para la instalación y otra hacer nosotros mismos nuestro propio ClassLoader a medida, esta opción me tentó, incluso quede con el gusanillo de investigar al respecto, pero buscando por la red encontré una buena herramienta, además de no ser la única en su clase y en el one-jar, el cual consiste en un proyecto para crear un único jar ejecutable y traiga consigo (dentro) todas sus dependencias (jars).

Existen varias opciones para crear el ejecutable, mediante tarea Maven, tarea Ant e incluso por linea de comandos, he optado por la última, la cual es muy sencilla y detallo a continuación los pasos:

  1. Descargar el archivo one-jar-boot-0.97.jar
  2. Crear un directorio «root» que contenga a su vez 2 directorios mas llamados «main» y «lib».
  3. Copiar el archivo AddressBook.jar (nuestro jar ejecutable obtenido mediante Ant) dentro de la carpeta «root/main» y copiar el derby.jar en el directorio «root/lib».
  4. Descomprimir el archivo one-jar-boot-0.97.jar en el directorio «root» y eliminar la carpeta «src» donde están ubicados los fuentes del archivo recien descomprimido.
  5. Editar el archivo boot-manifest.mf y añadir una nueva linea. One-Jar-Main-Class:   com.sun.demo.addressbook.AddressFrame
  6. En linea de comandos ubicarnos en el directorio «root». >cd root
  7. En  linea de comandos >jar cvfm ../ejecutable.jar boot-manifest.mf . (no omitir el ultimo punto «.»)

Finalmente hemos obtenido nuestro ejecutable.jar, es decir una aplicación de escritorio que tiene embebido un gestor de base de datos ligero, plena y elegantemente distribuible.

Espero les sea de utilidad y cualquier duda y/o sugerencia será bien recibida.