Entradas

Mostrando las entradas de 2014

Build & Deploy: Resumen del 2014

Imagen
Mas o menos a esta altura del 2013, empezaba a trabajar con el tema del Build & Deploy de aplicaciones GeneXus.

En un año logramos avanzar bastante en el tema, logrando tenerlo formalizado, habiendo detectado las dificultades y limitaciones actuales y tenemos desarrolladas varias herramientas para facilitar la tarea de la realización de procesos de build y deploy automatizados. Con dichas herramientas logramos bajar el tiempo necesario para tener una versión ejecutable de nuestra aplicación y también la configuración del ambiente.

Lo que no logré fue que el tema interesara dentro de la comunidad, al menos como yo lo había imaginado.  No tuve ni la fuerza ni el liderezgo suficiente como para interesar a actores claves dentro de la comunidad como para que dedicaran recursos para lograr una solución que funcione para mas de una empresa.

Quedan como tareas pendientes:
* mostrar las ventajas de este tipo de herramientas en el desarrollo agil de aplicaciones
* justificar el esfuerzo co…

Una KB grande vs Varias KB mas chicas. Manejando fuerzas opuestas

Imagen
A medida que pasa el tiempo es normal que las empresas automaticen cada vez mas sus procesos, desarrollando  (o integrando) aplicaciones en cada vez mas secciones de las mismas.

Con este crecimiento, aparecen fuerzas opuestas en la forma de modelar la realidad.

Por un lado, se quieren tener base de conocimientos lo mas chicas posibles, para poder entender y tener un desarrollo mas rapido y ágil. Esto implica que se van a tener varias KB para cada uno de los sistemas necesarios.

La otra opción es tener una KB que tenga todos los sistema de la empresa, siempre que sea posible. Esto hace que se tengan KB grandes, lo cual es buenísimo para el manejo del modelo de datos, el mantenimiento de las instalaciones, etc.

Comparación de ventajas y desventajas
VENTAJAS DESVENTAJAS Muchas
KB chicas
Fácil de entender cada KB Desarrollo Agil Diferentes versiones de GeneXus en cada KB Fácil de instalar cada KB Migraciones mas fáciles No se mantiene la integridad referencial en forma automática Programación rápida D…

Don Eduardo

Hace unas semanas, falleció Romualdo Eduardo Gard Figoli, mas conocido como Don Eduardo.
Tenía cerca de 100 años, muy bien vividos. Fue uno de los verdaderos emprendedores de Uruguay, que conocí bastante, por haber trabajado para varias de las empresas de la que era dueño o accionista. 
Partiendo de un origen muy humilde, llegó a ser dueño y comandar importantes empresas de producción de aceite comestibles, cosméticos, molinos harineros,  empresas de trasporte, de alquiler de autos, producción agropecuaria y muchas mas. En los últimos años también  en biocombustibles. 
Una anécdota que lo pinta de cuerpo entero, es que junto con Gustavo y Raúl, teníamos que ir una vez por semana  a Molino San José (a 100 km de Montevideo), pues eramos responsable del centro de cómputos * de todo un grupo de empresas.  Salíamos temprano, para llegar antes de las 7:00 AM pues teníamos que hacer algunos ajustes en las maquinas antes que entraran la mayoría de los usuarios a los sistemas.  Casi siempre ll…

Rebuild All en GeneXus

Imagen
Me llego una consulta de un colega y dejo la respuesta tambien aca, por si a alguien mas le sive.

Antes de hacer un REBUILD ALL, con GeneXus, es bueno aprovechar y borrar algunos archivos que pueden haber quedado desactualizados.

Lo que yo hago antes de ejecutar un rebuild es ejecutar el BAT

echo ----------------------------------
set dirGX=C:\GeneXus\GeneXusEv2U7
set dirKB=C:\models\ev2\KBdir
echo --- Borrado previo REBUILD ALL ---
del %dirKB%\*.ari /s/q 
del %dirKB%\*.0?? /s/q 
for /f %%i in ('dir /a:d /s /b %dirKB%\*') do rd /s /q %%i
MSBuild /nologo Rebuild.msbuild /p:KBDir=%dirKB%;GXDir=%DirGx%  /t:Rebuild
echo --- TERMINO EN BUILD ALL       ---


Que hace este archivo de comandos? 
Borra todos los archivos *.ARI de la KB (de la version actual y de todas la versiones de la KB).  Borra todos los archivos donde se guardan referencias entre objetos que tienen extensiones 001, 005, etc). Estos archivos muchas veces quedan mal, cuando se tiene mas de un generador en la KB y son causante…

