Alpha's Manifesto

A black and white figure's thought-hive

Bugs con el manejo de fechas

...it's more likely than you think.

Muchos se habrán enterado del problema que tuvo Windows Azure con el día bisiesto del 29 de Febrero de 2012, el famoso leap year bug que causó downtime en la nube por todo el día. En algún momento se dijo que el problema no estaba relacionado con las fechas sino que fue coincidente, pero explicaciones posteriores confirmaron que era un problema de generación de certificados en el día bisiesto. Las razones de por qué se hace y cuáles fueron los problemas están explicados detalladamente en el blog de Azure: Summary of Windows Azure Service Disruption on Feb 29th, 2012.

Alguien preguntó en StackOverflow cómo protegerse de estos problemas. Por supuesto, si a Microsoft le pasa, a cualquiera de nosotros nos puede pasar. Por supuesto, no está del todo claro cómo fue que se generó la fecha inexistente, ni en qué lenguaje y Microsoft no da datos al respecto, pero esta persona aclara que aparentemente en el Framework .NET esto no ocurre.

Hay una respuesta en particular que me gustó enormemente, a pesar de no haber respondido la pregunta. Él habla de un proyecto en el que está embarcado llamado Noda Time, basado en el Joda Time de Java. Esta API resuelve muchos problemas que por lo general ni siquiera conocemos.

Me gustaría transcribir y traducir parte de su post, indicando algunos ejemplos de estos problemas (aunque no te interese la programación puede que encuentres esto muy curioso):

(…)

  • Mapear un horario local a zona horaria no es tan simple como pensarías. Una fecha/hora local puede ocurrir una vez, dos veces (ambigüedad) o ninguna vez (se salta) por transiciones de horarios de verano.
  • Las zonas horarias varían históricamente – más de lo que TimeZoneInfo generalmente quiere revelar, francamente (no soporta una zona horaria cuya idea de “tiempo estándar” cambia durante el tiempo, o que cambia a horario de verano de forma definitiva.)
  • Incluso con la base de datos de zonas horarias, los IDs de zonas horarias no son de fiar. (CLDR se encarga de esto, algo que estoy esperando en soportar en Noda Time eventualmente.)
  • Las representaciones textuales de fechas y horas son una pesadilla, no sólo en términos de su ordenamiento, sino también los separadores de fecha, los separadores de hora, y cosas raras como los nombres de los meses genitivos.
  • El comienzo del día no es siempre medianoche – en Brasil, por ejemplo, el cambio de horario de primavera mueve el reloj de 11.59:59 PM a 1 AM.
  • En algunos casos (bueno, yo conozco uno) una zona horaria puede forzar a que todo un día se salte – El 30 de Diciembre de 2011 no ocurrió en Samoa! Sospecho que muchos programadores pueden ignorar esto, pero…
  • Si vas a usar otro calendario aparte del Gregoriano, sé cuidadoso y asegúrate de saber cómo se va a comportar.

(…)

Soy un zorrinito CST.

Link del día: Atributos .NET

Los atributos de .NET son una de esas características del lenguaje que están presentes desde hace un buen tiempo, pero es una de esas características que tardamos en descubrir y utilizar.

No hace mucho me encontré con una pregunta en Stack Overflow con el nombre: Most Useful Attributes in C#?, y las respuestas son cosas que nos serían útiles a todos los que trabajamos con ese lenguaje. Desde pequeñas mejoras para el uso del debugger hasta características auto-implementables que de otra forma hay que reescribir. Los dejará explorar esa pregunta con sus contestaciones, que al momento de redacción son 27.

Soy un zorrinito atribuíble.

Link del día: Qué debería saber todo programador JavaScript

Aquellos que están en el mundo web, y más que nada en el mundo de las RIA (Rich Internet Applications), no dudarán en decirme que JavaScript es sin duda una de las herramientas más potentes que tenemos disponibles. Otros sabrán de muchas de las mejoras que se vienen en este área, pero no es lo que quería comentar hoy.

Lo que quería contar es sobre una pregunta en StackOverflow llamada What should every JavaScript programmer know?, con puntos muy interesantes, referencias muy completas y hasta un quiz, y yo creía que sabía y no respondí correctamente ni la mitad de las preguntas.

Leer esas respuestas llaman la atención y sacan a la luz muchos puntos curiosos que quizá no habíamos considerado.

Soy un zorrinito JavaScript.