Jornadas Anuales Versión 2010

miércoles, 24 de noviembre de 2010

Acercándonos a diciembre, todos nos encontramos planificando reuniones y despedidas.
Nadie deja de celebrar de alguna manera el cierre del año. Fiestita, happy hour, eventos de todo tipo y color. También evaluaciones de objetivos, controles de desempeño.

Nuestra empresa no escapa a la tradicional costumbre, pero dándole un toque distintivo. No nos conformamos con un simple brindis ni con el animador de turno. Tampoco queremos terminar el año sin hacer una retrospectiva del mismo.
Por eso es ya una obligación escaparnos de la vorágine laboral hacia algún punto turístico. Playa o campo, lo importante es compartir un mini break con la gente de la oficina. Queremos hacer un preview de las vacaciones y simultáneamente repasar el trabajo de los últimos meses.

Con este espíritu nos encaminamos este año hacia La Posesiva, un antiguo casco de estancia en Capilla del Señor dedicado ahora al turismo. Lo primero que se nos propuso en la charla inicial al llegar fué detenernos un poco y disfrutar del lugar, como premio a un año difícil y de muchísimo trabajo.
Empanadas, asado, alguna jineteada, ping pong y por supuesto metegol! Todo esto para lograr concentrarnos en el tarea de descansar y divertirnos.

Todo este despliegue de tiempo libre suscita más de un resquemor. No deberíamos estar evaluando los objetivos de la empresa? Cuáles fueron los puntos débiles del trabajo del año? Cómo estuvimos en comunicación?
Mejoramos en la implementación de las nuevas tecnologías? Pues bien, este año la consigna fue 'no hablar' de todo esto. Simplemente descansar, olvidarnos de las presiones diarias y pasar un buen rato.

Después de todo un día sin 'hacer' nada, la llegada de Carola Herrscher una de nuestras coach de Nuevas Miradas, parecía el momento de corte para empezar a hablar de algo serio. Reunidos el viernes a la mañana, nos propuso jugar a 'El teléfono descompuesto'. Contar una historia a un integrante, y esté debe representársela a otro. Este último a su vez re actúa lo entendido para un tercero. Finalmente el que termina debe explicar con palabras el cuento original a toda la audiencia.

Después de divertirnos un rato comprobando nuestras dotes actorales,terminamos el juego, tratando de descubrir algún mensaje o metáfora. Pero esto fué tarea para cada uno. Caro simplemente condujo. No dijo nada ...

Segundo juego : las manos en la masa!
Arcilla. Una buena hora para desarrollar capacidades creativas. Por cierto muy enterradas o inexistentes en algunos, increíbles en otros. Pero faltaba lo mejor: romper todo lo hecho! Seguir el trabajo de otro! Volver a empezar otra obra! Finalmente ... la construcción de la casa entre todos. Cada uno armó algo, todos aportamos y nos dimos cuenta de lo difícil que es armar algo coherente sin ponernos de acuerdo y planificar antes ... En fin, nuevamente Caro dijo poco, pero todos nos divertimos y no nos dimos cuenta que habíamos pasado toda la mañana trabajando.

Mientras todos jugábamos, Andrea y José trabajaban intensamente. Dedicaron un buen rato de su tiempo para charlas individuales con cada uno. La idea de estos encuentros es hacer una especie de 'evaluación de desempeño'. Con su estilo directo y sencillo, nos ayudaron a ver los logros. Que por cierto no son pocos, hacia afuera y dentro de la empresa. Con tanta asertividad, lograron que cada uno se propusiera buenas metas para el 2011 ...

Conclusiones después de estos dos días?

Qué difícil es no hacer nada 'serio' y no hablar de nada filosófico!
Es raro no evaluar, corregir ni planificar. Pero qué importante es conocer a los otros desde otra óptica. Respetar este tiempo de silencio. Darnos cuenta que en la acción conjunta está el valor, y que el ver a otros de una manera distinta enriquece al grupo y a cada uno.

Después de un año de trabajo intenso con el tema de la comunicación, la integración y profundizando en distintas metodologías de trabajo este corte 'formalmente informal' fue más que positivo.

Que es repita!!!


Leer más...

Visitando Giran

lunes, 8 de noviembre de 2010

A principios de este año fue lanzado internamente en Tercer Planeta, la iniciativa "PAI".
PAI no implica nuestra conversión a la religión Umbanda, sino que se trata de las siglas Profesionalismo, Apertura e Intercambio.
Sin entrar en demasiados detalles, cómo parte de esta iniciativa incurrimos en muy diversas acciones, por ejemplo:


PAI Mercosur


La presentación de esta iniciativa en las oficinas de Tercer Planeta se realizó a principios de este año, mientras yo me encontraba trabajando de forma remota desde Vitória, Brasil, asi que asistí via Skype a este anuncio (empanadas acá, suco de manga allá), así fue que tuve la idea de coordinar algun tipo de intercambio con una empresa de la ciudad donde me encontraba, asi fue como buscando en algunos eventos de la comunidad ágil de la región encontré una empresa que se posicionó como referente en metodologías ágiles de Espirito Santo (estado del sudeste brasilero), Giran

Turismo Ágil

Me puse en contacto con la idea de hacer una visita similar a las que hemos hecho con otras empresas cercanas, con el fin de intercambiar algunas ideas, y muy cordialmente me invitaron a visitarlos, lo que finalmente pude concretar el mes pasado.


View Larger Map

Giran es una empresa muy joven (cumplieron un año recientemente) y nació como una empresa enfocada no sólo en la práctica, sino también en la enseñanza y mentoring de metodologías ágiles, especialmente SCRUM + XP. Por lo cual mi visita, como supuse, fue muy fecunda.

