Plugins WordPress para la ley de cookies española

Transcurría el mes de agosto del año pasado cuando por un tuit me entere de que existía una “ley de cookies”, el tuit hacia referencia a una publicación donde indicaban que ya existía una demanda en contra de una empresa “grande” en España y todo porque alguien (entiendo que un astuto) había introducido la demanda ya que el sitio Web de la empresa no indicaba que introducía cookies en las computadoras de los usuarios que visitaban dicho sitio. Recuerdo también que dicho articulo comentaba que el ente jurídico español no multaría (según sus fuentes) con una cifra escandalosa a la empresa para la compensación del o los usuarios pero si estaban tomando ese caso para elaborar una especie de borrador para que a su vez bloggers y empresas tuviesen una referencia al momento de adaptar sus sitios Web así como también ellos tener una referencia a la cual apegarse a la hora de determinar si un sitio cumplía con la ley o no.

Esta ley de cookies fue aprobada en el año 2012, pero ciertamente creo que éramos pocos los que sabíamos o habíamos empezado a acatar dicha legislación que si no me equivoco es a nivel europeo. Yo particularmente no estoy muy de acuerdo que se diga con dicha ley, de hecho considero que antes de multar empresas y personas e invertir dinero en toda una legislación que vigile su cumplimiento, etc.., preferiría que tales recursos se dedicaran a la educación del internauta para que conozca acerca de las cookies, o sea, me parece bien que se informe al usuario pero no con el hecho de ser tan riguroso hasta llegar al punto de multar (y mas en estos tiempos que corren) a la persona (jurídica y natural) dueña del sitio Web que no informe acerca de las cookies que guarda la página Web en los navegadores de los internautas.

Ha sido hasta este momento que por fin me he dignado a adaptar el sitio y buscar al respecto, y bueno comparto brevemente con ustedes lo que encontré que me ha resuelto el problema. Hay realmente varios pulgins en el sitio Web de WordPress.org pero los dos que les listare a continuación fueron los que mas me gustaron:

  • Ley cookie: Esta muy bien y es sencillo, pero aun esta en etapa de desarrollo, pero lo bueno es la disposición que tiene su creador en mejorarlo con ayuda de la comunidad.
  • Asesor de cookies para normativa española: Muy sencillo y sinceramente (hasta donde llega mi conocimiento en la materia) cumple con lo necesario y realmente hace todo y en menos de 5 min tuve el sitio ya adaptado para el cumplimiento de la ley de cookies. En un principio he dejado todo lo generado por defecto para a su vez hacer algo de justicia a su desarrollador y referencia al plugin entre otras cosas.

Ahora cuéntanos ¿ya tienes tu sitio Web de empresa o blog preparado para el cumplimiento de la ley de cookies?

Algo de información valiosa al respecto

http://www.davidrabaez.com/ley-de-cookies-5-puntos-a-tener-en-cuenta/

Hadoop Beginner’s Guide

Todas aquellas personas interesadas en aprender apache Hadoop y mapReduce no dejen pasar esta oportunidad, hasta el 30 de noviembre podras descargarte gratuitamente el libro Hadoop Beginner’s Guide.

Tan solo tienes que hacer clic en el enlace anterior, registrarte e inmediatamente podras descargar el libro en formato electrónico desde tu cuenta de Packt Publishing.

Aqui también dejo el enlace a amazon para aquellos interesados en buscar comentarios acerca del libro  o adquirir el libro fisico.

Como ver películas desde el iPad almacenadas en Dropbox

Quizás puede que suene un poco rebuscado el titulo, pero les confieso que no es mentira,  hace pocos días las circunstancias me llevaron a buscar una manera de poder visualizar unos videos desde Dropbox.

¿Por qué Dropbox?

Un buen amigo mío necesitaba ver unos vídeos que yo tenia, los cuales eran archivos de gran tamaño (entre los 200 y 700 MB), pero el solo contaba con el iPad, es decir no contaba con su computadora para sincronizar los archivos con iTunes, por lo cual solo contábamos con Internet como medio para poder transferir los archivos, ya que estábamos ubicados en localidades distintas, fue así como se me ocurrió la idea de usar Dropbox, subiendo yo los vídeos a una carpeta y posteriormente compartirla con él.

