viernes, 19 de septiembre de 2014

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 aca la lista de cosas que me gustaría poder contar en próximas versiones de GeneXus.
Son todas bastante sencillas y mayormente pensadas para mejorar la usabilidad.
1) Mostrar los últimos n logs
Cuando se trabaja con KB grandes, es incomodo que cuando mando hacer el build de un objeto, me borre el log anterior (donde tenia el resto de los errores a corregir)
Sera bueno que GeneXus me permitiera ver los últimos 10 logs de build o build all, pues nos ahorraría mucho tiempo.


2) Generar forzado un objeto.
Hoy la forma de forzar la generación de un objeto, es cambiar la propiedad de Tools/Options y poner que en el Build With this only para que haga una generación forzada., cambiando esto para todas las ejecuciones de Build with this only.
Según mi experiencia son excepciones donde se necesita hacer la generación forzada y en la mayoría de los casos, alcanza con check.


Como cuando se hace una generación forzada, en objetos que usan muchos SDT se generan todos estos fuentes, muchas veces demora en forma innecesaria.
Seria bueno poder optar en el momento de enviar la generación si la quiero forzada o no.


3) Ver navegación detallada de un objeto
Es similar al punto 2.


Lo mas util, es ver las navegaciones no detalladas. Las detalladas se necesitan solo en contadas ocasiones, pero la propiedad esta a nivel global, por lo que o vemos todas detalladas o todas normales.
Seria bueno poder elegir cual quiero en una corrida determinada o que fuera mas facil cambiar las propiedades.


4) Files en Folders
Muchos objetos genexus pueden ser almacenados en Folders.
En el caso de los objetos Files, estos no pueden ser guardados en folders, lo cual dificulta su organización.
Por ejemplo en nuestro caso, tenemos muchos XML Schema que se utilizan para validar xmls. Es bueno tenerlos en la base de conocimiento, pero hoy nos quedan todos mezclados con otros archivos.
Seria bueno poder tener varios folders con archivos y folder y dentro de las mismas poner los objetos del tipo File.


Schemas
Schema1.xsd
Schema2.xsd
Jar
mijar.jar
dll
midll.dll




5) Que View Navigation, muestre la navegación.
Cuando tenemos la ventana de View Navigation abierta pero no visible, y en un objeto hacemos un View Navigation, no se pasa automáticamente a dicha ventana, y el usuario que recien empieza no entiende que es lo que pasa.


6) Armado de Working Set
Una funcionalidad muy buena y poco usada es la de poder armar un Working Set para hacer operaciones en un grupo de objetos en vez de hacerlo uno a uno.
Estaria bueno poder enviar un objeto a un working set, en el boton contextual del objeto.


Por ejemplo, si tengo varios objetos que debo mandar a especificar


6) Poder especificar SDT.
Muchas veces quedan mal generados los fuentes de los SDT. La forma de regenerarlos, es indirecta. Seria bueno poder tener un mecanismo de poder generar el fuente de un SDT, que permita elegir el generado y lo haga en forma forzada.
Ahorraria mucho tiempo.


7) Table has been removed. y Reorganize server tables + NO.
Cuando la propiedad de Reorganize Sever Table = NO y borro una transaccion que hacer borrar una tabla, se muestra la reorganización pero no muestra que la tabla se borrara, pues se sustitutye el mensaje que indica que la tabla se borrara, por el mensaje que la tabla no se va a reorganizar.


8) Regenerar .ARI. y archivos *.00x
Mucho mas frecuentemente de lo deseable, es necesario regenerar los .ARI o los archivos de texto que tienen relaciones entre objetos. Esta situacion es peor en ambientes con mas de un generador.
Seria muy conveniente tener un mecanismo que permita regenerar todos los .ARI con una herramienta externa a GeneXus, para no tener que hacer REBUILD ALL, como se necesitan con las versiones actuales.

9) CheckKnowledgeBase en el Menu
Tener una opcion en el menu de GeneXus que permita hacer un CheckKnowledgeBase de forma de no tener que hacer un scripts de comandos, para corregir problemas.

Relacionado con GXServer

1) Update & Build all. 
En KB que están conectadas a GXServer, estaria muy bueno tener un botón para hacer un Update desde GXServer y si todo sale bien y no hay warnings ni errores en dicho update, lanzar un build all.
Automatizaría algo rutinario que hoy hay que hacerlo en 2 pasos.

