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.











  

lunes, octubre 01, 2018

Instalando GX16

A pesar de que estuve probando la versión beta de GX16 en el día de hoy hice la instalación de GX16 la primera versión liberada. En principio no tuve problemas y lo único que me solicito es que instalara .Net Framework 4.7.1, ya que estaba instale el .Net Framework 4.7.2.

Mi equipo tiene Windows 7 y aproveche el .Net Framework 4.7.2 para poder instalar GeneXus Protection Server (9751) para mantener la compatibilidad con las licencias anteriores. 

En cuanto al licenciamiento al instalar GX16 nos pide que actualicemos la licencia, la verdad que esto es un problema ya que me obligan a desinstalar mis licencias y enviarlas a claves para que me las actualicen. Entiendo que esto es un proceso de seguridad pero tengo que admitir que me gustaría que no se hiciera esto para permitirme comenzar a trabajar en GX16 rápidamente y no tener que esperar a actualizar mis licencias.


Ahora me queda pedir las nuevas licencias y comenzar a migrar mis kbs a GX16.

miércoles, septiembre 19, 2018

¿Qué espero del GX28 Encuentro GeneXus ?

Desde hace unos años por problemas de tiempo y salida en producción de varios proyectos no he podido asistir al evento GeneXus como lo hacía antes. En este GX28 voy a intentar asistir ya que existen varias charlas que coinciden con mis investigaciones actuales.

Dado que hace tiempo que no puedo disfrutar de un Evento GeneXus espero encontrarme con amigos y asistir a charlas que me dejen enganchado como antes. Espero que las charlas no sean muy comerciales y sean técnicas ya que estoy en un punto que necesito saber si GeneXus me acompañara en mi proceso de cambios.

En la actualidad no hay forma de concebir nuestro trabajo sin implementar Integración Continua, Microservicios, Módulos y acercarnos a la cultura DevOps.

En síntesis espero que después de este evento pueda afirmar que GeneXus me acompañara en mi proceso de cambios o el estado en el que se encuentran las herramientas que estoy necesitando.

Revisando un poco la agenda pude ver varias cosas interesantes que como decía coinciden con lo que estoy investigando. Voy a intentar ir a las de DevOps, GXServer  y las de seguridad.

Por ahora mi lista de charlas seleccionadas es la siguiente:




jueves, septiembre 13, 2018

Como implementar módulos en GX y no morir en el intento (Parte 2)

Después de haber sufrido un poco en "mi primer experiencia al intentar modularizar una kb" levante un respaldo y arranque nuevamente a modularizar mi kb.  Los problemas que voy a comentar se presentan por partir de una kb mediana que ya tiene años y el sistema atiende a todo el pais por lo que es algo relativamente importante. (Tengo que lograr que el cambio sea trasparente)

Básicamente me puse a pensar como hacer para modularizar mi kb sin tener que hacer un alto en el desarrollo y sin tener que dedicar mucho tiempo, la realidad es que la kb se encuentra en constante desarollo y en la actualidad tiene tres líneas de desarrollo que implican tocar bastante el código existente.

Necesito lograr comenzar a modularizar "rompiendo" lo menos posible mi kb e ir liberando estos cambios aprovechando el cronograma de trabajo establecido.

Quiero aprovechar las instancias de testing para no tener que volver a probar todo luego de pasar a modulos ya que como todos saben es complejo encontrar el tiempo para hacer grandes cambios y quiero aprovechar los cambios solicitados para poder mejorar el diseño de mi kb.

Aprovechando los tiempos que tengo decidi comenzar a modularizar sin hacer un análisis exaustivo de mi kb si no que arranque por las cosas que rompen los ojos y que son fáciles de pasar a un modulo (Ej. funciones de validación de CI o funciones varias que siempre tenemos en nuestra kb).

Para ilustrar y poder contar lo que hice voy a partir de una kb llamada MiKB. Lo que hice en el día de hoy para comenzar a modularizar y dejar andando mi kb es lo siguiente:

a) Hice una nueva Kb llamada MiKB_CORE: esta kb es la que tendra los modulos que luego voy a usar de MiKB. (Quiero trabajar como si fueran paquetes y tener un diseño de paquetes a futuro)