GeneXus y modelo fisico - Herramientas necesarias

Imagen
Comentando el post anterior, un colega me preguntó que tipo de herramientas podrían desarrollarse para el manejo de modelo físico, dentro de KB GeneXus.

Lo que me gustaría es poder ver el modelo físico que hoy GeneXus intenta ocultar a los desarrolladores, pero que tiene mucha de la información necesaria.

Una vista interesante, seria poder ver las tablas por Data Store

DataStore1
    Tables/DataViews
         TABLA1
              * atributo1
                atributo2
                atributo3
             INDICES
                 Indice1
atributo2 (desc)
                 Indice2
 atributo3
          Referential Integrity
                     Referenced by 
TABLA3
                     Referenced from
TABLA4 

DataView1  (Asociated table TABLA3)
attexterno1
                  attexterno4

De las tablas, me gustaría poder especificar si es una tabla con alta cardinalidad y que % de crecimiento puede tener, lo cual puede servir para prever el funcionamiento del sistema.

También podría servir para que GeneXus …

Modelando realidades

Imagen
Un esquema que me ayuda a entender las aplicaciones que desarrollamos con GeneXus es el siguiente:


No es nada original, pero me sirve para clasificar los objetos que utilizamos en el desarrollo de nuestra aplicaciones.
Tenemos tres modelos o vistas de la misma realidad, cada uno con un nivel de abstraccion diferente:


Modelo Físico Aquí se encuentran las tablas y sus estadísticas de uso y  de distribución de datos, los indices, los diferentes tablespaces. También pongo ahí, todos los servicios que mi aplicación deba utilizar para funcionar.
Este modelo es fundamental para el correcto funcionamiento y performance de la aplicación, pero su complejidad es la que Genexus nos ha escondido (para bien) por años.
La aplicación va a seguir funcionando correctamente si tengo o no tengo un indice, aunque puede tener mejor o peor performance.
En este nivel, es donde trabajan principalmente los administradores de base de datos (DBAs) y administradores de sistemas (servidores de aplicaciones, servid…

PiensoPienso: Cual es la salida de este programa?

Imagen
Un procedimiento GeneXus Evo3 main, tiene el siguiente código.

Cual es la salida del mismo?

a)
Venezuela AUN NO PERTENECE AL mercosur
>>> Venezuela pertenece al mercosur
Venezuela AUN NO PERTENECE AL mercosur

b)
Venezuela AUN NO PERTENECE AL mercosur
>>> Venezuela pertenece al mercosur
Venezuela pertenece al mercosur

c)
Venezuela pertenece al mercosur
>>> Venezuela pertenece al mercosur
Venezuela pertenece al mercosur

Justifique la respuesta


Modelando nuevas realidades

Hace unas semanas escribia sobre una dificultad que estamos teniendo con las aplicaciones actuales, donde el análisis de impacto que estamos haciendo se queda corto pues no mide lo que realmente cambio.

Esto me hizo pensar, sobre la evolución de las aplicaciones y como vienen cambiando la forma en que las desarrollamos.

En el GX24, se mostraron parte de las ramas de investigación que esta haciendo Artech para tratar de modelar las nuevas aplicaciones, donde los datos no están en bases de datos, sino que los orígenes de datos son diversos (bases de datos, sensores, archivos, servicios, etc) y donde se almacenan dichos datos también esta cambiando. Uno de los enfoques para tratar de modelar esto, son las Dynamic Transactions.  Con esto, se va a poder asociar a una transacción "cosas" diferentes que no son tablas, permitiendo usar la potencia del lenguaje Genexus para manejar dichos datos. No tengo detalles de la implementación, pero se me ocurre que en el futuro podremos:

 reco…

#GX24 - Mi resumen (un poco) técnico

Imagen
Voy a tratar de hacer un resumen de los aspectos técnicos de GeneXus del 24 Encuentro Internacional GeneXus.


Solo puedo hablar de lo que vi y pude entender, que es menos de la mitad de lo que se mostró o se anunció.

GeneXus Evolution 3 Mucho fuerza y empuje para que los usuarios se pasen a esta versión, con mucho énfasis en aplicaciones WEB y de dispositivos móviles.  Se comentaron las novedades en el desarrollo WEB de aplicaciones adaptables (responsivas es una palabra que no significa nada para mi) a diferentes tamaños de pantalla, con navegación mas fluida y pueden controlarse mucho mejor que parte de la pantalla renovar. Posibilita el desarrollo de aplicaciones de pagina única y también con notificaciones en el WEB. Las perspectivas son muy buenas, hay que trabajar bastante en el tema de como migrar las aplicaciones existentes para que aprovechen estas nuevas funcionalidades. Esto se puede hacer en forma paulatina.  Un llamado de atención que haría, seria con respecto al tema de …

