Entradas

Mostrando las entradas de 2021

La Misma Alienación

La Misma Alienación Emiliano , El Alemán Se levantaba siempre primera Invierno, otoño y en primavera Dotada de estrategias sin final Yo nunca me quería levantar Mi madre me mandaba a la escuela Merienda en bolsa, pan con manteca Yo tuve quien me dijo: "eso está mal" Quien me enseñara un caminito para andar Hay quien no podrá sentir lo mismo Derrumbándose al abismo, sin motivo ni razón Si solamente como el resto de la gente Refleja lo que aprendió Sin ir a la escuela, sin tener la panza llena Si no hay nadie que te explique cómo es Lo que te muestran de botija Como malo o como bueno, lo aprendés Lalala-lalalayla-lalayla Lalala-lalalayla-lalayla Larala-lalalala-lalala Larala-lalalala-lalala Lalala-lalalayla-lalayla Lalala-lalalayla-lalayla Larala-lalalala-lalala Larala-lalalala-lalala Nunca pasé hambre, siempre tuve a quien llorarle Y yo no sé lo que es dormir el hormigón Por eso, es triste cuando alguno con soltura Y en muy buena posición Juzga a otro' gurice', pues, s

Ser Familia Amiga

Imagen
Hace poco más de un año, Matilde y Mariana propusieron un proyecto familiar para tratar de devolver un poco de todo lo que la sociedad uruguaya nos ha dado y ayudar a algún bebé que no tuviera la suerte que hemos tenido nosotros.  Para esto, nos contactamos con la  Fundación MIR  que se focaliza en ayudar a bebes de 0 a 12 meses que pierden o ven interrumpido los cuidados de sus familias de origen. Una de las opciones que nos presentaron, era ser   Familia Amiga del INAU , que consiste en llevar un bebé a casa durante el tiempo que se necesite (generalmente son 4 o 5 meses, con un máximo de un año) hasta que vuelva con su familia de origen o que la justicia determine que sea adoptado.  Desde el principio nos aclararon que era algo temporal, pues al ser Familia Amiga, no se puede estar en el Registro Unico de Aspirantes, donde hay que inscribirse para poder adoptar a niños en Uruguay.  El 23 de Diciembre de 2020, tuvimos la primer entrevista en el INAU, y luego pasamos por una evaluac

GeneXus, aplicaciones complejas y futuro

Imagen
La sensaciones que tengo para los próximos años: Se necesitarán mas aplicaciones Los problemas que resuelven estas aplicaciones son cada vez mas complejos, lo que necesitan aplicaciones sofisticadas.  Hay escasez de gente con capacidad para hacer estas aplicaciones Las aplicaciones ya dejaron de tener escala humana (no hay una persona que entienda toda la aplicación) y ya están dejando de tener escala empresa (las futuras aplicaciones seran desarrolladas por muchas empresas).  Tomando esas sensaciones como hipótesis de trabajo, veo a la comunidad GeneXus bastante bien posicionada, pues tenemos herramientas como para hacer las aplicaciones que se necesiten.  También veo que no tenemos la escalabilidad suficiente para captar una parte importante de los proyectos que se presentarán en el futuro.  Sabemos resolver problemas a escalas pequeñas, pero nos cuesta reproducir estas experiencias.  Siento como que somos Tesla, pero sin las Gigafactory, con un producto que le puede gustar a mucha g

AMA: Knowledge Base Modeling for Mission-critical Systems

Imagen
  Ayer se realizó un WEBINAR donde se pueden hacer preguntas y respuestas sobre como modelar aplicaciones de mision critica con GeneXus .  Recomiendo que tienen KB grandes vean los posibles evoluciones que puedan tener en el futuro dichas KB.  De cualquier forma hay varias preguntas que no quedaron bien respondidas, porque es muy dificil explicarlo en una hora.  KB Monolítica con una única base de datos, y una única instalacion KB Monolítica con una única base de datos, con instalacion en varias webapps o en cluster (divida con diferentes criterios) KB Monolítica modularizada con una única base de datos instalada en varias webapps o en varias máquinas (cluster)  Varias KB, con una única base de datos, instalada en varias  webapps o varias máquinas o serverless Varias KB, cada una con su base de datos independiente, que comparten algunas tablas, instalada en varias webapps o varias máquinas o serverless Varias KB, con base de datos independientes que no comparten nada, instaladas en var

