Mi CV en formato mapa mental

Hacia mucho tiempo que venia con esta idea de hacer una versión de mi CV (currículum vítae) en formato mapa mental, pero no lo hice antes entre otras cosas porque no me había tomado el tiempo de buscar una aplicación que de forma sencilla me ayudara a realizarlo y porque en realmente no sabia como empezar, ya que los que había visto todos variaban entre sí no solo en estilo sino en contenido, pero esto cambio hace par de días cuando revisando algunas aplicaciones de la Mac Store vi SimpleMind (la versión gratuita) la instale y de inmediato me gusto su sencillez y que lo poco que hace a mi parecer lo hace bien y bueno lo demás fue “un tiro al piso” (quiero decir muy sencillo, imposible de fallar), fue ponerme a jugar con la herramienta y empiezo a fluir la inspiración, ese boceto de como quería que fuera mi CV y bueno he decidido no solo compartirlo con ustedes sino que he hecho una página en mi sección personal (menu “Yo”) únicamente para mostrar  el mapa con la intención de esporádicamente ir actualizandolo.

CV en formato mapa mental

CV en formato mapa mental

Sinceramente me gusto como quedo pero por momentos dude en si agregar o no, par de nodos adicionales, como “objetivos” (sobretodo educacionales, aprender nuevas tecnologías, herramientas, etc..) y “hobbies” o “intereses” (como ya he indicado antes en la página acerca de mí) donde colocaría fútbol, running, estar actualizado en cuanto a la tecnologías, pero finalmente decidí no añadirlos aunque no descarto agregar estos nodos en una actualización mas adelante.

Alguna sugerencia, ¿quitarias o pondrías algún tipo de información adicional?

MI CV en formato mapa mental

BlogStack generando Sinergia

¿Qué es Sinergia? quizas todos sino muchos hemos oido este termino, pero puede que no todos sepamos su significado. Según aparece en Wikipedia “quiere decir literalmente trabajando en conjunto. Es un vocablo acuñado por el diseñador, arquitecto, visionario e inventor Richard Buckminster Fuller, refiriéndose al fenómeno en el cual el efecto de la influencia o trabajo de dos o más agentes actuando en conjunto es mayor al esperado considerando a la suma de las acciones de los agentes por separado“. Esto es justo lo que esta generando el nuevo sitio web BlogStack, el cual es un agregador, o fuente de información de contenido de blogs sobre distintos topicos relacionados con la tecnología, una interesante iniciativa ya que su creador ha puesto a disposición todo su diseño y arquitectura (software libre), que en estos días resulta bastante util ya sea para fines didacticos asi como también para aquellos que quieren emprender un desarrollo de software poder contar con código que sirva como referente.

Pero volviendo con la sinergia, ¿Dónde está? ¿Cómo? ¿Cuándo? La respuesta a estas interrogantes esta en el hecho de que todos los involucrados (Blogueros/Bloggers, lectores y BlogStack) nos beneficiamos de este tipo de iniciativas. Los Blogueros contando con un portal donde poder dar a conocer a mas gente el contenido que generamos aunado a los esfuerzos que hagamos nosotros mismos para la difusión de los mismos (redes sociales, labor de SEO, etc…), lo cual se traduce en mas visitas o visibilidad de nuestras entradas (que puede que hayan sido canalizadas en un principio por el contenido ofrecido por otro Blog dentro de la misma plataforma).  Los lectores teniendo a su disposición un sitio que concentre información de su interés, en este caso focalizado en la tecnología y por el último el propio sitio BlogStack, ya que ofreciéndonos una plataforma para la difusión de nuestros contenidos hace que a medida que se añada un nuevo blog, el sitio Web empezará a ofrecer cada vez mas y mas contenido, lo cual le hará ganar más visitas por ser un sitio dinámico, además de poder beneficiarse de las menciones de otros sitios Web no solo por el simple hecho de darse a conocer en la comunidad sino mejorando su puntuación más rápidamente en los algoritmos de búsqueda de los buscadores (ya sea Google, Bind, etc…).

