Recomendaciones para programadores

Domingo, 17 de julio de 2011

He sabido por enlavin de una entrada de Armin Ronacher donde se describen las particularidades de programar fechas en Python. No voy a entrar a tratar los detalles: mi experiencia con este lenguaje ha sido cautivadora pero breve, y desde luego no he tenido que lidiar con su módulo para el tiempo. Tampoco es éste un blog de programación, y cuando he tocado la informática (Unix, Excel, HTML), lo he intentado hacer desbrozándola de aspectos técnicos. Sin embargo, como no somos pocos los que hemos tenido que hacer malabares escribiendo código para almacenar datos o generar informes, y las recomendaciones de Ronacher son universales, y no sólo propias del lenguaje Python, me gustaría extraer las breves conclusiones a las que llega. Tan breves que se resumen en dos únicos mandamientos:

1. Trabaja internamente con UTC.
2. En la interfaz de usuario, convierte a (y desde) tiempo local.

Estas dos ideas no resultan tan obvias para un novel como para quienes ya hemos tropezado alguna vez con esta piedra. La segunda se deriva de la primera, así que no precisa justificación. Respecto a la primera, el código principal no debe contagiarse de las innumerables y a veces ridículas particularidades que afectan a la hora local: calendario, situación geográfica, horarios de verano, variaciones históricas, etc. Lo ideal es recoger todo esto en una función (si es que no existe una librería que lo proporcione) donde sólo haya que tocar una vez si fuese necesario efectuar alteraciones. Trabajar con UTC no es sólo más simple: el Tiempo Universal Coordinado no es ambiguo; la hora local, sí. Ronacher, entre quejas por la API de Python y los errores relacionados con el tzinfo, es tan tajante que reconviene incluso de añadir información sobre la zona horaria en que se estampan los tiempos. Así, dice, todavía hay una posibilidad de que algún día hagamos las cosas mejor.

Share

Dos cumpleaños seguidos

Domingo, 19 de junio de 2011

Es lo que tiene vivir pegado a la línea de cambio de fecha. Los samoanos emplean el poco habitado huso horario UTC-11. Esto significa que son casi los últimos en despedir el día, sólo superados por pequeños territorios como las estadounidenses islas Baker y Howard. Pero no siempre ha sido así. Hasta 1892, Samoa quedaba al oeste de la línea de cambio de fecha. Entonces, el rey Malietoa Laupepa fue convencido por los comerciantes californianos de que las relaciones con los Estados Unidos eran de más interés para el territorio que las que mantenía con Asia y las islas mayores de Oceanía. Así, los samoanos celebraron una suerte de fiesta doble de la Independencia, dos 4 de julio seguidos. Así describe la experiencia Margaret Isabella, la madre de Stevenson, en Letters from Samoa:

Surely now I have been round the world, since at last I have done that to which I used to look forward, I have “gained a day”. It seems that all this time we have been counting wrong, because in former days communication was entirely with Australia, and it was simpler and in every way more natural to follow the Australian calendar; but now that so many vessels come from San Francisco, the powers that be have decided to set this right, and to adopt the date that belongs to our actual geographical position. To this end, therefore, we are ordered to keep two Mondays in this week, which will get us straight.

De veras que ahora he dado la vuelta al mundo, o al menos he hecho lo que esperaba, he “ganado un día”. Parece que todo este tiempo hubiéramos estado contando mal, [porque] en los primeros días la comunicación se hacía con Australia, y era más simple y de algún modo más natural seguir el calendario australiano; pero ahora que llegan tantos navíos de San Francisco, las potencias han decidido enmendar esto y adoptar la fecha que se corresponde con nuestra posición geográfica actual. Por tanto, han ordenado dejar dos lunes esta semana, lo que nos corrige.

