Linux, Java, Música y otras hierbas…
Java
Error con archivos zip/ear/jar en Midnight Commander
Feb 26th
Si eres de los que usa mucho el terminal y necesitas modificar archivos empaquetados, tales como: ear, jar, war, zip, rar o tar.gz, en la ultima versión de Midnight Commander (mc para los amigos) tiene un feo bug problema, que es cuando entras a uno de esos archivos no te muestra nada en el contenido.
La solución es simple tienes que modificar este archivo /usr/share/mc/extfs/uzip, y buscar la línea que dice my $op_has_zipinfo = 0; y cambiar el valor por un 1
# Location of the zip program my $app_zip = "/usr/bin/zip"; # Location of the unzip program my $app_unzip = "/usr/bin/unzip"; # Set this to 1 if zipinfo (unzip -Z) is to be used (recommended), otherwise 0. my $op_has_zipinfo = 0;
Debe quedar de esta forma:
# Location of the zip program my $app_zip = "/usr/bin/zip"; # Location of the unzip program my $app_unzip = "/usr/bin/unzip"; # Set this to 1 if zipinfo (unzip -Z) is to be used (recommended), otherwise 0. my $op_has_zipinfo = 1;
Ahora debería queda funcionando de pelos.
Mas información aquí: Launchpad
Problema de los botones de Eclipse en Ubuntu 9.10 Karmic
Jan 21st
Si te has vuelto mono haciendo clicks cuando trabajas con Eclipse en Ubuntu 9.10 Karmic Koala, aquí les dejo una solución que encontré por ahí:
Deben crear un pequeño script que configura una variable de entorno y luego llama al binario de eclipse, veamos el script eclipse.sh
#!/bin/sh export GDK_NATIVE_WINDOWS=1 cd $HOME/Software/eclipse ./eclipse
El problema (bug) al parecer es en cómo Eclipse a través de SWT hace uso de las librerías de GTK dejando inhabilitado las acciones de los botones y otros componentes como por ejemplo los árboles desplegables con checkbox (ventana de los updates).
export JAVA_HOME=/home/guzy_pcollaog/java
Jun 3rd
Para el que entienda… excelente… para el que no… que pregunte ![]()

Usando Apache Velocity
Apr 19th

