Entradas

Mostrando las entradas de 2013

Movimiento Pro-Respetabilidad de las tareas de Build y Deploy en la Comunidad #GeneXus

Imagen
Si miramos la historia de la forma en que desarrollamos aplicaciones con GeneXus dentro de la comunidad, vemos que dentro del ciclo de vida de las aplicaciones le hemos dado mucha importancia a las etapas de diseño y programación desde hace mucho tiempo. El motivo de ésto supongo que es porque GeneXus está pensado para ser usado en esa etapa fundamentalmente. Hace unos años, dentro de la comunidad empezamos a movernos para darle al Testing la importancia que se merece y han aparecido empresas y herramientas para encararlos. Lo miso sucedió con el tema de Seguridad, que al principio cada uno lo resolvia a su manera y luego de una formalizacion, aparecieron herramientas como el Security Scanner, el GAM , etc. La mejor señal de la evolución de estos temas dentro de la comunidad, es que ambas ameritan tracks propios de charlas en el Evento Internacional GeneXus. Otro signo es que hay personas que se dedican 100% a la prueba de las aplicaciones y hasta le gusta. Creo que es el mom...

Manejo de las interfaces de nuestros sistemas GeneXus. (Manejando cambios de WSDL)

Imagen
En los tiempos que corren, es muy común que nuestros sistemas tengan que exponer sus servicios o sus datos a través de servicios web. Si bien existen varias formas de implementarlos, en las aplicaciones GeneXus es común hacer procedimientos con la propiedad CALL PROTOCOL como SOAP o también tener objetos Transaction o DataProvider expuestos como web services . Una vez que se publican dichos servicios web y empiezan a ser usados por otras aplicaciones, si algo cambia generalmente las aplicaciones dejan de funcionar correctamente. Al desarrollar con GeneXus, el WSDL es generado en forma dinámica y es difícil lograr que el mismo no cambie o enterarse que cambio. Que cosas puede hacer que cambie el WSDL? Cambios en namespace de los procedures Cambios en namespace de SDT Cambios de nombres en SDT (incluye mayúsculas o minúsculas).  Agregar parámetros Agregar IN: y OUT: en parámetros Generar el WSDL con la URL en mayúsculas y en minúsculas Cambiar de versión de Ge...

PiensoPienso: Cual for each tiene mejor performance? #GeneXus