#GX24 - Mi resumen

Imagen
Pasó el 24 Encuentro Internacional GeneXus y quería hacer un resumen de como lo viví.

Organización del Evento.  Impecable. correcta, intachable, impoluto, elegante, perfecto. No recuerdo nada mal organizado, atrasado, fuera de lugar o sucio. Lograr  esto para un evento en Montevideo es muy dificil. Hacerlo todos los años mejor, para un evento de este tamaño es sencillamente envidiable. Chapeau.

Lo único que puedo recordar y que para la mayoría debe haber pasado despercibida, es que en la charla del Plan Ceibal, a Fernando Brum le avisaron que quedaban 5 minutos de charla, cuando en realidad le quedaban aun 15 minutos. Con gran cancha paso rápido al fin de la charla, salteándose una parte importante de las diapositivas, y luego tuve que estirar y hablar mucho en las conclusiones.
Si me pasa eso en mi charla, creo que nadie hubiese entendido nada.

Temas Los temas principales, fueron Cloud y desarrollo para dispositivos inteligentes móviles.
Dentro de estos temas, podemos destacar la i…

Innovando en el proceso de BUILD y DEPLOY

Aca les dejo la presentación de mi charla en el evento GeneXus.


Innovando en el proceso de build y deploy de aplicaciones GeneXus #GX24 from Enrique Almeida

Me falto algo de tiempo para lograr explicar con mas detalle las tareas que realizamos, pero creo que en generel la charla salio bien.

Ente las cosas que me hubiese gustado poder hablar mas era sobre el repositorio de archivos que se usa en el momento del build, sobre las transformaciones  que hacemos de archivos de configuracion y temas y sobre todo, con el concepto de ANALISIS DE IMPACTO AMPLIADO.
El analisis de impacto ampliado, intenta controlar todas las cosas utilizadas por mi sistema (Tablas de Data Views, Web Services consumidos, external objects usados, etc) y tambien chequeo que lo que publica mi KB no cambie (WSDL, Rest, archivos de texto publicados, objetos main usados por otras aplicaciones, etc).

En fin, creo que hay lugar para mejorar bastante y mucho trabajo por hacer.

#GX24 - Innovando en el proceso de BUILD & DEPLOY

Los invito a ir a la charla "Innovando en el proceso de BUILD & DEPLOY" que daré en el Encuentro GeneXus.  La idea es contar algunas soluciones que encontramos a algunos de los problemas que nos encontramos en el armado e instalacion de aplicaciones GeneXus y la automarizacion de procesos, para lograr una "Consolidación Continua".

Es un área poco atendida por la comunidad pero que cada vez tiene mas relevancia en los proyectos actuales. Estamos a la busqueda de personas que les interese colaborar en el tema, pues hay mucho por hacer y los resultados son alentadores. Los espero.

Nueva version de KBDoctor (10.9.1) - Compatible con Evolution 3.

Imagen
Subí al marketplace de GeneXus una versión del KBDoctor (10.9.1) compatible con Evolution 3 (también con Evolution 2).  El marketplace tiene un proceso de aprobación que se demora algunos días..

Empece hace poco a trabajar un poco mas en serio con Evolution 3 y por me hice de un tiempito para hacer los cambios necesarios para que compile y funcione mas o menos bien.

Esta version tiene lo mismo que la version anterior, y le agregue un par de reportes nuevos
* Objetos que se generan WIN y WEB (cuando se tiene mas de un generador)
* Procedures que llaman a Transacciones y Webpanels (para detectar posibles problems de diseño)
* Objetos Complejos (que tienen archivos de especificacion grandes)
* Un link al help en el wiki

Ya estoy necesitando algunos reportes nuevos para poder solucionar problemas con los Modulos y se lo voy a estar agregando en las próximas semanas. Lo que ya tengo medio hecho es el fijar todos los objetos de un modulo como privado a menos que sea llamado desde fuera del…

Lista de deseos para #GeneXus previa al GX24.