¿Que es Velocity?
Velocity es un proyecto de Apache para el desarrollo de Templates para la capa de vista dentro del modelo MVC, siendo esta última la mas conocida de todas las formas de uso de Velocity. Pero es mucho mas que eso, podemos usar el motor de Velocity para lo que necesitemos utilizando siempre el concepto de uso de templates.
¿Que es un template?
Como su nombre lo dice es una plantilla, les dejo un ejemplo de como seria una plantilla Velocity para una vista en html:
#set ($hola = "Hola Mundo") <h1>$hola</h1> ## Esto es una macro de Velocity #d() <h2>$salida</h2>
Donde:
- #set es una directiva para settear valores
- $hola es la variable setteada con el valor Hola Mundo
- #d() es una Velocimacro
- $salida es una variable de contexto que sera setteada desde la ejecución de Velocity (ver código fuente de java)
¿Cuando podemos utilizar Templates?, hay un sin número de aplicaciones, por ejemplo:
- Envío de mails personalizados, en este punto uno podría escribir los templates (email tipo) y dejar ciertos tags de Velocity (llamados directivas) para la personalización.
- Generar XML’s dinamicos.
- Generar otro tipo de salidas como por ejemplo JSON.
- Generar PDF mediante docbok, incluso otro tipo de archivos (rdf, txt)
- Y el mas usado, escribir templates para ser usados como html en la capa de vista.
Usando Velocity Engine
Primero creamos un proyecto con Maven2 para hacer la vida mas fácil y agregamos las siguientes dependencias:
<dependencies> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.5</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>
Luego creamos la clase que hará la pega de llamar a VelocityEngine, la carga del template y finalmente la salida.
package cl.firefox.pcollaog.velocity; import java.io.StringWriter; import java.io.Writer; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; /** * <p> * </p> * <p> * $Id: VelocityEngine.java,v 1.1 2009-04-20 00:21:20 pcollaog Exp $ * </p> * * @author pcollaog * @version $Revision: 1.1 $ */ public class VelocityEngine { Logger logger = Logger.getLogger(VelocityEngine.class); private VelocityContext _ctx; private void init() throws Exception { logger.info("Inicializando Velocity"); Properties prop = new Properties(); // Carga archivo de propiedades de velocity prop.load(getClass() .getResourceAsStream("/velocity.properties")); // Inicializa Velocity Velocity.init(prop); _ctx = new VelocityContext(); } public String mergeTemplate() throws ResourceNotFoundException, ParseErrorException, Exception { init(); // Carga el template Template tpl = Velocity.getTemplate("template.vm"); // Agrega una variable al contexto luego puede ser usada // como $salida _ctx.put("salida", "OK"); // Creo un Writer para almacenar la salida Writer writer = new StringWriter(); // Genero la mezcla del template con sus las variables // del contexto y macros de velocity tpl.merge(_ctx, writer); // Finalmente genero un string con la salida return writer.toString(); } }
Espero que el código se explique por si solo.
Aquí dejo el ejemplo completo hecho con Maven2, para ver la ejecución, dentro del código fuente va un Test Unitario que imprime la salida de los templates.
$ mvn clean compile test
Baja el Source Code Aquí:
Ejemplo de Velocity versión no Servlet
Mas Información en:
Dolor de cabeza con OpenOffice y export a MediaWiki
Jun 29th

Hoy me puse a trabajar en lo que será el próximo OpenCommunity y como entenderán, hacer una simple tabla en wiki es un cachito, solución… abrir OpenOffice hacer toda la tabla en modo diseño y luego exportar a mediawiki (excelente funcionalidad).
Es aquí donde empiezan los dolores de cabeza. Para poder usar esta funcionalidad debes declarar por lo menos algún Java Runtime (JRE) en las preferencias de OOo. Si vas a Herramientas -> Opciones -> Java, no te detectará ningún JRE, peor aun, si le pones explícitamente cual JRE quieres usar, te dirá que no existe!!!
Como se soluciona este problemilla… simple (después de haber buscado por toda internet):
$sudo apt-get install openoffice.org-java-common
Luego volver a Herramientas -> Opciones -> Java y cha chan!!! aparecerán los JRE instalados en tu maquina, siempre y cuando los hayas instalado mediante apt). Ahora bien si quieres usar un JRE personalizado o que no este instalado vía apt, solo debes decirle la ubicación.
Es todo por hoy… ahora a seguir usando OpenOffice y avanzando con el OpenCommunity 2008 que se viene increible!!!!, desde ya los dejo invitados.
Eclipse 3.4 – Ganymede
Jun 27th
Ayer salio la nueva versión de este excelente IDE para Java (y otros lenguajes c/c++, ruby, etc). Esta nueva versión tiene como CodeName Ganymede (Ganímedes en español).
El nombre viene dado por las lunas de Júpiter que además son parte de la mitología griega.
Pueden descargarlo desde esta dirección: http://www.eclipse.org/downloads/
Escuchando: “Audioslave – Gasoline”
Torpedo/Chuleta/Cheat sheet de Maven2
Jun 25th
Esta es una referencia rápida de maven2 que contiene goals y ejemplos de archivos pom.xml.
Referencia: Maven Documentation
Escuchando: “Dream Theater – Octavarium”
Torpedo de Patrones de Diseño
Feb 11th
Les dejo una interesante recolección de patrones de diseño que vi en “The server side” y luego en la página del autor, el Sr. Jason McDonald.
Ver el original aquí.
Escuchando: “AC/DC” – “Back in Black“
Maven – Parte II (Creando Aplicaciones)
Jan 23rd
Para crear una aplicación Java Simple con Maven debes ejecutar en tu consola:
$ mvn archetype:create \ -DgroupId=com.firefox -DartifactId=validate
Donde:
- groupId: Es el package de referencia de tu aplicación.
- artifactId: Es el nombre de tu aplicación (en maven se le llama artefacto)
Maven creará un directorio con el nombre del artefacto (aplicación), en este caso validate y la estructura de directorio quedará de la siguiente forma:
.
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- firefox
| `-- App.java
`-- test
`-- java
`-- com
`-- firefox
`-- AppTest.java
Con esto queda lista la estructura básica de tu aplicación Java. En la estructura de directorios se pueden fijar que existen dos source folder el main y el de test. Además existe un archivo llamado pom.xml que nos permitirá administrar nuestro proyecto java, gestionar las dependencias del proyecto, generar el sitio web del proyecto al estilo maven o simplemente tareas simples como compilar, empaquetar o correr test unitarios. Estas acciones o tareas son llamadas goals.
Algunas tareas simples (goals)
$ mvn compile
Esta acción lo que hace es compilar el proyecto dejando los binarios en el directorio target del proyecto de la siguiente forma:
.
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- com
| | `-- firefox
| | `-- App.java
| `-- test
| `-- java
| `-- com
| `-- firefox
| `-- AppTest.java
`-- target
`-- classes
`-- com
`-- firefox
`-- App.class
$ mvn clean
Limpia el proyecto, es decir, eliminar los compilados. Esta acción eliminará todas las clases compiladas ubicadas en el directorio target dentro del proyecto, este directorio es similar a los directorios build o bin que genera eclipse o netbean.
$ mvn package
Como su nombre lo dice, esta acción empaqueta la aplicación y deja el paquete en el directorio target.
$ mvn test
Esta acción corre los test unitarios guardados en el source folder de los tests.
Para que los test puedan correr, estos deben extender de TestCase de JUnit. Además los nombres de las clases deben seguir un estándar para su ejecución.
- Los nombres de las clases del tipo test deben terminar en Test, por ejemplo: ClientTest
- Dentro de la clase ClientTest deben existir métodos que hagan los test. Estos métodos deben ser public y ademas empezar con la palabra test, por ejemplo:
public void testCreateClient(){...}
- Dentro de los métodos puedes utilizar los assert para verificar la correcta ejecución del test unitario. Los assert son como su palabra lo dice aciertos, el método te pide como argumentos lo que tu esperas y lo que finalmente te devuelve la ejecucion del test. Si ambos resutados coinciden el test se ejecuta con resultado exitoso. También está la posibilidad de que los resultados sean distintos y en realidad es lo que tu esperas (que sean distintos) para que el test sea exitoso.Un pequeño ejemplo:
import junit.framework.TestCase; /** * @author pcollaog * */ public class MathTest extends TestCase { public void testSumaBuena() { int a = 1; int b = 2; int resultado = a + b; int resultadoEsperado = 3; assertEquals(resultado, resultadoEsperado); } }
Este ejemplo sale con un assert en true, es decir, se ejecuta con resultado exitoso. Es lo que se espera del test.
$mvn site
Esta acción te permite generar un sitio web estático con información referente al proyecto que estas realizando. La información que necesita para poder crear el sitio es referente al archivo pom.xml (más adelante hablaré de este archivo).
El sitio generado lo dejará en un directorio llamado site dentro del target , donde encontrarás un index.html que podras ver con tu navegador favorito (espero que sea firefox).
$mvn install
Esta acción compila, empaqueta e instala tu proyecto en un repositorio local de maven (generalmente se encuentra en ~/.m2/repository) . De esta forma puedes utilizar ese proyecto dentro de otro agregándolo como dependencia en el archivo pom.xml. Hay que tener como consideración que los proyectos instalados deben ser bien versionados.
$mvn eclipse:eclipse
Con esta acción puedes agregar los archivos necesarios para que puedas convertir un proyecto maven en un proyecto maven+eclipse. En lo posible ojalá puedas instalar el plugin de maven para eclipse.
Existen un montón de acciones (goals) más que funcionan con plugins de maven y que complementan algunas otras tareas.
Como verán maven hace muchas tareas tediosas en simples pasos que además te ayudan a optimizar tiempos de desarrollo, integraciones rápidas, actualización de librerías y documentación de tu proyecto.
Maven – Parte I (Instalación)
Jan 21st

En esta serie de artículos pretendo explicar el funcionamiento a grandes rasgos de Maven.
Primero… ¿ qué es Maven y para qué sirve ?
Maven es una herramienta para la gestión de proyectos java desde el lado del desarrollador, es decir, un automatizador de tareas al estilo de ant task. Más adelante veremos las cosas que puede hacer con mas detalle, pero entre las actividades diarias que hace de un desarrollador java están:
- compilar
- correr test unitarios
- empaquetar
- debug
- levantar webserver o application server
- manejo de dependencias del proyecto
Instalando Maven
Primero debes descargar el binario de maven desde su pagina oficial.
- Debes descomprimir el archivo y guardarlo en un directorio conocido.
- Luego debes agregar al PATH el directorio bin para que puedas ejecutar maven.
$ tar zxvf maven-2.0.7-bin.tar.gz maven-2.0.7/conf/ maven-2.0.7/boot/classworlds-1.1.jar maven-2.0.7/LICENSE.txt maven-2.0.7/NOTICE.txt maven-2.0.7/README.txt maven-2.0.7/bin/m2.bat maven-2.0.7/bin/m2.conf maven-2.0.7/bin/mvn.bat maven-2.0.7/bin/m2 maven-2.0.7/bin/mvn maven-2.0.7/conf/settings.xml maven-2.0.7/lib/maven-core-2.0.7-uber.jar
Luego agregar al PATH el directorio bin:
$ export PATH=$PATH:/home/usuario/maven/bin
Debemos comprobar la versión de java que estamos utilizando en el sistema:
$ java -version java version "1.5.0_13" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05) Java HotSpot(TM) Client VM (build 1.5.0_13-b05, mixed mode, sharing)
Ahora podemos comprobar que maven esta bien instalado:
$ mvn -v Maven version: 2.0.7 Java version: 1.5.0_13 OS name: "linux" version: "2.6.22-14-generic" arch: "i386"
Resolución de algunos problemas
A veces es muy recomendable agregar en el script que ejecuta maven el JAVA_HOME, asi maven no se confunde de java si es que tienen varias JVM instaladas.
/home/usuario/maven/bin/mvn
# ------------------------------------------ # Maven2 Start Up Batch script # # Required ENV vars: # ------------------ # JAVA_HOME - location of a JDK home dir # export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
También puedes configurar tu JVM por defecto de la siguiente manera en ubuntu/debian:
# update-alternatives --config java Hay 2 alternativas que proveen `java'. Selección Alternativa ----------------------------------------------- 1 /usr/bin/gij-4.2 *+ 2 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección:





