Entradas

Mostrando las entradas de septiembre, 2016

Idea para extension GeneXus - Instalador de User controls

Imagen
Una extensión con la que me gustaría contar, seria una que permita ver una KB de un GXServer o un XPZ de una KB e identifique cuales son los User Controls o Patrones que utiliza y me los presente en una lista. Desde dicha lista tengo las opciones de instalar alguno o instalarlos todos y hace automático el proceso de bajarlos del Marketplace (los que sean gratis) e instalarlos o actualizarlos en mi instalación de GeneXus, haciendo el GeneXus /Install y todo lo necesario para que me quede operativo. El siguiente paso, es poder hacer esto por linea de comandos, con lo cual mucho de nosotros estaríamos mas contentos y con mas tiempo de pensar en cosas importantes.

Charla sobre codigo y objetos simples en el #GX26

A los que les interese la charla sobre Deuda Técnica y Código simple se puede ver aqui El objetivo de la charla era plantear el tema de la forma mas fácil y menos técnica posible, para mostrar porque hay que prestar atencion a pequeños detalles que hacen a nuestro código menos claro y mas complicado de entender. El concepto de deuda técnica, es sencillo: Cada vez que hago un arreglo y el mismo no lo realizo lo mejor que puedo, para salir del paso rápidamente, estoy incurriendo en una deuda, que tarde o temprano voy a tener que pagar. El concepto de código entendible, es algo mas subjetivo y difícil de definir, pero se pueden identificar algunas características que el código simple o entendible tiene y a tratar que nuestro código cumpla con dichas características. Hay mucho trabajo aun por realizar, pero creo que es bueno trabajar en el tema, si pretendemos que nuestra KB dure muchos años en el mercado. Para facilitar la tarea que otras personas verifiquen nuestro codigo, esta

Encuentro GeneXus #GX26 - Deuda técnica, código simple y revisión de código

Imagen
En el Encuentro GeneXus 2016 de la semana que viene, estaré hablando sobre   código GeneXus simple y fácil de entender y como ayuda a bajar nuestra deuda técnica  y mejora nuestra productividad, aunque no sea evidente en un principio. Representado en una gráfica, la diferencia entre un arreglo rápido, que luego lleva mas mantenimiento y un arreglo cuidadoso, que es mas fácil de mantener en el futuro. Aunque los números son ficticios, ayudan a ver que si tengo que mantener una KB por un tiempo prolongado, es conveniente dedicarle mas tiempo a hacer las cosas bien de entrada, pues sino vamos a gastar mas tiempo en el futuro. Es un tema que en la comunidad GeneXus casi todos conocemos pero tenemos algo olvidado y hay oportunidades de mejora importantes. También participo en una charla con Laura Aguiar de las tareas realizadas en el GUG Montevideo , sobre la búsqueda de buenas prácticas en Gestión de Proyectos. En dicha charla tambien hablaremos de una herramienta de revisión

Problemas comunes en modularización de KB GeneXus

Imagen
Soy promotor de la modularización de KB Genexus, pues ayuda en muchos aspectos mejorar  la salud de la KB y de la aplicación. Al tener la KB modularizada, se puede entender mas rapido, y por lo tanto, se pueden hacer cambios mas agiles y con menos riesgos. Algunos de los patrones de problemas comunes que aparecen en KB que he estado modularizando son: Tengo un objeto que recorre una tabla privada de otro modulo y ejecuta código utilizando objetos del modulo B, por ejemplo actualizando o haciendo inserts. En este caso, conviene sacar la logia del Object1 y crear un nuevo objeto en el ModuleB De esta forma el ModuloB pasa a tener un nuevo servicio que puede ser usado por otros modulos y la tabla queda como privada. Caso 2: Se intenta recorrer una tabla privada de otro modulo, y luego se ejecuta logica propia del modulo en el que estoy.  Una posible solución es hacer un Data Provider que devuelva los datos de la tabla privada y utilizar los elementos del SDT en

El Sordo

