Monthly Archives: August 2008

Serialización con XML

Esta semana encontré algo que me pareció interesante.  Es la posibilidad de serializar objetos en Java utilizando un codificador XML.  Lo mas interesante se que para realizar esta codificación básica no es necesario de ningún OXM (Object XML Mapper), por el contrario, todo lo necesario viene incluído ya en el J2SE.

Para el ejemplo he creado una clase Worker (POJO) que será serializada y sólo incluye atributos y sus respectivos métodos set/get.  Por presentación también sobreescribí al método toString para presentar el contenido del objeto.

public class Worker
{
    private String username;
    private String password;
    private String name;
    private int age;
    private Date birthDate;
    // ...
}

Creo una instancia de esta clase y asigno valores a sus atributos.

GregorianCalendar birthDate = new GregorianCalendar(2005, 02, 14);  
Worker workerman = new Worker();
workerman.setAge(31);
workerman.setName("Pepito Pimentón");
workerman.setUsername("pepitouser");
workerman.setPassword("pepitopass");
workerman.setBirthDate(birthDate.getTime());

A continuación se procede a codificar el objeto y a generar el archivo XML con su contenido.

// Creates the stream to the file that will storage the serialized object
FileOutputStream outputFile = new FileOutputStream("workerman.xml");
// Relates the XML encoder with the output file stream
XMLEncoder xe = new XMLEncoder(outputFile);
// Serializes the selected object using an XML encoding
xe.writeObject(workerman);
// Closes the XML encoder
xe.close();

Terminado este proceso, deberá existir el archivo workerman.xml con la representación XML del objeto workerman creado anteriormente.  Esta representación de la información podría ser compartida inclusive con otros sistemas/lenguajes/plataformas diferentes a la actual, cosa que podría tener algunos inconvenientes con la serialización convencional de java.io.  El contenido XML (texto plano) probablemente ocupe mas espacio y esto lo haga menos eficiente que una representación binaria.

Por supuesto también es posible realizar el proceso contrario: basados en el archivo workerman.xml con el contenido codificado, obtener la información y crear nuevamente la representación del objeto Worker.

// Creates the stream from the file that storages the already serialized object
inputFile = new FileInputStream("workerman.xml");
// Relates the XML decoder with the input file stream
XMLDecoder xd = new XMLDecoder(inputFile);
// Reads the object from the stream and deserializes it using an XML decoding
clone = (Worker)xd.readObject();
// Closes the XML decoder
xd.close();

El objeto clone deberá contener la misma información que su versión original: workerman.

El contenido del archivo workerman.xml es bastante explícito para su procesamiento en otras plataformas.



 
  
   31
  
  
   
    1110776400000
   
  
  
   Pepito Pimentón
  
  
   pepitopass
  
  
   pepitouser
  
 

Enlace:   XML Serialization Demo (fuentes).

21 leyes de la programación

1. Any given program, once deployed, is already obsolete.

2. It is easier to change the specification to fit the program than vice versa.

3. If a program is useful, it will have to be changed.

4. If a program is useless, it will have to be documented.

5. Only ten percent of the code in any given program will ever execute.

6. Software expands to consume all available resources.

7. Any non-trivial program contains at least one error.

8. The probability of a flawless demo is inversely proportional to the number of people watching, raised to the power of the amount of money involved.

9. Not until a program has been in production for at least six months will its most harmful error be discovered.

10. Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited.

11. The effort required to correct an error increases exponentially with time.

12. Program complexity grows until it exceeds the capabilities of the programmer who must maintain it.

13. Any code of your own that you haven’t looked at in months might as well have been written by someone else.

14. Inside every small program is a large program struggling to get out.

15. The sooner you start coding a program, the longer it will take.

16. A carelessly planned project takes three times longer to complete than expected; a carefully planned project takes only twice as long.

17. Adding programmers to a late project makes it later.

18. A program is never less than 90% complete, and never more than 95% complete.

19. If you automate a mess, you get an automated mess.

20. Build a program that even a fool can use, and only a fool will want to use it.

21. Users truly don’t know what they want in a program until they use it.

Tomado de http://www.flex888.com/671/21-laws-of-programming-works-for-flex-too.html.