Escenarios de desarrollo con GeneXus e instalación en producción.

Imagen
Existen muchas forma de organizar el desarrollo de aplicaciones GeneXus. Esta variedad de escenarios, hace que a veces se dificulte el discutir sobre herramientas o procedimientos generales, pues algunos son buenos para un caso, pero no aplican o no son convenientes para otros escenarios.  Quiero hacer una lista de cada uno de los que tengo identificados, para tratar de explicar pros y contras de cada uno.  KB Monolítica - Empaquetado Monolítico - Instalación monolítica en una sola maquina Es ideal para aplicaciones chicas, que no tengan requerimientos grandes de escalabilidad. Permite mantener sencillo el desarrollo y es como conviene empezar todos los desarrollos.  El empaquetado es sencillo y la puesta en producción también. Hay que testear toda la aplicación para ponerla en producción.  KB Monolítica - Empaquetado Monolítico - Instalación en mas de un nodo con base de datos compartida Una unica KB, la cual se empaqueta en un único package, pero se instala en mas de un nodo para ten

Cambiar de versión de GeneXus: Que preguntas debo hacerme?

Imagen
Problema: Tengo una KB Genexus y la estoy generando con la version N (sin errores y esta en producción) y necesito parasarla a la version M con M > N.  Antes de cambiar de versión, intento siempre contestar las siguientes preguntas.  Los usuarios van a poder ejecutar simultáneamente la version anterior y la nueva? Siempre conviene que los usuarios puedan seguir ejecutando por un tiempo limitado, hasta estabilizar la nueva versión, tanto la version anterior como la nueva. De esta forma, cada vez que aparece alguna dificultad o diferencia, se puede volver al sistema anterior y permitir que el usuario no se tranque en su trabajo. Este tipo de problemas, deberia tener una prioridad alta para su resolución pues el objetivo es sacar de produccion la version vieja lo antes posible.  Alguna funcionalidad del sistema anterior, no va a existir mas en la version nueva?  Si fuera asi, conviene evaluar si esta funcionalidad es indispensable y si asi lo fuera, hay que desarrollarla con la nueva v

Pasar una KB de monolitica a servicios distribuidos

Imagen
Una de las tareas que tenemos por delante quienes desarrollamos con GeneXus desde hace mucho tiempo es pasar algunos de nuestros desarrollos que vienen de versiones anteriores de GeneXus en una KB monolítica, a varias KB interconectadas.  Los motivos de este cambio, no es caprichoso, sino que hoy que esta motivado por la necesidad de nuestros clientes de tener los cambios mas rapido y nosotros necesitamos instalar con mucha mayor frecuencia que lo que hacíamos antes.  En una KB monolítica, teníamos que esperar a tener TODO el sistema en un estado instalable, y los que desarrollamos sabemos que el tiempo de estabilización de los cambios para que sea instalable es proporcional a la cantidad de objetos, cantidad de desarrolladores y cantidad de cambios introducidos.  La mejor solución que ha encontrado la industria para este problema, es el clásico " divide & conquer ". Cuando tengo un problema grande que no puedo resolver en un tiempo limitado, es mejor dividirlo en problem

LowCode - Es mas importante poder entender programas, que escribir poco código.