Se acerca el Encuentro Internacional GeneXus numero 24 (#GX24) y el mismo será una buena oportunidad para intercambiar ideas y proyectos con otros miembros de la comunidad GeneXus.

Aun no he podido ver que charlas habrá pero supongo que tendran el nivel que nos tienen acostumbrados. A mi este año me toca hablar sobre "Innovaciones en el proceso de Build y Deploy" con GeneXus y colaboro en la charla de "Reglas en Runtime" que dara Alejandro Rivoir con un motor de reglas que pueden ser escritas por los usuarios.
En particular, me gustan mucho las instancias donde se puede hablar con los desarrolladores de las herramientas que utilizamos a diario para desarrollar.


Lo que me ha pasado en encuentros anteriores. que al haber aumentado la cantidad de participantes y al haber tantos tracks simultaneos de charlas interesantes, es mucho mas dificil que antes llegar al grupo de desarrolladores con el tiempo como para contarles nuestras necesidades y pedidos.


Por eso escribo …

Nueva versión de KBDoctor 10.9

Imagen
Subi al GeneXus Marketplace una version nueva de KBDoctor.
Tiene algunas funcionalidades nuevas:


Facilita la comparacion de navegaciones. Search & Replace en objetosBorrar objetos no referenciadosInicializacion de objetos

y varios arreglos de errores.

Aun le quedan algunos errores por corregir, pero quería liberar esta versión para Ev2 y ponerme a pasarla a la Ev3.

Se puede consultar algo de documentación aqui

PiensoPienso: Cuanto disco menos ocupa esta tabla?

Imagen
Este problema es extremadamente sencillo y  es sacado de la vida real.

Tengo una tabla que tiene 1.300.000.000 registros

*Clave                            Numeric(10)
   CampoSecundario      Character(100)

En promedio el campo esta ocupado con 50 caracteres.

Se decide cambiar el  CampoSecundario de Character(100) a VarChar(100).

Cuanto espacio de disco puedo ahorrar con esta reorganización ?


Datos Abiertos/Cerrados: La experiencia en Direccion Nacional de Aduanas de Uruguay

Imagen
En el Encuentro GeneXus del año pasado, presenté la experiencia de la Aduana de Uruguay publicando datos abiertos y el ecosistemas de empresas que se había formado a lo largo de los años para consumirlos y agregarles valor.

 En la charla hablaba sobre las resistencias que aparecían hacia la publicación de dichos datos y el esfuerzo que había que realizar para que se siguieran publicando. 
En los próximos días tendremos un retroceso importante en el proceso de apertura de datos del estado pues nos llego un pedido formal de sacar toda información relacionada con empresas y también el numero de operación. 
La información de las empresas puede ser entendible por temas de confidencialidad (aunque yo no lo comparto), pero lo de sacar el numero de la operación, no tiene mucho sentido. Hoy publicamos todas las operaciones aduaneras, junto con las altas/bajas y modificaciones de dichas operaciones. Al sacar el identificador de la operación, deja de tener sentido todo esto, y tenemos que public…

Build & Deploy - Avances

Imagen
En la interna, seguimos avanzando en entender y especificar el proceso de Build y Deploy de aplicaciones Genexus.  Va tomando forma y creo que ya tenemos algo implementable.
Tenemos un primer prototipo operativo y estamos en la etapa de generalizarlo para otras KBs.

Aun queda mucho trabajo por delante, pero creo vamos bastante bien.

Documente el proceso en el Wiki de la comunidad y tambien lo pongo aca.

Build En el build, dado una KB/Version/Environment  si usa GXServer, se ejecuta un Update y se recupera el ultimo numero de Commit, Se saca una lista de los Commits y los objetos modificados en los mismos y se lo guarda como documentacion (Desde el commit anterior hasta el commit actual)Si no usa GXServer se incrementa el numero de buildSi no hay nuevo commit solo envio un mail. Se hace un Build All Se salvar la ReorganizacionSe recorren todos los main (y todos los llamados) que tienen especificado el DeployLocation y se lo separa en directorios diferentes. Se copian los directorios ge…

Tecnologias interesantes para Build & Deploy

Imagen
En el contexto de proyecto de mejora de Build & Deploy de aplicaciones GeneXus, me ha permitido estudiar algunos productos y tecnologías interesantes.


Docker - Es un empaquetador/contenedor de aplicaciones que facilita que una aplicacion hecha en un notebook pueda ser desplegada en un ambiente de pruebas primero y luego en el ambiente de produccion, sin cambios. Me resulto interesante.


Packer - Permite generar maquinas virtuales identicas para diversas plataformas, a partir de una definicion unica de la misma. Entre otras plataformas, soporta generar containers docker.




OpenStack es un sistema operativo para la nube, que permite el control de nuesstras aplicaciones, haciendo mas fácil la instalación y administración de las aplicaciones desde una interfaz web. También es soportado por Packer. 
VirtualBox - Manejador de maquinas virtuales de Oracle, que funciona bastante bien para poder generar maquinas virtuales en el equipo.




Con productos y tecnologías parecidas a estas, deberiamos pod…

KBDoctor : Ejemplo de limpieza de una KB en producción.

Imagen
Me pasaron una KB que esta en producción en GeneXus X Evolution 2, mantenida por dos desarrolladores, para hacerle una limpieza con el KBDoctor.

Por lo que vi, es una KB bien mantenida y bien desarrollada, sin demasiado cosas históricas o basura.

Me pareció un buen ejemplo para medir los resultados de una limpieza de la KB, eliminando todo lo que no se usaba.

El objetivo es llegar a una KB que tenga los mismos ejecutables que tenia la original, y funcionalmente equivalente a la anterior, pero sin ningún objeto, tabla o atributo que no sea util para la aplicacion.

Para esto, usé el KBDoctor para lograrlo. Partía de una KB sin errores de especificación, ni de generación por lo que el trabajo estaba bien avanzado.

Los pasos que realice fueron:

1) Hacer un backup de la KB. Cree una versión congelada de la KB antes de la limpieza, para poder volver a recuperar algun objeto en caso de necesidad.  También hice un export de todos los objetos de la KB, de forma de tener una alternativa en caso …