¿y ahora que?

Ahora tenia que buscar una App (video player) donde pudiera acceder a una cuenta Dropbox y poder ver los vídeos. Buscando en la App Store halle 2 aplicaciones gratuitas que cumplían con el requisito (acceder a Dropbox), estas fueron: “VLC for iOS” (nueva versión) y “playable”. Así que me dispuse a descargarlas y probarlas.

VLC

Yo antes que nada debo confesarle que soy un amante de VLC, tanto de las versiones para iOS como para Mac OS X, esta nueva versión de VLC funciona de forma “espectacular”, pude acceder y descargar los vídeos desde Dropbox sin ningún problemas y posteriormente verlos sin ningún problema (archivos .mkv).

  

playable

Nunca antes había oído hablar de esta app, su look & feel esta muy al estilo de lo que veremos en iOS7, al igual que VLC pude acceder, descargar y posteriormente visualizar los vídeos sin ningún problema, el único inconveniente o pega que puedo mencionar es que la versión gratuita, en la parte inferior muestra un mensaje “Upgrade!” para actualizar a la versión de pago y si resulta algo incomodo.

 

A la final como ustedes han de suponer nosotros optamos por VLC ya que aunque ambas aplicaciones son fáciles de usar y proporcionan las mismas características, la versión gratuita de la aplicación playable nos muestra la ventana para actualizar la cual resulta incomoda al ver los vídeos, mientras que VLC siendo gratuita no nos muestra nada y va de maravilla.

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


Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

El día de hoy comienzo una nueva categoría llamada “exceptions“, donde compartiré (en medida de lo posible) como resolver o evitar que en nuestras aplicaciones salten excepciones o al menos indicar la razón por la cual es arrojada. En esta oportunidad les traigo la siguiente exception:

Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

Esta excepción, se obtiene en Java 6 al haber discrepancias entre el tipo de instancia del keystore y el tipo de almacén de claves, al intentar cargar el almacén de claves. Por ejemplo  si intentásemos cargar el almacén de claves desde un fichero .jks (jks es una implementación por defecto de Java  para el almacenamiento de claves, que por ejemplo puede ser creado con el comando keytool del jsdk), habiendo indicado que la instancia del keystore es “pkcs12” en vez de haber utilizado el valor de “jks”. Como el ejemplo a continuación:

Como evitar entonces la excepción? Muy sencillo, hay 2 alternativas.

  1. Utilizar como tipo para obtener la instancia del keystore el valor de “jks” en vez de “pkcs12” (para este ejemplo específicamente), es decir utilizar el tipo adecuado para obtener la instancia del keystore.
  2. Cargar el almacén de claves adecuado, es decir, para este ejemplo sería indicar el path del certificado digital (por ejemplo de tipo .p12, .pfx) en vez de haber utilizado el path del fichero jks.

Espero pueda ser de utilidad y les quite al menos uno que otro dolor de cabeza. Cualquier información que consideres pueda ser de utilidad relacionada con esta excepción, no dudes en compartirla.

Decompilador Java

Hacia mucho tiempo que no me veía en la necesidad de utilizar este tipo de herramientas como lo son los decompiladores, para aquellos que desconocen que son, en palabras sencillas, son herramientas que permiten obtener el código fuente de una clase a partir del Bytecode de la misma. A continuación les dejo un decompilador que he utilizado y hasta ahora me ha ido bien con el, es bastante sencillo, posee versiones para los principales sistemas operativos (Mac Os X, Windows y Linux) y como puntos a resaltar decompila desde Bytecode de la versión 1.1 hasta la versión 1.7 de Java, es gratuito y además posee plugins para eclipse y IntelliJ.

Enlace al sitio web del decompilador. Comparte con la comunidad tus impresiones acerca de la herramienta y si conoces alguna otra que nos puedas sugerir te lo agradeceremos.