Imagen
Hace unos dias, falleció Luis Eduardo Gonzalez, popularmente conocido como "El Sordo". Me tocó trabajar con él en el año 1987, en mi primer trabajo. Yo era estudiante de Facultad de Ingeniería y Alberto "Tito" Gonzalez, recién llegado de su exilio, me ofreció trabajar como digitador en una de las empresas derivadas de Equipos consultores, que se llamaba Pro-Medios y se dedicaba a la medición de audiencia de radios y televisión. Me tocaba trabajar de noche, en la casona de Bvar. Artigas (**), donde funcionaba Equipos . Digitaba las encuestas del día, en computadoras de dos disketeras, donde perder datos, era cosa de todos los días. Obligado, tuve que aprender de FileSystems, y como recuperar datos de diskettes dañados, para recuperar la digitacion de un dia. Ahi me cruzaba con Cesar Aguiar, Agustin Canzani, Juan da Rosa,  el Sordo y otras personalidades que luego serian bastante mas conocidas. En ese trabajo, aprendí muchísimo de estadísticas aplicadas, de

Bind de variables en la base de datos y performance

Imagen
Teníamos una sentencia de la forma //&SessionCollection = Collection de Session (Tiene al menos un elemento) For Each      Where ATTSession in &SessionCollection   ... Endfor Esto genera un sentencia SQL del tipo  SELECT ATTSession,ATT2.. from Table WHERE ATTSession in ('314159','271828') Es bastante dificil el binding de estas variables pues no se conoce a priori la cantidad de valores que puede tener la lista.  La performance de la sentencia  es buena, pero los DBA se empezaron a quejar que como la sentencia no tiene binding de variables, el espacio donde Oracle guarda las sentencias y sus planes de ejecución se llenaba rápidamente con sentencias muy parecidas entre, pero con diferentes valores en la comparación IN. El mayor problema es que al entrar estas sentencias, se borran otras que cuando se vuelvan a ejecutar van a tener que volver a evaluar se plan de ejecución. Analizando el caso, vimos que la sentencia se ejecutaba varias decen

La sesion ha caducado - La pagina se recargará. - HTTP 440.

Imagen
Hicimos una migración de un sistema que estaba en producción en GeneXus Evolution 2 a GeneXus con Evolucion 3 WEB y generando con C#. Ademas de la versión, teníamos con diferencia que en Evo2 teniamos la propiedad de "Javascript Debug Mode" = Yes y al pasar a Evo3, la dejamos en NO, para mejorar un poco la seguridad. Instalamos la parte batch y los web services y todo funcionaba correctamente.  Cuando instalamos los web forms  en producción empezo a aparecer en la pantalla de los usuarios, "La sesión ha caducado. La pagina se regargará".  Esto era a pesar que teníamos la propiedad "On Session Timeout" = Ignore. Esto nos obligó a volver atrás dicha instalación y regenerar todo con la propiedad " Javasript Debug Mode" = YES y "On Session Timeout" = Ignore. Dichas propiedades OBLIGAN  a un Rebuild all de toda la aplicación, pues afectan tanto la compresión de los javascript como el uso o no de trafico encriptado en

Compartir la base de datos de aplicación GeneXus (15).

Imagen
Es común que las aplicaciones GeneXus tengan que compartir parte de la base de datos con otras herramientas. Algunas de los utilitarios o herramientas que me he encontrado en diferentes instalaciones son: * Generadores de Reportes * Generadores de consultas de BI * Herramientas de Auditoria * Tablas dinamicas que lea directamente de la base de datos * Aplicaciones de terceros que graban o leen alguna tabla del sistema. Algunas de estas herramientas, soportan el uso de web services, con lo cual se pueden definir dicho servicios y publicarlos, con lo que la interfaz de la aplicación queda bien definida y conocida. Cuando hacemos algun cambio en GeneXus, nos tenemos que asegurar de no cambiar si querer alguno de estos servicios y es relativamente facil hacerlo con un comparador de WSDL o REST. Cuando las aplicaciones estan pensadas para usar directamente tablas en la base de datos, el problema es un poco mas complicado de resolver. Formalizando el problema, seria mas o men