Entradas

Mostrando las entradas de 2011

PiensoPienso: Como mejorar la permformance de este programa?

Tengo una tabla con millones de registros que son de la forma *Clave Descripcion Fecha y un webpanel  con una grilla que muestra los registros que cumplen la condicion: Clave = &Clave when not &Clave.isEmpty(); Descripcion like &Descripcion when not &Clave.IsEmpty(); &FechaInicial <= Fecha and Fecha <= &FechaFinal ; En la pantalla se muestran la cantidad de registros que tiene le grilla y en los eventos tengo: &TotPag = Grid.PageCount if Grid.Rows > 0 if Grid.PageCount <= 1 Paginado.Visible = 0 //Muestro botones de  paginado else if &nroPag = 1 anterior.Enabled = 0 primero.Enabled = 0 endif if &nroPag = Grid.PageCount siguiente.Enabled = 0 endif endif else Paginado.Visible = 0 endif Como mejorarían la performance de este programa? 

Ventajas de programación basada en modelos : Cambios al migrar a GeneXus X ev2.

Estaba revisando un tema de performance en la base de datos, de una aplicación generada con GeneXus 9.0. La misma no tenia problemas de performance grande, pero los administradores de la base de datos pedían que se utilizara BINDING para mejorar el ratio del cache de sentencias en la base de datos. Para hacer pruebas cree una KB en 9.0 con dos tablas (Clientes y Facturas) y un webpanel con una grilla de 10 renglones, que traia algunos datos de las tablas con un join, con condiciones con un when y ordenados   La misma generaba la sentencia: SELECT T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[CliNom], T1.[CliId] FROM ([FACTURA] T1 WITH (FASTFIRSTROW NOLOCK) INNER JOIN [CLIENTE] T2 WITH (NOLOCK) ON T2.[CliId] = T1.[CliId]) WHERE (T1.[FactImporte] > 100) ORDER BY T1.[FactImporte] DESC   Para hacer pruebas, también la migre a la GeneXus X Evolution 2 y generó la sentencia.   SELECT * FROM ( SELECT T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[...

KBModule 1.3 (beta) - Modularizando KB Grandes

Imagen
Cuando una KB GeneXus crece, algunos problemas que son manejables cuando son chicas, se vuelven bien dificiles de manejar. Es comun, que en las KB grandes se tenga cierta especializacion en el area en que desarrolla cada uno de los programadores que trabajan en la misma KB, dividiendo los objetos en modulos. Una vez que uno adquiere cierta experiencia en dicho modulo, es bueno poder controlar como se comunica dicho modulo con el resto de los objetos de la KB. Como “administrador del modulo”, me interesa asegurarme: Que ningún objeto externo llame a algunos objetos internos de mi aplicacion.  Que no actualicen o borren las tablas con for eachs o new, sino que lo hagan con objetos pre-establecidos (son las API de mi modulo).  Si mi modulo necesita llamar a objetos externos (que no son de mi modulo), tener claro que dichos objetos no van a cambiar o que si cambian me van a avisar.  Conocer que modulos utilizan mi modulo y que modulos estoy utilizando.  ...

Reunion por KB Grandes.

Imagen
Luego de varias idas y vueltas, logramos organizar la reunión para conversar sobre KB Grandes. Fue mas gente de la que pensaba. Había gente con KB de 2000 objetos hasta algunos con 25.000 objetos. Los temas que conversamos 1) Metodología de desarrollo Algunos contaron sobre como pasar de desarrollar en GX 9.0 varios desarrolladores en una misma KB a hacer lo mismo en la GX X. Se contaron algunas estrategias para lograr una productividad aceptable. Se converso sobre el uso de GX Server. 2) Lentitud en algunas operaciones. La gente de Artech pidió que reportaran casos de lentitud para poder atacarlos y no tomarlos como forma normal de desarrollo. 3) Patterns en KBGrandes. La aplicación de patterns en KB de muchos objetos, puede multiplicar la cantidad de los mismos y hacer mas evidentes algunos problemas. Si un patrón desarrollado por la empresa demora mucho, conviene estudiar la forma en que el mismo esta programado....

Charlas de Concepto en el XXI Encuentro GeneXus

