Entradas

Mostrando las entradas de 2012

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 formato abierto y estándar. EA - Esto esta bi

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ón del Theme. Atributos solo en transacciones.  Se listan los atributos que solo están 

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 algunas funcionalidades que se le pueden agregar de forma de simpli

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 navegaciones cambian y me puede interesar saber cuales

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áticamente la selección de archivo y el subido a la base de

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 un archivo XML por cada tabla de la base de datos, que tenga <Tab

GeneXus TILO: Características que me gustaría que tuviera

Imagen
Estas son algunas de las características que me gustarían para la próxima versión de GeneXus (TILO). Las tiro sin la carga de las versiones anteriores y sin tener que preocuparme del programa de migración de una versión a otra. Esto va a ser solo una lista, pero mas adelante (si tengo ganas podría ampliarla o detallar mas alguna de ellas). Las transacciones pasan a ser 3 objetos diferentes. (Estructura + Reglas, DataEntryPanel, DataEntryBatch) Output de especificacion/compilacion mas inteligente (search, poder recompilar lo que fallo, marcar los errores, abrir objetos con problemas, etc) GeneXus Freeze Version 2.0 SDT collection se tratan como tablas con for each Se soporta el ciclo de vida de la aplicación (Requerimientos, Desarrollo, Documentación  Prueba, Instalación  Optimizacion, Desintalacion, etc) Editor de Vistas dentro de GeneXus (DBA, Requerimientos, Documentador, Diseñador grafico, Gerente, Instalador, Seguridad, Auditor, Programador WEB, Dispositivos Móviles, etc)

View Last Navigation.

Imagen
Alejandro Rivoir de Concepto programó la extensión para GeneXus X Ev1, que se llama View Last Navigation , la misma permite ver la navegación de un objeto, sin tener que especificarlo, y como un TAB del mismo objeto. Es sumamente práctica, ahorra tiempo y sobre todo facilita la tarea. Por ejemplo, hicimos el cambio en un dominio o atributo bastante usado. Queremos ver la navegación de un objeto y para verlo, nos comemos validación de subtipos y especificación de varios objetos, cuando solo queríamos ver uno. Hay formas de evitarlo, pero son medio engorrosas. Esta extensión soluciona el problema. Si hay mas de un generador, muestra solo la primera de las navegaciones. Se muestra siempre la navegación de la ultima especificación  Si el objeto cambio, hay que respecificarlo con un F5, para poder ver la ultima.  La recomiendo, pues esta buena. Pronto sale la versión para Ev2. EDIT: Ya salio la version para la Ev2. http://marketplace.genexus.com/viewproductversion.aspx?345,1,

Sobre Migrabilidad de KB

Imagen
Después de mi charla en el Evento Genexus sobre Migración de KB grandes , algunas personas se me acercaron para consultar y comentar sobre procesos de conversión de Kbs. Un par de conocidos, me comentaron que la charlas los había decidido a migrar (*)  y uno me dijo que iba a tener que ajustar un presupuesto que estaba haciendo para una migración  pues veía que le iba a llevar mas horas de las que pensaba dedicarle.  Esos comentarios me dejaron contento y si  pudo ayudar a un par de personas, la charla valió la pena. También converse con otras personas, que comentaban algunas dificultades en la migración de sus KB, porque tenían particularidades que hacían que no funcionaran en la nuevas versiones de GeneXus. Algunas que me comentaron Modificación de la GXClasses, para adaptarla a mi problemática Inclusión de javascript en el HTML para mejorar la usabilidad (simular el IsValid). Sistema de menúes propios, no Genexus Modificación de objetos generados por Patterns Modific

Migrando grandes KB

Imagen
Llegó el XXII Encuentro Internacional GeneXus . A pedido de GusCarr, me tocó dar la charla sobre metodologías de migracion en KB grandes. Puede no parecer un tema muy atractivo, pero creo que puede ser útil para varios que tengan que enfrentarse al problema de instalar una nueva versión de GeneXus. El contenido de la presentación de la charla se puede ver (y bajar): Edit: Se puede ver el Video y la presentacion en el link http://www.genexus.com/encuentro2012/xxii-encuentro-genexus--materiales?es,0,,3006   Migrando grandes KB from Enrique Almeida

Crear indices para acelerar el build all GeneXus Ev2.

