Entradas

Mostrando las entradas de abril, 2010

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.

Gephi y grafo de contactos de Facebook

Imagen
rPara seguir probando Gephi , hice una prueba para tener una visualizacion de mi red de contactos de Facebook. Para extraer el grafo de mis contactos, utilice netvizz , que permite extraer los grafos de contactos en formato gdf. Luego lo abri con Gephi y le aplique el algoritmo que modulariza por proximidad, coloreando de diferentes colores los diferentes modulos. El resultado fue: Azul, es la comunidad Genexus Verde es Concepto Rojo son amigos y familia. Violeta otros. No aporta nada nuevo, pero con muy poco esfuerzo, la vision grafico de mis contacto, permiten  sacar buenas conclusiones.

CloudCamp Montevideo.

Imagen
Andres Aguiar esta organizando CloudCamp Montevideo . Fecha: 4 de Mayo 2010, 5:00pm - 9:15pm Lugar: Facultad de Ingenieria, Aulario Faro, Julio Herrera y Reissig 631 Precio: Entrada Libre. Who should come:  Developers and managers from Montevideo and surrounding cities who are working with or are interested in working with cloud computing technologies. Las conferencias aun no estan publicadas pero segun el mismo sitio tienden a ser sobre: Segun el mismo sitio At CloudCamp, we tend to discuss the following topics: Infrastructure as a service (Amazon EC2, GoGrid, Rackspace, Nirvanix, etc) Platform as a service (AppEngine, Azure, etc) Software as a service (salesforce.com, Yahoo! Mail, etc.) Application / Data / Storage (development in the cloud) Me la voy a perder, pues por cuestiones de trabajo esa semana no voy a estar en Uruguay. Creo que puede estar buena y siempre viene bien conocerse entre los que estamos en el negocio de aplicaciones en la nube.

Usabilizando la Ev1: Mi Wish list GeneXus X Ev1 U2

Imagen
En el pasado participe en la tarea de escribir y mantener la lista de deseos de cambios para las versiones anteriores de GeneXus, en el wiki de la comunidad. Me parece que es el mejor lugar para mantenerla, pero también es bastante incomoda y a lo largo del tiempo pasa a estar bastante desordenada y dificil de manejar. Hace un par de semanas, retome un proyecto que tengo dormido desde Enero y pude meterle un poco a la Evolution I y pude armar una nueva lista de lo que me gustaria tener en  proximas versiones: Generar sentencias SQL con limites de cantidad de registros. Es muy necesario limitar la cantidad de registros que pueden retornarse en una consulta, por ejemplo un webpanel. Estaría bueno que al SQL generado se le pudiera indicar que no quiero tener mas de 1000 registros, por ejemplo, poniendo un SELECT TOP 1000 * from.... (En SQL Server) Este pedido es para poder limitar el daño que puede hacer un usuario inexperto al hacer una consulta, y no complicar much...

Gephi - Una herramienta para visualizacion de grafos

Imagen
Hace unos dias encontre Gephi , que es un programa de código abierto para la visualización y consulta de grafos. Tiene la particularidad que permite manejar grafos grandes (de miles de nodos) con una muy buena performance, cosa que no es muy comun en este tipo de herramientas. Permite agrupar nodos del grafo, pintarlos de diferntes colores, darle tamaños proporcionales a indicadores, hacer los arcos entre nodos mas gruesos dependiendo de diverso factores, etc. A pesar que esta en una versión alpha, muestra muy buena calidad, y permite la importación de archivos en los formatos mas comunes para grafos. Hace poco incorporaron también los archivos separados por comas, haciendo mas fácil aun la lectura de dichos grafos. Por ejemplo la KB de GXWiki puede verse así: Permite ver de mas cerca parte del grafo, en forma vectorial sin perder detalles del mismo. Desde hace tiempo tengo ganas de tener algún...

Como forzar la generación de los SDT en GeneXus X Ev1

Imagen
Un error muy molesto que ocurre (por suerte no muy a menudo), es que no se generan correctamente los SDT. No se bien cuales son los motivos, pero los procesos sospechosos son: * Renombrar un SDT * Renombrar un objeto que es Business Component. * Alterar la estructura de un SDT y algunos otros La solución mas intuitiva es generar los fuentes de dichos SDT, pero estos objetos no son especificables y no se pueden generar directamente. La otra es hacer ver las referencias de los objetos que hacen referencia y regenerarlos. CREO que debería hacerse un Rebuild del objeto, porque si no es forzado, no se vuelve a generar el SDT. Esto hace que no sea trivial encontrar un objeto que pueda regenerarse que use dicho SDT. En modelos chicos es posible hacer un Rebuild de todo el modelo, pero en modelos grandes es muy poco practico. Estuve evaluando hacer una extensión para poder solucionar el problema, de forma de forzar la generación del codigo...