Imagen
Marcelo Viñolo expuso por parte de Concepto en la charla " Uruguay: Pais de transito seguro Control satelital al servicio de la carga aduanera. " la experiencia de desarrollar aplicaciones en conjunto entre Concepto e ICA, donde cada una de las empresas brindo su conocimiento en un área especifica y logramos desarrollar un sistema de seguimiento satelital de camiones, que va a permitir controlar el movimiento de mercaderías entre depósitos aduaneros. Una linda experiencia de integracion de mapas, webservices, alto volumen de datos y Genexus. Se puede ver aqui Federico Alvarez y Martin Anolles, presentaron la charla " Automatizando Test - Un año de experiencias con GXTest ". También se podría haber llamado, " Sangre, sudor y testing ". Contaron como les fue creando una sección de testeo y automatizacion de pruebas con GXTest.  Mi sensación en todo este proceso, es que hay que tenemos que trabajar mucho para l...

Wish list Genexus

Mañana temprano es la charla con el grupo de desarrollo en el XXI Encuentro GeneXus. Este año somos muchos y no creo que pueda pedir todo lo que tengo en la lista, por lo que lo escribo acá, para que conste en actas. Regiones de código. Cada día mas basamos nuestros desarrollo en modelos (o patrones). algunos de estos patrones utilizan regiones de código separadas por comentarios. Seria bueno que genexus brinde un soporte mas robusto para esta problemática. Conocer el estado de los objetos Se torna cada vez mas necesario conocer en todo momento si tengo algún error o advertencias en mis objetos, las cuales solo pueden consultarse luego de una especificación. Es necesario algún mecanismo para guardar dichos errores asociados al objeto. Incluyo en estos los errores de compilación. Deployment de aplicaciones. Al elevar el nivel de abstraccion de nuestro desarrollo, cada día estamos mas lejos de los detalles de implementación de las mismas. El momento de la puesta en producció...

KB grandes

Imagen
Update: A pedido de Artech pasó para las 11:00 en la sala Picasso. A pedido del publico * vamos a juntarnos a charlar sobre Kb grandes en el tercer piso mañana miércoles a las 11:30 en la sala de sofás. No quiero que la charla se convierta en una sesión de catarsis de quejas, por lo que les pido que vengan con propuestas para los problemas de formase poder formalizar los pedidos a Artech o a empresas que desarrollen herramientas. * siempre quise usar la expresión "a pedido del publico".

ColeBus - Parada suspendida.

Imagen
Al final no presentamos el proyecto COLEBus al GeneXus Challenge. Por falta de tiempo no llegamos a programar todo lo que queríamos y el concurso no se merecía que presentáramos algo que no estaba terminado. Nos faltan aun las notificaciones y poder mejorar la forma de mostrar los mapas. Aprendimos bastante en camino sobre GAM, Android, iOS y el paradigma de desarrollo de GX para Smart Devices. Por otro lado se nos hizo difícil seguirle el ritmo a los cambios de los Night Build y sus naturales inestabilidades, pues hacíamos el proyecto fuera de las horas laborales. Quedará para la próxima . Felicito a los organizadores y a los ganadores del concurso!.

Building a Hacker Culture in Uruguay

@rabble  hizo una presentacion que me gusto mucho Building a Hacker Culture in Uruguay - OSCON 2011 View more presentations from Rabble .

Usabilizando Genexus: Guardar historia de outputs

Imagen
Hay una cosa que no me resulta practica cuando trabajo con GeneXus X en KB grandes: pierdo el resultado de los build all.  Mi forma de trabajo es la siguiente, hago algún cambio, hago un build all y luego miro si hay errores en la especificación, generación o compilación.  El build all, cuando se trabaja con una KB grande puede demorar mucho.  Si hay errores, tomo el primero y lo soluciono, modificando el objeto y mandándolo especificar solo. Esto hace que pierda el log de errores anteriores, si no me acuerdo de salvarlo (nunca me acuerdo). Esto me hace perder mucho tiempo, pues tengo que lanzar nuevamente un build all.  Solo el calcular cuales son los objetos modificados, demora varios minutos, aunque no haya modificado solo un objeto, con lo que el proceso se hace bastante engorroso.  Estaría bueno que pudiese tener los logs de las ultimas 10 especificaciones/generaciones/compilaciones y poder cons...

KB Grandes en el Encuentro GeneXus

