Entradas

PiensoPienso: Como resolver esta consulta sencilla?

Imagen
Este es un pequeño problema, del cual no tengo una solución que me conveza. Un sistema GeneXus, tiene la transacción CUSTOMER, a la cual se le aplica el  Patrón  OAV (Objeto/Atributo/Valor) Para aquellos que no estén familiarizados con dicho patrón, es uno que nos permite agregar atributos dinámicos a una tabla, de forma que el usuario puede elegir en runtime mantener determinado atributo para todos sus clientes. Por ejemplo, me puede interesar guardar en forma dinámica, el país y la ciudad de todos los clientes (suponiendo que la ciudad y el pais no estan definidos como campos en la tabla de clientes). Las tablas van a quedar definidas de la forma (robo el ejemplo del wiki para que quede sencillo): Customer // Original transaction CustomerId* CustomerName CustomerPhone Transacciones para guardar los atributos dinamicos y sus valores. CustomerAttributeValue // This is the OAV table CustomerId* Customer...

Lindo error en Oracle 9i.

Imagen
Instale un GXWiki sobre IIS / Oracle. Ya voy instalando varios GXWiki para diversos usos y nunca habia tenido problemas. Con este, la cosa fue distinta pues funciona bien, hasta que se quiere agregar un referencia a un nuevo articulo con [[Articulo]]. Para probar instalamos el mismo sitio, accediendo a la misma base de datos, desde otro equipo con IIS, y todo funciona correctamente. En el equipo que debe funcionar, da el error: ORA-12571 TNS: packet writer failure, cuya solucion es bastante compleja. Ya probamos la opcion de modificar el sqlnet.ora, el chequeo de antivirus y variasmas y ninguna funciono. En la traza de Oracle ===================== PARSING IN CURSOR #1 len=119 dep=0 uid=38 oct=3 lid=38 tim=1242562966330321 hv=598034925 ad='3072aa0' SELECT PageType FROM WikiProc.Page WHERE (PageType = :PageType AND PageName = :PageName) AND (Not ( PageId = :PageId)) END OF STMT PARSE #1:c=0,e=18,p=0,cr=0,cu=0,mis= 0,r=0,dep=0,og=4,tim= 1242562966330320 EXEC #1:c=0,e=11,p=...

Módulos en GeneXus X

Imagen
Hace unas semanas tuve la suerte de participar en una charla con integrantes del grupo de desarollo de Artech, donde contaron como van a incorporar un nuevo tipo de objeto en GeneXus, el objeto Modulo. (no se como se va a llamar oficialmente) Como lo habia escrito en el 2008 en la entrada A falta de modulos, buenos son los folders , me gusta mucho el tener modularizadas las KB, pues deberia facilitar bastante la forma en que desarrollamos nuestras grandes aplicaciones. Definiciones: Modulo : Conjunto de objetos definido por el usuario. Objeto Publico : Puede ser llamado/utilizado/referenciado por objetos de otros modulos y del mismo modulo Objeto Privado : Solo puede ser referenciado dentro del mismo modulo Algunas de las cosas que podrian implementarse: 1) Si no se definen módulos, todo sigue funcionando como hoy. 2) Si la KB se modulariza, puede definir objetos publicos y privados dentro de los mismos. 3) Todo objeto pertenece a un modulo y es privado o publico. 4) Pu...

Solucionando un memory leak en Genexus 9.0/ Generador .NET

Imagen
Una aplicación GeneXus 9.0 generada en C#, estaba teniendo problemas de performance. Es normal que la aplicacion este funcionando por semanas en forma ininterrumpida, procesando miles de mensajes por dia. Es una aplicación un poco atípica, pues funciona como demonio y lo que hace es procesar mensajes XML,los procesa y devuelve mensajes en XML. La lógica del procesamiento batch utiliza unas 200 tablas de la base de datos, para poder hacer validaciones y grabar las entidades generadas por los mensajes. El programa empezaba funcionando correctamente (o sea rápido) pero con el correr de los días, se ponía mucho mas lento. A partir del cuarto dia, la performance era muy mala.  Si se bajaban todas las instancias del programa (habitualmente hay 10) y se volvían a subir, la performance era buena nuevamente. Ademas, el problema no podía estar en la base de datos, pues el resto de la aplicación...

Guardar código en una base de datos consultable.

Imagen
Leía en  Storing Code in Queryable Data Structures?  (via  @3DGiordano ) la posibilidad de guardar el código en estructuras donde fuera mas fácil consultar su composición y la relación que existen entre las diferentes partes, que lo que lo hacen hoy en archivos planos de código. En lo que mas programo es en GeneXus, que ya guarda la información del objetos que componen una Knowledge Base en una base de datos, pero el código mismo de los mismos se sigue almacenando como texto, que debe ser parseado* cada vez para ser editado/ especificado/ generado.  En ese proceso se lee el código y se arma un árbol con la estructura de dicho programa. No seria mas eficiente guardar dicha estructura en una base de datos orientada a almacenar grafos y guardar el código en forma de árbol?. Algunas de las tareas que se necesitan para el manejo de KB grandes, como por ejemplo con...

Mi dilema de hoy. Cambiar o no el diseño?

Imagen
Desde hace un tiempo estoy con un desarrollo de un sistema de consultas web. Maneja un volumen importante de datos pues incorpora unos 1.300.000 registros con muchos datos nuevos al año y va a tener almacenados varios años. Dentro de los requerimientos del mismo es que las consultas sean muy ágiles y que se soporte varios usuarios en forma simultanea, por lo que para lograr buena performance decidí utilizar tablas que acumulen los datos, para resolver todas las consultas pesadas en el momento de cargar los datos. Para esto, llegue a una solución con 8 tablas, que tenían todas las combinaciones posibles de las consultas que se podían realizar. El tener tantas tablas acumuladas, implico que tenia que usar varios Data Providers y Data selectors para lograr resolver las consultas. El desarrollo ya esta bastante avanzado y probado, pero aun no esta en producción. Todo esta funcionando bien, pero aun falta agregar pa...

On Design for Testability

Udi Dahan escribio un post On Design for Testability , que esta interesante. Habla sobre el objetivo del testing, la fragilidad de los test unitarios, las iteraciones y agilidad en todas las fases/areas de los proyectos y en el uso de herramientas de testing. Creo que es un buen resumen.