Algunos screenshots

Mi primera aplicación en iOS

Desde hace poco tiempo a causa de un nuevo proyecto al que fui asignado me toco empezar a buscar información para desarrollar en iOS, aunque únicamente consistió en una prueba de concepto y viabilidad del proyecto, empece por comprarme un libro y empezar a leerlo en la medida en la que el trabajo me lo permite, ahora quiero compartir con ustedes lo poco que hasta ahora he aprendido, que insisto es poco, pero me esta gustando bastante, no solo el framework (Cocoa Touch) sino también el entorno de trabajo (Xcode).

Intentare guiarles de la manera mas clara posible en la creación de una versión del hola mundo en Xcode para iOS.

Empezaremos ejecutando Xcode y seleccionando la opción de crear un nuevo proyecto. Inmediatamente después debemos seleccionar una plantilla (template), en la parte superior izquierda seleccionamos la opción Application en la sección iOS, seguido seleccionamos en el panel derecho la opción Single View Application y pulsamos el botón Next.

 Luego tenemos que rellenar el nombre del proyecto, el dispositivo para el que se elabora la App con los datos de la siguiente gráfica.

De los valores ingresados una muy breve descripción:

Product name: Nombre de la aplicación

Class Prefix: Prefijo dado a las clases para evitar conflictos de nombre.

Una vez realizados los pasos anteriores, Xcode nos habrá generado un conjunto de archivos, desplegar la carpeta de nombre HelloWorld para poder visualizarlos, entre ellos podrán ver un fichero de nombre BIDViewController.xib. Al seleccionarlo observarán como en el editor aparece lo que será la interfaz gráfica sin ningún componente.

En el panel inferior derecha del Xcode se encuentra ubicada la biblioteca de componentes, de allí arrastraremos a la interfaz los componentes necesarios para poder construir una GUI parecida a la imagen.

Empezaremos arrastrando una etiqueta (label) y la ubicaremos en la parte superior izquierda veremos como el editor tiene una especie de asistente que nos ayudara a la ubicación mostrando unas lineas azules para marcarnos los bordes, el centrado, alineación con otros componentes, etc. Una vez ubicada la etiqueta hacemos doble click en el componente y editamos el valor de la etiqueta y escribimos “Nombre:”.

Seguido ahora arrastraremos un campo de texto (text field) y luego ajustaremos su longitud alargando el campo por los bordes y de igual manera apoyandonos de estas lineas azules que nos indican cuando estamos en el limite de los bordes de la pantalla.

Por ultimo arrastramos un botón y lo ubicamos centrado en la parte inferior. Hacemos doble clic en el botón y le asignamos el texto “Saludar”.

Terminado el diseño de la GUI vamos a aprovechar alguna de las ventajas del IDE (Xcode) que de forma transparente realizando unos sencillos pasos nos generara el código necesario para nuestra aplicación.

  1. Ir al menu yView->Assistant Editor->Show Assistant Editor, podremos ver como la vista donde editábamos la GUI se ha dividido en 2.
  2. Hacemos clic en el campo de texto y pulsando la tecla ctrl lo arrastramos hacia el lado derecho donde se esta el código y soltar antes del @end. Nos aparecerá una pequeña ventana y deberemos rellenar los valores como lo indica la siguiente imagen. Al terminar presionar el botón connect.
    agregando outlet
  3. Seguido realizamos el mismo paso pero con el botón “Saludar” y rellenamos lo datos de la ventana con los datos que aparecen en la siguiente imagen.
    agregamos action

 

Ya casi hemos terminado con la interfaz gráfica (como pueden ver uso de forma intercambiable GUI e interfaz gráfica) pero antes deberemos seleccionar el archivo BIDViewController.m (veremos como en el editor principal se carga el archivo). Agregaremos un método y editaríamos otro antes del @end, como aparece en la siguiente imagen. Siendo más explícito editaremos el action saludar que Xcode nos ha dejado ya el esqueleto del método (lo hizo justo cuando arrastramos el botón saludar al lado derecho del código y nos apareció la ventana a la que le ingresamos información) y agregaremos el action textFieldDoneEditing.