Análisis de Impacto ampliado o manejo del API de mi aplicación.

Imagen
Hace unos años, las aplicaciones Genexus podian representarse con el siguiente esquema simple:
El origen de los datos, era una base de datos y se tenia salida en forma de pantallas, reportes, archivos de texto, mails, etc. Cuando teníamos un cambio en la aplicación, nos alcanzaba con analizar que era lo que cambiaba en las tablas de la base de datos y debíamos comprobar que las salidas fueran las esperadas. 
También era conveniente comparar las navegaciones de los objetos internos, para ver que los cambios fueran los esperados y con eso,  nos resultaba facil el manejo de los cambios de version de nuestras aplicaciones. 
Las aplicaciones actuales, son bastante más complejas, y pueden representarse en forma simplificada como:
Cual es la diferencia?  Seguimos teniendo la base de datos y las mismas salidas, pero se agregaron otras fuentes de datos (generalmente web services)  y a su vez nuesta aplicacion paso a ser fuente de datos de otras aplicaciones.
Que consecuencias tiene esto?  El ana…

PIENSOPIENSO: Es posible ejecutar esta reorganización?

Imagen
Tengo una KB GeneXus y en la misma tengo la transacción

TransaccionNoUsada *Clave   AtributoSecundario   AtributoSecundarioNoUsado (no es referenciado en ningun objeto) Dicha transaccion tiene la propiedad de GenerateObject = False pues nadie la invoca y genera la tabla de nombre MiTabla

Tengo ademas un programa, (Tipo Procedure, main, Command Line) que hace

new  //Agrega registro en la tabla MiTabla     Clave = &Clave     AtributoSecundario= 'Valor' endnew Elimino el atributo AtributoSecundarioNoUsado y se genera la reorganizacion que hace:

ALTER TABLE MiTabla DROP COLUMN AtributoSecundarioNoUsado;
PREGUNTA:
Puedo ejecutar la reorganización sin instalar nuevamente mis programas?
Justifique su respuesta

Independencia tecnológica en tiempos de la nube.

Imagen
Para cualquier empresa que dependa del software para subsistir (casi el 100% de las empresas), es importante no estar atado a ningún proveedor de forma que si dicho proveedor tiene problemas o se dificulta me relación con el, pueda seguir funcionando como empresa sin afectar el negocio central de dicha empresa. 
Por eso, es bueno tener la libertad de cambiarme de sistema operativo, de base de datos y hasta de plataforma. El poder hacer dichos cambios me da la libertad de poder adaptarme a los cambios y aprovechar mejor las oportunidades que se presentan. 
Los que desarrollamos con GeneXus tenemos mayor grado de libertad que quienes desarrollan con otras herramientas, pues el cambio de alguna de estas características no es tan costoso como en otras plataformas. 
Desde hace un buen tiempo, se esta dando una transición de tener sistemas locales, a la ejecución en la nube, generalmente virtualizados. 
Lo que antes acostumbramos a instalar en forma local en nuestros servidores, paso a ser…