jueves, mayo 16, 2019

Glowroot, un aliado para la mejora de performance de mis aplicaciones

El Glowroot es un APM que estoy usando para poder evaluar el rendimiento de mi aplicación y la considero una herramienta fundamental para el desarrollador. Hoy en día el papel del desarrollador no es solo picar código, si no que también debemos estar atentos a que nuestra aplicación pueda convivir dentro del ecosistema de aplicaciones que la rodean.  En mi caso tengo una aplicación que atiende a todo el país y debe convivir con otras aplicaciones que brindan servicios los cuales consumo aparte de exponer servicios a varios clientes. Esto hace a que debo estar atento a que los cambios que se realizan no impacten en el rendimiento del ecosistema en el que se ve inserto el sistema.

Para poder estar atento al rendimiento de mi aplicación necesito contar con alguna herramienta que me permita hacer un estudio del consumo de memoria, consultas a la DB y guardar estadísticas de estos consumos.

En mi caso me encuentro haciendo refactoring a un sistema que lleva en producción unos 11 años y ha sufrido cambios varios que me han permitido migrar versión de GeneXus (9, 15 y 16) e inclusive hacer mejoras en su arquitectura. Estos cambios implican hacer "refactoring" de código casi constantemente, en realidad a medida que planifico liberaciones trato de mejorar aspectos de rendimiento y mejoras varias por lo que necesito contar con insumos que me permitan demostrar las mejoras realizadas.

Cuando el año pasado comencé con algunos problemas en consumos de memoria luego de haber migrado mi aplicación de GX 9 a GX15 me puse a investigar que herramientas existían en la vuelta y me decidí por instalar Glowroot.

El uso diario que le doy y el mas sencillo de usar es el análisis de las consultas que hace mi aplicación sobre la base de datos. Básicamente al tener Glowroot instalado alcanza con ejecutar mi aplicación y luego ver las consultas que genera, aquí dejo un ejemplo de una ejecución de una parte del sistema que tenía que cambiar: 

Sin optimizar


Luego de optimizar y hacer refactoring ejecute nuevamente mi aplicación y consulte las consultas que había realizado a la base y pude verificar que los cambios que hice realmente bajaron la cantidad de consultas mejorando el rendimiento de código que había modificado.

Optimizada



La información con la que cuento en Glowroot con respecto a las consultas que realizo sobre la base me permiten estudiar y verificar la cantidad de veces que se ejecuta una consulta aparte de los tiempos de cada una. Realmente es algo muy sencillo de utilizar y que rápidamente puedo verificar que las consultas que se están ejecutando son las que realmente quiero que se hagan. 

El ejemplo que puse arriba es algo muy sencillo en donde mejore el código pero lo que quiero mostrar es que la herramienta me permite consultar rápidamente que consultas hago, la cantidad, el tiempo y en que consiste cada una. 

El Glowroot es una herramienta potente que me permite analizar el rendimiento de la memoria y muchas cosas mas. Este ejemplo es una de las cosas mas básicas que tiene esta herramienta, en mi caso la uso a diario y la comparto para que puedan aprovecharla como lo hago a diario.

domingo, mayo 05, 2019

Mi primer aplicación migrada a GeneXus 16 U2 ya se encuentra en producción

Desde octubre del 2018 me encuentro trabajando con GeneXus 16 pero por distintos motivos recién hace una semana pude pasar a producción mi aplicación. El sistema del que estoy hablando atiende a todo el País y se encontraba en producción desde hacía un año generado en Java con GeneXus 15.

Mi motivación para migrar a GeneXus 16 se basaba en dos puntos:
a) Actualización tecnológica
b) Poder implementar CI/CD

La decisión de cambiar a GeneXus 16 la base en los puntos que puse arriba y también la oportunidad de implementar grandes cambios solicitados por el cliente, estos cambios iban a necesitar volver a probar todo el sistema por lo que aproveche a sumar a todos los cambios la migración de GeneXus.

La migración de GeneXus 15 a GeneXus 16 fue transparente y no tuve problemas mayores, lo único que me complico un poco fue el cambio que hicieron en GeneXus 16 con los wsdl de los servicios web.

Lo que estaba documentado en las Release Notes no impactaba en mi forma de definir los SDT que exponían mis servicios pero había algo que no estaba en la documentación que me impacto y me cambio los wsdl de varios de mis servicios.

Intente pasar a producción mi aplicación y mi plan de testing no incluía revisar que no existieran cambios en los wsdl de mis servicios web por lo que esto llego a producción, básicamente fue un desastre y todas las aplicaciones clientes que consumen mis servicios web dejaron de funcionar.  Tuve que volver a la versión anterior y trabajar en mejorar mi plan de pruebas.

La forma que tuve de arreglar los wsdl fue modificando el código java generado por GeneXus a mano dado que no era viable pedirle a todos los clientes que consumían mis servicios que volvieran a consumir y regenerar sus programas. (En el U3 en teoría existe una propiedad que arreglaría mi problema)