2) Poder exportar un objeto desde GXServer. 
A traves de la interfaz web, poder generar un xpz para bajarmelo. Eso es practico para cuando quiero sacar parte de la funcionalidad de una kb y no quiero bajarmela entera. 

9) GXServer
En Update, por default, mostrar la lista de commits, edesde mi ultimo full update.
Hoy se muestran los objetos con diferencias (y hay que seguir mostrandolo) pero es mas util, que muestre tambien los commits que se han realizado desde el ultimo FULL UPDATE. 
Estaria bueno tener una MSBUILD task que permita hacer una lista de los Commits desde la fecha del ultimo update. 

viernes, 12 de septiembre de 2014

Nueva versión de KBDoctor 10.9

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


  • Facilita la comparacion de navegaciones. 
  • Search & Replace en objetos
  • Borrar objetos no referenciados
  • Inicializacion 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

martes, 9 de septiembre de 2014

PiensoPienso: Cuanto disco menos ocupa esta tabla?

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 ?


lunes, 8 de septiembre de 2014

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

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 publicar un acumulado diario, lo cual va a dificultar bastante su procesamiento, por parte de las empresas. 

Estas idas y venidas no son nuevas, pero es raro verlo ahora, cuando hay varias instituciones que trabajan para abrir mas el gobierno y tratan de mejorar el Gobierno Electrónico. 

Por experiencias anteriores, el cerrar esta información tiende a favorecer a los mercados paralelos  pues hay interesados en pagar por la misma, pues tiene valor y se hace todo mucho mas confuso. 

Veremos como termina esta aventura. 




viernes, 22 de agosto de 2014

Build & Deploy - Avances


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 build
  • Si no hay nuevo commit solo envio un mail. 
  • Se hace un Build All 
  • Se salvar la Reorganizacion
  • Se recorren todos los main (y todos los llamados) que tienen especificado el DeployLocation y se lo separa en directorios diferentes. 
  • Se copian los directorios generados en el paso anterior + Archivos Fijos extra GeneXus y se lo salva con un numero de Build en el archivo Build.info
  • Envio de mail - Informa como termino el build, si hay errores  y envio el log completo de la corrida 

Generacion de archivos de Control

En este paso se generan los archivos necesarios para hacer el analisis de impacto de este build contra el que esta instalado en produccion.
Las tareas a realizar son
  • Recuperar los WSDL de los Procedure SOAP que publique mi aplicacion.
  • Lista de mains por Deploy Location
  • Navegaciones de los objetos (para el comparador de navegaciones)
  • Analisis de seguridad (SecurityScan)
  • Objetos modificados en estado Pending Commit
  • WebServices consumidos por mi aplicacion 
  • Servicios REST

Control Pre-Deploy

Esta tarea consiste en hacer un analisis de impacto del build que estoy por instalar. 
Compara el Build Instalado (del cual debo tener copia local) con el nuevo Build, comparando las navegaciones (de objetos modificados y de objetos que no cambiaron, pero si cambio su navegacion), compara WSDL, listas de ejecutables main. Con esto el encargado del deploy define si ese BUILD es instalable o no. 
Controles que se realizan
  • Hay cambio en algun WSDL / Web Service SOAP?
  • Hay cambios en los servicios consumidos?
  • Hay cambios en los servicios REST
  • Se agrego o se quito algun ejecutable?
  • Cambio la navegacion del algun objeto no modificado?

Deploy. 

Es la instalacion definitiva de la aplicacion en las maquinas de produccion. Para esto cada uno de los directorios generados en la etapa de build va a ser instalado en una ubicacion determinada. Se tendra un juego de archivos de configuracion para cada uno de los ambientes de deploy (por ejemplo, testeo manual, testeo automatico, pre-produccion, etc)
En esta etapa:
  • Se salvan lo que estaba instalado anteriormente (para volver atras en caso de un fallo)
  • Se ejecutan las reorganizaciones necesarias
  • Se copian los nuevos programas
  • Se adaptan y se copian los archivos de configuracion para dicho ambiente

Configuración

Posterior a la etapa de Deploy, hay una etapa de configuracion, que realizara:
  • Configuracion de Directorios Virtuales / Webapp
  • Cambios en seguridad