Así que no me queda  mas que agradecer a su creador por la iniciativa, además de darme la oportunidad de compartir el contenido de mi Blog en esta plataforma e invitarles a todos los Blogueros en que se unan y así seguir generando Sinergia en nuestra comunidad tecnológica.

Mejorando mi blog WordPress, Parte II

Revisando un articulo sobre como mejorar la velocidad de un blog WordPress encontré un enlace donde listaban un conjunto de herramientas online gratuitas que realizan una serie de pruebas (tests) y de acuerdo a los resultados emiten unos informes y dan en algunos casos sugerencias a mejorar. He realizado pruebas con 3 de ellas con el plugin W3 Total Cache inhabilitado y luego de nuevo con el plugin habilitado para poder observar si hay mejoras en cuanto a rendimiento. A continuación los resultados de los tests con el plugin inhabilitado:

Pingdom

pingdom_antes

 

 

 

Google Page Insights

page_movil_antes page_desktop_antes

Gtmetrix

gtmetrix_antes

 

 

 

 

 

Ahora voy con los resultados una vez habilitado el plugin W3 Total Cache

pingdom_despues

 

 

 

page_desktop_despues page_movil_despues

 

gtmetrix_despues

 

Conclusión

Esta verificado que el plugin me proporciona mejoras en cuanto a rendimiento, ya que de hecho en mayor o menos medida las 3 diferentes herramientas así lo han corroborado, lo cual es positivo, aunque hay algo que les confieso me ha dejado aun un poco inconforme y ha sido el resultado arrojado por la aplicación de google, ya que incluso cuando he habilitado la minimización del Javascript, de las CSS y del HTML además de la compresión en los ajustes del plugin de WordPress, el test de velocidad de google me sugiere llevar a cabo lo antes citado (minimización de los js, css y html). Supongo que quizás es alguna afinación en los ajustes que me falta por hacer y de hecho espero que así sea. De todas formas si logro hallar la manera de solventar ese inconveniente lo compartiré con ustedes como una actualización de esta entrada, por otro lado si ustedes conocen la respuesta POR FAVOR HAZMELA LLEGAR!, pero independientemente de eso lo importante es que he podido (y espero que ustedes también) llevar a cabo una mejora en cuanto al rendimiento del blog.

Actualización

He descubierto, que las sugerencias que me planteaba la herramienta Google PageSpeed Insights, que consistían en minimizar el JS (JavaScript), HTML y CSS de la página tanto para la versión de escritorio (que alcanzaba una valoración de 80/100), como para la versión para móviles (con una nota de 74/100), se deben a lo siguiente:

En la versión de escritorio se debe casi en su totalidad a código proveniente de los anuncios de amazon que aparecen en mi página, mientras que en la versión de móviles se debe al JavaScript utilizado para mostrar el mensaje de las cookies al cargar la página y al plugin WPtouch Mobile, el cual es el encargado de mostrar una versión algo minimalista de la página para dispositivos móviles, pero que a su vez me permite conseguir una nota de 99/100 en experiencia de usuario en móviles (razón que me hace compensar el por ahora no tener un mejor rendimiento), lo cual ahora que conozco la razón no me preocupa, ya que no me extrañaría que pronto salga una actualización en alguno de los plugins involucrados (WPtouch Mobile y W3 Total Cache) que permita mejorar la compresión del Javascript y CSS de la página.

Mejorando mi blog WordPress

Hace aproximadamente un mes, inicie esta mejora del blog, motivado en un principio por la ley de cookies española, como les conte en mi última entrada, aunque el paso definitivo que me empujo a llevar a cabo estas mejoras fue el darme cuenta que todas las entradas que incluían segmentos de código se veian mal, sin estilo, en fin,  sencillamente horribles, puedo decirles que me avergüenza ya que ni siquiera tengo una idea de cuanto tiempo llevaban las entradas en dicho estado. Profundizando un poco mas en el asunto creo que tendría alrededor de 2 años o mas sin buscar algún plugin novedoso o revisar algún tema nuevo, pero al menos me contenta decirles que estoy satisfecho con el tiempo dedicado, el resultado obtenido y compartirlo con ustedes.