b) Exporte los objetos que fui seleccionando de MiKB y los importe en MiKB_CORE

c) Hice los módulos según el diseño que quiero implementar en la modularización de la KB. ej. utils, common, mensajes, etc.

d) Pase los objetos a cada Módulo según lo que correspondiera dejando público solo lo que corresponda, por ejemplo las transacciones las puse "Private" ya que desde MiKB quiero que solo vean los procedimientos en cada paquete y no las TRNS (Esto en el arranque).

e) Luego de luchar con algunas cosas que voy a poner en las conclusiones de este post genere un paquete por cada módulo.

f) En mi kb origen (MiKB) cargue estos módulos, al hacer esto los objetos que había exportado ya no están en MiKB y en el código hace referencia a los módulos.

g) En la kb origen (MiKB) borre las trn que pase a módulos en la kb MiKB_CORE

h) Hice "rebuild all" y verifique que todo quedara integrado, por ahora solo hice alguna pruebas unitarias teniendo en cuenta las funcionalidades que pase a los módulos.  Subí todo a GXserver y por ahora todo ha compilado y ha quedado instalado sin problemas.

Conclusiones positivas:

a) Al revisar mi kb pude aprovechar a realizar limpieza de objetos apoyándome en KBDoctor. Con la limpieza y la modularización pude eliminar 20 objetos por estar duplicados o deprecated, aparte de pasar 50 objetos a los módulos.

b) En la kb de los módulos aproveche para mejorar el código de los objetos que importe de la kb origen y pude unificar comportamiento de algunos objetos que tenían mas de 10 años.

c) Pude modularizar y visualizar la potencia de tener todo en módulos, aparte de comenzar con el re-diseño de mi KB después de 10 años de estar metiendo mano de una forma no muy organizada.

El resultado de mi primer etapa de trabajo es la siguiente:

KB CORE con los Módulos                                 


KB que utiliza los Módulos:

En síntesis me encuentro motivado y con ganas de seguir modularizando mi kb  para alcanzar un nuevo nivel de GeneXus Modularity Maturity Model.





















miércoles, septiembre 12, 2018

Como implementar módulos en GX y no morir en el intento (Parte 1)

Este es mi segundo intento de comenzar a trabajar con módulos en GeneXus y la verdad que mi experiencia no ha sido del todo buena dado que me he topado con algunos bugs que me están enloqueciendo. 
Según el GeneXus Modularity Maturity Model  me encuentro en el nivel 1 (Sin módulos) por lo que estoy intentando comenzar con los módulos pero no dentro de la kb que quiero modularizar, lo que estoy haciendo es tener otra kb en donde creo los módulos y luego trabajo con los módulos en la kb origen. 
Quiero aclarar que trabajando con módulos dentro de la misma kb no tengo problemas mayores pero quiero trabajar con los módulos como si fueran paquetes dado que quiero tener paquetes separados con las cosas que son comunes en varias kbs. 

Mi idea es poder distribuir los jar de cada paquete (modulo gx) en cada aplicación, me encantaría poder hacer un diagrama de paquetes con los diferentes módulos e integrarlos según mis necesidades. 

Esto dado que en la actualidad tengo 5 kbs que tienen objetos comunes y quiero poner esos objetos en un modulo y usar desde las 5 kbs ese modulo. Aparte de querer modularizar una kb grande para que me quede mas sencilla y aprovechar los beneficios de modularizar.

Básicamente en cuanto al trabajo estoy utilizando GX15 U9 y lo que hice fue crear una kb nueva en donde hice un par de módulos, desde la kb origen fue exportando objetos mediante xpz y los importe en la kb donde tenía los módulos.

En la kb de los módulos renombre estos objetos y los organice según mis necesidades, también me quedaron algunas carpetas dentro de mi módulo con el mismo nombre de la kb origen sin sospechar el resultado que iba a obtener al cargar este módulo en mi kb origen.

El resultado que obtuve al cargar el modulo en la kb origen fue el siguiente:

a) Un objeto que exporte de la kb origen llamado PMiObjeto a la kb de módulos en donde lo renombre a miobjeto y al crear el módulo quedo como mimodulo/miobjeto. Al cargar el modulo a la kb origen me cambio el código en toda la kb en donde estaba PMiobjeto.call(....) por mimodulo.miobjeto.call(...). Esto no es un gran problema pero me hubiera gustado poder hacer el cambio en el código a demanda y que no lo hiciera de forma automática dado que al objeto del modulo le había cambiado las rules por lo que tuve que tocar en varios objetos dado que al cambiar el código tuve que cambiar la llamada por el nuevo parámetro. Lo otro que me llamó la atención fue que me borro el objeto PMiObjeto de la kb.  Tengo que admitir que seguramente esto este documentado y sea que yo me lo comí al tirarme a hacer estos cambios dado que si no es así es un bug de GeneXus.

b) Una carpeta que exporte la puse adentro de mi modulo y al cargar el modulo en la kb origen me cambio en todos los objetos (255) que estaban en esa carpeta la propiedad Module/Folder por el nombre que esta adentro del modulo pero que no existe en la estructura de mi kb. Básicamente por la estructura de mi kb no puedo ver esos 255 objetos y al generar quedaron con el nombre del paquete adelante cuando en realidad no corresponde. 

Seguramente lo que esta pasando al exportar un objeto de la kb origen a una kb de modulo y luego cargar el modulo en la kb origen GeneXus deje algúna referencia en el objeto que haga que se tenga este comportamiento. 

Espero que esto sea un bug de GeneXus y que esto se arregle a futuro para no volver a pasar por esto, al día de hoy tuve que levantar una kb de respaldo y estoy haciendo todo nuevamente. 

Dejo estos comentarios para ir compartiendo mis experiencias, de todas formas no me voy a dar por vencido y voy a continuar intentando modularizar mi kb y no morir en el intento.












miércoles, septiembre 05, 2018

GXUnit (Pruebas unitarias en GeneXus) (DEPRECATED)

En otro artículo comentaba que estaba contento por el resurgimiento de GXUnit pero después de actualizarme me di cuenta que en la actualidad se encuentra "Deprecated". En realidad no se actualiza desde hace un año y hoy en día no se puede descargar del Marketplace de GeneXus.

Estuve indagando y en la actualidad las pruebas unitarias se van a poder actualizar con GXTest4, en principio y por lo que tengo entendido el modulo de gxtest para realizar pruebas unitarias no tiene costo.

Básicamente creo que con GXTest4 voy a poder cumplir el objetivo de realizar pruebas unitarias y va a tener el mantenimiento necesario, esto ayuda a intentar poner recursos para la generación de pruebas unitarias en nuestros procesos de desarrollo.

Por lo que tengo entendido en la versión Tero estara integrado, para GeneXus 15 hay que bajarlo e instalarlo a mano. En mi caso ya lo tengo instalado y me encuentro por arrancar con mis primeras pruebas unitarias.




martes, septiembre 04, 2018

GXUnit (Pruebas unitarias en GeneXus)

En el último mes me encuentro en una búsqueda de mejorar el código que estoy desarrollando y la calidad de los productos en los que estoy participando. Mi motivación se basa en la necesidad de mejorar y adoptar una nueva cultura de trabajo en la cual pueda acompañar las tendencias de la industria de TI.

En principio creo que adoptar la cultura DevOps me permitiría acompañar los cambios necesarios para estar a la altura de los nuevos desafíos a los que me estoy enfrentando a diario.

La intención de comenzar en DevOps me ha llevado a investigar sobre Integración Continua y Liberación continua dentro de la Comunidad GeneXus.

Todo esto me ha llevado a volver a escuchar de la importancia de GXUnit y ver que por suerte ha tenido un resurgimiento, pueden leer mas en estos dos artículos:  GXUnit renace nuevamente y Renovando interés en GXUnit

También comparto los comentarios en donde se ve con asombro que la comunidad de usuarios no le damos la importancia que tiene el proyecto de GXUnit y realmente creo que tenemos que impulsar la utilización de pruebas unitarias en GeneXus.

Ahora me queda comenzar a implementar pruebas unitarias y ver como sacarle el mejor provecho a GXUnit.



lunes, septiembre 03, 2018

GeneXus Modularity Maturity Model