Imagen
 LowCode es una tendencia actual en el desarrollo de aplicaciones.  No es una tendencia nueva, pero es una buena categoría para agrupar herramientas y lenguajes que comparten características comunes.  Lo que me causa un poco de ruido, es que se ponga el foco en el código y en que el mismo sea poco, cuando creo que el foco debería ser diferente.  En vez de hablar de código, deberíamos hablar de PROGRAMAS y los programas pueden ser muchas cosas mas que código. Cualquier cosas que pueda crearse y ejecutarse debería ser considerado como cosas que deberíamos programar en los próximos años.  Pensemos en diagramas, audio con instrucciones, instrucciones biológicas tipo ADN/ARN y la metodología CRISP. No seria raro que aparezcan nuevas formas de programar con las computadoras cuánticas y otros modelos.  El codigo es solo una representación de los programas y es la mejor que tenemos en el momento, pero es bueno tener claro que no es la única y posiblemente en el futuro no sea la mas usada.  Por

IIS con autenticación con certificados de clientes (Autenticación mutua) - Error 403.16 Forbidden

Imagen
Necesitaba configurar un sitio con autenticación exigiendo certificados X.509 (del tipo del que contiene la actual Cedula de Identidad uruguaya). Los certificados son usados por la aplicación también para identificar que operaciones puede realizar dicho usuario y para firmar digitalmente operaciones que necesitan ser firmadas.  El sitio exigía https y certificados del lado del cliente (también llamada autenticación mutua), pues tanto el server como el cliente deben usar certificados para demostrar quienes son.  Hay una guia paso a paso cómo hacer esto en este link . La idea es que al intentar conectarse al sitio, presenta una lista de los certificados personales  que tengo instalado en mi maquina (o en algún otro repositorio local) de la forma: y luego desde la aplicación recuperar la información de dicho certificado, como por ejemplo a que empresa representa esta persona o que documento tiene la misma.  Para algunas aplicaciones este tipo de autenticación puede ahorrar mucho trabajo d

Low Code y grandes aplicaciones

Imagen
Hace unos dias, me apreció en Twitter un aviso de strumenta, A guide to Low Code Platforms  donde dicen: A low-code (development) platform allows to create applications through graphical user interfaces and/or configuration instead of traditional computer programming. They can be a great tool for enterprise companies to reduce the cost of development mainly in two ways: by giving a software that non-developers can use to create apps tailored for their needs by giving programmers a system to quickly develop small applications En el post visualizan que Low Code es para hacer pequeñas aplicaciones dentro de las organizaciones.  Estoy parcialmente de acuerdo con lo que dicen, pues en esas areas es donde mas rapido se pueden adaptar las herramientas Low Code, pero donde se les puede aprovechar mas, es en las grandes aplicaciones.  La complejidad de los desarrollos actuales, es inabarcable para que las manejen pocos desarrolladores. Es necesario contratar a muchos especialistas para cubrir

Como generar un archivo xml que cumpla con un XML Schema con GeneXus.

Imagen
Un patrón bastante común con el que me he encontrado en varias aplicaciones GeneXus que intercambian datos, es el de tener que generar un archivo XML con un formato que cumpla con un XML Schema. La aplicación con la que nos queremos comunicar, nos brinda un archivo de extensión XSD y debemos generar un XML con los datos de mi aplicacion que tenga dicho formato.  Una forma fácil y de poco código que utilizo es la siguiente.  Importar XSD a GeneXus.  Haciendo Tools / Application Integration / XML Schema Import Con esto, va a generar un SDT con el formato equivalente al del Schema. Debemos revisar que el SDT tenga los tipos de datos correctos, pues puede haber algunos no soportados por Genexus o que hayan quedado mal.  Generar un Data Provider con ese SDT de salida.  El segundo paso es generar un Data Provider, que tenga el SDT recien importado como salida. La tarea de ese DP va a ser leer la base de datos y cargar el SDT con datos.  Este paso implica solo crear el DP y poner en la pro

SUGERENCIA para GeneXus (2) : Poder especificar NULL en Data Providers