Imagen
Se aproxima el Encuentro Internacional GeneXus y me gustaría conocer si alguien está interesado en reunirse para conversar sobre el manejo de KB grandes con GeneXus X. Mi idea es compartir estrategias de desarrollo con KB grandes como para tener buena productividad en grupos de trabajos numerosos y muchos objetos.  Si estas interesado, deja un comentario y plantea cuales serian los temas que te interesa abordar o dudas que te gustaría que alguna persona responda.  Posibles temas: * Como armar el ambiente de desarrollo para un equipo de mas de 10 desarrolladores? * Metodología de trabajo con GX Server * Como integro al equipo de testing?  * Como armar el ambiente de testeo con GXTest? * Estrategias de deployment en aplicaciones grandes * Es posible la intergracion continua con Genexus? No conozco las charlas del encuentro y puede ser que alguno de estos temas ya esten contemplados en ellas. ...

COLEbus - Avances semanales

Imagen
COLEbus es una aplicación que estamos desarrollando para dispositivos móviles (Android, iPad, Blackberry) y que participa en el Smart Challenge . Elegimos esa aplicación, pues nos permitía utilizar GPS y algunos elementos de geolocalización, mapas y probar bastantes de las funcionalidades de los generadores móviles, lo cual nos va a permitir aprender mucho (objetivo primario de participar en el concurso). La funcionalidad que va a tener sera la siguiente: Padre/Madre Definir lugar de levante y bajada del niño en el viaje de mañana.  Recibir notificaciones al momento de levante/bajada del niño en la camioneta Recibir notificaciones cuando la camioneta esta próxima al lugar de levante Consulta del estado del viaje (duración, donde esta, etc).  Donde esta mi hijo? Configuracion de notificaciones Chofer de la camioneta Mapa con los lugares donde levantar pasajeros Lista de lugares donde levantar pasajeros (ordenados par...

COLEBus - Genexus Smart Devices Challenge

Imagen
Artech organizó una competencia para quienes quisieran probar la  versión GX Evolution II desarrollando una aplicación para dispositivos móviles (iPad, iPhone, celulares/tabletas Android, Blackberry) . En Concepto , decidimos participar, para competir, que siempre es lindo y ademas para sacarnos de la zona de confort de desarrollo y forzarnos un poco en el área del desarrollo para plataformas móviles que no es nuestro fuerte y que vamos a tener que usar en el futuro. Hay mucha gente que esta mas avanzada que nosotros en el desarrollo de este tipo de aplicaciones, por lo que no  tengo demasiadas esperanzas de ganar, pero creo igual que la experiencia va a ser muy positiva, como lo ha sido en otras oportunidades. Teníamos que elegir una idea para implementar y queríamos que fuera algo que nos permitiera utilizar la mayoría de las funcionalidades de las plataformas móviles (GPS, tomar fotos, notificacio...

Curriculum Vitae

Imagen
En varias oportunidades me ha tocado hacer selección de personas para trabajar en Concepto y también me han pedido sugerencias o referencias para trabajar en otras empresas del rubro informático. Lo que cada integrante dice que hizo, es importante, pero tambien se toma mucho en cuenta, la participacion de las personas en redes sociales, proyectos open source, foros de discusion y demas. Porque digo esto? Por que algunas oportunidades, he visto a personas que son muy capaces técnicamente comportarse como inadaptados en los medios. Esto puede perjudicarlos en el futuro, cuando intenten conseguir trabajo en otras empresas. Si estoy eligiendo una persona que va a estar en contacto con clientes, no quiero a alguien que pueda dejar una mala  imagen de la empresa, por lo que posiblemente no contrate a las personas que no saben expresarse correctamente o  insultan cuando se comunican con otros. Por eso, como recomendación a todos lo...

De programador a habil declarante.

Dentro del desarrollo de aplicaciones, las herramientas utilizadas están en permanente evolución. Todos tratan de crear herramientas que hagan mas fácil crear programas mas rápido y mejor, de forma de hacer mas productivos a quienes desarrollamos aplicaciones.  En dicha tendencia, se destacan las que permiten trabajar con modelos donde la realidad se modela (valga la redundancia) declarando parte de la misma con un lenguaje especifico para dicha realidad. Tomando por ejemplo GeneXus que es la herramienta que utilizo, en la misma se esta viendo clara esta evolucion. Lo que sigue son algunos ejemplos de dichos modelos a traves de las diferentes versiones. Al principio, se tenían Transacciones. En las mismas se modela varias cosas, pues tiene por un lado estructuras (que definen a traves de un proceso de normalizacion, la estructura de la base las tablas de la base  de datos), pantallas (donde se dice como se va a mostrar estos d...

La productividad en tiempos de Twitter.

Imagen
Si bien soy usuario de varias redes sociales (Facebook, Linkedin, etc) la única que uso en forma consistente es Twitter. Lo empece a usar en Abril del 2007 (soy el usuario @ealmeida  # 3.248.201)  y en el primer momento si bien me pareció una idea interesante, no logre encontrarle utilidad.  En ese  momento no había demasiada gente de mi entorno y mi comunidades para seguir por lo que lo que se podía consumir eran contenidos bastante genéricos. Ademas me parecía que tener mensajes cortos de 140 caracteres que uno leía en forma aislada, carente de contexto, no resultaban fáciles de interpretar. Con el correr del tiempo empezaron a aparecer mas personas que usan Twitter y entonces la cosa empezó a tener mas sentido y se volvió mas útil. Al tener una red amplia de gente que le interesan temas similares, cuando alguien detecta una noticia interesante se la muestra al ...

Por que no hay betatesting de GXServer?

Imagen
  GeneXus Server es un producto que facilita el desarrollo de aplicaciones grandes en grupos de desarrollo numerosos con GeneXus. Con estas características, es un producto que va a ser cada día mas critico en el desarrollo para empresas grandes. Por todo esto, me llama la atención, que Artech no habilite en paralelo con la versión GeneXus X Evolution 2, una versión de GeneXus Server como beta. Hoy no se puede desarrollar con GeneXus Evolution 2 y subir a GeneXus Server, pues da errores por diferencias en las versiones. Por lo tanto, cuando este pronta dicha versión, creo que GeneXus Server va a estar bastante menos testeado. No seria bueno tener una versión GeneXus Server en Beta?. Es todo una cuestión de costos/beneficios, pero desde mi punto de vista, estaría bueno tenerlo. Manejo de Versiones en el servidor. En otro tema, creo que seria muy deseable poder tener diferentes versiones de GeneXus en...

GeneXus - Salvar reorganizaciones para posterior ejecución.

Imagen
Una cosa que creo que le esta faltando a GeneXus, es una  MSBuild Task para salvar todo (y solo) lo necesario para ejecutar una reorganización en las diferentes plataformas para los que genera GeneXus.  A mi me gustaría que se pudiera crear un directorio con la fecha y hora de la reorganización y que en el mismo se salven todos los programas, bibliotecas, drivers, archivos de configuración necesarios para poder ejecutar dicha reorganización.  Si bien ya hay algunos utilitarios para algunas plataformas (por ejemplo para .NET ya existe el Csharp xcopy Deployment  que es muy bueno), creo que debería generalizarse. De esta forma, aunque no conozca como funciona java o ruby, también pueda hacer un export de dichas reorganizaciones.  Ademas podría ser el primer paso para tener mas herramientas de deployment, que le están faltando a GeneXus. 

Agenda Digital Uruguay 2011-2015

AGESIC publico la Agenda Digital del Uruguay para los años 2011 y 2015 . Creo que si se logra alcanzar los 15 objetivos, podemos posicionarnos bastante mejor para crear una sociedad mas informatizadas y tener todos mejores servicios por parte del gobierno. En particular a Concepto nos tocara ayudar en el Objetivo 11 b) Contar con la Ventanilla Única de Comercio Exterior en funcionamiento y también en Objetivo 10 c) Contar para el 2012 con la infraestructura de claves públicas nacionales (PKI) en funcionamiento, compatible con las normas establecidas a nivel del Mercosur La Lista completa de objetivos es: Objetivo 1: Internet para todos Objetivo 2 : Despliegue nacional de la Televisión Digital e interactiva Objetivo 3: TIC para la Educación Objetivo 4: Educación en TIC Objetivo 5: Habilidades para una ciudadanía digital Objetivo 6: Preservar el acervo cultural en una nación diversa en el marco del Bicentenario Objetivo 7...

Algunas cosas que me enojan de GeneXus.

Imagen
Cuando programo con GeneXus hay algunas cosas que me hacen sacar canas verdes. * 1) Punto y coma al final de las reglas. Muchos objetos que solo tienen una rule parm() y de cualquier forma me pide que ponga un ";" al final. Siempre, siempre, siempre me olvido de ponerlo y creo que a esta altura, podríamos lograr separar los renglones de otra forma. Cuando me olvido de poner el ; me sale el mensaje error: Missed ';' at the end of the rule. (Rules, Line: 8, Char: 1) Si GeneXus sabe que falta un ; al final de la linea 8, no puede agregarlo en forma automática? 2) where Att = &Var when not &Var.IsEmpty() Me gustaria poder escribir esto en menos letras, pues es muy comun. Algo asi como Att ~= &Var o WhereEqual(Att,&Var) que significa lo mismo que lo anterior. 3) Not &Attribute.IsEmpty() Las dobles negaciones siempre me complican la logica. Me gustaria mas un &Att.NotEmpty() 4) &FechaInicial <= Fecha AND Fecha <= &FechaFinal Me gusta...

