Siempre me pregunté como apliaciones como JEdit y Eclipse siendo apliaciones puras en Java utilizaban un ejecutable (.exe) para iniciar. Hace un par de año hice la investigación por curiosidad y no encontré nada práctico.
Nuevamente me encontré con la necesidad de empaquetar un jar y entregarlo como un ejecutable. Para esto encontré dos herramientas (debe haber más, pero mi busqueda solo duro 5 minutos): JSmooth y Launch4J.
JSmooth estaba en en su versión 0.9.7 al momento de este escrito. Se veia amigable pero el código no ha sido actualizado desde el 2007.
Launch4J estaba en su versión 3.0.1 al momento de este escrito. Su último release fue en 2008, por eso me decidí a probarlo.
Fue muy facil crear el exe a partir del jar empaquetado. Es importante notar que el jar que estaba utilizando contenía todas las librerías requeridas. No estoy seguro que haría con jars separados.
martes, 29 de junio de 2010
Creando un .EXE a partir de un Jar
Etiquetas:
Java
sábado, 12 de junio de 2010
Integrando Maven con Eclipse en Mac OSX
Instalando Maven
- Baje Maven 2.2.1 del sitio de Maven en formato zip
- Descomprimalo en cualquier directorio (/Users/luisberrocal/Downloads por ejemplo).
- Mueva el directorio apache-maven-2.2.1 al directorio /usr/share
- Corre el siguiente commando:
mvn -version
Apache Maven 2.2.0 (r788681; 2009-06-26 08:04:01-0500)
Java version: 1.6.0_20
Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x" version: "10.6.3" arch: "x86_64" Family: "mac"
" - Cree un archivo ~/.bash_profile y coloque el siguiente contenido:
export M2_HOME=/usr/share/apache-maven-2.2.1
export M2=$M2_HOME/bin
export JAVA_HOME=/Library/Java/Home/
export PATH=$PATH:$M2 - Abra una sesión nueva de Terminal y corra el siguiente comando para verificar que las variables están incializadas
echo $JAVA_HOME
sudo mv apache-maven-2.2.1 /usr/share
Instalando el plugin M2
Los pasos del sitio del plugin M2 son bastante claros y no vale la pena repetirlos, inclusive tienen un video.
Con esto estamos listos para utilizar Maven.
miércoles, 9 de junio de 2010
No respository found at http://subclipse.tigris.org/update_1.6.x
Hace poco trate de instalar el plugin de Subversion para Eclipse y me encontre que no podia conectarme al repositori http://subclipse.tigris.org/update_1.6.x. Eclipse 3.5.2 me daba un mensaje que leia "No respository found at http://subclipse.tigris.org/update_1.6.x".
Después de verificar que tenia conexión de red y que el sitio esta en linea. Empece a investigar. La verdad es que no econtré nada útil.
En un acto deseperado seleccione "Available Software Sites" en la ventana Install (Se invoca desde el menú Help\Install New Software...). Esto abre la ventana Preferences en donde seleccione la librería con el Location http://subclipse.tigris.org/update_1.6.x e hice clic en "Test Connection".
Después de esto empezo a funcionar.
Después de verificar que tenia conexión de red y que el sitio esta en linea. Empece a investigar. La verdad es que no econtré nada útil.
En un acto deseperado seleccione "Available Software Sites" en la ventana Install (Se invoca desde el menú Help\Install New Software...). Esto abre la ventana Preferences en donde seleccione la librería con el Location http://subclipse.tigris.org/update_1.6.x e hice clic en "Test Connection".
Después de esto empezo a funcionar.
Etiquetas:
Eclipse,
Java,
Subversion
sábado, 5 de junio de 2010
Templates en Eclipse
Plantillas de Eclipse
Eclipse cuenta por defecto con una serie de plantillas que se pueden invocar tecleando un unas cuantas letras e invocando autocomplete (control+space). Entre mis favoritas están:
sysout : crea una linea de código para System.out.println();
main: crea un metodo main con sus argumentos.
Plantillas Personalizadas
Una de las funcionalidades que más me gusta de Eclipse es poder crear plantillas de código que se usa de forma repetitiva. Por ejemplo acostumbro usar la librería Log4J para crear "loggear" información dentro de mi código. Para poder utilizar la clase Logger debo instanciar un objeto en cada clase, esto implica escribir una línea de código como
private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
.getLogger(MapAdminPanel.class);
En lo personal su amigo del copy-paste pero el nombre de la clase varía. Esto implica que si copio el código de arriba en otra clase luego debo editar MapAdminPanel y cambiarlo por el nombre de la clase en que lo copie.
Usando una plantilla (Template) puedo teclear lg dar control+space y Eclipse me insertará el código con en nombre de la clase donde lo estoy creando.
Para crear esta plantilla siga los siguientes pasos:
- Abrir Window\Preferences (Eclipse\Preferences en Mac)
- Muévase a Java\Editor\Templates y haga clic en New. Llene la pantalla como se muestra.
Name es el nombre con que se invocara la plantilla en nuestro caso "lg", Context es el contexto en que la plantilla funcionará utilice Java. Pattern es el código que se insertará utilice el siguiente código. - Haga clic en Ok
- Haga clic en Ok en la ventana de Preferences.

