Entradas

Ley sobre software libre.

Este es el texto de la Ley sobre software libre en el Estado Uruguayo. No encontré información oficial si la Ley ya esta aprobada, pero debía ser tratada en estos días por la Comisión Permanente en el Parlamento y seguramente sera aprobada. Voy a poner en negrita, mis comentarios después de leerla, aclarando que los temas legales están lejos de mi interés y conocimiento. Solo expreso lo que creo que puede pasar cuando apliquen esta ley.   Proyecto de Ley: Artículo 1º.- Los Poderes Ejecutivo, Legislativo y Judicial, los entes autónomos, los organismos descentralizados, las empresas donde el Estado posea mayoría accionaria, los Gobiernos Departamentales, las Juntas Departamentales, el Tribunal de lo Contencioso Administrativo, la Corte Electoral y los organismos de contralor del Estado, deberán distribuir toda información en al menos un formato abierto, estándar y libre. Todo pedido de información deberá ser aceptado en al menos un fo...

D3 - Visualizacion de datos en Javascript.

Imagen
En D3 , hay muchas visualizaciones interesantes como para hacer una extensión para poder visualizar la relación entre los objetos de la KB. Algún día voy a tener tiempo para dedicarle... Estaría muy bueno que algún grupo de estudiantes de ingeniería de software lo tomara como proyecto de grado, estoy seguro que se podrían hacer cosas muy interesantes. Chord Diagram Dendrogram Force-Directed Graph Circle Packing Node-Link Tree Hierarchical Edge Bundling Sunburst Treemap

KBDoctor - Nuevos tratamientos para viejas enfermedades.

Imagen
Nuevos Reportes del KBDoctor.  Hace tiempo que no posteo nada y el motivo principal es que he estado haciendo algunas migraciones de KB grandes, que me han tenido divertido. Para hacer mas leves estas migraciones le agregué algunos reportes al KBDoctor. Class referenciadas por la aplicación y no están en el Theme Esto es generalmente motivo de errores en la presentación de la aplicación. Es difícil saber si una class de la aplicación esta o no el el theme porque puede estar con varios nombres influenciados por los CSS selectors. El programa aplica una heurística sencilla, para detectar los casos mas flagrantes. Para hacer esto SE TOMAN EN CUENTA TODOS LOS TEMAS de la KB. Esto es bastante mejorable, pero por ahora, lo voy a dejar asi. Class que estan en el Theme y no son referenciadas.  Estas se podrían sacar, achicando el CSS generado y haciendo mas fácil el tráfico y la personalizació...

Output inteligente (o con alguna viveza)

Imagen
En GeneXus X o superiores, la forma de identificar si tengo algún error o me falta compilar algo, es hacer un BUILD ALL. Con esto se especifica/genera/compila todo aquello que esta pendiente o fue cambiado y la salida se puede ver en la ventana OUTPUT. Cuando trabajamos con KB grandes, analizar la salida en el output es una tarea tremendamente engorrosa, porque no tenemos  se brindan buenas herramientas para su manejo. Por ejemplo, ahora estoy trabajando en una KB que tiene muchos reportes PDF, web services, exports a planillas y procesos batch, con lo que tenemos 1162 objetos main, cuya compilación sale en el output . . El output que se genera cuando no existen errores de especificación y compilación  es de mas de 500 kb, y analizar un archivo de texto de ese tamaño siempre resulta muy incomodo. Cuando hay objetos a especificar o errores, el archivo es mucho mayor, por lo que el problema es peor. Se me ocurren alg...

Condiciones que no se resuelven en el servidor

Imagen
Cuando se programa en GeneXus, en algunas oportunidades pasa que escribimos condiciones que no son evaluadas en el servidor de base de datos, sino que evalúan en el cliente. Esto que significa? Pongamos un ejemplo. Si tengo: for each     where FechaHora > servernow()          Msg(FechaHora.ToString()) endfor y la base de datos es Oracle, esto va a seleccionar todos los datos de la tabla, y en el cliente (o en el servidor web) va a agregar un IF que seleccione aquellos que tienen FechaHora mayor que la fecha del servidor. Dependiendo de la cantidad de registros que se tenga, eso puede ser muy poco performante. Como muestra GeneXus este posible problema? Al costado de la condición  muestra un pequeño icono y en el tooltip dice que puede haber problemas de performance. Esto es suficiente para cuando estoy programando un objeto, pero no lo es cuando estoy realizando migraciones. Con los cambios de versiones, algunas n...

El mal olor de las transacciones.

Imagen
En mi post GeneXus TILO: Que características me gustaría que tuviera,  sugería que los objetos Transacción  deberían dividirse en varios objetos. Hay varios motivos para sugerir esta división, pero el principal es que el código que hay que escribir o especificar en las transacciones empieza a tener " mal olor ". Pongo algunos ejemplos para que quede mas claro: WIN y WEB Cuando se tienen generador WEB y WIN en la misma KB, si una transacción es compartida en los dos generadores, es muy probable que se termine con código en los eventos y reglas de la forma: [WEB]{ //Codigo para WEB } [WIN] { //Codigo para WIN } Esto dificulta la  comprensión de lo que hace cada objeto y ensucia mucho el árbol de llamadas entre objetos, pues es difícil saber que objeto llama a otro en cada ambiente. Transacciones con BLOB. Otro ejemplo, si la transacción que es usada en WIN y WEB, tiene un campo BLOB, en WEB se genera automática...

GeneXus Freeze Version 2.0

Imagen
Una muy buena característica de GeneXus es la que permite congelar versiones para tener una foto de como estaba la KB en un momento dado, que sirve por ejemplo para guardar la versión liberada a los clientes. El problema que tienen las versiones congeladas, es que cuando uno quiere utilizarlas, el proceso de reconstruir el ambiente demora muchísimo, sobre todo en KB grandes. Lo que me gustaría  seria poder guardar ademas de los objetos read-only, una copia de los archivos de espcificación, los fuentes generados y una forma fácil de cargar los datos que tiene mi aplicación. Para lograr esto, seria bueno que el dialogo de Freeze  hiciera algunas preguntas * salvar programas y información de especificación? Salvaría el Target Path y el directorio GXSPC00xx, al nuevo directorio de la version congelada. * save data ? Esta opción, generaria una copia de los datos de la base de datos. Mi idea seria generar u...