3

Un buen día para empezar algo grande

Posted by Jose Luis Manrique on 11:38 in ,
Hoy es un buen día para empezar (y acabar) mi trabajo de fin de carrera o en otras palabras "Mi Tesis", el tema, como ya le comenté a algunos, es sobre BPM y será el punto sobre el cual muy probablemente hable en esta bitácora.

0

Maven? Maven... si Maven!!!!!

Posted by Jose Luis Manrique on 10:10 in ,
Después de un largo tiempo de descanso o más bien de relajo escribo algo sobre una tecnología que hasta el momento había esquivado pero por motivos de trabajo tuve que usar y creo que fue una buena excusa para darme cuenta de todo lo que me estaba perdiendo. Pues como dice el titulo esa tecnología es Maven, no voy a hablar mucho de los conceptos que giran alrededor pero si voy a dar alguna de sus características:
  • Maneja las dependencias que tienes en la aplicación, viendo si es que una es requerida dentro del empaquetado final o si es requerida solo para compilación o si solo se necesita al momento de hacer pruebas.
  • Es agnóstico del IDE así que cada miembro del equipo podría trabajar en diferentes entornos siempre y cuando respete la estructura de directorios que provee Maven.
  • Al manejar un ciclo de vida para cada aplicación nos vemos obligados a realizar ciertas actividades que antes no hacíamos tales como las pruebas unitarias. Obviamente aun podemos hacerle "la jugada" pero no es recomendable.
Obviamente vamos a tener muchas mas características pero para mi son las que me atrajeron. Por otro lado tenemos que realizar una "instalación" lo cual en linux (Ubuntu en mi caso) lo traducimos en los siguientes pasos:
  1. Descargar maven y descomprimir en alguna ruta en mi caso usaré /home/jlmanrique/maven, si al momento de descargar lo hacen usando el formato tar.bz2 deberan ejecutar el siguiente comando:
    $tar -jxvf archivo-descargado.tar.bz2
  2. Una vez ubicado en esa ruta tenemos que poner en el path de nuestra linea de comandos, la idea es que al momento de poner mvn este llame al .jar de Maven y se realice el comando que pedimos. Para eso modificamos el archivo .bashrc el cual se encuentra en la ruta $HOME que en mi caso es /home/jlmanrique .
  3. Una vez abierto el archivo ubicamos al final de este las siguientes lineas
    export M2_HOME=/home/jlmanrique/maven
    export M2=$M2_HOME/bin
    export PATH=$M2:$PATH
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    
    Estas son usadas para agregar al path la carpeta donde descomprimimos Maven y la ultima linea es para setear la variable JAVA_HOME que usaremos para trabajar con maven.
  4. Finalmente solo nos queda abrir una nueva linea de comandos y ejecutar:
    $mvn -version
    Y así obtenemos
    Apache Maven 2.1.0 (r755702; 2009-03-18 14:10:27-0500)
    Java version: 1.6.0_03
    Java home: /usr/lib/jvm/java-6-sun-1.6.0.03/jre
    Default locale: es_PE, platform encoding: UTF-8
    OS name: "linux" version: "2.6.22-16-generic" arch: "i386" Family: "unix"
    
    O algo similar para el hardware que estén usando.
Con esos 4 pasos tendríamos nuestra configuración de Maven lista para ser usada, cualquier duda o comentario no duden en hacérmela llegar.

0

Crear un .iso desde el file system de un Unix

Posted by Jose Luis Manrique on 8:10 in ,
Todos los días de trabajo tengo una necesidad nueva, esta vez mi problema gira entorno a armar una imagen (.iso) para un DVD/CD este lo voy a montar en el file system y luego a ejecutarlo. Para realizar esta tarea voy a utilizar el comando mkisofs (el nombre suena como "make iso from file system" el nombre correcto creo yo) y ya que el objetivo es muy puntual solo queda ejecutar el siguiente comando:
$mkisofs -D -o miarchivo.iso /home/jlmanrique/DVD
Donde -D es para decir que se va a incluir directorios largos, -o indica que se va a ingresar el nombre del archivo, miarchivo.iso es el nombre del archivo a generar y /home/jlmanrique/DVD es la raíz desde donde se copiaran todos los archivos. Tener en cuenta que para un .iso podemos agregar mas rutas simplemente las tenemos que separar por un espacio. Finalmente esperamos unos momentos y tenemos nuestro archivo iso. Espero les sea de utilidad tanto como a mi.

0

Feliz dia Mamá!!!

