miércoles, julio 19, 2006

OpenDocument Format y GeneXus

Hace unos meses tuve la necesidad de poder leer desde GeneXus archivos de OpenOffice, no me quedo otra que salir a investigar como poder hacerlo ya que no tenia la menor idea. Lo primero que hice fue buscar que significaban las extensiones odt, ods y odp ya que eran los archivos que tenia que leer para extraer el texto y luego procesar ese texto.

Las extensiones pertenecían a:

OpenOffice.org Writer (.odt) - Procesador de Texto
OpenOffice.org Calc (.ods) - Planilla de Calculos
OpenOffice.org Impress (.odp) - Presentaciones

Después de tener esto claro comencé a buscar como hacer para leer estos formatos desde GX y lamentablemente no tenia forma de hacerlo desde GX, por lo menos con los conocimientos que tenia hasta ese momento.

Cuando ya estaba por darme por vencido descubrí que el OpenOffice trabaja con un formato abierto llamado OpenDocument, cuando comprendí que los archivos que yo tenia que leer estaban en un formato abierto no me quedaba otra que estudiar el OpenDocument para poder interpretar ese formato.

OpenDocument es un estándar abierto que pretende ser una alternativa a los formatos cerrados de Microsoft Office. Este formato está basado en un esquema XML. Por mas información consultar el siguiente link:

http://es.wikipedia.org/wiki/OpenDocument

Después que estudie el estándar del OpenDocument Format todo me quedo mas claro ya que alcanza con descomprimir el contenido de los archivos de OpenOffice y acceder a los diferentes XMLS:

content.xml
meta.xml
settings.xml
styles.xml

De esos xml para acceder al contenido de un documento alcanza con leer el content.xml, después que llegue a tener él conocimiento necesario para interpretar el OpenDocument me di cuenta que desde GX alcanzaba con hacer un programa que lea un xml y extraiga el texto.

El procedimiento me quedo de la siguiente manera:

//**********************************************************************************
/*
Autor : Cristhian Gómez (urulinux@adinet.com.uy)
Start Date : 02-03-2006
Last Update: 02-03-2006
Versión : 1.0.01
*/

&NombreArchivo = &NombreArchivoExterno

// El primer parámetro es el nombre del Archivo de OpenOffice o de StarOffice
// El procedimiento me devuelve el nombre del XML que tengo
// que leer (content.xml)

&Archivo.Source = &NombreArchivo

if &Archivo.Exists()
call('unzipjava', &NombreArchivo, &Nombre_Content)
&readfile.open(&Nombre_Content)
&readfile.ReadType(1, 'office:body')
&readfile.read()
do while &readfile.name <> 'office:body'
&Auxiliar = trim(&readfile.value)
if &Auxiliar <> NullValue(&Auxiliar)
&txtBody = &txtBody + newline() + &Auxiliar
endif
&readfile.read()
enddo
&readfile.close()
&OutText = &txtBody
else
&OutText = "No existe un archivo en el servidor para leer...."
endif

//**********************************************************************************

Como pueden ver en el código con muy pocas líneas de código puedo leer desde GX archivos de OpenOffice, lo único externo a GX es el programa que se encarga de descomprimir el archivo de OpenOffice (unzipjava).

Esto me demostró que los problemas en informática van a depender del conocimiento del programador ya que en mi caso alcanzo con dedicarle un tiempo a investigar el OpenDocument como para poder cumplir mi objetivo.

Los que quieran ver un ejemplo de esto funcionando pueden entrar a:

http://www.gxopen.com:8080/gxotf_odf/servlet/hopenofficetest

Está aplicación sube el documento al servidor y lo abre mostrando el texto plano en pantalla extraído del documento de OpenOffice.

lunes, julio 17, 2006

GeneXus Collaborative Projects

En lo personal pienso que los proyectos colaborativos son una muy buena idea y creo que todos los miembros de la comunidad debemos colaborar para que esta iniciativa pueda dar buenos resultados ya que los proyectos colaborativos van a beneficiar a toda la comunidad genexus.

