sábado, 21 de agosto de 2010

Esconder Campos Timestampables en los Forms de Symfony

Cuando se crea una tabla con el "Comportamiento" Timestampable Doctrine agrega un campo created_at y otro updated_at.
Por ejemplo en el schema.yml tendríamos algo como
Brand:
actAs: [Timestampable]
columns:
id:
type: integer(4)
primary: true
autoincrement: true
code:
type: string(15)
notnull: true
name:
type: string(30)
notnull: true
description:
type: string(255)

Cuando se crea un modulo con el comando generate-module el form de edición tiene los campos created_at y updated_at como campos editables. Esto no debería ser.
symfony doctrine:generate-module backend brand Brand --with-show

Para corregir esto es necesario hacer dos cosas:

1. Agregar el siguiente código en el método configure en el archigo myproyecto/lib/form/doctrine/BrandForm.class.php
public function configure()
{
unset($this->widgetSchema['created_at']);
unset($this->validatorSchema['created_at']);
unset($this->widgetSchema['updated_at']);
unset($this->validatorSchema['updated_at']);
}

2. Editar el archivo myproyecto/apps/backend/modules/brand/templates/_form.php eliminando la creación de los widgets para created_at y updated_at.

martes, 29 de junio de 2010

Creando un .EXE a partir de un Jar

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.

sábado, 12 de junio de 2010

Integrando Maven con Eclipse en Mac OSX

Instalando Maven


  1. Baje Maven 2.2.1 del sitio de Maven en formato zip

  2. Descomprimalo en cualquier directorio (/Users/luisberrocal/Downloads por ejemplo).

  3. Mueva el directorio apache-maven-2.2.1 al directorio /usr/share

  4. sudo mv apache-maven-2.2.1 /usr/share

  5. 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"
  6. "
  7. 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

  8. Abra una sesión nueva de Terminal y corra el siguiente comando para verificar que las variables están incializadas
    echo $JAVA_HOME

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.

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:


  1. Abrir Window\Preferences (Eclipse\Preferences en Mac)


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

  3. 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
  4. Haga clic en Ok
  5. Haga clic en Ok en la ventana de Preferences.


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:

  1. Abrir Window\Preferences (Eclipse\Preferences en Mac)

  2. Muévase a Java\Editor\Templates. Seleccion las plantillas lg y lge.

  3. 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:

  1. Cargar shape files a un proyecto

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

  3. 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:
....
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.