Imagen
La sugerencia, seria poder especificar de una forma sencilla el insert de un registro con un atributo nulo en la base de datos.  Ejemplo: Ejemplo: Persona * PersonaId    CiudadID  - Nullable = True que tiene las propiedades Data Provider = True Use To = Populate Data.  En la carga inicial, necesito agregar registros con CiudadID NULL.  Cual seria la mejor forma de hacer esto?.   Siento que me estoy complicando con un tema que debe tener una solución sencilla, pero no le encuentro la vuelta.  Probe varias opciones en el Personas_DataProvider asociado a la transaccion.  PersonasCollection {    //Opcion 1 - No poner Ciudad en el DP (no funciona)  Persona     {        PersonaID = 111        // CiudadID    } // Opcion 2 - Intentar hacer un SetNull()    Persona    {       PersonaID = 222       CiudadID.SetNull()   //Da error y no deja salvarlo.     }       //Opcion 3 - Poner un valor especial (en este caso el Empty)  y cambiarlo en una regla (funciona pero es horrible)    Persona    {      

SUGERENCIA para GeneXus (1) : Poder cargar una imagen desde un texto

Imagen
Me gustaría contar con una forma de cargar una tabla, que tiene un atributo del tipo Image, sin tener que tener un objeto del tipo image en la base de datos. Hoy se puede hacer asi: New    CountryId = 'br'    CountryName = 'Brasil'    CountryFlag   = flag_brasil.link endnew A mi me gustaria poder hacer algo asi: New    CountryId = 'br'    CountryName = 'Brasil'     CountryFlag.FromBase64String( ' 0xFFD8FFE000104A46494600010101 006000600000FFDB00430008060607 0605080707070909080A0C140D0C0B 0B0C1912130F14.....') EndNew o en Data Provider CountryCollection{ Country   {    CountryId = 'br'    CountryName = 'Brasil'    CountryFlag = ImageFromString(' 0xFFD8FFE000104A46494600010101 006000600000FFDB00430008060607 0605080707070909080A0C140D0C0B 0B0C1912130F14.....' )   } } Se que no es lo mas lindo, ni lo mas fácil de leer, pero es muy práctico para los casos que queremos cargar datos sin depender de objetos externos.  También es b

Error al usar DynTrn de Populate Data, 32bits.

Imagen
  En estos dias me paso un problema en una KB con GeneXus 16 U10, generando C# cuando intentaba usar una transacción dinámica, que usaba un Data Provider para cargarle datos y estaba compilando para la plataforma x86 (32bits).  El problema se daba pues no lograba cargar la dll generada del data provider pues daba un BadImageException y cancelaba.  La solución está en forzar al programa  GXDataInitialization.exe para que ejecute en 32bits. El comando es corflags /32bitsreq gxdatainitialization.exe  CorFlags.exe se instala con los SDK de Windows.  Va a ser corregido en próximas versiones de GeneXus. 

Eliminar mensajes Warning en un KB GeneXus

Imagen
Para mejorar tu KB #GeneXus y eliminar todos los mensajes WARNINGS en el Build All, los  paso que yo realizo son: 0) Tener un backup de la KB (export, congelar version o copia) 1) Hacer un Rebuild ALL sin errores, puede tener Warnings.  2) Editar las propiedades del Generador y en  Warning treated as error y poner spc0005 spc0008 spc0023 spc0024 spc0025 spc0043 spc0046 spc0047 spc0047 spc0051 spc0158 spc0136 En esta lista se pueden agregar y quitar dependiendo cuales es la exigencia que pueda tener esa KB. 3) Hacer otro REBUILD ALL y corregir todos los errores nuevos que aparezcan. Testear y subir al server en caso de ser necesario. 4) Ignorar aquellos Warning que no voy a tomar en cuenta en forma global. Editar las propiedades del generador y en  Disabled Warnings poner: spc0096 spc0107 spc0142 spc0038 spc0060 spc0087 La lista de warnings ignorados en forma global del paso anterior, hay que personalizarla para cada KB. La lista anterior, no muestra warnings por indices, pues tienen