Una de las cosas que se está dejando para decidir por parte de cada grupo que participe en un proyecto es la organización de los participantes.

Siempre tuve la duda de como se organizaban en general los proyectos de open source para recibir las colaboraciones de los participantes, por suerte pude preguntarle a Federico Wagner y a mas de un miembro del UyLug en diferentes reuniones y todos me comentaban lo mismo.....

En síntesis los proyectos de open source cuentan con un grupo que se encargan de actualizar el proyecto y organizar las tareas para que el resto de los miembros puedan colaborar. Los encargados de actualizar el proyecto tienen que revisar y validar los cambios recibidos para luego incluirlos en las nuevas versiones.

En los “Collaborative Projects” creo que debemos seguir el mismo modelo de organización que tienen los proyectos en el mundo del open source.

Continuara...

jueves, abril 06, 2006

Instalando Suse Linux en discos SATA

En el día de hoy me toco en suerte instalar un Linux para poder tener un servidor y hacer pruebas, la aplicación a instalar es una aplicación desarrollada con GeneXus 9.0 generando Java utilizando Tomcat como servidor de aplicaciones y MySQL como DBMS.

Me ofrecí a instalarlo y cuando me preguntaron que Linux dije Suse. Me acercaron unos CD´s con Suse 9.0 y puse manos a la obra, mi emoción duro unos segundos ya que cuando comencé la instalación el Setup no me reconocía el disco duro. Pensé que estaba haciendo algo mal ya que hace mucho tiempo que no instalo un Linux, después de probar un par de veces mas pedí ayuda al viejo y querido “Google”. Por suerte encontré que varias personas habían tenido problemas similares a los míos.

No me quedaban muchas opciones mas que probar con otra versión de Suse, grabe a CD desde unos ISO que tenia en mi PC la versión 9.3 con la cual tuve los mismos resultados.

A la mitad de la tarde se me dio por querer bajar la versión 10.0 y me encontré con que tenemos dos productos iguales pero distintos. :-)

Por un lado tenemos:

Suse Linux

OpenSuse

La diferencia está en que uno contiene solo software libre. La tendencia es que se use Suse Linux para el Servidor y openSuse para los clientes. Esto a gran escala ya que el tema es como para hablar con mas tiempo. :-)

Suse Linux lo pueden encontrar en:

http://www.novell.com/products/suselinux/downloads/suse_linux/index.html

openSuse:

http://en.opensuse.org/Welcome_to_openSUSE.org

En lo personal opte por openSuse, se pueden bajar los cinco cds o el dvd.

Una de las cosas que me gusto es que Suse trae Mono, lo instale y quedo todo ok.

Me olvidaba, con Suse 10 quedo todo funcionando sin problemas y pude instalar con discos SATA.

Suerte

martes, diciembre 13, 2005

Mi primer prueba con Mono y SQLite

En el día de hoy comencé a probar SQLite con Mono, empece por el ejemplo del sitio de Mono http://www.mono-project.com/SQL_Lite. El ejemplo es claro pero al probarlo en Windows con Mono 1.1.10 obtengo el siguiente error:

Unhandled Exception: System.DllNotFoundException: libsqlite3.so.0
in (wrapper managed-to-native) Mono.Data.SqliteClient.Sqlite:sqlite3_open (strin
g,intptr&)
in <0x00052> Mono.Data.SqliteClient.SqliteConnection:Open ()
in <0x00062> Test:Main (System.String[] args)

Para resolver este error probé varias cosas, por ejemplo cambiar la versión de SQLite ya que la base con la que estoy trabajando esta creada con la versión 3.2.7. Después de varios intentos me puse en contacto con un amigo (Federico Wagner) que tiene Mono sobre Linux y le pase el ejemplo. Lo que me llamo la atención es que lo probo y funciono todo ok.
Ahora me queda la pregunta si Mono sobre Windows funciona igual que Mono sobre Linux??

Voy a seguir probando para ver si el problema está en la versión de Mono utilizada ya que Federico Wagner tiene Mono 1.1.8.3. Por ahora solo me queda probar ya que no quiero pensar que Mono tiene diferencias entre Windows y Linux. :-)