Firma Digital: Certificados empresariales en Uruguay.

Empiezo con una anécdota. Era el fin del año 2000, veníamos de migrar un sistema grande de Visual FoxPro a GeneXus en los años anteriores. Si la memoria no me engaña, trabajábamos con GeneXus 7.0. En ese momento, nos habían pedido empezar a usar firma digital. La idea era poder asegurar que un envío electrónico era de una empresa y que no había sido modificado. Y tambien que cuando hubiera un jucio poderle explicar al juez que lo que se firmaba electronicamente valia igual que una firma en papel. Hicimos el desarrollo y la parte que me toco a mi era programar con la CryptoAPI de C++ para poder firmar y verificar firmas con certificados digitales X.509. No soy bueno programando en C++ por lo que me dio bastante laburo llegar a usar la CryptoAPI, que no era de las cosas mas amigables que Microsoft ha diseñado. Cuando teníamos todo el desarrollo terminado, habíamos realizado prototipos, llegamos a la etapa de puesta en producción. En ese momento, los certificados que emitían las autorida...

GeneXus: Comentarios en el código como notas al pie o referencias.

Imagen
Los comentarios en el código, si estan bien pensados, ayudan muchísimo a entender el funcionamiento de los programas. También es cierto, que el tener mucho comentario a veces dificulta visualizar lo que el programa esta haciendo. Una de las cosas que me gustaría tener en el editor de codigo GeneXus seria la posibilidad de "esconder" los comentarios a demanda. En realidad, me gustaria que los mismos quedaran como referencias o notas al pie como por ejemplo que el codigo: for each //Identifico clientes deudores de los meses anteriores ..... endfor se pueda ver de la forma: for each [+] ...... endfor Seria hacer con los comentario de linea // algo parecido a lo que hacen con los comentarios de bloques /* */ Algunas otras características deseables de los comentarios serian: 1) Guardar usuario, fecha y hora de realizado el mismo (en el mismo comentario) 2) Mostrar con un tooltip el comentario cuando paso el mouse sobre el comentario resumido. 3) Tener una opcion que permita ve...