Identificar el futuro

  • Lo más importante es saber identificar que "el futuro ya ocurrió".
  • La medida de acierto para la predicción no sólo puede ser la cantidad de hechos que ocurrieron frente a los predecidos, hay que tener en cuenta también la cantidad de hechos que sucedieron y nunca fueron predichos.
  • Lo importante y distintivo son siempre los cambios en los valores, la percepción y las metas, esto es, cosas que uno puede adivinar, pero no pronosticar.
  • El trabajo mas importante de un ejecutivo es identificar los cambios que ya han sucedido ("el futuro que ya ocurrió").
  • El desafio mas importante es utilizar esta información identificada y utilizarla en forma de oportunidades.
  • Identifique tendencias, analice los cambios evidentes e intente predecir los cambios futuros junto con su impacto.

Peter F. Drucker.

Actualización de portales web basados en Drupal a la versión 5.9

En los primeros días del mes de julio del presente año se liberaron las versiones 5.9 y 6.3 de Drupal.  Su actualización es altamente recomendada.

A pesar de que no he variado los pasos requeridos para realizar la actualización desde artículos anteriores, agregué un paso adicional para remover completamente los módulos de core antígüos y evitar con esto cualquier tipo de incompatibilidad por mezcla de versiones.

Con respecto a los siguientes pasos de actualización se debe tener en cuenta que el directorio donde se ubican los archivos del portal basado en Drupal se encuentran en site localizado en el directorio actual.  El paquete con la nueva distribución de Drupal ha sido descargado y copiado también en la ubicación actual.

Al final del proceso de actualización el directorio site contendrá la versión actualizada del sitio y el directorio site.old la copia de seguridad de la versión anterior.

Realizar una copia de seguridad de la base de datos.

Renombrar el sitio actual para conservarlo como una copia de seguridad previa a la actualización.

$ mv site site.old

Descomprimir la última versión de la distribución de Drupal.

$ tar zxvf drupal-5.9.tar.gz

Renombrar el directorio recién extraído para ser el nuevo portal web.

$ mv drupal-5.9/ site

Mueve los módulos de la nueva versión a una ubicación temporal para evitar cualquier tipo de sobreescritura con los módulos antígüos.

$ mv site/modules/ site/modules.new

Restaura los archivos del sitio y de los usuarios.

$ cp -rf site.old/files site

Restaura la información de configuración del sitio.

$ cp -rf site.old/sites site

Restaura los archivos del tema del sitio.  Reemplazar MITEMA por el nombre del tema (directorio) a restaurar.

$ cp -rf site.old/themes/MITEMA site/themes/

Restaura la totalidad de los módulos instalados en la versión anterior.

$ cp -rf site.old/modules site

De los módulos recién restaurados remueve los del grupo core para utilizar únicamente las últimas versiones.

$ rm -rf site/modules/aggregator site/modules/blog site/modules/book site/modules/comment site/modules/drupal site/modules/forum site/modules/legacy site/modules/menu site/modules/path site/modules/poll

$ rm -rf site/modules/search site/modules/system site/modules/throttle site/modules/upload site/modules/watchdog site/modules/block site/modules/blogapi site/modules/color site/modules/contact site/modules/filter

$ rm -rf site/modules/help site/modules/locale site/modules/node site/modules/ping site/modules/profile site/modules/statistics site/modules/taxonomy site/modules/tracker site/modules/user

Restaura los módulos de core de la última versión.