En síntesis el problema que tuve es que mi plan de pruebas no cubría todo lo que debería cubrir y fue un descuido de mi parte pero me sirvió de experiencia ya que dado ese incidente pude mejorar mucho la calidad de mis pruebas.

También a nivel de desarrollo comenzamos a implementar pruebas unitarias y otras mejoras que surgieron a partir de este incidente.

Comparto mi experiencia con el resto de la comunidad para que pierdan el miedo a ir cambiando de versión ya que el problema en sí no es el cambio de versión de GeneXus si no la calidad que tengamos en nuestro plan de pruebas o que tan maduro estemos en QA. Creo que existe la necesidad de integrar mas calidad a nuestros desarrollos para que nos permitan ir migrando de versión y no quedar estancados en el tiempo.

En lo personal estoy aprendiendo mucho y me estoy metiendo en implementar prácticas que permitan hacer grandes cambios en desarrollo sin tener miedo a que se pueda romper algo. La industria del software necesita que estemos actualizados y tenemos que prepararnos para poder hacer esto sin miedo, de lo contrario vamos a estar trabajando en proyectos con GeneXus 9 por varios años.

En síntesis después de algunos meses de sufrir y aprender mucho pude poner en producción mi aplicación desarrollada con GeneXus 16 y comenzar un proceso de cambio mejorando mis procesos de Desarrollo.


















Pruebas Unitarias en GeneXus

Dentro de la comunidad GeneXus no existe mucho apego a las pruebas unitarias o no es una práctica común, por lo menos esa es mi impresión. En realidad si tengo que ser justo veo que las pruebas unitarias no son utilizadas por muchos programadores independientemente del lenguaje que usen.

Dentro de la industria existen muchas empresas que tienen dentro de sus prácticas la utilización de pruebas unitarias pero no lo veo muy adaptado por parte de los programadores o la mayoría de los que pude hablar lo ven como algo que les quita tiempo.

Estudiando el tema dentro de la comunidad no pude encontrar muchas opiniones sobre el tema y lo que pude encontrar esta relacionado a GX-Unit que lo intente comentar en otros artículos de este blog.

En la comunidad la persona que se ha preocupado mas por el tema es Enrique Almeida y podrán encontrar varios artículos en su blog. En GeneXus 16 encontramos la posibilidad de crear "Unit Test" de forma automática la cual pueden encontrar toda la información en el siguiente link.

En síntesis GeneXus cuenta con una herramienta incluida en el IDE la cual nos permite crear pruebas unitarias de forma automática, esta herramienta es gratuita para el desarrollador pero si quiero usar estos "unit test" con mis procesos de Integración Continua (CI/CD) tengo que adquirir una licencia.

En mi experiencia con los años pude entender la importancia de las pruebas unitarias y se han convertido en una necesidad para poder brindar la calidad que los productos en los que trabajo me exigen. Esto me llevo a evaluar las herramientas existentes para GeneXus y las diferentes opiniones de miembros de la comunidad pero mi conclusión final es que las herramientas existentes tienen mucho camino por recorrer para poder cubrir todas nuestras necesidades.

Un problema de las herramientas existentes para GeneXus es que al ser poco utilizadas por la comunidad no le damos la oportunidad de que mejoren para cubrir nuestras necesidades.

En la actualidad me encuentro en un proyecto que necesita hacer refactoring y cambios grandes de arquitectura pero si no logro tener pruebas unitarias se me hace muy difícil garantizar que los cambios que hago no rompan parte de las funcionalidades existentes en el sistema.

Por este motivo estoy implementando pruebas unitarias a medida que voy modificando el código del sistema y voy a compartir mi experiencia en un próximo artículo, de todas maneras adelanto que estoy usando parte de los "unit test" de GeneXus y por otro lado programar mis pruebas unitarias a mano para poder cubrir mis necesidades.

















martes, abril 16, 2019

Instalando Odoo 12 (Inicio con datos de prueba)

Hace unos días hice la instalación de odoo 12 en mi equipo y lo que me faltaba era iniciar la aplicación siguiendo los pasos que se me muestran en el wizard de instalación. Al instalar odoo el sistema me pide los datos para iniciar con la primer base de datos y  dado que estoy evaluando la herramienta voy a comenzar con iniciar la base usando los datos de prueba que me provee la misma aplicación.

Los pasos que tuve que seguir son los siguientes, ejecutar la aplicación (localhost:8069):


Esta pantalla se muestra dado que todavía no indique cual es la base en que quiero inicializar mi instalación. Luego de que hago este paso al iniciar la aplicación me presenta la pantalla de ingreso de credenciales de Odoo. En mi caso para poder evaluar indique que la base inicial tenga los datos de demo que vienen en odoo.

Luego de inicializar los datos el sistema me muestra la lista de aplicaciones disponibles para instalar en mi ambiente. 

En la primer etapa de evaluación de odoo voy a instalar dos aplicaciones:

CRM

Inventario


El proceso de iniciar la base y evaluar odoo con los datos de prueba es muy sencillo y fácil de realizar, en cuestión de 15 minutos pude iniciar los datos e instalar las dos aplicaciones que me interesa evaluar en este momento. Espero para la próxima poder meterme en otras aplicaciones y comenzar con lo interesante de este ERP.