Paintball

Imagen
Anoche hicimos una jornada de integracion en Concepto y que mejor forma de integrarse que intercambiar disparos!. Me toco estar en el equipo vencedor, pero mi performance fue bastante lamentable.

COSTA RICA: Hacienda automatizó todos los trámites de mercancías en TICA

En la prensa de Costa Rica, publican: San José (Redacción). El Ministerio de Hacienda anunció esta mañana que por primera vez tendrá automatizado, en el sistema informático, los trámites de todos los posibles destinos a que se puede someter una mercancía que ingresa o sale del territorio nacional. En una primera fase, se trabaja con las empresas que se encuentran bajo control de la Aduana Santamaría. + MULTIMEDIA Fernando Herrero, ministro del ramo, explicó que el sistema aplica para los trámites que realizan las empresas que se encuentran dentro del régimen de perfeccionamiento. Dicho régimen especial permite la importación de mercancías con suspensión de pago de impuestos hasta que se establezca el régimen definitivo, para someterlas a un proceso de transformación, reparación, reconstrucción, montaje, ensamblaje, entre otros; además fomenta la generación de empleo en el país. “Concluimos de esta forma una importante fase requerida por los empresarios, comerciantes, auxiliares y en ge...

KBSaveReorganization - Salvar reorganizaciones en GeneXus.