Estoy intentando aplicar o seguir el GeneXus Modularity Maturity Model  planteado por Enrique Almeida, la verdad que es muy bueno poder llegar a tener todo organizado en módulos dado que cuando se trabaja con KB grandes o para proyectos muy grandes esto se hace mas que necesario.

En los proyectos que me encuentro tengo aplicaciones monolíticas que necesitan comenzar a utilizar módulos ya que se vuelve inmanejable tener KB con mas de 5000 objetos sin modularizar.

El principal problema que tengo es de Calidad y creo que al modularizar voy a poder tener este tema bajo control.

En síntesis siguiendo el GMMM me encuentro en el NIVEL 1, espero en próximas publicaciones poder contar del avance en el que me encuentro.




Mis pedidos para GeneXus Server

Desde hace algún tiempo estoy exigiendo bastante a GeneXus Server y le estoy encontrando algunos detalles que me gustaría que no estuvieran. Si tuviera la posibilidad de pedir algo me gustaría que si me bajo las versiones a mi kb local que las mismas se puedan actualizar si cambian en el server sin tener que volver a bajar todo creando una nueva kb.

Ej: Cuando hago el "Create Knowledge Base From GeneXus Server" me traigo las versiones existentes en el server: Digamos que tengo la versión 1.0, 1.1 y la 1.2. hago cambios y al pasar  tiempo en el server se crea la versión 1.3 en el servidor.

En este caso si quiero tener la versión 1.3 en mi copia local  no me queda otra que volver a crearme una nueva kb desde el server . Esto me implica tener que volver a generar todo y realmente alcanzaría con poder traerme la versión del server. Entiendo que seguramente exista algún problema o impedimento técnico que se me este escapando pero sería muy útil poder contar con esta opción.

Tengo formas de resolverlo pero es algo que me facilitaría la vida en la forma de trabajo que estamos implementando.

También tengo que pedir que en el update se pueda filtrar por los comentarios que se ponen en el commit ya que cuando SCM quiere bajar los objetos que fueron etiquetados en un comentario no lo puede hacer directamente si no que tiene que ir a la opción de history ver los objetos y luego marcarlos para bajar.




martes, agosto 21, 2018

Instalando Glowroot (Open source Java APM)

Estoy investigando algunas de las herramientas Open Source para APM y entre las que encontré me decidí por Glowroot por loq ue voy a enumerar los pasos a seguir para realizar la instalación y dejarlo funcionando para evaluarlo como corresponde.

Los pasos a seguir son los siguientes:
1) Hacer la descarga del sitio de Glowroot
2) Descomprimir y copiar el contenido al equipo o servidor donde se va a ejecutar la aplicación. En mi caso copie la carpeta en el mismo lugar donde tengo las carpetas de Tomcat en un servidor Linux.


3) Modificar el archivo de Tomcat para que levante la aplicación, en mi instalación modifique el archivo catalina.sh del tomcat pero va a depender de la instalación de cada equipo. independientemente del archivo la línea a agregar es la siguiente:
export JAVA_OPTS="-javaagent:/softgxjava/glowroot/glowroot.jar"

4) Si quiero acceder desde otro equipo que no sea el nuestro hay que habilitar esto en el archivo de configuración de glowroot.jar que se encuentra en el mismo lugar que el archivo glowroot.jar. El archivo de configuración es: admin.json
Hay que modificar el bindAddress a "0.0.0.0", la sección web completa quedaría de la siguiente manera:
  "web": {
    "port": 4000,
    "bindAddress": "0.0.0.0",
    "contextPath": "/",
    "sessionTimeoutMinutes": 30,
    "sessionCookieName": "GLOWROOT_SESSION_ID"
  }

5) Habilitar el firewall si se esta trabajando en un Linux y recordar que por defecto el puerto en el que atiende la aplicación web de Glowroot es el 4000. Para habilitar el firewall se puede hacer lo siguiente:

> firewall-cmd --permanent --zone=public --add-port=4000/tcp
> firewall-cmd --reload

6) Acceder a la URL desde el Browser, si la instalación la hice local entro con: http://localhost:4000


Ahora que lo tenemos on-line solo nos queda comenzar a evaluar la herramienta y ver si cumple con nuestras necesidades. En breve subo mis conclusiones sobre este herramienta.





Gestión de rendimiento de aplicaciónes (APM)