Antes de empezar y para no alargarme mucho quiero aclarar que no soy un experto ni mucho menos, pero pienso que puede haber personas que al igual que yo no sabrían por donde empezar a la hora de buscar que plugins agregar a su blog WordPress, ni siquiera con que objetivo empezar a buscar e igualmente siempre da un poco de confianza tener una referencia de un plugin antes de descargarlo aunque este tenga 4 estrellas de rating.

Les detallo a continuación que plugins instale:

Plugin para adecuar el blog a la ley de cookies española.

akismetPara evitar el spam en los comentarios, instale Akismet, el cual es un servicio que en el caso de ser utilizado para una web personal es gratis aunque siempre te agradecerán cualquier donación que puedas aportarles, entre otras cosas además de quitarte el dolor de cabeza de los spam te aporta estadísticas al respecto. No dejes de instalarla no te arrepentiras te lo aseguro. Para mejorar aun más la gestión de los comentarios de mis entradas active el plugin SI CAPTCHA Anti-Spam el cual añade un captcha que el usuario ha de ingresar correctamente para poder añadir un comentario.

Con respecto al resaltado de código y su visualización, instale el plugin Crayon Sintax Highlighter, lo cual me sorprendió muy gratamente ya que al activarlo una vez desactivado  el resaltador de sintaxis que tenia previamente, ya se visualizaba el código con un look & feel fantástico, ya que el plugin le aplica un estilo a todo lo contenido dentro de etiquetas <pre></pre>, el único trabajo que tuve que realizar adicionalmente para añadir atributos a la etiqueta como por ejemplo

<pre class=”lang:java”> indicando que el código a mostrar es Java

crayon

Sin lugar ha dudas este plugin ha de estar en este momento en el top 3 de resaltadores de sintaxis, además de la gran cantidad de lenguajes que soporta entre los que puedo nombrarles, C/C++, Java, HTML/XML, CSS …

Para mejorar las funciones de SEO, añadí Google Analytics for WordPress, el cual esta considerado ahora mismo el número 1 en la materia.

yoast seo

Mucho cuidado con tener otro plugin de características similares instalado y activado, ya que puede interferir y dar error al intentar visitar el sitemap.xml de la página.

Para dar características de Social Media, instale Juiz Social Post Sharer, el cual permite compartir en las principales redes sociales y posee un estilo sobrio y sencillo como pueden ver a continuación en la siguiente imagen.

social media

Para aportar esta característica al blog existen muchas otras opciones, yo también estuve probando Social Media Feather, el cual esta muy bien ya que cubre las principales redes sociales y a su vez da la opción de seguir además de la de compartir, aunque yo me decante por la primera por razones de estilo.

Además de las antes mencionadas, añadí el plugin que hasta el momento estaba siendo considerado como el plugin mas popular, el Contact Form 7, este permite de una forma muy sencilla crear formularios de contacto, los cuales recibiríamos por correo electrónico, este es un plugin simple pero que hace muy bien su trabajo.

Era necesario que también llevara a cabo mejoras en cuanto a rendimiento y carga de paginas, sobretodo en estos tiempos donde la navegación a través de dispositivos móviles representa un factor importante y para eso instale W3 Total Cache, el cual además de crear una cache, mejora de forma considerable la velocidad de carga haciendo una compresión de las CSS y el código javascript del blog.

Para finalizar yo siempre me pregunte como hacían los editores de blog related postpara en todos sus entradas hubieran referencias a otras entradas relacionadas entre si (dios que iluso fui), y para ello existen varios plugin aunque yo me decante por Yet Another Related Posts Plugin, que funciona de maravilla, con solo instalarlo ya me doto de esta característica a la mayoría de las entradas de mi blog.

Para aquellos que al igual que yo esten un poco desconectados en las novedades los plugins WordPress espero que esta entrada les haya sido de utilidad y para los que ya estén mas actualizados ¿Han hecho alguna mejora a su blog? ¿Que otro plugin podrían sugerirnos para tener nuestro blog actualizado a las nuevas tendencias?