Posted by Jose Luis Manrique on 19:38 in
Segundo domingo de mayo, las calles llenas, las tiendas con muchas ofertas y por donde vaya encontraré muchos "Feliz Día Mamá". Las personas compran cosas para sus abuelas, madres, esposas, hermanas, hijas, etc, buscan el mejor peluche, un buen perfume, ropa elegante, casual, sport cualquier cosa que le pueda ser útil o simplemente que en algún momento lo pueda usar. Lo cierto es que muchos recapacitamos este día acerca de la persona que tenemos (o tuvieron) a nuestro lado, recordamos las veces que le hicimos pasar una mala noche esperando a que lleguemos a casa o cuando se preocupa por que no llevamos comida o cuando en el trabajo nos quedamos hasta tarde. Los motivos para preocuparse sobran algunas lo hacen notar otras no pero siempre hay ese sentimiento. A todo esto aprovecho el momento para decir lo siguiente:
"Mamá no seré el mejor hijo del mundo, te hice (y seguiré) renegar muchas veces se que también no siempre compartimos las mismas opiniones pero a pesar de todo te quiero mucho y no cambiaría por nada todos los momentos que vivimos. Muchas gracias por todo."
La foto es de la graduación de primaria de mi hermana menor

0

Montar un .iso en el fileSystem de un UNIX?

Posted by Jose Luis Manrique on 8:03 in ,
La verdad es que a primera vista parece que eso no fuera cierto y para los usuarios de M$ Window$ hacer esto quiza requiera el uso de algún programa extra (si el propio SO lo tiene haganmelo saber) pero en un Unix común y corriente que posee el programa mount se puede hacer esta tarea.
La primera acción que debemos realizar es la creación de una carpeta donde iniciara el punto de montado eso lo hacemos ejecutando el siguiente comando:
$mkdir /home/jlmanrique/ISO_DVD
Seguido procedemos a realizar el respectivo montado, para eso ejecutamos el siguiente comando:
$sudo mount -o loop {nombre de imagen}.iso /home/jlmanrique/ISO_DVD
Para verificar que hemos realizado exitosamente el montado verificamos con un ls el contenido de la carpeta /home/jlmanrique/ISO_DVD . De esa forma realizamos el montado de un .iso en nuestro filesystem, ahora para que podría ser útil:
  • Se te acabaron los cds y requieres levantar una imagen.
  • Requieres copiar algunos archivos de una imagen (o todo el contenido).
  • O como en mi caso, requieras hacer un appliance, descargaste el instalador (.iso) y como tu lectora de dvd no es quemadora se tu puede aguar la fiesta ya que requieres usar todos los archivos de la imagen.
  • Simple gusto.
Si encuentras otro uso no dudes en dármelo a conocer.

0

Estructura de directorios en Unix

Posted by Jose Luis Manrique on 13:54 in
Cuando uno ve la estructura de directorios de un Unix por primera vez puede apreciar que existe una raíz y a diferencia de M$ Window$ que tiene varias unidades y al comienzo pueden confundirlo a uno pero la verdad es que detras de todo esto hay una idea muy simple pero muy potente.
A fin de que tengan una pequeña idea de cuales son las carpetas que debemos de tener en cuenta al momento de ver un Unix les dejo el siguiente enlace el cual describe cada una de las carpetas mas importantes en un entorno de las X. En lo personal me sirvió mucho y quiza encuentren algunas diferencias sobre el tipo de Unix que estén usando pero la idea se mantiene, espero el enlace les sea de utilidad tanto como lo fue para mi.

0

Log4j no será el más eficiente pero es muy útil

Posted by Jose Luis Manrique on 15:03 in ,
Casi al finalizar el día de trabajo se presento una pregunta muy peculiar entre uno de mis compañeros de trabajo esta era sobre el uso del log4j en una aplicación. Para comentar un poco los hechos esto fue lo que realmente paso:
  1. Me encontraba muy tranquilamente esperando a que el SuSE 10 en una máquina virtual y vi a un compañero programar unas cuantas lineas usando el system.out.println(), cuando lo revise le dije que seria mejor que use el logger para que pueda revisar lo que imprime su aplicación al momento de arrojar errores.
  2. Lo siguiente fue una duda por como configurar esto a lo cual simplemente el dije que habia que agregar un nuevo appender (org.apache.log4j.ConsoleAppender) que se encargara de imprimir en la consola, una vez realizado esto procedimos cambiar el código para que utilizara el logger en modo ERROR ya que se pintaba un Exception (en este caso un java.lang.NullPointerException).
  3. Luego de mostrarle algunos tips para utilizar el logger (el clasico logger.isDebugEnable y logger.isInfoEnable) le dije que utilizar el system.out.println() era para "Salvajes" haciendo referencia a que esa era una practica muy antigua (casi de la época de las cavernas).
  4. Seguido de esto otra persona me dijo por que decía eso de utilizar el sysout ya que ambos cumplían con el mismo objetivo y que le parecía mas fácil el uso del sysout. Mi respuesta fue como diría un amigo "muy hábil" puesto que en ese momento se me ocurrió decir que era por una cuestión de performance.
  5. Si esta persona se sentó creyendo que esta era una respuesta adecuada (al menos eso parecía) no tarde en darme cuenta de la tremenda tontería que había dicho (por lo cual pido las disculpas del caso) ya que la verdad es que al ser log4j un framework este agrega un determinado tiempo de llamada a los métodos para el pintado en un archivo, consola, etc y el formateo de los mismos dependiendo del patrón que estemos escogiendo. Todo este tiempo claro esta no es generado por el sysout y por ende a este lo hace "mas veloz" si se trata de escribir claro esta en el sysout.