Imagen
En una base de datos, se tiene la tabla  Logs * LogId   (autonumber)    LogDate    LogObservation Tiene un millón de registros y una distribución uniforme en los diferentes meses. Tiene un indice de usuario por LogDate, que es del tipo DATE. Tengo el siguiente código, en un procedure GeneXus, main, command line. &ServerDate = ServerDate() &UnMesAtras = &ServerDate - 30 Msg('Caso 1: where LogDate > ServerDate() - 30 ',status) for each where LogDate > ServerDate() - 30 do 'Algo' endfor Msg('Caso 2: where LogDate > &ServerDate - 30 ',status) for each where LogDate > &ServerDate - 30 do 'Algo' endfor Msg('Caso 3: where LogDate > &UnMesAtras ',status) for each where LogDate > &UnMesAtras do 'Algo' endfor Msg('Caso 4: if LogDate > &UnMesAtras ',status) for each If LogDate > &UnMesAtras do 'Algo' endif endfor Msg('Caso 5: if LogD...

KBDoctor - Comparador de Navegaciones.

Imagen
Desde hace tiempo, existe una herramienta para Comparar Navegaciones  en KB GeneXus. La misma esta pensada para ser usada comparando navegaciones de objetos en diferentes versiones de GeneXus. Es de mucha utilidad, cuando se realizan cambios de versiones, pero no me resultaba practico para el uso diario con GeneXus X. Decidí usabilizar un poco la herramienta y agregarle al KBDoctor (versión 10.8 o superior), las opciones de generar una foto de las navegaciones es un momento dado y luego utilizar alguna herramienta de comparación de archivos de texto para realizar la comparación (es la misma metodología que se usaba con la herramienta anterior). Que ventaja tiene este enfoque? El resultado es exactamente el mismo que antes, pero resulta un poco menos engorroso el procesamiento de los archivos de navegación. Ademas para KB con varios generadores, con la herramienta anterior se tenian que realizar tantas comparaciones como generadores, pero ahora unifico todo en una misma car...

Encontrar objetos con errores y warnings en GeneXus.

Imagen
Para saber que objetos tienen Warnings o Errors en GeneXus, se logra si se hace un BUILD ALL o un REBUILD ALL y l lista de los objetos se pierde al hacer la primera especificación posterior al BUILD ALL. Cuando se trabaja con KB grandes, este proceso de build all puede demorar varias horas, lo cual hace muy difícil el ciclo de corregir los objetos que tienen warnings.  Para tratar de solucionar esto, desarrollé una opción del KBDoctor , que permite ver cuales son los objetos que tienen errores, warnings y agregué también los objetos que tienen navegación no optimizada que se resuelve en el cliente que son bien difíciles de detectar, pues solo muestran un iconito en la navegación. La forma de usarlo es:  Esta opción, utiliza una heurística (no siempre correcta) recorriendo los archivos de navegación y buscando en ellos determinados patrones que indiquen si hay algún problema.  Como se base en los archivos XML que están en los directorios NVG (de las ...

PiensoPienso: Cual es el estado de la base de datos luego de la corrida de este programa?

Imagen
Tengo el siguiente procedure main GeneXus (C# o Java). y Actualizo es                                  parm(in:&Clave); Al comezar a ejcutar el contenido de la tabla es: Cual es el contenido luego de ejecutar el programa 1)  2) 3)  4)  No se puede predecir el resultado de la corrida.  Justifique su respuesta. 

Basura tecnológica y renovación de equipos.

Imagen
Pasan los años y seguimos sin tener una forma prolija de eliminar las computadoras que se sustituyen y no se utilizan mas. Los monitores se cambian por planos y las computadoras por otras mas potentes y mas chicas.  Estaría bueno encontrar una forma de donar estos equipos a otras instituciones que las puedan aprovechar, pues están funcionales, pero las experiencias de donaciones anteriores, no fueron nada buenas, pues algunos avivados terminaron vendiendo dichos equipos. Por otro lado veo noticias como esta , y me da lastima que no pueda compatibilizarse las computadoras que sobran con las necesidades de otros organismos.

GeneXus Data Providers - Segunda Parte

Imagen
Hace unos meses publiqué el post GeneXus Data Providers , en el que comentaba que si bien son objetos muy poderosos, no son fáciles de entender, al menos para mi nivel. Intentaba mostrar como era muy poco intuitivo realizar rankings, en un modelo de datos sencillo (el mas sencillo que se me ocurrió) y tratar de hacer un poco de ruido en la comunidad GeneXus con los Data Providers, que me parece que son objetos que podrían ser mucho mas usados, si fueran mas faciles de entender. Tuve una charla con  Gaston y Nicolas  para intercambiar ideas sobre este tema y de la misma salieron varias conclusiones valiosas. En la misma, hablamos sobre solución con los objetos actuales y también sobre el enfoque en versiones posteriores de Genexus, con Transacciones dinámicas y sus cambios. CASO 1: Ranking por Local. Ordenar por una formula.  Este caso parece sencillo de solucionar, pues  es una limitación en la sintaxis de GeneXus, que no permite escribir y salvar el orde...

Microsoft, tenemos que hablar.

Imagen
Querido Windows: Tenemos que hablar: Desde hace años hemos convivido en una relación que nos convino a ambos. Yo pago y vos me brindas lo necesario para poder programar y ganarme la vida. Durante nuestra relación hemos tenido momentos buenos y de los otros. A lo largo de todos este tiempo, desde DOS hasta Windows 8, he tolerado mucho de tus deslices, como Windows ME, Windows Vista y otros que prefiero ni nombrar. También es justo recordar los momentos buenos, como cuando SQL Server paso a ser una base de datos de verdad, los sistemas hechos con .NET Framework y hasta Windows 7. He pensado mucho en nuestra relación y últimamente hay cosas que no funcionan. Me da la sensación, que ya no pensás en lo que necesito, solo te preocupa tu felicidad y no la mía. Con Windows 8, lograste esconderme los programas de mi alcance, para que todo resultara un poquito mas difícil de encontrar. Esos clicks se acumulan dia a dia, semana a semana y pesan a lo largo de los meses. Apenas me ent...

Extensiones que habria que desarrollar para GeneXus.

Imagen
Objetivo del Post: Incentivar a la comunidad a desarrollar varias extensiones que se están necesitando. Si alguien quiere cobrar por ellas, yo estoy dispuesto a pagar (siempre que sea poco). Algunas como la de borrar una Kb, las deberia desarrollar Artech, pues son funcionalidad basica de GeneXus que falta. A medida que se desarrolla con GeneXus hay algunas cosas que se nota que deberíamos desarrollar para mejorar nuestra productividad. 1) KBDelete. Poder borrar una KB, desde GeneXus. Parece algo basico, pero hoy no lo podemos hacer de forma sencilla y da bastante trabajo lograrlo. Dar la opción de borrar el directorio y todos los archivos de la KB o dejarlo, pues puede ser bueno para  volver a crear una KB con el mismo nombre que la anterior. 2) Replicador de instalaciones.  Poder copiar los directorios de instalación de User Controls, Extensiones y Patterns desde una instalación de GeneXus y copiarlo a otra. Esta extensión, permitiría instalar un nuevo Upgra...

Sobre Interfaces de sistemas y GeneXus.

Imagen
Caso 1 : Tengo un sistema, que publica WebServices con SOAP. Cambio de Version de GeneXus. (puede ser un upgrade o version). El SOAP generado por la version anterior y la nueva son diferentes y las aplicaciones que consumen dichos web services no funcionan correctamente. Resultado: Se deben ajustar los programas que consumen dichos webservices (desarrollados por otras empresas) Caso 2:  Tengo un procedimiento main command line  (en 9.0) que se ejecuta agendado en un servidor. Se instala una nueva version (en GeneXus X) de la aplicacion, y el ejecutable que se llamaba aEjecutable.exe , pasa a llamarse aPEjecutable.exe . Resultado : La tarea agendada da errores y se demora en detectar. Caso 3: Tengo una KB con la propiedad Namespace en default, por lo que toma el nombre de la KB como namespace. La aplicacion genera web services. Se trabaja con GXServer y otra persona se baja dicha KB con otro nombre, generandose otro namespace. Resultado: Los ejecutabl...

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

Di una charla sobre la experiencia adquirida con publicacion de datos abiertos en la aduana, desde el año 1999 a la fecha. Si bien el tema es interesante, no pense que dicha charla tuviese tanto publico, pues la sala estuvo llena con gente parada en el fondo. Es algo sencillo de hacer, que agrega mucho valor tanto a las aplicaciones como al conjunto de empresas que lo utilizan y puede servirle a otros. Les dejo la presentacion en slideshare. Datos abiertos from Enrique Almeida UPDATE : El video de la charla, se podia ver en  http://www.genexus.com/encuentro2013/gx23-materiales?es,0,,3117 , pero tenia una cancion de Daniel Melingo que se llama Narigon  al principio. Supongo que no era nada personal, pero quedaba un poco feo comenzar de esa forma... Para los interesados, la letra completa de la canción es: Por los pagos de mi barrio Había un tipo que se las daba de guapo, Pero su mente estaba revirada. Le decían el narigón, Por lo mucho que aspira...

IDEA: Repositorio de Modelos de Datos

En el XXIII Encuentro Internacional GeneXus, presenté la idea de crear un repositorio de modelos de datos y objetos. Luego de dejar madurar un poco la idea, llegue a la conclusion que lo mejor era habilitar un acceso a GeneXus Server, que fuera transversal a todas las KB y no crear un nuevo lugar donde almacenar los objetos a compartir, y concentrarse en hacer mas facil compartir lo que ya esta hoy subido a GXServer. Creo que es una de idea que no tiene gran costo de implementacion y puede ayudar sobre todo a quienes comienzan con GeneXus. Les dejo la presentacion en slideshare. Repositorio de modelos de datos GeneXus from Enrique Almeida

Módulos y Diagrama de Módulos.

Imagen
En el último night build de GeneXus Tilo, incorpora nueva funcionalidad con el objeto Módulo. Al hacer un click sobre un modulo se puede ver donde se muestra cuales son los objetos publicos del módulo que se exponen como servicios (procedures, business component, etc).  En Data, muestra transacciones y SDT y en User Interface los objetos públicos como webpanels.  Cada modulo tiene un diagrama, que permite ver en forma gráfica como se relación un modulo con los demás de mi KB.  Al hacer click en uno de los cuadraditos de de las flechas, se puede ver los objetos que desde un modulo, invocan al otro y cuales son los objetos referenciados. Además todos los objetos tienen la posibilidad de marcarlos como públicos, privados o internos.  Creo que con esta funcionalidad va a ayudar mucho a trabajar con KB grandes y poder entenderlas mejor.  En el XXIII Encuentro GeneXus vamos a tener novedades de los módulos, pues hay algun...

Usar Visual Studio Express 2012 para desarrollar extensiones GeneXus

Imagen
Para quienes programamos poco en C#, es muy practico usar las versiones Express de Visual Studio que son gratuitas. Esta versión tiene la limitación que no permite hacer el debug de DLL, porque no tiene posibilidad de ejecutar programas externos para debug.  Dicha limitante, es solamente en la edición del proyecto y si se agregan las lineas en negrita al archivo de extensión .csproj ya se puede depurar dll. <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">     <StartAction>Program</StartAction>     <StartProgram>C:\Program Files (x86)\Artech\GeneXus\GeneXusXEv2Desa\GeneXus.exe</StartProgram>     <DebugSymbols>true</DebugSymbols> Esto es muy práctico para quienes desarrollamos extensiones GeneXus, pues permite levantar GeneXus mientras realizamos el debug de las dll. En versiones pagas de Visual Studio, esto se puede editar directamente desde la interfaz del producto.

La conectivdad aérea del Uruguay y los proyectos informáticos.

Imagen
Esta es una anécdota personal de hace unos cuantos años.  Habíamos conseguido un proyecto en Costa Rica que exigía que siempre hubiera al menos una persona de Concepto para dar apoyo y avance del proyecto.  Eramos unas 8 personas que nos turnábamos en los viajes y éstos eran de una semana en su mayoría.  La conectividad aérea del país hacia America Central, era bastante mala, a pesar que existían muchas compañías que viajaban hasta Montevideo.  Las que mas usábamos Varig, Pluna, United, American y varias mas.  Para llegar a San José en Costa Rica, teníamos que hacer Montevideo, San Pablo San Pablo, Miami Miami, San Jose.  Como era previo al 2001, pasar por Miami no era tan burocrático e incomodo como lo es ahora por los controles y las demoras, pero igual era un viaje larguísimo para poder llegar.  Lo bueno, era que rápidamente llegábamos a ser viajeros frecuentes con muchísimas millas y por lo tanto nos empeza...

PiensoPienso: Que devuelve este Data Provider?

Imagen
Tengo la tabla Ciudades *CiudadId         C(10)   Pobladores      N(10) Con los datos: CIUDAD1    1000 CIUDAD2    2000 CIUDAD3    3000 Y el Data Provider, que recibe como parametro &CiudadId Cual es la salida de este programa? 1) 1000      0 2) 1000      6000 3) 1000      3000 Es muy sencillo, pero tiene una pequeña trampa.

GeneXus Data Providers.

Imagen
Me encantan los Data Providers, pero no los entiendo. Me gustan porque son muy potentes y escribiendo poco se puede lograr muchísimo, pero muchas veces no hacen lo que yo quiero, son bastante desobedientes. Para poner un ejemplo, quiero hacer DP para mostrar Rankings de Ventas. Fue el ejemplo mas sencillo que se me ocurrió.  Quiero mostrar el total de lo vendido:   por Local por Zona  por Fecha.  Los DP van a devolver un SDT Ranking que tenga el total vendido por las diferentes dimensiones CASO 1: Ranking por Local  Hice un Data Provider con la sintaxis:   y esto devuelve lo vendido por cada uno de los locales y todo muy sencillo.  Hice un Webpanel, que permite seleccionar el Data Provider y muestra en SDT en una grilla y también pasa dicho SDT a XML para que sea fácil ver los datos crudos.  Hasta acá, todo correcto y según lo esperado. Ahora, quiero que me devuelva el SDT ordenado por lo ...