Nuevo juguete, La Raspberry Pi

Hacia muchisimo tiempo que no escribía, pero bueno hoy que tengo la oportunidad y me gustaría compartir con ustedes par de cosas referentes a la raspberry pi y conocer de ustedes su opinión al respecto y si tienen alguna idea o proyecto casero, porque no compartirla.

Para los que no saben, la raspberry pi es una placa computadora de bajo coste, creada en Reino Unido con fines didácticos, hay 2 modelos el A y el B. El modelo B a diferencia del A, consta de puerto ethernet y de un puerto USB adicional, 512 MB de RAM (a diferencia de los 256 MB del modelo A), ambos modelos poseen el mismo CPU y GPU además de una salida HDMI, pero las características adicionales presentes en el modelo B hacen que sea un poco mas cara que el modelo A. En resumen en esa pequeña placa si acaso solo un poco mas grande que una tarjeta de crédito, tenemos la base para armar una computadora, ya solo sería necesario los periféricos e iniciarla con un sistema operativo.

Durante mucho tiempo venia oyendo/leyendo acerca de la raspberry pi, pero no había dado el paso de adquirir una, pues bien hace pocos días encargue un kit de iniciación por internet y ya finalmente esta en mis manos. ¿Qué me motivo a comprarla? pues les confieso que la cantidad de proyectos mas que interesantes que empece o ver en artículos y paginas por internet, que hacen que quiera llevar a cabo yo también esos pequeños proyectos tipo DIY (Do It Yourself o como sería en español Hazlo tu mismo). Aunque yo ya poseo una placa Arduino, he trasteado/jugueteado menos de lo que hubiera querido pero aun así me he divertido haciendo cosas simples (p.e. java y arduino) y quiero seguir haciendolas pero ahora con usando también mi nueva raspberry pi.

Por internet he leido que con las raspberry han hecho de todo tipo de cosas como por ejemplo:

  • Un media center, reproductor AirPlay, smart TV (al estilo google TV o Apple TV).
  • Ordenador de abordo para el coche (computadora para el carro).
  • Una maquina de arcade con NES, SNES, SEGA, ATARI.
  • Punto de Acceso Wifi, servidor Radius.
  • Domótica, Internet de las cosas, robots.
  • Servidores NAS, Servidor Web, radio por internet, Rack de raspberrys (super computador de bajo coste, computación paralela).
Como ven igual que con arduino, aquí el limite es nuestra imaginación, e incluso combinando ambas plataformas también podríamos lograr cosas interesantes. Hay algunos proyectos que me gustaría llevar a cabo y se los detallo a continuación:
  • Controlar el termostato de la calefacción de mi casa vía Internet o SMS.
  • Construir reproductor AirPlay aprovechando unas cornetas que se les daño la conexión para el iPod/iPhone.
  • Una maquina arcade casero, y tener allí todos esos clásicos de ATARI, NES y SNES.
  • Un servidor RADIUS casero.
  • Notificar por redes sociales de forma automática mi localización cada 30 min o cada 50 km (por decir algo) cuando vaya de viaje en el coche (carro).
  • Enviar SMS o correo electrónico que me notifique, cuando llegue correspondencia a mi buzón de correo.
Estas son alguna de las ideas que me gustaría poder desarrollar, algunas demandan mas tiempo que otras y de igual manera podrán ser de mayor o menor interés para ustedes, pero a mi realmente me causan ilusión y me parece entretenido poder hacerlas, es por eso que denomino a la raspberry pi mi nuevo juguete.
¿Ya tienes tu raspberry pi? ¿Cuales han sido tus impresiones?, ¿qué has construido con ella o que proyectos te gustaría realizar?.


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).

[vimeo clip_id=18539129]

Documental con subtítulos en español

[vimeo clip_id=18390711]

 

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

[tube]http://www.youtube.com/watch?v=TGxEQhdi1AQ[/tube]

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.