domingo, 30 de septiembre de 2007

Medir, ajustar, monitorear.

Acá viene mi primer post técnico…

Sobre el final del cara a cara de java del último evento recomendé a los asistentes el uso de JMX. Una vez fuera de la sala una asistente me preguntó si tenía algo escrito sobre JMX en mi blog. Mi respuesta con un poco de verguenza…. “No tengo blog”.

Internamente me prometí que cuando empezara mi blog uno de los primeros post iba a ser sobre JMX en GeneXus y aquí estamos.

JMX (Java Management eXtensions) es una tecnología que permite monitorizar y administrar aplicaciones hechas en Java. Sobre .NET existe algo similar llamado WMI.

GeneXus hace uso de esa tecnología para hacer dos tipos de cosas en las aplicaciones generadas: Monitorear y medir la performance general.

Cuando estamos hablando de medir la performance general nos referimos a lo siguiente:

Encontrar las sentencias SQL que se ejecutan mas veces, las que tienen peor tiempo promedio, las que ocupan mas tiempo total de la aplicación, etc.

A la vez permite encontrar medidas similares para el caso de procedimientos.

Mi recomendación siempre es la de hacer un stress test antes de poner una aplicación en producción y sobre ese stress test analizar las medidas que nos tira JMX. De esa forma podemos analizar las sentencias SQL mas problemáticas y podemos realizar alguna tarea en el DBMS, o cambiar el código GeneXus para que la sentencias generada sea mas eficiente o porque no? usar cache de datos sobre esa tabla en caso de ser posible.

Como dije anteriormente lo otro que nos permite el uso de JMX en GeneXus es el monitorear el comportamiento de la aplicación.

A diferencia de la parte de performance que claramente es una tarea para hacer antes de poner una aplicación en producción, la tarea de monitoreo es sobre todo una operación para realizar sobre producción.

Entre las cosas que se pueden monitorear están, el uso del pool de conexiones, el estado de cada una de las conexiones a la base de datos, el estado del cache de datos, etc.

Además se pueden realizar operaciones en caliente sin tener que bajar la aplicación, como ser aumentar el tamaño del pool de conexiones o matar alguna conexión problemática.

A modo de ejemplo un posible caso de uso podria ser el encontrar un loqueo en la aplicación. Podriamos por ejemplo ver en el DBMS cuales son las conexiones que estan loqueadas, luego ir a buscar esas conexiones en JMX, y ver cada una de las conexiones cual es la sentencias que esta ejecutando y cual es el procedimiento que esta ejecutando esas sentencias. Eso tal vez nos permita encontar un posible error de programación.

Adicionalmente JMX permite el programar “alarmas”. Esto quiere decir disparar alguna acción como por ejemplo mandar un mail o un SMS a algún administrador en caso de que alguno de los medidores este dando un valor no deseado, por ejemplo que haya contención en el pool de conexiones o que alguna sentencia SQL fundamental en la aplicación este dando tiempos no esperados.

Todo lo anterior pretendió ser una explicación “marketinera” sin ir al detalle de la implementación, ni de su configuración en GeneXus, sino más bien para incitar a los desarrolladores de aplicaciones GeneXus a su conocimiento y su uso.

Los detalles para su uso los pueden encontrar en esta dirección:
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Application+Monitoring+and+Management%3A+using+a+JMX+or+WMI+monitor,

viernes, 28 de septiembre de 2007

El ajedrez y Yo

Este post viene de historia, y es sobre unas de mis pasiones… el ajedrez.


No recuerdo bien cuando fue que mi padre me inculco el gusto por el ajedrez, pero seguro que fue de muy pequeño.
Mis primeros contactos los recuerdo de muy pequeño cuando mi padrino Jorge venia a jugar a casa con mi padre y Yo les acomodaba las piezas antes que empezaran a jugar.
Recuerdo verlos horas y horas ahí sentados mirando el tablero y cada tanto moviendo alguna pieza sin emitir ninguna palabra mientras tanto.
No se muy bien porque pero todo ese “espectáculo silencioso” me fascinaba.


Una cosa que hizo mi padre que para mi fue notable aunque alguien pueda decir que no es recomendable fue nunca dejarme ganar.
Seguramente en algún momento me regalaba alguna pieza para hacer el partido más interesante, pero al final él siempre terminaba ganando.
Porque digo que es fue bueno es porque hasta el día de hoy recuerdo el día que le gane mi primer partido.
Fue en un verano en Marindia, en una casa llamada rancho alondra, donde solíamos veranear.
Los nervios que sentía a medida que me iba dando cuenta que podía ganar y la alegría que sentí en el momento que vi el jaque mate fueron indescriptibles.
Seguramente mi padre sintió la misma alegría al ver como su alumno lo había vencido usando los conocimientos que le había dado, aunque no lo demostró :)


A partir de ese momento, mi pasión por el ajedrez fue creciendo y llego el momento de leer sobre el tema.
Aperturas, finales, desarrollo.. todo libro que pasaba cerca mío sobre el tema lo devoraba (no había internet en esa época).


Mas tarde formamos junto con mi padre, mi padrino y un amigo de mi padre (Meijon) un grupo que nos reuníamos todos los jueves por la noche a jugar entre nosotros.
Cada jueves nos reuníamos en una casa distinta y nos quedábamos hasta tarde jugando y comentando cada una de las jugadas del otro tablero en secreto para que los que estaban jugando no escucharan de las grandes jugadas que veíamos desde afuera.
Eso duró hasta que Meijon se fue para España; a partir de ahí ya pasamos a jugar en forma mas esporádica.


Pero llego el momento de internet… Un día navegando encontré un sitio interesante de ajedrez por correspondencia que parecía ser la solución para volver a jugar entre todos sin problemas de tiempo y espacio.
Convencer a mi padrino fue fácil (es gran fanático de internet), convencer a mi padre no lo fue tanto aunque finalmente lo logré.
Así que si alguien quiere unirse, el sitio se llama http://redhotpawn.com/ y mi usuario es iroqueta, el de mi padre cjroqueta y el de mi padrino abu1502.


Bueno, el post ya me esta quedando largo así que termino contando que le estoy enseñando (así como lo hizo mi padre desde chico) a jugar a mi hija Sol.
Ella es muy chica, tiene 3 años, pero ya aprendió a colocar las piezas en su lugar.Aun no esta muy interesada a aprender los movimientos de cada una de las piezas, sino que mas bien ella inventa su propio juego, pero cada vez que saco el tablero y las piezas del armario se pone muy entusiasmada.
De algo estoy seguro y es que voy a hacer lo mismo que hizo mi padre con migo y no la voy a dejar ganar hasta que lo logre por méritos propios :)

Empezando

Bueno, aquí estoy...
Varias veces me había planteado el tener un blog.
Un blog Yo??... naaaaa, para que?... a quien le puede interesar?.... de que voy a hablar?....
Durante el evento me encontré sorprendido al notar que la gente te pide la dirección de blog así como te pide la dirección de mail.
Y para rematar en el "cara a cara" de Java recomendé el uso de JMX y al final de la charla una persona me para y me pregunta "Sobre lo que recomendaste de JMX tienes algo escrito en tu blog"???... plop!!!!
Después de esa dije, bueno va a ver que apechugar y armar un blog, porque ya el decir "no tengo blog" me da un poco de verguencita.
Así que aquí vamos, vamos a ver que resulta de esto y cuanto dura.