Por el lado tecnológico usan en sus proyectos (y enseñan) Java, PHP y Ruby on Rails.

El primer día que los visité se encontraban en medio de un sprint bi-semanal, con lo cual pude asistir, luego de
la charla técnica de la semana, a la reunión diaria y parte del desarrollo. Me recibieron muy amablemente y son muy divertidos :), por supuesto, no sólo es un equipo ágil de geeks, además son brasileros!.

Finalmente asistí a la retrospectiva de ese sprint, el cuál resulto ser un sprint con varios imprevistos, lo que hizo más interesante mi visita :)

Me llamó la atención la ausencia total de "roces" o comentarios CYA entre miembros del equipo (esperables en un sprint accidentado), y como todos los integrantes se mostraron muy involucrados en la mejora contínua del proceso SCRUM, admirable.

De la visita me quedo con una grata experiencia y varias ideas interesantes que observé, sin duda tenemos mucho por aprender y enseñarnos, queda la puerta abierta para futuros encuentros.


Con parte del equipo de Giran en sus oficinas

Leer más...

Trabajo en background

BackgroundWorker


Durante la construcción de una aplicación es habitual encontrarnos con procesos que son muy lentos y no dan feedback al usuario. A continuación les mostramos una de las formas de resolverlo utilizando un control que nos brinda .Net a partir de su versión 2.0: el BackgroundWorker.

Caso de Uso

Una de nuestras aplicaciones tiene una pantalla donde se muestran filtros para obtener un informe que finalmente se graba en un archivo con formato Excel. Anteriormente, cuando el usuario apretaba el botón para iniciar el proceso, la pantalla se quedaba congelada hasta que la búsqueda de datos terminaba. En ese lapso de tiempo no se podía saber que estaba pasando: si se debía seguir esperando, o todo había dejado de funcionar. Aún informando “el proceso puede demorar”, después de unos instantes la aplicación comenzaba a mostrarse con el alerta de “(No Responde)”  y el usuario ya no sabía si seguir esperando, cancelar la ejecución de la aplicación, o en el peor de los casos reiniciar la computadora.

Por qué la decisión de usar el BackgroundWorker

Al comprobar que la performance de la búsqueda ya había sido optimizada desde el motor de bases de datos, llegamos a la conclusión de que debíamos hacer algo para que la aplicación no quede inutilizable mientras se genera el reporte. Sabiendo que lo más importante del reporte  es el resultado final, decidimos hacer todo el proceso de búsqueda de los datos  en un segundo plano y así lograr que la aplicación siga funcionando sin inconvenientes, incluso para realizar otras tareas que necesiten utilizar al mismo tiempo la base de datos de la que estoy esperando la respuesta para el reporte inicialmente deseado.
A pesar que no es ampliamente configurable y adaptable a todo tipo de necesidades, como podría serlo una solución que maneje varios hilos de ejecución desarrollada manualmente, el BackgroundWorker tiene una serie de ventajas muy prácticas para nuestra necesidad en particular y nos evita, entre otras cosas, planear la solución ideal para el problema y escribir “bastante” código para manejar hilos de ejecución lo cual es sumamente delicado ya que debemos tener en cuenta el ciclo de vida de cada hilo (y no perder ninguno en el camino),  la comunicación entre distintos hilos de ejecución, validar y manejar posibles errores, etc..
Todo esto sumado a que solo necesitamos realizar una única tarea indivisible, que consume mucho tiempo y no podríamos mejorar eso con más hilos de ejecución nos llevó a tomar la decisión de inclinarnos por el BackgroundWorker.

Manos a la obra

Veamos cómo en pocos pasos y sin mucho esfuerzo podemos obtener una aplicación que utilice varios hilos de ejecución.
Inicialmente nuestro código lucía así.  


image

Lo primero que debemos hacer es agregar un control BackgroudWorker en el designer del form y configurar los eventos a usar.  Básicamente en nuestro ejemplo utilizamos dos:


 BackgroundWorker, RunWorker

DoWork : Evento lanzado desde el código para realizar las tareas asincrónicas
RunWorkerCompleted : Evento lanzado por el control una vez finalizada la ejecución de las tareas asincrónicas.
Una vez hecho ésto lo único que resta hacer es reorganizar el código:



BackgroundWorker, RunWorker

Si observan con atención al hacer clic en el botón  invocamos al método RunWorkerAsync que se encarga del manejo de hilos y realización de tareas en background lanzando el evento DoWork.
Antes debemos verificar que el control no se encuentre trabajando actualmente, de esta forma evitamos un error.


BackgroundWorker, RunWorker

En el evento DoWork indicamos cuáles son las tareas que se ejecutan asincrónicamente, en nuestro caso hacemos el llamado a la base de datos.



BackgroundWorker, RunWorker

Vale aclarar que contamos con la opción de pasar como parámetro un objeto a través del RunWorkerAsync que es recibido dentro del DoWorkEventArgs. Esto puede ser de utilidad si necesitamos tener acceso al estado de objetos definidos en nuestro primer hilo de ejecución.  

Finalmente en el evento RunWorkerCompleted colocamos todas las tareas que  debemos realizar una vez que se ejecutaron todas las tareas asincrónicas. En nuestro ejemplo, como ya obtuvimos los datos debemos generar el reporte


image

Conclusión:

El BackgroundWorker nos brinda la posibilidad de que nuestras aplicaciones WinForms sean más “ágiles” y luzcan más “veloces“ en la realización de tareas que demandan demasiado tiempo, siendo además su implementación muy sencilla.
Leer más...