Ahora al ir a la aplicación me pide el login y no crear la base por defecto como antes:



Espero en próximas entregas hablar con un poco mas de propiedad de esta aplicación que por lo que pude ver tiene mil cosas que son necesarias y me evitaría tener que desarrollar desde cero un ERP.






viernes, abril 05, 2019

Instalar odoo en Linux Mint 18.3

Desde hace un tiempo me encuentro investigando un ERP libre llamado odoo el cual es bastante utilizado y para mi sorpresa es muy usado en Uruguay. Esta alternativa libre antiguamente se llamaba OpenERP y desde hace un tiempo ha migrado al nombre de odoo

Por ahora me encuentro evaluando esta herramienta para un cliente y estoy comenzando por instalarla en un Linux Mint 18.3. Estuve leyendo y la verdad que se me complico un poco con todas las cosas que se deben instalar pero después de googlear unos minutos encontré un script que se encarga de hacer toda la instalación.

El script se puede descargar de github.com/Yenthe666/InstallScript y al ejecutarlo se encarga de descargar e instalar todas las dependencias. 

Luego de ejecutar el script el servicio de odoo queda en ejecución y al ejecutar la aplicación web  (http://localhost:8069) queda pronto para comenzar con la configuración:








miércoles, febrero 06, 2019

GeneXus 16 Upgrade 2

El día de ayer se ha liberado el Upgrade 2 de GeneXus 16, toda la información necesaria para descargarla los pueden obtener en la wiki de genexus.

En mi caso me encuentro liberando una versión de mi sistema y aproveche a instalarme el U2 generando todo nuevamente, de esta manera aprovecho el testing que se iba a realizar con la última versión de GeneXus.

Entiendo que para algunos puedo estar loco pero quiero mantenerme en lo último y esta fue una buena oportunidad de testear la versión generando en la última versión.

Espero no tener problemas ya que me la jugue a ciegas. :-)



miércoles, octubre 03, 2018

Usar GeneXus 16 contra GXserver 15

El título es extraño pero es una realidad que intente simular ya que tengo una oportunidad de migrar mis kbs que están en GX15 a GX16 pero no el GXServer.  En el evento tuve la oportunidad de preguntar al equipo de GXServer que pasaba en este caso y obviamente no recomendaban hacer esto.

Dado que quiero arrancar ya mismo con GX16 comence abriendo la kb y haciendo Rebuild-All, no tuve problemas por lo que probé la aplicación y en principio todo funciona bien. Ahora solo me quedaba probar contra GXserver que se encuentra en GX15 u9. Al probar hacer update no tuve problemas por lo que me había puesto contento, el problema lo tuve cuando quise hacer un commit de mi kb (GX16) contra GXServer (GX15) ahí salieron mensajes de error que de alguna manera los estaba esperando.

Error al hacer commit:

error: GeneXus Server: Error reading from export file.
error: GeneXus Server: An error occurred in File 'strbase64tofile_java' : Error reading from export file.
Invalid property 'JavaExtract'.
Invalid property 'NetExtract'.

error: GeneXus Server: Could not commit changes
Commit Failed

Este error me dio con un archivo pero también me da algo parecido con otros tipos de objetos.

En síntesis no voy a poder seguir mi desarrollo con GX16 hasta que no pueda actualizar la versión de GXServer.


martes, octubre 02, 2018

Mi primer error en GeneXus 16 (error: GeneXus Module installation failed)

En el día de ayer instale GX16 en mi equipo y hoy comence por abrir una KB que estaba en GX15, mi equipo tiene Windows 7 con permisos de administrador.

Al abrir la kb e intentar hacer un "Rebuild All" tuve el siguiente mensaje de error:

========== Build All started ==========
warning: Updating 'GeneXus' module version from 1.9.4.120900 to required 2.0.9.127528.
error: GeneXus Module installation failed.
Build All Failed

Revisando un poco el problema me di cuenta que no se estaba copiando el modulo de Genexus pero si creaba la carpeta correspondiente. En mi equipo la carpeta que creaba es la siguiente:
C:\Users\vmwin7\AppData\Roaming\GeneXus\GeneXus\16\Modules_v1.0\GeneXus_4f454e73-7d8f-4a0f-908a-1a355f3634a5\2.0.9.127528

Pero faltaba el archivo: GeneXus_2.0.9.127528.opc

La solución fue copiar el archivo: F:\GeneXus\GX16\Modules\GeneXus_2.0.9.127528.opc a la carpeta:

C:\Users\vmwin7\AppData\Roaming\GeneXus\GeneXus\16\Modules_v1.0\GeneXus_4f454e73-7d8f-4a0f-908a-1a355f3634a5\2.0.9.127528

Luego al abrir la KB y hacer "Rebuild All" el resultado fue el esperado. Seguramente este error es algo de mi instalación y se podría haber solucionado corriendo el /install pero al hacer lo que puse arriba quedo solucionado.

Estoy muy motivado a comenzar a trabajar en esta versión y subir mis resultados para compartirlos con el resto de la comunidad.