jueves, 27 de agosto de 2015

#GX25 - Que esperar del Encuentro Genexus de este año.

Ayer Gastón Milano  y Gustavo Carriquiry brindaron un webinar  (**) sobre como viene la organización del 25 Encuentro GeneXus y que tipo de charlas habrá y cuales serán los temas destacados del mismo.

Hay oradores muy importantes confirmados y los temas de mas realce parecen ser Cloud, Internet de las Cosas, herramientas de Deploy. Mobile, WEB, ayuda en el diseño gráfico de aplicaciones.

Otros temas no tan destacados pero importantes, es algo que Gastón nombro al pasar que piensan mostrar ideas para posicionar a Genexus como un intermediario entre datos y otro tipo de aplicaciones (por ejemplo aplicaciones hechas con GeneXus en diferentes versiones), potenciar los módulos, etc.

El tema del encuentro es  What's Next, por lo que deberíamos aspirar a ver charlas sobre que son las próximas cosas que se nos vienen.

Tenia esperanzas (aun tengo) de que hubiera algunas charlas o mejor mesas de intercambio, donde poder intercambiar ideas sobre como podríamos desarrollar en los próximos años.
En particular, me gustaría analizar todo el ciclo de vida de una aplicación, y estudiar que cosas son automatizables de cada una de las etapas, para empezar a diseñar herramientas que automaticen dicha tarea.
Por ejemplo:

  •  Captura de Requerimientos
  •  Análisis
  •  Diseño
  •  Implementación
  •  Pruebas
  •  Implantación
  •  Mantenimiento
y también
  • Documentación
  • Medición y Mejora
  • Análisis de Riesgos




También estaría bueno poder charlar sobre en que forma se organizan los grupos de desarrollo, como automatizar la generación de documentación, que indicadores conviene medir para poder mejorar nuestro proceso de desarrollo, etc.

Es un tema que da para muchísimo y el Encuentro es el lugar óptimo para para intercambiar ideas, aunque por no se pueda profundizar demasiado

Creo que en la comunidad GeneXus tenemos oportunidades de hacer el desarrollo de aplicaciones mas automatizado y no lo estamos aprovechando al cien por ciento.

** Para los proximos WEBINAR, seria bueno hacer pruebas de sonido previas, no usar 2 microfonos simultaneos pues  hacian un eco que dificultaba mucho escuchar.  El formato de la charla fue bastante informal, pero en varios momentos hablaban los dos al mismo tiempo y rapido, con lo cual no se entendia todo lo que decian.

martes, 25 de agosto de 2015

KBdelete - Utilitario para borrar bases de conocimiento GeneXus.

Por mi trabajo en Concepto, me toca hacer migraciones, probar las nuevas versiones de GeneXus con sus Night Builds, reproducir errores para reportarlos etc, por lo que paso creando bases de conocimiento que luego no uso por bastante tiempo.

Por alguna extraña razón que no conozco, GeneXus no trae ninguna opción ni utilitario para borrar una base de conocimientos y todos los archivos generados con ella.

Me disponía a borrar varias KB que ya no usaba, y me di cuenta que podía ser mas rapido hacer un utilitario para borrar la KB que ponerme a borrar a mano cada una de ellas.  La idea es siempre tratar de automatizar lo automatizable. 

Para cada KB que se quiera borrar se debe hacer:

* Borrar la base de datos SQL Server correspondiente
* Borrar todos los archivos y directorios bajo dicha KB.

Para esto hice un utilitario dado un directorio busca todos los archivos GX_KB_*.MDF (nombre por defecto con que se crean las bases de datos de KB GeneXus en SQLServer) y borra la base de datos correspondiente.

Para poder borrar los archivos, en caso que se utilice .NET hay que también bajar el IIS para permitir borrar los directorios que están en directorios virtuales.