Desde hace mas de un año varios clientes y colegas están hablando del Monitoreo de Rendimiento de las aplicaciones o Gestión de Rendimiento según la traducción que se haga de APM (Application Performance Management).

La realidad es que es algo que se engloba dentro de lo que hacemos cuando tenemos problemas de performance en nuestras aplicaciones. Cada desarrollador intenta resolver esto como puede o utilizando las herramientas que están a su alcance.

Investigando un poco pude descubrir el mundo de cosas que esta detrás de APM y que según las recomendaciones los desarrolladores tenemos que comenzar a utilizar herramientas de APM para mejorar nuestras aplicaciones, aparte de descubrir los posibles problemas que seguramente vamos a tener en producción.

En la empresa que trabajo utilizan la herramienta NewRelic pero es paga y me parece compleja de configurar o muy pesada para poder utilizarla en mis desarrollos. Dado que siempre me apoyo en el mundo open source busque y encontré un artículo que habla de 5 herramientas open source que se deben utilizar cuando monitoreamos aplicaciones.

Les dejo el artículo: Java Performance Monitoring: 5 Open Source APM Tools You Should Know

En mi caso de las 5 APM Tools me decidí por Glowroot por su simplicidad a la hora de configurar y los datos que me muestra. Por ahora la voy a testear para ver si cumple con mis necesidades.

martes, mayo 08, 2018

Instalar dotnet-sdk en Linux Mint 18.3

Desde hace días estoy jugando con "Visual Studio Code" por temas de facultad y realmente me esta volviendo loco. Tengo que hacer unos ejercicios en C# y al configurar la herramienta me daba error por no tener instalado el dotnet-sdk.

Luego de volverme loco con algunos paquetes que necesitaba encontré la solución en Stackoverflow que comparto con todos por si les pasa lo mismo.

 Solución obtenida en: Stackoverflow.com

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.1.4

jueves, mayo 03, 2018

GeneXus - Cannot create MSHTML document - SOLUCION!!!

La verdad que tuve este problema que me dio al ejecutar GeneXus 9 en un windows 7 en el cual también tenía instalado la GX ev 3 y GX 15. No tengo mucha idea del problema pero al querer ejecutar GeneXus 9 me daba el problema. Por suerte el amigo Cristian dejo una solución que resolvió mi problema. El post es el siguiente: https://www.lawebdelprogramador.com/foros/GeneXus/734321-Cannot-create-MSHTML-document-SOLUCION.html Básicamente hay que descargar lo siguiente: https://www.microsoft.com/en-us/download/confirmation.aspx?id=8956

sábado, abril 21, 2018

Visual Studio para Linux

En realidad no contamos con Visual Studio completo pero Microsoft ha desarrollado un editor de código que ejecuta sobre Linux, Microsoft y MacOS. La verdad que me tope con esto de casualidad dado que por temas de facultad tengo que usar Visual Studio para programar en C#. Realmente quede sorprendido al toparme con Visual Studio Code y lo primero que hice fue descargarlo para instalarlo en mi Linux Mint.
La verdad que ahora me queda aprender a usarlo ya que por lo que pude ver se puede trabajar con C#, Python y otros lenguajes. La verdad que fue una linda sorpresa que me permite seguir mis clases pero usando mi equipo con Linux Mint.

lunes, enero 15, 2018

¿Qué puedo leer en la playa?

La lectura es algo que me gusta pero por motivos de trabajo y cierre de proyectos tuve que dejar en segundo plano esta actividad. La playa me gusta pero llega un momento que no se que hacer abajo de la sombrilla mientras mi pareja toma sol (actividad que puede llevar varias horas). Por lo que me puse a pensar "¿Qué puedo leer en la playa?", la verdad tengo varios libros que no tienen nada que ver con la informática pero tengo que admitir que me aburren un poco. :-)

En lo que va del verano estoy con el libro de "Introducción a las Pruebas de Sistemas de Información" de Federico Toledo el cual voy a terminar en breve.



Tengo otros relacionados con Testing pero tengo ganas de meterme con el tema de los "Microservices" por lo que voy a descargarme algún ebook que andan en la vuelta. Les dejo un link interesante por si se aburren como me pasa a mi.