January 05, 2009

El error de código que causó el Zunepocalipsis

Finalmente se ha publicado cual fue la causa del error que provocó que todos los Zune 30 dejarán de funcionar el pasado 31 de diciembre. Se presumia que el error era causado por algun bug en el dispositivo que tenia que ver con el año bisiesto. Ahora se sabe que es un error en el código del driver del reloj que viene incluido en un componente fabricado por la empresa Freescale, quien es en última instancia la culpable del desastre. 

El fragmento que contiene el bug es el siguiente:

year = ORIGINYEAR; /* = 1980 */

while (days > 365)
{
if (IsLeapYear(year))
{
if (days > 366)
{
days -= 366;
year += 1;
}
}
else
{
days -= 365;
year += 1;
}
}



Como ven es un error básico, donde la ejecución entra en un loop infinito el dia 366 (31 de diciembre) de cualquier año bisiesto, al no cumplirse nunca la condición if (days > 366) . No logro comprender como es posible que este tipo de bugs llegue a etapas de producción a gran escala, ya que con una simple prueba unitaria se podria haber detectado. Es un ejemplo más que nos demuestra la importancia de las pruebas en todas las etapas del desarrollo de software. Solo queda esperar que Microsoft realice una actualización del firmware para evitar que esto vuelva a ocurrir en 4 años.



Les dejo la liga al código completo del módulo.



Saludos!

Labels: , , ,

January 31, 2008

Problemas con Visual Studio 2008, TFS08 y antivirus

El equipo ha estado trabajando sobre un proyecto real utilizando VS2008 y TFS2008, pero ha ultimos dias surgió un problema bastante grave que obligó incluso a formatear y reinstalar un par de veces una de las maquina de desarrollo.

El setup era:

el problema era que VS2008 tronaba siempre que se intentaba agregar un proyecto al Source Control, o bien cuando se intentaba abrir la solución despues de bajar la ultima versión (Get Latest Version) de un proyecto ya existente en el TFS. VS2008 se cerraba por un error inesperado sin dar mayor información. En el Event Viewer lo que aparecía es:

Faulting application devenv.exe, version 9.0.21022.8, time stamp 0x47317b3d, faulting module kernel32.dll, version 6.0.6000.16386, time stamp 0x4549bd80, exception code 0xe053534f, fault offset 0x0001b09e, process id 0x1114, application start time 0x01c8639ad36b5e66.

el cual no nos dice practicamente nada, pero despues de algunas formateadas el buen Robert se dio cuenta que el error le pasaba despues de haber instalado el antivirus NOD32. Bastante raro no? Finalmente después de que el error volvió a aparecer y con la máquina recien instalada nuevamente sin el antivirus, decidimos hacer algunas pruebas con otra máquina. El resto del equipo tiene otro antivirus y no tienen ningun problema similar. Yo tengo VS2008 y NOD32, asi que decidimos comprobar la teoria en máquina. Instale el Team Explorer, me conecte a un proyecto en el TFS08, baje la ultima versión, quize abrir la solución y ERROR! VS2008 crashed! Al parecer NOD32 SI causa problemas con VS2008 y TFS.

Decidido a no reinstalar nada en mi laptop, deshabilite la protección antivirus y antispyware del NOD32, pero eso no solucionó nada. Le busque un rato en el sitio de errores reportados a MS sobre VS2008 pero no encontre algo parecido. Le volví a buscar por el lado de la configuración avanzada del antivirus. Esta versión de NOD32 trae una cosa llamada "Web Access Protection" que analiza aplicaciones y tráfico HTTP. Dentro de la configuración de este módulo esta un listado de Web Browsers, que en realidad es una lista de las aplicaciones que tienen la capacidad de navegar o utilizar el protocolo HTTP, por ejemlo, en mi lap las aplicaciones marcadas como web browsers son: Internet Explorer, Firefox, el clente de Last.fm, Infopath, iTunes, LiveWriter, Visual Studio 2005 y Visual Studio 2008. Aha! Seguramente por ahi estaba la causa. Desmarque Visual Studio 2008 y ... asunto arreglado! Finalmente podiamos trabajar con VS2008 y TFS sin ningun problema.

Seguramente NOD32 detecta algunas conexiones entre el VS2008 y TFS como ataques o algo asi. Voy a investigar un poco más porque aun agregando la dirección IP del TFS a la lista de IPs que NOD32 no examina el problema persiste. Algo parecido puede pasar tambien con otros antivirus o firewalls y la solución debe ser muy similar.

Saludos!

Labels: , , , ,

September 25, 2007

Aritmética según Excel

Leyendo en The Inquirer veo que descubrieron un nuevo issue (o feature?) en Excel 2007. El error es nada menos que en la multiplicación, Excel no calcula correctamente el resultado de 850*77.1, el resultado correcto es 65,535 pero devuelve 100,000. Ojala y Microsoft no haya utilizado Excel para calcular el valor de su oferta por parte de las acciones de Facebook.



Saludos!

Labels: ,