Pues bien, en los últimos tiempos otra vez ha cambiado la dirección de los vientos económicos, y en la actualidad el comercio de los 180.000 habitantes de Samoa está más ligado a Australia y a Nueva Zelanda que a los Estados Unidos. El primer ministro, Tuilaepa Sailele Malielegaoi, se queja de que no se aprovechan como se pudiera dos días laborables de la semana: el viernes, porque en las grandes islas ya es fin de semana; y el lunes neozelandés, porque para los samoanos es domingo. Así las cosas, el pasado cuatro de mayo se decidió pasar al otro lado de la línea de cambio de fecha y mejorar esta situación. Esto se hará posiblemente el próximo 29 de diciembre: los relojes se adelantarán 24 horas; es decir, no cambiarán de hora pero sí se avanzará la fecha dos días en lugar de uno. Y con esto pasarán de ser casi los últimos en despedir el día a casi los primeros en recibirlo. Digo casi porque parte de las islas Kiribati viven, en un alarde de licencia horaria, un forzado UTC+14. Y en las Chatham rige UTC+13:45, pero esto lo dejaremos para otra ocasión.
Para hacer más divertida la situación, se da la circunstancia de que no todas las islas Samoa acompañarán este cambio. Lo que se denomina Samoa Americana, un territorio en tierra de nadie política, no los seguirá. El primer ministro de Samoa (a secas), entiendo que en tono jocoso, afirmaba que de esta forma se podría celebrar dos días seguidos un cumpleaños, una boda o un aniversario sin salir del archipiélago.

Fuentes:
The Alaska Adjustment of 1867 and the Samoa Adjustment of 1892
Samoa Cabinet gives date change green light

Share

Un reloj para Marte

Lunes, 6 de junio de 2011

Me hace saber Juan de una idea curiosa encontrada en una novela de ciencia ficción. Personalmente no he leído Marte Rojo, de Kim Standley Rojo; la narración describe los inicios de la colonización de nuestro planeta vecino, y ganó el premio Nébula en 1993. El párrafo de nuestra atención dice como sigue:

Y entonces tocaron la medianoche, y entraron en el lapso marciano, el intervalo de treinta y nueve minutos y medio entre las 00:00:00 y las 00:00:01, cuando las cifras desaparecían o las agujas dejaban de moverse. Así fue como los primeros cien [colonizadores] habían decidido reconciliar el día un poco más largo de Marte con el reloj de veinticuatro horas, y la solución había resultado extrañamente satisfactoria.

Para que nos entendamos, la duración del día en Marte es sorprendentemente cercana a la de la Tierra. No llega a excederla en cuarenta minutos. Por eso, cuando se ha hablado de asentamientos a largo plazo en dicho planeta -la cuestión no es reducto de la ciencia ficción, ha sido considerada por agencias espaciales-, ha parecido evidente aprovechar la circunstancia y no trastocar demasiado nuestro sistema de cómputo. Hasta donde he podido investigar, la idea tal y como está expuesta en la novela ya había sido planteada dos años antes por B. Clark en el artículo A Day in the Life of Mars Base. Lo menciona R. Zubrin en The Plan to Settle the Red Planet and Why We Must, quien prefiere con el mismo objeto alargar imperceptiblemente la duración del segundo en lugar de detener los relojes al acabar el día. Por supuesto, cuando consideramos el calendario, una adaptación semajante es imposible: el año dura 669 días marcianos, y la gran excentricidad de su órbita hace sus estaciones muy diferentes a las nuestras.
Tiene mucho menos interés considerar a efectos prácticos el día en otros planetas: Venus está sumido en una opaca y corrosiva atmósfera, Mercurio orienta siempre la misma cara al Sol, los demás son inhabitables gigantes gaseosos… Pero si el lector quiere ejercitar la imaginación puede considerar el caso de la Luna y plantearse cómo construiría un reloj para sus habitantes. Doy una pista para quien no conozca su periodo rotacional: nuestro satélite nos presenta siempre la misma cara.

Share