Entradas

Mostrando las entradas de marzo, 2010

Anotaciones al margen del desarrollo con GeneXus

Imagen
Al trabajar con la GeneXus X Ev1 U1, hice la siguiente lista de algunas cosas que me gustaria encontrarle alguna solucion mas prolija. Poder correr algo con una reorganizacion pendiente.  Estoy trabjando en una reorganizacion que va a tener varias cambios y me interesa ejecutar un programa con la estructura vieja de la base. No logre como se hace.  Solo correr un programa Me interesa ejecutar un programa como esta, sin especificar, generar y especificar lo pendiente.  Funciones para comprimir y descomprimir archivos y strings.  Estaría bueno contar con funciones de ZIP y de UNZIP para archivos y también para strings. Funciones de hash para guardar contraseñas Estaria bueno contar con funciones de hash, tipo MD5 o alguno similar, para el almacenamiento del hash de la pareja usuario/contraseñas.  Dificultades varias con los Data Provider Me resultan demasiado abstracto.  Pienso primero la sentencia SQL que quiero lograr y luego trato de reproducirla con el DP.  Mensajes de error

Data Selectors y Data Providers

Imagen
Esta semana esta la cosa tranquila, y las demás tareas del trabajo me permitieron  volver a una de las cosas que mas me gusta que es programar. Estoy trabajando en un sitio nuevo web, con la versión X U1 de GeneXus y tablas bastante grandes. Es una buena oportunidad para la utilización de las nuevas funcionalidades de la X (que ya no son novedades, solo que yo no he podido usarlas con la profundidad que hubiese deseado. Por un lado, uso mucho los Data Selectors , que son una idea maravillosa. Son la reutilización de conocimiento, permitiendo la definición centralizada de navegaciones (se pueden traducir a las condiciones where de SQL). Si bien no los use con casos muy complejos,  no he tenido ningún problema usando los Data Selectors. Son fáciles de entender y no me presentaron problemas. El código queda mas claro y la aplicación es mas fácil de optimizar y lo que es mas importante, es mucho mas fácil de mantener. Para aplicaciones migradas, creo que conviene la definición de l

Core de GXUsa y uso de Stackoverflow

Leo un post de Lali Aguiar en el blog de GeneXus USA , que van a compartir el modulo central de su aplicacion para que sus clientes y la comunidad lo puedan utilizar y mejorar. Me parece una muy buena noticia, y espero que la misma se imitada por varios, para poder empezar aplicaciones con los objetos basicos ya resueltos, como pueden ser usuarios, seguridad, menues, etc.. Tambien vi que estan promoviendo el uso de stackoverflow , para las preguntas y soporte, lo cual esta aun mejor. Veremos si la comunidad de USA acompaña. PD: No me gusta el fondo rosado para dicho blog.

Nuevo notebook

Imagen
Me compre un notebook nuevo.  En el primer dia, me dedique a instalarle todo lo necesario para desarrollar, lease .NET Framework, Java, GeneXus, MySQL, Visual Studio, Eclipse y algun monton de etceteras mas.  Entre las cosas que tenia para instalar estaba el Microsoft SQL Server 2008 Express, que es necesario para poder ejecutar GeneXus X y superiores.  Al querer instalarlo, un programa de comprobacion de reglas previas, me dio un error que tenia el arbol de la registry correspondiente a los contadores de performance corruptos.  La "solucion" al problema se encontraba en la KB 300956 . Parecia algo trivial, pues el instalador mismo de SQL Server, me referia a dicha solucion, pero todo fue inutil. La explicacion no servia para Windows 7 y por mas que segui las instrucciones de dicho incidente, no pude lograr instalar SQL Server 2008 Express. Pedi ayuda a los que saben mas que yo del tema, pero no logramos solucionarlo. Como mi segunda experiencia con Win7, fue bastante fru

Concurrencia en aplicaciones GeneXus.

Imagen
Desde hace unos días, estoy trabajando en optimizar un programa que tiene algunos problemas de concurrencia. Los problemas que suceden, son de bloqueos que se producen en determinados lugar de la aplicación y algunos deadlocks. Los problemas de concurrencia y deadlocks, muchas veces son dificiles de diagnositicar y de reproducir, pues se necesitan varios procesos para que los errores se produzcan. En el proceso que me tocaba arreglar, hay 10 procesos simultáneos que ejecutan y trabajan con tablas que tienen millones de registros, por lo que es necesario hacer los cambios con cierto cuidado. La base de datos es SQL Server 2008. Algunas cosas que hemos encontrado en estos dias fueron: 1) A SQL Server 2008, ya no le gusta el hint (FASTFIRSTROW) , pues fue sustituido por FAST n. El tener el hint (FASTFIRSTROW) hace que algunas consultas (en particular joins entre tablas grandes, cabezal y renglones) en vez de filtrar usando un indice de la tabla de renglones, decide recorrer toda la tabla

Usabilizando Genexus: Order en grillas.

Imagen
Muchas veces por problemas de performance, es conveniente evitar que los registros vengan ordenados por algún criterio. La diferencia de performance en la base de datos, puede ser muy grande si se elimina la clausula ORDER BY de la sentencia SQL, sobre todo si la misma contiene joins. Hoy en GeneXus se puede programar en los for each , poniéndole order none, con lo cual se puede lograr que la sentencia no incluya la parte del ORDER BY en SQL. Sin embargo, si se tiene una grilla con atributos, si bien se puede poner reglas para ordenar, tanto en las rules, como en la propiedad order de la grilla, en estas solo se admiten atributos y no se puede poner none, por lo que las sentencias generadas siempre quedan con un order, lo cual es poco practico. Cuando hay una grilla con atributos y hay que quitarle el order, la única solución que existe (o la única que encontré yo) es cambiar todos los atributos por variables y programar el evento load en forma manual, para poder hacer el for each. De