metodos action

El primer action (saludar) que hemos editado será el que llevará a cabo la funcionalidad cuando pulsemos el botón saludar (que aunque no conozcamos el lenguaje podemos interpretar que es lo que hace). La funcionalidad consistirá en arrojar una alerta (especie de ventana modal) concatenando la cadena “Hola ” el contenido que hayamos ingresado en el campo de texto. El segundo action (textFieldDoneEditing) sencillamente hace que se oculte el teclado al pulsar enter, sino agregamos este método y lo enlazamos con la vista al poner el cursor sobre el campo de texto aparecería el teclado y este no se ocultaría.

Seleccionamos de nuevo el archivo BIDViewController.xib, luego en el editor en la parte izquierda veremos 3 iconos, File’s Owner,  First Responder y View, seleccionamos la vista (View) y luego presionamos las teclas cmd+alt+6 y en la parte derecha de nuestra ventana se mostrara el connections inspector. Seleccionamos el botón “Saludar”, nos aparecerán todos los eventos del botón debajo del titulo Send Event, luego seleccionamos el circulo correspondiente al evento Touch Up Inside y lo conectamos (arrastrando) al File’s Owner, nos deberá aparecer el método saludar y lo seleccionamos.

Para terminar seleccionamos el campo de texto y aun mostrandose el panel connections inspector (en caso que no este repetimos los pasos para que aparezca) seleccionamos el circulo correspondiente al evento Did End On Exit y lo conectamos con el File’s Owner y seleccionamos el action textFieldDoneEditing e inmediatamente después guardamos (cmd+s).

Finalmente ya hemos terminado, ahora de haber podido seguir todos las indicaciones antes señaladas en el post podremos ejecutar nuestra primera App para Iphone, que esperas!!! vamos a probarla, pulsemos cmd+r.

simulador iphone

¿Qué tal? yo si les soy sincero a mi lo que me asombro la primera vez fue el entorno, es muy amigable ya desearía yo que algún editor Java me generara un código legible y de forma tan sencilla para generar y darle funcionalidad a una GUI, se que a mucho les gusta quizás el modo mas largo, codificando todo y así ya luego al usar estos asistentes saber donde, cuando y como se genera el código, pero bueno mi intención en un principio es hacer un Hola Mundo, Hola Pedro u Hola María que se desarrollase de forma sencilla, rápida y así tener un primer acercamiento con esta tecnología. Espero que les haya parecido interesante, ¿conoces algún recurso que quieras compartir con nosotros?, a que esperas, la información es poder, compartela y así todos podemos beneficiarnos.

 

 

 

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.

Como crear la lista de añadidas recientemente de itunes

Este post va dedicado a aquellas personas que al igual que yo tienen esa facultad “divina” de haber hecho desaparecer la lista de  añadidas recientemente de itunes. Para todos  ellos aquí les indico lo sencillo que es.

  1. Ir a Archivo->Nueva lista de reproducción inteligente. ¿Sorprendidos? pues a mi si me sorprendió un poco que fuese una lista inteligente sencillamente me hacia a la idea que era una lista de reproducción normal y corriente y que alguna especie de batch la actualizara o algo así por el estilo.
  2. Agregamos la primera regla, como lo indica la siguiente figura
    primera regla
  3. Pulsamos el simbolo “+” ubicado a la derecha de la primera regla e insertamos la segunda regla reflejada en la imagen, luego pulsamos aceptar.  segunda regla
  4. Llamamos a nuestra lista, “Añadidas recientemente”.
Listo ya tenemos nuestra lista de añadidas recientemente. Como vieron resulta mas sencillo de lo que podríamos imaginar y a su vez puede que a mas de uno le de un poco de curiosidad (gusanillo) y quiera crearse una nueva lista de reproducción inteligente o mas bien a nuestra lista de añadidas recientemente agregarle otra regla como por ejemplo que no sea un video.
Así que ya no se preocupen si de nuevo vuelve a desaparecer nuestra lista de reproducción 🙂

 