private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
.getLogger(${enclosing_type}.class);
Note que en vez de utilizar el nombre de la clase se utiliza la variable enclosing_type. Eclipse reemplazará por usted el nombre de la clase al ser insertado
Para probarlo abra una clase existente o cree una nueva. Dentro de la clase teclee lg y control+space y le aparecerá las opción de insertar el código.

Guardando las Plantillas
Eclipse guarda la configuración de las plantillas en el workspace. Esto quiere decir que si crea un workspace nuevo tendría que recrear todas las plantillas nuevamente. Afortunadamente podemos exportarlos a un archivo xml y luego importarlo en el nuevo workspace.
Para demostrar la flexibilidad de exportar e importar plantillas vamos a crear una plantilla personalizada adicional.
Regularmente acostumbro "loggear" los errores de una excepción utilizando Log4J en un formato estándar como se muestra:
try {
passGen.setTemplate("oAAannaonn");
passGen.generatePassword();
logger.debug("Password template: "+ passGen.getPassword());
} catch (ParseException e) {
String msg = "%s: %s";
msg = String.format(msg, e.getClass().getName(), e.getMessage());
logger.error(msg);
fail(msg);
}
El código en negrita se repite una y otra vez a lo largo del código.
Siguiendo los pasos anteriores vamos a crear una plantilla con la siguiente información:
Name: lge
Description: log exception to Log4J
Contrext: Java Statement. Esto forzara que la plantilla solo funcione dentro de un método.
Pattern:
String msg = "%s: %s";
msg = String.format(msg, e.getClass().getName(), e.getMessage());
logger.error(msg);
Para exportar las plantillas siga los siguientes pasos:
- Abrir Window\Preferences (Eclipse\Preferences en Mac)
- Muévase a Java\Editor\Templates. Seleccion las plantillas lg y lge.
- Haga clic en Export. Asignele un nombre apropiado (logging_templates.xml por ejemplo) y listo.
Este archivo puede ser importado en otro workspace o por otro usuario. Esto permite compartir plantillas estándares.
lunes, 3 de mayo de 2010
Quantum GIS un Contendor Serio
Uno los problemas con el desarrollos de los SIG en Panamá es el costo de los softwares.
El líder indiscutible en software de GIS es ESRI. Y a pesar que tengo un poco más de 12 años de experiencia con los productos de ESRI, sus precios no me parecen cónsonos con las necesidades de países emergente.
Una licencia primaria de ArcInfo está costando aproximadamente $16,000, mientras que las de ArcView está costando $4,000. Esto precios no incluyen extensiones como 3D Analyst o Spatial Analyst que pueden estar costando hasta $3,000 cada una.
Hace algunos años atras durante mis incursiones en Ubuntu, estuve buscando softwares fuente abiera que permitieran realizar análisis SIG y crear mapas. Intente con GRASS pero encontré la instalación e interfase un poco compleja. Luego intenté instalar Quantum GIS (QGIS) pero tuve problemas con la instalación Ubuntu (un problemas con librerías y dependencias) y me rendí.
Hace poco estaba buscando un software sencillo de SIG para mi Mac y me encontré nuevamente con QGIS. Lo que me llamo la atención fue un caso de estudio que como una provincia en Suiza cambio sus sistemas de ESRI a QGIS. Luego de instalar la versión 1.4.0 de forma muy sencilla (ya tienen un dmg) asi que no tuve que compilar ni copiar nada.
En mi prueba preliminar pude hace lo siguiente si hacer grandes investigaciones en Google:
No he podido evaluar las capacidades de impresión. Esta es probablemente una de las ventajas más grandes que tienen los productos de ESRI. En ellos es relativamente fácil crear productos de cartográficos de alta calidad.
Me parece QGIS es un contendor serio para softwares de GIS, voy a probarlo más a fondo y pubicaré nuevas entradas.
El líder indiscutible en software de GIS es ESRI. Y a pesar que tengo un poco más de 12 años de experiencia con los productos de ESRI, sus precios no me parecen cónsonos con las necesidades de países emergente.
Una licencia primaria de ArcInfo está costando aproximadamente $16,000, mientras que las de ArcView está costando $4,000. Esto precios no incluyen extensiones como 3D Analyst o Spatial Analyst que pueden estar costando hasta $3,000 cada una.
Hace algunos años atras durante mis incursiones en Ubuntu, estuve buscando softwares fuente abiera que permitieran realizar análisis SIG y crear mapas. Intente con GRASS pero encontré la instalación e interfase un poco compleja. Luego intenté instalar Quantum GIS (QGIS) pero tuve problemas con la instalación Ubuntu (un problemas con librerías y dependencias) y me rendí.
Hace poco estaba buscando un software sencillo de SIG para mi Mac y me encontré nuevamente con QGIS. Lo que me llamo la atención fue un caso de estudio que como una provincia en Suiza cambio sus sistemas de ESRI a QGIS. Luego de instalar la versión 1.4.0 de forma muy sencilla (ya tienen un dmg) asi que no tuve que compilar ni copiar nada.
En mi prueba preliminar pude hace lo siguiente si hacer grandes investigaciones en Google:
- Cargar shape files a un proyecto
- Crear un shape file de polígonos nuevo y editar su geometría Aunque tuve problemas con el snapping. Me complacio ver que tiene edición topológica.
- Cargar una capa WMS de NASA
No he podido evaluar las capacidades de impresión. Esta es probablemente una de las ventajas más grandes que tienen los productos de ESRI. En ellos es relativamente fácil crear productos de cartográficos de alta calidad.
Me parece QGIS es un contendor serio para softwares de GIS, voy a probarlo más a fondo y pubicaré nuevas entradas.
viernes, 16 de abril de 2010
Web Debug Tool No Aparece!!
Declaro nuevamente mi condición de novato en Symfony. A pesar de ser un framework sumamente poderoso sus niveles de abstracción a veces lo hacen dificil de entender.
Aunque no entiendo algunos de los comportamienntos de Symfony trato de bloggear los "work arounds" mientras investigo las causas reales.
Recientemente el Web Debug Tool desaparecio de mi fronted_dev.php. Primero verifique que en apps/frontend/config/settings.yml la variable web_debug estuviese en true para el ambiente de desarrollo (dev). El archivo debería verse asi:
Luego recordé que tratando de filtrar los logs de Symfony edite el apps/frontend/config/factories.yml en el ambiente de desarrollo y agregue los que se muestra abajo en rojo:
Aparentemente esta cambio impacta la visualización del Web Debug Tool para solucionarlo comente el codigo que agregue e inmediatamente aparecio la herramienta.
Aunque no entiendo algunos de los comportamienntos de Symfony trato de bloggear los "work arounds" mientras investigo las causas reales.
Recientemente el Web Debug Tool desaparecio de mi fronted_dev.php. Primero verifique que en apps/frontend/config/settings.yml la variable web_debug estuviese en true para el ambiente de desarrollo (dev). El archivo debería verse asi:
....
dev:
.settings:
error_reporting: <?php echo (E_ALL E_STRICT)."\n" ?>
web_debug: true
cache: false
no_script_name: false
etag: false
....
Luego recordé que tratando de filtrar los logs de Symfony edite el apps/frontend/config/factories.yml en el ambiente de desarrollo y agregue los que se muestra abajo en rojo:
....
dev:
logger:
class: sfFileLogger
param:
level: err
loggers: ~
file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log
mailer:
param:
delivery_strategy: none
....
Aparentemente esta cambio impacta la visualización del Web Debug Tool para solucionarlo comente el codigo que agregue e inmediatamente aparecio la herramienta.
sábado, 10 de abril de 2010
Logging en Symfony a Logs Externos
Uno de los problemas con los logs de de Symfony es que por defecto se llenan mucho y no he encontrado una maner rápida y práctica de filtrar lo que se escribe.
La forma apropiada es cambiar los filtros en settings.yml, pero no encuentro aún como filtrar por clase como se puede hacer en Log4J.
Mi solución rápida pero poco elegante fue crear un log nuevo para ver exclusivamente lo que me interesaba.
Como esta solución es para realizar un debugging en un problema que estoy teniendo no me he preocupado por uso de memoria ni escalabilidad.
Con esto podemos loggear la clase y método desde donde se llama el logger.
Mientras encuentro una forma más elegante de filtrar los logs esto me sirve.
La forma apropiada es cambiar los filtros en settings.yml, pero no encuentro aún como filtrar por clase como se puede hacer en Log4J.
Mi solución rápida pero poco elegante fue crear un log nuevo para ver exclusivamente lo que me interesaba.
Como esta solución es para realizar un debugging en un problema que estoy teniendo no me he preocupado por uso de memoria ni escalabilidad.
$logger = new sfFileLogger(sfContext::getInstance()->getEventDispatcher(),
array('file'=> sfConfig::get("sf_log_dir").'/debug.log'));
$logger->log("{" . __CLASS__ . "." . __FUNCTION__ . "} Logging test", 2);
Con esto podemos loggear la clase y método desde donde se llama el logger.
Apr 10 12:16:19 symfony [crit] {sfValidatorImgToDB.doClean} Logging test
Mientras encuentro una forma más elegante de filtrar los logs esto me sirve.
Suscribirse a:
Comentarios (Atom)
