Shriya Saran Kajal Agarwal Anushka Shetty Tamanna Ileana Aishwarya Rai Katrina Kaif

Friday, October 24, 2008

Reinstalando mi notebook

Debido a unos extraños errores de DCOM, luego de la instalación de SP2 de XP, he decidido reinstalar mi notebook.

El proceso, que estimaba iba a ser largo y arduo, terminó siendo largo, arduo, penoso y aburrido.

En mi notebook (que uso fundamentalmente para pruebas de concepto y betatesting) tengo instalado
SQLServer (22 bases diferentes!!), Oracle y MySQL.
GeneXus 8.0 y GeneXus YI
Microsoft Office
Visual Studio XP, 2003 y 2005.
Musica
Fotos
Muchos programas mas!!!

Este proceso, llevo la modica suma de 19 horas....
Realmente, es NECESARIO encontrar alguna forma mas racional de funcionamiento.
En primer lugar, que no sea necesaria la re-instalacion.
En segundo lugar, si quiero migrar mis aplicaciones a otra maquina, que sea mas facil, el pasar los configuracion de cada uno de los programas de una maquina a otra.

Realmente, una gran oportunidad de mejora...

Quiero un programita que haga esto...

Estoy haciendo una busqueda rapida en Internet, para ver si consigo alguna herramienta de uso personal, que realice las siguientes tareas (bastante sencillas por cierto):

1) Cliente de mail (pop/imap)
2) Instant Messaging (con diferentes protocolos)
3) Blog (RSS y poder publicarlo desde ahi)
4) Manejar contactos
5) IRC
6) Buscar rapido en todo estos repositorios.

No parecen ser consas complicadas de agrupar en un solo utilitario (sobre todo si se hace en forma modular). Lo mas aproximado a esto (aunque le faltan varias cosas) es el Thunderbird.
Seguire buscando...

Lectura de vacaciones

En las vacaciones lei

"Death March" de Yourdon, bueno para identificar proyectos que van al fracaso y algunas estrategias para poder salir no muy herido de los mismos. Los que hemos participado en este tipo de proyectos sabemos que es importante poder superarlos, manteniendo la familia, la cordura y la salud.

"GUI Bloopers" de Jeff Johnson. Ayuda a identificar errores comunes que se cometen ( y que yo lamentablemente cometo muy a menudo) con la interfaz de las aplicaciones. Todo un tema que es necesario estudiar a fondo, para lograr aplicaciones usables.

GeneXus - Cache de Sentencias

He estado alejado del Blog, pues tuvimos que migrar una aplicacion programada en GeneXus de generar Visual FoxPro a Java.
Si bien es una tarea posible, dio mas trabajo que el esperado, por errores de programacion propios, por errores de GeneXus y por diferencias en la arquitectura de la apliccion (**Mas de esto en un blog posterior).

Una de las grandes ventajas que trae el Generador Java, que lo diferencia del de Visual FoxPro, es la posibilidad de la utilizacion de Cache de Sentencias SQL, en la aplicacion.
La habilitacion de dicha funcionalidad, es trivial:
Simplemente se cambia una propiedad del modelo


Se clasifican las tablas como:

  • No Cacheable (Si esa tabla esta en una sentencia no se guarda en el cache)
  • Se modifica muy poco (La sentencias tienen tiempo de vida de 600 min, esto es configurable)
  • Se modifica poco (La sentencia tiene un tiempo de vida de 60 min)
  • No se modifica nunca (La sentencias son inmortales!).
Se regenera la aplicacion y automaticamente ya se esta utilizando el cache de las sentencias. Magia!. Realmente da muy poco esfuerzo y los resultados que se obtienen son muy buenos. En algunos casos hemos tenido mejoras de hasta 30% en la performance de la aplicacion.
Ademas mejora la escalabilidad de la misma, pues la base de datos, reacciona mucho mejor.

Como toda cosa simple y poderosa, tiene su lado peligroso. Enumero alguno de los casos que encontre.