Por un momento esto nos lleva a pensar cuales podrían ser los motivos que nos llevan a usar un framework para el manejo de logs y si realmente valen la pena usarlos ya que tendríamos mas tiempo de procesamiento para pintar en las diferentes salidas que necesitemos. La verdad es que a pesar de consumir mas tiempo del procesador si es muy necesario el uso de un framework para esta funcionalidad por eso voy a listar los motivos por los cuales uso el log4j para manejar mis archivos de log.
  1. Todo framework tiene como objetivo el facilitarnos las tareas de algún campo en especifico y log4j no es la excepción a la regla puesto que su principal objetivo es ayudarnos con el manejo de los logs de nuestra aplicación ofreciéndonos una gran variedad de configuraciones que nos permitirán concentrarnos en nuestro problema real: Desarrollar una aplicación y no en desarrollar un buen manejo de logs.
  2. Para realizar una buena configuración de log4j no se requiere tener conocimientos extremos de como abrir y cerrar un flujo y si lo estamos haciendo de la forma correcta o no, simplemente tenemos que utilizar los appenders que estan definidos como parte del framework dentro de los cuales tenemos el ConsoleAppender para escribir en la salida estándar, el DayliRollingFileAppender si deseamos que se cree un archivo de log cada dia que pasa, el RollingFileAppender el cual escribe de manera circular cada vez que el archivo llega a un determinado tamaño, el AsyncAppender para escribir de manera asíncrona en el archivo entre otros. En caso ninguno sea de nuestro agrado se puede extender (tomarlo como heredar de la clase o basarse en ella) cualquiera de estos a fin de obtener el manejo esperado.
  3. Otra de las funcionalidades que tenemos es el formateo del mensaje a escribir esto lo hacemos usando plantillas que se llaman Layout, cada uno de estos describe el formato en el cual se escribirán nuestros mensajes, dentro de estos tenemos al HTMLLayout el cual ingresa cada uno de los logs como una linea de una tabla, el PatternLayout (el que mas uso) el cual escribe el log en base a un patrón ingresado en el archivo de configuración, el SimpleLayout el cual solamente describe el nivel del log y el mensaje, entre otros. Al igual que los Appender si ningún Layout es de nuestro agrado podemos crear el propio que cumpla con nuestro requerimiento, personalmente no he tenido la oportunidad de realizar dicha tarea puesto que con el PatternLayout realizo todas mis tareas.
  4. Otra de las características que me agrada de este framework es el manejo de varios niveles del mensaje los cuales son: TRACE, DEBUG, INFO, WARN, ERROR y FATAL. El como manejarlos puede depender de cada uno, mi sugerencia es manejar cada mensaje informativo entre el TRACE, DEBUG e INFO el uso de cada uno deberá ser en el grado de importancia que se desee tener, para el caso de los mensajes en WARN lo utilizo para mostrar algún evento en el sistema que no es un error pero que si seria bueno documentarlo a fin de mostrar una advertencia en el log, el uso del ERROR es para mostrar errores del sistema y el FATAL es cuando queremos pintar algún mensaje antes de detener el servicio totalmente. Esta es la "formula" que hasta el momento me ha servido para manejar los niveles de mis mensajes.
  5. El manejo de diferentes fuentes de impresión del log dependerá de la cantidad de Appenders que nosotros registremos en nuestra configuración, para el programador el escribir en una fuente o en cinco es transparente el solo tiene que decir que tipo de mensaje quiere imprimir y el framework se encargará de realizar las impresiones necesarias. En el caso de utilizar el sysout uno debe de indicar manualmente donde realiza la impresión y si se quiere quitar una fuente se deberla de volver a compilar la aplicación a fin de efectuar el cambio.
  6. Regresando a los niveles de log el utilizar un nivel u otro y mostrar o algunos mensajes o no es tan trivial como modificar un archivo de configuración (properties o xml) el desarrollador no tiene que modificar código fuente para realizar el cambio y mucho menos tiene que recompilar la aplicación para realizar estos cambios, lo cual lo pone un paso adelante del manejo del sysout.
  7. Finalmente la mejor opción por la cual usuaria el log4j en vez del sysout es por que si realizo un buen uso de los niveles de mensajes en el código no requiero iniciar la aplicación en modo debug lo cual nos ahorra tiempo al momento de depurar errores puesto que todos estos se encuentran debidamente documentados en un archivo, consola, base de datos, etc.

Si a pesar de todo esto aun no quieres usar el log4j o algún otro framework pues solo me queda decirte que mas adelante tendrás muchos problemas o acabarás creando tu propio framework para pintar tus eventos. Para que reinventar la rueda si esta funciona y muy bien, espero este post sea de su agrado.

Copyright © 2009 Autumn All rights reserved. Theme by Laptop Geek. | Bloggerized by FalconHive.