Archivo etiquetado como ‘31 de diciembre’

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

Segundos intercalares

Martes, abril 7th, 2009

Clásicamente la definición del segundo ha sido la sesentava parte de un minuto. Sin embargo, es sabido que la rotación de la Tierra no tiene una duración uniforme, sino que ésta se va ralentizando, principalmente a causa del efecto que la Luna produce a través de las mareas. Por ello sus fracciones no poseen una duración constante. Conforme se fue requiriendo más precisión en las medidas hubo que desechar una definición tan simple. Así, si hasta 1967 se establecía el segundo como una parte entre 86400 del día solar medio entre 1750 y 1890, a partir de entonces se decidió determinarlo de modo que resultase independiente de las oscilaciones del movimiento del planeta. Puede parecer algo abstruso, pero hoy el segundo es la duración de 9192631770 oscilaciones de la radiación emitida en la transición entre los dos niveles hiperfinos del estado fundamental del isótopo 133 del átomo de cesio. Y la Decimotercera Conferencia General de Pesos y Medidas continuaba especificando que a nivel del mar, para despreciar efectos relativistas debidos a la gravedad. Con esta definición se eliminan las incertidumbres que pudieran surgir al trabajar con sistemas que requieran gran precisión, como por ejemplo los actuales Sistemas de Posicionamiento Global (GPS), pero surge el inconveniente de que, desechada la idea primera, ahora no todos los minutos habrán de poseer 60 segundos.
Puesto que la medida del tiempo atómico es más precisa que la del astronómico, se hace necesario circunstancialmente efectuar leves reajustes, lo cual se consigue añadiendo o eliminado (hasta ahora sólo ha sido preciso lo primero) lo que se denomina segundos intercalares. Se trata de un segundo adicional que se introduce (o roba) al terminar los días 30 de junio o 31 de diciembre. Así, en la Nochevieja de 2008 los relojes que miden de acuerdo al Tiempo Universal Coordinado (UTC) marcaron, después de las 23:59:59, las 23:59:60. En España, que sigue el huso UTC+1, este segundo adicional se introdujo una hora más tarde. Tales rectificaciones se vienen realizando de la forma explicada desde 1972, si bien desde unos años antes se efectuaban ajustes similares. La decisión de introducir un segundo intercalar la toma el Servicio Internacional de Rotación de la Tierra y Sistemas de Referencia.

Share