Tabla de Cotizaciones
Es una tabla que guarda la cotizacion diaria de las monedas con las que opera el sistema. Dicha cotizacion se ingresa una vez al dia, y luego es utilizada ampliamente por todo el sistema.
Dicha tabla, seria una muy buena candidata a ser incorporada al Cache, con una frecuencia de cambio baja.
Sin embargo, si una aplicacion, va a buscar la cotización y dicha cotizacion no esta ingresada, durante todo el tiempo de vida que se le ingreso a esa tabla (60 o 600 minutos) va a seguir diciendo que no existe dicha cotizacion, lo cual es muy malo.

Tabla de Calculos, en Sueldos/Nominas.
Dicha tabla tiene la lista de los impuestos/recargos/descuentos y lo s calculos que se deben realizar para obtener una liquidacion de sueldos, que utiliza esta tabla en forma intensiva.
Seria muy bueno, poder hacer el cache de dicha tabla, porque se modifica muy poco y se utiliza en forma intensiva, al menos en la liquidacion de sueldos.
La contra que tiene, es que esta tabla, siempre es modificada,minutos antes de hacerse la liquidacion, para hacer algun ajuste de ultima hora, para reflejar la normativa y leyes laborales, que en Uruguay son muy variantes.
Por lo tanto, tambien es muy peligroso marcarla como cacheable a esa tabla.

Posibles soluciones.
Una de las soluciones posibles, seria tener la posibilidad de Invalidar el Cache. Para una aplicacion de 2 capas, esto es posible, pero invalida el cache que tiene la conexion que estoy manejando. Tambien seria bueno una invalidacion del Cache, pero a nivel de toda la base de datos, por lo que al manejador de cache, habria que agregarle algun mecanismo de cola de mensajes o algun tipo de suscripcion.

TTL variables en el tiempo o por proceso..
Seria bueno poder setear el Tiempo de vida (TTL) de las sentencias en runtime. Esto complicaria muchisimo la especificacion, pero daria bastante mas potencia.
Por ejemplo lo que me interesa es que durante la duracion de la liquidacion de sueldos, la tabla de impuestos sea cacheada y no varie, durante toda la corrida (que puede demorar 2 minutos o 10 horas, dependiendo la cantidad de registros que tenga).

Control de Versiones sin pretensiones (CVSP)

En los proximos dias, voy a publicar en GxOpen un proyecto para hacer un control de versiones en los desarrollos GeneXus.
El programa va a publicar en un repositorio Subversion, todos los cambios realizados desde la ultima vez que se controlaron las versiones en esa KB.
Como cliente, muy posiblemente utilice el TortoiseSVN, que se integra con windows y tiene una interfaz de linea de comando que hace facil el integrarla con la solucion prevista.
Si resulta eficaz, posiblemente veamos de meter algun otro CVS.

Tambien habra un version, donde se guardaran los archivos unicamente en XML, con la fecha de modificado en el nombre del archivo. De esta forma si el proceso se corre todas las noches, va a poder tenerse la historia de un objeto y poder saber el contenido del mismo.

Complementando esta herramienta, con un comparador de archivos xml, creo que va a poder hacerse un Control de Versiones en GeneXus, sin mayores pretensiones, pero efectivo.

Veremos si a la comunidad le gusta y le sirve.


Control de Versiones Sin Pretensiones II

Segui con el desarrollo de un programa para la realización de control de versiones en GeneXus.
La idea era (y sigue siendo) poder tener un registro de los cambios que surgen en los objetos de una KB genexus a medida que pasa el tiempo.

Al final decidi, realizar 2 versiones, una que no necesita mas nada externo para poder controlar al menos cuales son las diferentes modificaiciones de los objetos y otra que utilice Subversion y TortoiseSVN.

No pude avanzar demasiado, pues encontre un Memory Leak en GXPublic, que hace que el programa funcione correctamente en kB de pocos objetos, pero consuma una enormidad de memoria para KB grandes (mas de 5000 objetos).

Una vez que esto este solucionado (que lamentablemente no se cuando sera) podre publicar este utilitario, que por otro lado, esta quedando bueno.

A lo mejor es este un buen disparador para definitivamente tirar todos los desarrollos que tenemos con GXpublic en VB y pasarlos a .NET. Me da bastante pereza, pero creo que es una inversion a futuro.

No comments:

Post a Comment