Archivo etiquetado como ‘Abu ‘Abd Allah Muhammad b. Yabir b. Sinan al-Battani’

El tiempo de Microsoft

Lunes, febrero 8th, 2010

Hace unos días Juan me envió dos enlaces (Fabulous Adventures In Coding y My First BillG Review) que representan una muestra de las dificultades con las que un programador tienen que bregar en ocasiones debido a nefastos diseños que pueden haberse llegado a enquistar eternamente con la excusa de mantener compatibilidades. En este caso, los dos textos se refieren al formato interno de representación de fecha que usa OLE Automation (para los legos, uno de los mecanismos más extendidos de comunicación entre aplicaciones de Windows) y describen sus incongruencias en un tono jocoso. Lo que sigue es un resumen también informal. Para otro día quedan las descripciones de otros formatos de tiempo usados en informática, por suerte algo más coherentes.
Remontémonos a finales de los ochenta. En el terreno de la ofimática se estaba librando una batalla entre las empresas Microsoft y Lotus. La segunda ofrecía la hoja de cálculo más popular hasta el momento, Lotus 1-2-3, papel que ambicionaba Excel. Cuando la compañía de Bill Gates desarrolló esta aplicación quiso asegurarse de que su software era capaz de importar los documentos existentes de su rival. Y con ello heredó un formato de tiempo que se había concebido con bastante anterioridad para equipos muy excasos de memoria, apenas 640Kb. Para hacernos una idea, hoy día cualquier fotografía digital, comprimida, ocupa varias veces este tamaño. Con todo, no parece excusa que justifique suficientemente un formato tan surrealista.
Para OLE Automation el tiempo se representa internamente como un número real. La parte entera indica el número de días transcurridos desde la medianoche del 30 al 31 de diciembre de 1899. La parte fraccionaria, las horas y minutos. No se hace referencia a zonas horarias, ni a horarios de verano. Imagine el lector que una oficina en Santa Cruz de Tenerife tuviera que compartir información relativa al tiempo con otra en Caracas y empezará a comprender las implicaciones. O que almacenase información, y un día al año las dos y media de la mañana acaeciesen antes que las dos en punto. Las especificaciones no detallan cómo dividir la parte fraccionaria los días que tienen 23 o 25 horas. Pues bien, buena parte del software que se ejecuta hoy en un sistema Windows emplea este método de representación de tiempo. Pero las rarezas no han hecho sino empezar.
Un número en coma flotante tiene distinta exactitud según su tamaño. Esto implica que las fechas cercanas a 1900, según el tiempo VT_DATE, alcanzarán gran precisión al determinar las fracciones de segundo. Sin embargo, conforme nos alejemos de este año iremos perdiéndola progresivamente. Y si es hacia el pasado el efecto puede ser más catastrófico. Al aproximarnos a las doce de la noche llegará un momento en que el ordenador deba efectuar un redondeo, y lo hará hacia el entero más cercano, menor. Pero la parte fraccionaria del día se cuenta hacia adelante en el tiempo. Lo que quiere decir que, incurrirá con esta aproximación en un error de un día; eso con apenas avanzar una fracción de segundo. Eric Lippert sigue comentando más incoherencias: se podría pensar que, puesto que la parte entera de un número es, como se ha dicho, el número de días transcurridos desde una determinada fecha, para saber los que median entre dos momentos cualesquiera basta con restar. No se puede hacer tan a la ligera. Los valores -0.75 y 0.75 representan el mismo instante: las seis de la tarde del 30 de diciembre de 1899. El formato asocia al mismo día dos números diferentes (se podría decir que cuenta dos veces el cero). Si la diferencia se realiza entre dos valores negativos también se puede incurrir en un día de error. Por otro lado, el 60 representa el día 29 de diciembre de 1900, fecha inexistente, pues dicho año no fue bisiesto. Esto último explica por qué se eligió como momento de inicio en este formato la medianoche del 30 al 31, y no el cambio de año.
Joel Spolsky comenta que, cuando fue preguntado por Bill Gates acerca de si Basic conservaría compatibilidad con Excel en cuanto a las fechas, y su respuesta fue afirmativa, con la excepción de enero y febrero de 1900, el dueño de Microsoft exclamó joder tan solo cuatro veces.

Share

El calendario musulmán

Domingo, octubre 16th, 2005

Los musulmanes llaman a los tiempos precedentes a Mahoma la yahiliyya o era de la ignorancia. El calendario arábigo que se usaba empleaba meses de treinta y veintinueve días casi siempre alternativos, y el año constaba de doce de estos meses. Era un sistema fuertemente basado en los ciclos lunares, pero aproximadamente cada tres años, aunque sin una regulación fija, se intentaba reajustarlo con el periodo solar, para lo cual se intercalaba un año superabundante, de trece meses.
Al Profeta estos suplementos de trece lunaciones le parecieron un rasgo de infidelidad, y unos años después de su muerte el califa ‘Umar ibn Al-Jattab instauró una nueva era, la islámica, que daría comienzo en su registro del tiempo con la salida de Mahoma de la Meca, la Hégira. Para ser más preciso, unos cuatro días después de su llegada a Medina, para hacerlo coincidir con la luna nueva, el 20 de septiembre de 622.
El ciclo lunar o sinódico dura un poco más de 29 días y medio, de modo que no se ajusta cabalmente a un año de 354 días. Para resolver dicho problema, el calendario musulmán introduce un periodo mayor, de tradición sumeria, de 360 lunaciones o 30 años, de los que 11 se computan como bisiestos o kabisa. Este sistema ofrecería un buen ajuste con las fases lunares, de sólo un día de error cada dos milenios; pero, al prescindir por completo de la referencia del periodo solar, no existe correspondencia entre fechas y estaciones, y las festividades se van adelantando con respecto a las últimas. De hecho, al poseer años de unos once días menos que el calendario gregoriano, avanza más rápidamente en el cómputo.
No obstante, lo que más sorprende a ojos extraños a esta cultura es la determinación del inicio de cada mes y consecuentemente, la duración de éstos, la sucesión de años bisiestos, etc. Tal acontecimiento se establece cuando alguien observa la primera luna o hilal en las condiciones que establece el orden jurídico. El avistamiento se ve influido por multitud de factores meteorológicos, humanos y astronómicos, además de por la localización geográfica, de modo que un país islámico puede haber entrado en un mes mientras su vecino no lo ha hecho. Realmente el mes se iniciaría a la noche siguiente, pues el día musulmán comienza con la puesta de sol. Recientemente se está debatiendo el uso de instrumentos como telescopios para determinar el inicio del Ramadán. Las horas, que regulan los cinco rezos diarios, son pues de duración irregular. Se cuentan doce diurnas y doce nocturnas invariablemente.
La impredictibilidad del calendario obligó desde muy temprano aceptar a modo de calendarios teóricos modelos como el del matemático Abu ‘Abd Allah Muhammad b. Yabir b. Sinan al-Battani o, entre astrónomos, horas de igual duración.

Share