Usando regex para formatear SQL

En algunas ocasiones llegue a leer  de regex, también lo estudie (muy poco) para sacar la certificación SCJP y en rara ocasión utilizarlo para alguna validación, aunque sin dudarlo donde mas pude conocer de su potencial fue conversando con colegas de profesión.

En esta oportunidad quiero compartir con ustedes una solución que pude dar a un problema, agilizando (mucho) mi trabajo y facilitando lo que tenia que hacer.

El problema: Un script para la inserción de un gran numero de registros (aproximadamente por el orden de los 16000) que afectaba a varias tablas. Dicho script era producto de una exportación de una BD oracle, la exportación le otorgo a los valores de las fechas un formato especial de la forma {d ‘yyyy-mm-dd’}. Por ejemplo {d ‘2010-09-14’}.

Al ejecutar los script arrojaba un error, ademas de que el formato de la fecha en mi BD local era de la forma ‘dd-mm-yyyy’, entre las soluciones que me aconsejaban era utilizar un editor al estilo notepad++, ultraedit y de esta manera poder eliminar las llaves y la letra d, pero esto no solucionaba totalmente el problema ya que aun estaba de por medio el formato en el que estaba representada la fecha. Fue en ese momento que pensé regex y de toda su potencia y aunque no estaba seguro de que pudiese ser la solución sentí que tenia que darle un vistazo en detalle a las características que podría darme.

Después de visitar algunos sitios web, pude dar con lo que necesitaba y me dispuse a implementar una solución (java) para mi problema, que de antemano se que puede hacerse mas elegante e incluso por que no decirlo, implementarse mejor, pero el entusiasmo que tengo en compartirlo con ustedes hace que no me dedique a refinar mi programa, pero lo que mas deseo que evitar que algún colega tenga que editar 10000 INSERT.

Aquí les dejo el código

Como podrán ver la funcionalidad de este programa consiste en recibir 2 argumentos y en cuyo caso que no los reciba arrojar un mensaje de error. El primer argumento es la ruta donde esta ubicado el fichero SQL y el segundo argumento es el nombre del nuevo fichero SQL que habrá sido formateado.

La clave: El patron regex utilizado.

String patternStr = “\\{[d]\\s\\'(\\d{4})-(\\d{2})-(\\d{2})\\’\\}+”;

Tiene las siguientes características:

  • \\{      busca existe una llave “{“.
  • [d]      seguida de la letra d.
  • \\s      seguido de un espacio en blanco.
  • \\’      busca el carácter “‘” (comilla simple)
  • (\\d{4})-(\\d{2})-(\\d{2})     seguido de 4 dígitos más “-” seguido de 2 dígitos mas “-” y por ultimo 2 dígitos. Como podrán notar los dígitos aparecen dentro de paréntesis, esta es una particularidad de regex que nos permite hacer grupos y esto resulto fundamental para poder resolver el formato de la fecha.
  • \\’    busca el carácter “‘” (comilla simple).
  • \\}    busca el carácter “}”.
  • + Nos indica que al buscar este patrón, este puede aparecer en más de una oportunidad.

Por ultimo está la sentencia utilizada para llevar a cabo el reemplazo:

bos.write(line.replaceAll(patternStr, “‘$3-$2-$1′”)+”\n”);

Donde al hallar el patrón, es sustituido por el segundo parametro utilizado “‘$3-$2-$1′”, aqui enlazamos con los grupos definidos, ya que eso es a lo que hacen referencia las variables $, donde por ejemplo $1 significa el primer grupo definido  en el patrón que se corresponde con el año, $2 el mes y $3 el día.

Como pudieron ver regex no solo ha de ser utilizado para llevar a cabo validaciones sino que además nos permite utilizarlo para llevar a cabo funciones de formateo y a en mi caso me ahorro editar a mano 15000 registros o en el mejor de los casos hacer un programa Java muy rebuscado trabajando con cadenas.