Imagen
Desde hace 4 días, estoy haciendo la conversión de una KB que tiene mas de 9000 objetos especificables, desde GeneXus 9.0 a GeneXus X Evolution 2. Realice una conversión de la KB, que tuvo algunos inconvenientes con el largo de los nombres de los atributos, y tuve que realizar un import/export. Después de tener la KB en condiciones, trate de terminar un BUILD ALL. Los tiempos de  dicha operación, se hacían eternos, pues cada uno demoraba mas de 10 horas, algunos cancelaban por OutOfMemory, etc. En un para de corridas del build all, decidi investigar un poco para ver si se podia acelerar algo el proceso. La memoria del equipo estaba sobrada y tambien el procesador. Hice un trace con el Profiler de SQLServer para ver bien que sentencias estaba ejecutando y luego use el Index Tuning Advisor para que me recomendara si se podian mejorar los indices para optimizar las consultas. La salida fue el script de abajo.  Crea estadisticas e indices en la KB. Uselo bajo su propio riesgo.

Como agregar Google Analytics en aplicaciones Genexus.

Imagen
Google Analytics es una herramienta maravillosa para poder conocer como usan tus usuarios una aplicación WEB. Permite sacar estadísticas de cantidad de visitas, cantidad de paginas vistas, velocidad de respuesta, desde donde se conecta a tu sitio y un montón de etcéteras mas.  Es una herramienta muy completa y ademas es gratuita, lo que la hace atractiva. Google Analytics con Genexus. En una aplicación WEB Genexus que tenga masterpage, es trivial agregarle lo necesario para que toda la aplicación pueda ser evaluada con Google Analytics. Alcanza con crearse una cuenta, y un profile, con lo cual nos ayuda a crear el código javascript que hay que agregar en nuestra aplicación. La forma que a mi mas me gusta, es crear un archivo Urchin_gxAplic.js  en el directorio de la aplicaron que tenga el contenido   var _gaq = _gaq || [];   _gaq.push(['_setAccount', ' UA-XXXXXXX-X ']);  //codigo unico   _gaq.push(['_setDomainName', ' servidor.com.uy ']);

Sismo 7.6 en Costa Rica.

Me tocó vivir el terremoto en San José, lejos del epicentro delmismo. Estaba en un cuarto piso y fue un sismo largo. Hasta el momento, había estado en temblores mas chicos y cortos, pero éste realmente se hizo sentir. Caía un poco de revoque desde el techo y todo se movía muchísimo. Para los uruguayos que estamos acostumbrados que el piso no se mueve, fue una experiencia novedosa. El plan de evacuación y la brigada de seguridad del edificio, funcionó muy bien. La evacuación fue ordenada y rápida. El edificio sufrió algunas rajaduras y no sabemos si mañana podremos volver a trabajar. Esperemos que las replicas no sean muy fuertes. Creo que la instalación de consultas web hechas con Genexus X, pueden esperar unos días mas...

Usabilizando GeneXus: Unificar Index Monitor con Search.

Imagen
Cuando uso GeneXus X Ev2, utilizo mucho la funcionalidad de buscar en los objetos de la KB. Si bien hay mas formas de buscar, la que siempre utilizo es la ventana de search. También me pasa, que para mejorar la performance de Genexus, deshbilito el indexado, porque se nota mucho la diferencia de salvar un objeto con el indice habilitado a hacerlo con el indice deshabilitado. Creo que seria mas cómodo y con menos ventanas, si se juntaran el Index Monitor y el Search, de forma de unificarlo todo en una sola ventanita, de forma de poder buscar y parar el indice en la misma ventana. También estaría bueno, poder buscar solo para un conjunto de objetos y no para toda la KB. Por ejemplo, puede interesarme buscar solo los procedimientos que tengan la regla NoRead().

GeneXus Tilo

Imagen
Armin aviso las principales caracteristicas en la que se basara la proxima version de GeneXus con codigo interno "Tilo" En GeneXus Tilo estaremos enfocando principalmente los siguientes puntos: Generación para Windows 8 (Metro style apps)  Generación para Smart Devices resolviendo escenarios de conectividad limitada /  Módulos en Bases de Conocimiento (Objeto "Module")  Mejoras en el manejo de eventos WEB Me pone contento que aparezcan nuevamente en el radar los Modulos, pues aunque no conozco como van a ser implementados, creo que van a ayudar a manejar KB grandes de forma mucho mas prolija. También debería facilitar la integración de KB, acelerar el desarrollo, hacer mas fácil el deployment, pero ya veremos como avanza. Cuando el tsunami de los Smart Devices llegó, pensé que había sepultado la idea de los módulos en forma definitiva, pero veo que sigue a flote. Referencias aca y aca . A la lista anterior, me gustaría agregar dos cosas Ma

