“Debugueando” Situaciones Complejas
Les dejo unos links hacia el blog de Tess Ferrandez, que en forma de juego, muestran como debuguear aplicaciones funcionando en entornos donde llevar o attachar un IDE es imposible. Plantea distintos escenarios, mostrando la mejor manera de debuguear los mismos.
Se basa en la generación de dumps (cuando la aplicación se cuelga o a demanda, en caso que se quiera analizar un problema de performance) y en el posterior análisis del mismo con windbg de forma de poder identificar las razones por las cuales una aplicación falla o tiene problemas. El mecanismo es similar a lo que hace Microsoft cuando se presenta un falla y nos pregunta si queremos que envíe el dump.
El problema de la Ñ y los acentos (tildes) con teclados en ingles
Cualquiera que alguna vez haya comprado una notebook directamente en Estados Unidos se habrá encontrado con el problema de los acentos y la ñ.
Si bien existen dos posibles “soluciones”, ninguna de ellas funciona a la perfección:
- Cambiar la configuracion del teclado a español: Obviamente, luego de hacer esto, se puede acceder a los acentos y la ñ, el problema es que hay que aprenderse de memoria las teclas ya que lo que se ve en el teclado no es lo que sale en pantalla.
- El truco del ALT+ASCII: Si bien sabiendo los códigos se puede lograr una buena velocidad de tipeo (a pesar de tener que tocar cuatro teclas para ingresar solo una), el problema es que las notebooks no tienen teclado numérico y, por lo tanto, hay que estar todo el tiempo activando y desactivando el mismo… muy molesto.
Juntando esta problemática, una noche de insomnio y AutoHotKey nace SpanishMap.
Adminstración de Riesgos
Todo proyecto tiene riesgos asociados, al menos los que valen la pena y dejan ganancia. Estos riesgos, en caso de ocurrir, suelen invalidar la planificacion realizada.
Un riesgo es un problema que aún no se manifestó. Un problema es un riesgo que ya se manifestó
Si no se administran los riesgos de un proyecto lo que suele ocurrir es que la fecha planificada se mantiene (ya que no hay causas claras para replanificar), pero el alcance o complejidad de las tareas a incluir ya cambio. Para peor, probablemente nadie pueda adelantarse a este desvio y seguramente se detecte cuando las unicas salidas sean trabajar 20 horas seguidas o atrazarse.
La administración de riesgos consiste en identificar, direccionar y eliminar las fuentes de riesgo antes de que se conviertan en amenazas al proyecto. La administración de riesgos se divide en dos grandes actividades, detalladas a continuación.
Software as Utility (aka Software as Service)
Un Poco de Historia
Como casi todos a esta altura ya saben, las primeras computadoras era extremadamente caras, lentas y ocupaban mucho pero mucho espacio. Los operadores (o programadores) las utilizaban moviendo llaves de forma manual.
Primer Hito: El Procesamiento Batch
A medida que, de a poco (y gracias al transistor), las computadoras iban ganando velocidad el tiempo que se insumía entre “ejecuciones” de programas comenzó a tener importancia. Para solucionar este problema, aparece el procesamiento batch: Gran Idea!
Ahora los operadores pueden perforar tarjetas (“offline”; sin acceder a la computadora) y luego dejarlas en espera para que la computadora ejecute el programa inmediatamente después de terminar la ejecución actual. Es decir, desaparece el tiempo muerto entre programas.
La piratería ya no tiene sentido…
Este fin de semana tuve que reinstalar mi notebook. Estaba usando el windows 7 RC, pero dado que tiene fecha de vencimiento y que además tenia una licencia para el windows 7 RTM decidí hacer la migración.
Luego de formatear, instalar el windows 7 y dejar todo correctamente configurado me puse a ver que software necesitaba y, para mi sorpresa, me di cuenta que existía una versión gratuita (y muchas veces hasta open source) para cada necesidad. Si bien no es algo nuevo, es la primera vez que al momento de instalar de cero una maquina no tuve la necesidad de acudir a algún programa comercial (y eso que como dije, estoy dentro de un windows).
Google Wave: Colaboración vs. Cooperación
Está claro que google sabe innovar y este nuevo producto o plataforma lo demuestra. Ideado por la misma gente que implementó Google Earth, nace Google Wave.
Qué es Google Wave?
La mejor forma de describir a Google Wave es como una plataforma para trabajar de forma cooperativa (la forma colaborativa es obsoleta!). Busca reemplazar tecnologías obsoletas (como por ejemplo el email) y unificar todas las cosas que andan dando vuelta en la web (wikis, chat, redes sociales, blogs, etc).
Una técnica de estimación de proyectos basada en Casos de Uso
Si bien el movimiento ágil (tan de moda últimamente) dice claramente que no se debe ni puede estimar un proyecto completo al momento de iniciarlo y que cualquier técnica que intente hacerlo va a terminar mal; no son pocas las veces que se necesita conocer de ante mano la duración estimada del mismo. Hay que tener muy en claro que esta estimación suele ser de mínima (el proyecto no va a tardar nunca menos de esto) pero la duración real puede incrementarse mucho; a menos que sean sumamente estrictos y acotarse a hacer únicamente lo que se escribió dentro de los casos de uso utilizados en la estimación.
A partir de un mail, donde alguien preguntaba como estimar un proyecto; se me ocurrió postear una forma a mi me da resultados aceptables. No tiene conceptos teóricos, es una solución netamente empírica que a mí me funciona (si utiliza algunos conceptos teóricos “blandos”, pero nada más). Algunas ideas están tomadas prestadas del libro “Software Estimation” de Steve McConnell (muy recomendado).
Disclaimer: Desde ya que la estimación y planificación de proyectos es una tarea muy compleja y única. Cada proyecto tiene sus detalles, sus compromisos, sus equipos, tiempos, costos, etc. Cada proyecto es un mundo y como tal, esta técnica que yo utilizo debe ajustarse y modificarse con criterio (y hasta puede no servir). Sea cual sea la técnica final a utilizar, siempre tener cuenta de no cometer errores conocidos.
Terminada ya la introducción pertinente al tema, les comento la técnica:
Notificar cambios de forma sistematica
En los últimos días me surgió la necesidad de notificar a la vista cada vez que ocurrian cambios en el modelo. La solución rápida, aburrida y repetitiva es la de ir a la clase base del modelo y publicar los eventos. Luego ir a cada clase del modelo y en todos los setters agregar el codigo para notificar el cambio.
Haciendo uso de Reflection, delegates anonimos y generics; implementé otra solución que si bien no es super novedosa, me pareció que vale la pena compartir con ustedes.
Jornadas Agiles 2008
Ya se vienen las “Primeras jornadas latinoamericanas sobre metodologías ágiles” en el hotel Bauen. Entre otras cosas, durante las jornadas se dictaran cursos para certificarse como scrum master (al cual estoy inscripto hace rato).
A pesar de no haber participado en la organización, se que se hizo bastante a pulmón y ad-honorem asi que esta bueno ver que no se necesita ser una gran empresa para organizar este tipo de eventos.
Les dejo el link en caso que quieran ver el programa de charlas y anotarse en alguna:Jornadas Agiles 2008
