Entradas

No code, low code, high code = CODE

Imagen
La evolución de la forma de interacción entre humanos y máquinas ha experimentado cambios significativos a lo largo del tiempo. Voy a tratar de mostrar con diagramas como ha evolucionado el proceso de desarrollo de software y la interacción entre los desarrolladores y las computadoras. En las primeras etapas, se muestra que los desarrolladores interactuaban directamente con las computadoras utilizando lenguaje máquina. En esta fase, el desarrollo de software requería un conocimiento profundo de la arquitectura y los códigos de bajo nivel de las máquinas. Era un enfoque muy técnico y laborioso. A medida que avanzamos en el tiempo se observa una progresión hacia niveles de abstracción más altos. La siguiente etapa muestra el uso de lenguaje ensamblador (assembler), que proporcionaba una capa de abstracción sobre el lenguaje máquina, facilitando un poco más la tarea de programación. En esta etapa, los programadores tenían que hacer manejo de memoria, acceso a disco y programar las operaci...

GeneXus: Usar un workspace controlado - O como organizar el espacio de trabajo en GeneXus.

Imagen
GeneXus es altamente configurable en su espacio de trabajo. Permite que sus diferentes componentes, se agrupen en el IDE de diferente formas y los mismos pueden quedar flotantes, auto ocultarse, agrandarse, achicarse, verlos arria, abajo, etc.  Tambien es muy comun, que con el trabajo alguna de estas ventanas se oculten sin querer, o queden en lugares incomodos.  Por ejemplo, cuando trabajo en monitores que son Full HD o superiores, me gusta tener : siempre visible a la derecha el KBExplorer / Preferences,  siempre visible y a la izquierda las Propiedades, Toolbox y los resultados de los Test.  siempre visible y abajo, la ventana de output.  el espacio central con el editor de texto  un tab para KBdoctor.  GeneXus nos brinda la posibilidad de ejecutar con la opción /NoWorkSpace, con la cual se levanta con las opciones por defecto, donde las propiedades , el KB Explorer y el Output se ocultan cuando no tienen el foco.  Acomodarlo a la forma que yo ...

Modelo de datos temporales (o bi-temporales).

Imagen
Imaginemos una aplicación de gestión de ventas de una tienda en línea que utiliza una base de datos relacional para almacenar su información. Esta aplicación tiene una tabla "Ventas" que almacena información sobre las ventas realizadas en la tienda. La tabla tiene las siguientes columnas: VENTAS * VentasID      Ventas ID           Numeric (8)   VentasFecha   Ventas Fecha        Date   ClienteID     Cliente ID          Character (10)   VentasImporte Importe de la venta Numeric (10.2) CLIENTE * ClienteID     Cliente ID          Character (10)   ClienteNombre Cliente Nombre      VarChar (100)   CiudadID      Ciudad ID           Character (10) La aplicación tiene la capacidad de registrar las ventas que se realizan, incluyendo la fecha en que se llevan a ...

Usabilizando GeneXus: Poder salvar el estado del Workspace (y dejarlo por defecto)

Imagen
GeneXus es muy configurable, en la forma de posicionar las diferentes ventanas de trabajo (workspace).  Es habitual mover y/o agrandar las ventanas de:  Output  Properties  KB Explorer  Toolbox  Search y un montón de etcéteras.  Genexus por defecto, recuerda el estado del espacio de trabajo y la próxima vez que entro, me muestra las ventanas tal cual las dejé la ultima vez. Esto trae como problema, que cuando uno trabaja un rato largo, puede mover alguna ventana por error y queda mal configurada. Volver a la situación anterior deseada, no es difícil, pero es engorroso.  Una opción que hoy nos brinda Genexus es la de correr GeneXus con la opción /NoWorkSpace que abre la configuración default de GeneXus.  En monitores grandes, a mi me gusta trabajar con la opción por defecto de GeneXus, pero con el KB Explorer y Properties fijadas/ancladas (no se como se traduce pinned) y la ventana de Output siempre visible abajo.  Muestro un ejemplo, en ...

Primera prueba de GeneXus Next

Imagen
  La primera prueba de GeneXus Next me gustó mucho, para ser una primerísima versión. Tiene mucho potencial que deberá verse en futuras versiones.  Cómo otras herramientas orientadas a interfaz por un chat, nos presenta un prompt donde podemos escribir unas  pocas palabras. La idea ahí es describir que es el sistema que quiero realizar, y de ahí infiere cuales serán las principales entidades que va a tener el backend para dicho sistema.  Lo probe en español y en inglés y no noté diferencias sustanciales, aunque lo que genera siempre está en ingles.  Por ejemplo, si escribo en el prompt: "Manejo de Seguridad, con usuarios, roles y permisos. Autenticar y Autorizar los diferentes Objetos de la aplicación" Me plantea las siguientes entidades: Based on your business description, the following 4 entities were identified: Object:  Resources that users can access Permission:  Actions that users can perform Role:  Permissions assigned to each user User: ...

Desarrollo con GeneXus ayudado con Inteligencia Artificial

Imagen
La industria entera se vio sacudida por las nuevas posibilidades que brindan los modelos de inteligencia artificial del tipo ChatGPT . Por la calidad de las respuestas que brinda, puso nervioso a mas de una empresa, que pueden ver sustituido gran parte de su trabajo por este tipo de herramientas.  ChatGPT es la cara mas visible de esta nueva ola y tuvo la importancia de mostrar el potencial del uso de la inteligencia artificial para ayudar a hacer tareas que hasta el momento no parecían automatizables.  A mi me gusta verlo como la  oportunidad de hacer un pair-programming con un programa en vez de un ser humano. No será lo mismo, pero tener algo que conteste las dudas que te surgen cuando estoy programando, ayuda muchísimo.  Pero hay otra cantidad de tareas que no necesitan ese grado de sofisticacion o modelos tan grandes como para poder ser muy útiles, ahorrarnos horas de trabajo y hacernos mas productivos.  He estado pensando, que cosas podrían automatizarse m...

Como agregar la pila de llamadas (Call Stack) al log de una aplicación GeneXus

Imagen
 Cuando estamos monitoreando aplicaciones distribuidas (en varias webapps o en varios nodos) es util tener centralizado el manejo de los logs de errores, de forma de poder ver en un unico lugar todos los errores que esta dando la aplicación. Esto es particularmente neceario cuando tenemos parte de nuestra aplicacion instalada de forma serverless.  Para hacer mas facil la identificacion de las causas de los problemas, lo que he visto que funciona bien, es mandar los ERRORS (y FATAL) y agregar a los mismos el Call Stack.  Para lograrlo, alcanza con agregar  %stacktrace{level} y cambiar level por el numero de niveles de la pila de llamada que quiero que muestre el log.  Por ejemplo, hay que cambiar el log.config, en la linea         <layout  type="log4net.Layout.PatternLayout">            <conversionPattern  value="%d{ISO8601} [%t] %-5p %c - %m   %stacktrace{10} %n"/>     ...