Trabajando en grupo con GeneXus Server.

Imagen
Desde hace un tiempo estamos trabajando con GeneXus Server.  Soluciona muchísimos de los problemas que se plantean en el desarrollo en grupo, haciendo mas rápido y mas controlado el desarrollo de aplicaciones grandes, aumentando la productividad de todos. Para poder mejorar aun mas este trabajo, hay algunas cosas que me gustaría que tuviera GXserver para las próximas versiones: Mejoras en el manejo de versiones. Hoy podemos tener versiones en la KB cliente, en la KB del servidor o una mezcla de ambas. No encontré una forma Versiones sincronizadas en GXServer y en el Cliente. Puedo crear KB en el cliente con las mismas versiones que tengo en el servidor y también puedo subir al servidor una KB con las mismas versiones que tiene mi KB cliente, pero no puedo mantener una KB cliente y servidor con las mismas versiones, si  creo una versión en una de ellas. Sería bueno tener un mecanismo de sincronización de versiones, de forma que me permita "bajarme una nueva versión"

Consultorio Tecnologico: Por qué conviene eliminar los objetos no alcanzables de una KB?

Imagen
Un colega que no tengo el gusto de conocer personalmente me preguntó porque recomendaba eliminar objetos no alcanzables de una KB, como había recomendado en un post de KBDoctor. La pregunta al principio me sorprendió porque me parecía de respuesta obvia, pero él argumentaba la pregunta, diciendo que si en algún momento desarrollé un objeto, era conocimiento que convenía mantener y la mejor forma de mantenerlo era tenerlo a mano dentro de la KB . Para mi, la KB que genera el sistema que se pone en producción, tiene que tener lo estrictamente necesario para que los usuarios ejecuten la aplicación y absolutamente nada mas. Cualquier cosa que sobre (ya sea imágenes, temas, sdt y cualquier cosa) debe ser eliminado. Porque borrar todo lo no usado? Minimizar tiempos de especificación, generación y compilación No perder tiempo modificando objetos que no se usan  Hace mas chica la KB y por lo tanto mas fácil de entender Elimina dependencias innecesarias. En este sentido, creo q

Plan Ceibal, 5 años despues.

Imagen
El plan Ceibal  cumplió 5 años. Varias veces fue criticado porque no cumplía con objetivos educativos, y puede ser que estas criticas sean validas. Creo que cumplió con otro objetivo que fue de igualar (o al menos emparejar) alguna de las oportunidades de muchos niños ( o debi decir gurises? ). Me parece que lo segundo, es mas importante que lo primero, porque dándole una escala de valores adecuada y el acceso a la información, los niños pueden aprender por si solos a muchas mas cosas de las que nos suponemos. En el 2007 brindaba hasta la cirrosis por la primera entrega de computadoras. Hoy, continuo brindando.

Eligiendo un patron WorkWith

Imagen
Hace unos meses, teníamos un  proyecto a realizar,  que por su tamaño  era bueno para hacer una evaluación del estado de los patrones que implementan el Trabajar con.  De los que hay en la comunidad, los que conozco son: WorkWith que viene con GeneXus.  WorkWithPlus de DVelop K2BTools   de GeneXus Consulting PXTools  de PuntoExe.  Es muy bueno tener muchas opciones y poder optar por la que mejor se adapta a cada proyecto.  La evaluación que hicimos fue en el mes de Enero, con la versión Ev2 aun no liberada,  la implementación de una aplicación de unas 10 tablas, con todos estos patterns para poder comparar cual se adaptaba mejor a lo que necesitábamos.  Las cosas que evaluamos fueron: De la herramienta de pattern: Documentación Soporte Metodología de desarrollo Costo De la aplicación terminada Usabilidad Estética de la aplicación standard Facilidad de desarrollo NO evaluábamos performance, no era critico en esta aplicacion.  No voy a ent