Imagen
Uno de los problemas que enfrentamos las personas que desarrollamos en Genexus es el que acontece cuando se pierden reorganizaciones. Esto es cuando se ejecutan 2 reorganizaciones sin haber salvado los archivos necesarios para poder ejecutarlas y se "pasa por arriba" la vieja. A lo largo de la historia hemos ido creando diferentes formas de solucionarlo pero nunca me han resultado 100% efectivas. Cuando se trabaja en grupo, el problema se ve agravado. En el fin de semana, hice una pequeña extension que hace lo siguiente: Renombra el archivo que tiene los comandos de la reorganizacion con el nombre ReorgAAAAMMDDThhmmss.sql y ademas salva dicho archivo en la KB. Esto es algo que no soluciona todos los problemas, pero al menos va a hacer mas fácil retomar una perdida de alguna reorganizacion, pues al menos vamos a tener la historia de como fueron ejecutadas las reorganizaciones. Es importante notar, que no todo los que se ejecuta en la reorganizacion queda salvado en el script ...

Betatesting de GeneXus (2011)

Imagen
Desde hace unos cuantos años, me toca hacer pruebas en las versiones Beta de GeneXus. Esta bueno hacerlo para ir aprendiendo y entendiendo que es lo que tiene la próxima versión de la herramienta que utilizamos para desarrollar. Esto nos permite adaptar las metodologías de desarrollo para poder aprovechar las nuevas funcionalidades y ofrecer cosas nuevas a nuestros clientes. También permite calcular los riesgos de la migración de nuestras aplicaciones a las nuevas versiones, de forma de poder hacerlas con un costo razonable. Que evolución ha tenido el proceso de betatesting en GeneXus? Agilidad. Hoy tenemos disponibles Night Build que permiten tener la ultima versión desarrollada. Tiene el riesgo que algo que ayer funcionaba, hoy deje de funcionar, pero también tiene la ventaja de poder tener arreglos muy rápido. Estabilidad. Se nota que el proceso de desarrollo interno de GeneXus ha madurado, pues las cosas se rompen menos que en ciclos anteriores. Hoy se puede desarrollar con la vers...

Nuevas formas de ver los blogs de blogger.com

Blogger anuncio nuevas formas de ver y navegar los blogs. Por ejemplo: http://ealmeida.blogspot.com/view/snapshot http://ealmeida.blogspot.com/view/sidebar http://ealmeida.blogspot.com/view/flipcard (prueben navegar por fecha, por autores, por etiquetas, esta muy bueno). http://ealmeida.blogspot.com/view/timeslide http://ealmeida.blogspot.com/view/mosaic Algunas estan mejores que otras, pero es bueno que Google muestre el contenido de los millones de blogs que existen en diferentes formatos, pues ayuda a que el contenido pueda ser consumido por otros dispositivos.

Paralelizando procesos batch.

Imagen
En los últimos tiempos me ha tocado optimizar algunos procesos batch, para hacerlos mas rápidos. En general los proceso que he visto, son de la forma. INICIALIZACION PARA UN CONJUNTO GRANDE DE REGITSROS ..PROCESO UN REGISTRO FIN PARA AJUSTES FINALES Una forma " fácil " de acelerar el procesamiento de muchos registros, es aprovechar a ejecutar varias tareas en paralelo, lo cual en los procesadores actuales que tienen muchos Cores o computadoras con varios procesadores. Si bien esto en principio parece fácil, aparecen nuevos problemas que hay que tener en cuenta. El hacer paralelos nuestros programas es algo que vamos a tener que aprender a hacer pues en los próximos años va a ser cada vez mas común. En forma general, el programa anterior puede quedar de la siguiente forma INICIALIZACION PARA UN CONJUNTO GRANDE DE REGISTROS ..SI CANTIDAD DE PROCESOS SOMETIDOS >= MAX_CANTIDAD_PROCESOS_SIMULTANEOS ==> ESPER ..PROCESO REGISTRO (EN BACKGROUND O SOMETIDO). FINALIZACION Algun...