Alcanza con copiarse este codigo a un archivo KBDelete.CMD, cambiar los valores en amarillo y ejecutarlo. Va a buscar todas las KB bajo el directorio contenido en la variable raiz (en mi ejemplo es c:\models\salto y pregunta una a una si se quiere borrar la KB

Está muy poco probado, no contempla todos los casos (por ejemplo,  no lo probe con KB en Java y Ruby, tampoco cuando se tiene la base de datos en otro directorio o se le cambio el nombre a la base de datos, etc.
Dependiendo la cantidad de archivos que se tenga bajo el directorio que se quiere borrar, puede demorar bastante.

@echo off
echo ================================
echo  KBDelete - Delete a GeneXus KB 
echo  ver 1.0 - by Enrique Almeida
echo ================================

set SQLServer=NombreServidorSQLServer
set raiz=C:\Models\Salto

REM TODO - Falta borrar el directorio virtual en IIS 
REM TODO - Falta ver como manejar java
IISRESET

set /p raiz="Enter KB folder [%raiz%] : "
set /p SQLServer="Enter SQLServer name [%SQLServer%]: "

for /R %raiz% %%f in (gx_kb_*.mdf) do call :deleteMDFandFiles  %%~nf %%~dpf %%~ff "%%~tf" 
pause
exit /b

REM ===========SUBRUTUNAS =====================
:DeleteMDFandFiles
echo ===============================
set /p sigo="DELETE %2 ? "
if /i %sigo%==Y (
        sqlcmd -S %SQLServer% -Q "SELECT 'DROP DATABASE '+ base.name FROM sys.master_files arc INNER JOIN sys.databases base ON base.database_id = arc.database_id and type_desc='ROWS' and Physical_Name='%3'  " | FIND "DROP DATABASE" > drop_temporal.sql
        sqlcmd -S %SQLServer% -i drop_temporal.sql
        del drop_temporal.sql
        rmdir /q /s %2 
        echo ===============================
        )
exit /b


Mi script original, para funcionar tenia que tener una base de datos que se llamara igual la KB con GX_KB_ por delante. 
Ruben Cabrera mejoró es script para que pudiera borrar aun si el nombre de la base de datos difería del nombre por defecto, siempre emepzando con GX_KB_


jueves, 20 de agosto de 2015

KBDoctor v10.10 - Funcionalidades agregadas

En la versión 10.10 del KBDoctor (para Evo3 U3 ** o superior y para Evo2 U4 o superior) hay algunos arreglos de errores o cosas que funcionaban mal y algunos reportes nuevos.

Lo dejé documentados en la pagina del Wiki de la comunidad : KBDoctor 10.10 (Nuevas Funcionalidades)

** No funciona para la Evo3 Upgrade 1 y 2, porque hay cambios en el GeneXus Platform SDK y tengo que recompilarlo con esas versiones viejas y aun no lo hice.

viernes, 14 de agosto de 2015

Costa Rica: Exenciones fiscales se tramitan online

-- Publicado en Petroglifo --

El Ministerio de Hacienda de Costa Rica, hizo obligatorio el uso de sistema Exonet, para tramitar todas las exenciones fiscales en Costa Rica. (leer decreto aquí.). 

El sistema fue desarrollado por Concepto en GeneXus Evolution 1 y hace unos meses fue migrado a Evolution 2 y viene siendo usado con éxito desde hace varios años.


 Mas noticias sobre este tema en: 

miércoles, 12 de agosto de 2015

Optimizaciones en aplicación WEB GeneXus Evolution 3.

Migramos una aplicación WEB de Evolution 2 a Evolution 3 usando Smooth en la propiedad "Web Experience".
Los resultados son muy buenos, pues ahora tenemos mas control sobre cuando la aplicación debe hacer refresh y por lo tanto podemos mejorar mucho la performance.

Este proceso, me llevó a mirar con mas detalles los request que hace una aplicación al server, para tratar de optimizarlos.

Request a Favicon.ico. 
Realizo mis pruebas usando Google Chrome como navegador y reviso lo request con las developer tools.
Uno que me llamo mucho la atención, fue cuando iba a buscar el favicon.ico, que no tiene nada que ver con la aplicación, sino que lo hace Chrome para poner el icono en el tab del navegador.
Al no tener ninguna referencia a esa imagen, Chrome va a buscar el icono a la raiz del sitio web (ej: www.servidor.com)
En particular en dicho sitio tenia en la raíz un redirect a otra pagina, que traia 40Kb.
O sea, cada request a la aplicación, hacia un request al favicon.com + un redirect + otro request a la otra pagina + transferencia de 40KB. Todo para mostrar un iconito arriba.

Lo que hice para solucionar esto, fue poner un favicon.ico en la raíz de la aplicación y agregar en la MasterPage de la aplicación el código

Form.HeaderRawHTML = '<link rel="shortcut icon" href="favicon.ico">' 

y con esto bajo el tiempo del request y la cantidad de bytes transferidos.

Request duplicados por el Menu Smooth Nav Menu. 
Otro request que me llamo la atencion, era que aparecia duplicado el request al webpanel que estaba haciendo referencia, por ejemplo, si llamaba a webpanel.aspx, siempre aparecían dos request a dicho objeto. 

Después de varias pruebas, pude ver que el culpable de esta doble invocación, era el UC Smooth Nav Menu, que es muy lindo y práctico. 

Para probarlo, hice un webpanel vació, que lo único que hacia era

Event Start
   &i = sleep(10)
EndEvent

de forma de permitirme ver bien donde se producían las demoras y la doble invocación. 

Cambie el menu por el DropDownTab Menu, que no me resulta tan lindo, pero no repite el request y la performance mejoro bastante.  Con el DropDownMenuTab menu demoraba 10s y con el SmoothNav menu, demoraba 20s. 

La aplicación con Evolution 2 hacia:

En Evolution 3 quedo así:

Paso de 14 segundos a 4 segundos en la página mas pesada de la aplicación.  No es un buen tiempo de respuesta, pero sin duda esta mucho mejor que antes. 

Son algunas micro optimizaciones que pueden cambiar bastante la sensación que un usuario tiene de nuestras aplicaciones.