$ cp -rf site/modules.new/* site/modules

Remueve la copia de seguridad de los módulos de core de la última versión.

$ rm -rf site/modules.new

Ejecute el script de actualización de la base de datos si es necesario.

(web) $URL/apps/site/update.php

Utilizando el módulo update-status verifique si existen módulos con versiones nuevas, suceptibles de ser actualizados.

(web) $URL?q=admin/logs/updates

Actualice los módulos reemplazando sus directorios con las nuevas versiones bajo el directorio /site/modules y ejecute nuevamente el script de actualización de la base de datos.

(web) $URL/apps/site/update.php

Para terminar el proceso de actualización, remueva la copia del paquete de distribución de la última versión de Drupal.

$ rm drupal-5.9.tar.gz

Integridad en el liderazgo

  • Las decisiones gerenciales afectan a la gente.
  • Es a través del carácter que se ejercita el liderazgo, es el que da el ejemplo digno de imitarse.
  • La gente puede perdonar muchas cosas: incompetencia, ingnorancia, inseguridad o malas maneras, pero nunca la falta de integridad.
  • El espiritu de una organización se crea desde arriba: "Los árboles muere de arriba hacia abajo".

Peter F. Drucker.

Acceso web al correo de GoogleAppsForDomains

Por estos días debo estar cumpliendo un año desde que migré el correo de la Fundación al servicio de GoogleAppsForDomains.  Desde entonces ha sido una gran mejora frente al proveedor de servicio con que contaban antes de mi llegada: servicio siempre disponible, buen tamaño, buen cliente web y buen interconexión (POP3 y ahora IMAP).

Como puntos en contra sólo he encontrado algunas molestias que me produce el no poder enviar directamente archivos con la extensión ZIP desde la interfaz web y algunos problemas que se presentan cuando se envía correo uno mismo, sin embargo, a pesar de estas nimiedades el servicio es altamente recomendable.

Para acceder al correo desde un teléfono móvil no es posible utilizar aún la aplicación la aplicación de GMail.  Por lo pronto es posible accederlo a través de web con las restricciones de funcionalidad que esto conlleva.

El URL para acceder al servicio de correo a través de web es el siguiente.

http://mail.google.com/hosted/DOMINIO

Reemplace DOMINIO por el dominio registrado.  Por ejemplo midominio.com, sin las www por supuesto.

Práctica: distribución de midlets mediante OTA con J2ME – parte I

Durante la sesión Compilación y distribución de midlets se expusieron los métodos de distribución de aplicaciones móviles, en especial los remotos a través de la red (Over-the-air provisioning).

Ahora, contando ya con el primer midlet empaquetado y listo para su distribución (cualquiera de los tres métodos utilizados) nos disponemos durante la presente sesión a implementar de manera práctica este procedimiento.

Para esto se va a utilizar Apache como el servidor HTTP y al emulador de aplicaciones móviles incluído en el JWTK como cliente de las mismas.

A pesar de que el objetivo de la práctica es el de realizar una simulación del proceso de distribución de midlets a nivel local, el procedimiento real en Internet no difiere en mas que en la ubicación en que se localicen los archivos y se especifique a su vez en el atributo MIDlet-Jar-URL del archivo descriptor de la aplicación.

 
  • Introducción.
  • Distribución de midlets.
    • OTA.
    • Flujo de eventos.
  • Herramientas.
  • Servidor de páginas: XAMPP.
    • Instalación.
    • Configuración.
  • Creación del sitio web.
  • Despliegue del midlet.
  • Instalación de la aplicación.
  • Distribución a través de Internet.
  • Enlaces de interés.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.

Generación del midlet HolaMundo utilizando EclipseME

La creación de software no es una tarea fácil, por este motivo es necesario utilizar de la manera mas eficiente posible las herramientas que se tengan a la mano y que permitan un desarrollo mas estructurado, confiable y rápido de los productos de software.

Los ambientes integrados de desarrollo (IDE) son un tipo de estas herramientas, facilitan la manipulación de  los proyectos con un nivel de abstracción tal que evitan al desarrollador tener que atender aspectos repetitivos o de bajo nivel.

Uno de los IDE mas conocidos para el desarrollo de aplicaciones Java es Eclipse, el cual es extendible mediante plugins, permitiéndole aumentar su funcionalidad e incluír el soporte a mas lenguajes de programación, incluyendo a J2ME.

En la presente sesión se llevará a cabo la instalación de Eclipse, su plugin EclipseME y con ellos se realizará la generación del midlet HolaMundo de manera análoga a las sesiones anteriores, pero esta vez utilizando esta herramienta de nivel profesional.

 
  • Introducción.
  • Herramientas.
    • J2SDK y JWTK.
    • Eclipse.
    • Plugin EclipseME.
  • Instalación de Eclipse.
  • Instalación del plugin EclipseME.
  • Configuración del plugin EclipseME.
  • Creación de un proyecto J2ME.
  • Ejecución (emulación) del midlet.
  • Generación del archivo JAR.

Para mas información consulte el curso Introducción al desarrollo de aplicaciones móviles con J2ME.