Simple Features Thoughts about simple features in software development

12Nov/090

Texto, tiempo, y monedas

Hace un par de semana estaba por entregar un nuevo sistema de comunicaciones para AVL (Localización automática de vehículos). Nos percatamos que ese fin de semana, México finalizaría el horario de verano: la diferencia de -5 UTC cambiaría a la diferencia normal de -6 (HCM). En nuestra compañía establecimos un estándar para ejecutar los cambios de horario coherentes en todo el sistema de acuerdo con las especificaciones nacionales. Sin embargo ahora el sistema estaba reportando una diferencia de -4 horas.

¿Qué demonios pasa? ¿Como paso de que tenía una diferencia de -5 horas a la normal de -6 hasta una totalmente anormal diferencia de -4, y para hacerlo más complicado, 5 horas antes de que el cambio de horario ocurriera?

Este es el tipo de requerimientos que pueden volver a un programador en un lío en una nada de tiempo... Fue en ese momento que mi amigo Carlo y yo recordamos una de las cosas más importantes de la computación: luego de 60 años de innovación, nuevas tecnologías, logros sorprendentes en la ciencia, aterrizajes lunares, etc., no ha existido una resolución definitiva para tres temas principales.

  1. Monedas,
  2. texto,
  3. y tiempo

La moneda por si misma es un tipo de dato. La moneda no puede ser representada por un float ó por un double. El problema con la moneda no es como hacer aritmética simple con una clase Currency (cuya verbosidad puede hacernos querer cambiar de carrera), sino en toda la complejidad de establecer el valor del dinero cuando el sistema no está preparado para cambios de moneda... esto es una sentencia final de sistema.

El problema con el texto es acerca del manejo de caracteres (charsets). Hoy observaba un webcast donde una de las características fabulosas del procesamiento de texto en Silverlight 4 era la capacidad de mezclar charsets en el mismo documento. En un sólo párrafo estábamos viendo UTF-8 mezclado con otros textos unicode. Finalmente había un documento de texto con una característica sólo vista antes en tinta y papel, y sólo tomó sesenta años de tecnología e investigación.

Con el uso de formatos altamente verbales (estoy pensando en tí, XML) el almacenamiento y distribución de la información no es una tarea fácil cuando llega el momento de elegir los formatos. La primera vez que use XML simplemente copié el header que más comunmente encontré en los ejemplos, y siempre decía "UTF-8"; usar UTF-8 en español es como cortar el diccionario a la mitad. Después de algunos intentos empecé a utilizar ISO-8859-1 con todas las capacidades que esto me dió de usar el diccionario español completo pero, ¿Fué la mejor decisión de diseño?

El tiempo es una ciencia completa. Las zonas horarias son HORRIBLES: diferencias horarias de horas, medias horas y cuartos de hora (ver Nepal aquí y aquí y las islas Chatham aquí) entre las zonas horarias son simplemente una locura. Y hay mucho que responder con respecto al tiempo:

  1. ¿A qué hora pasó X? ¿Tiempo del usuario? ¿Tiempo del servidor? ¿Y que tal que mi aplicación es distribuída?
  2. ¿A qué hora sucederá X?
  3. Si cambia la zona horaria (aparatos móviles), ¿se dará cuenta mi dispositivo?
  4. Si estoy usando Linux y mi aplicación cambia a Windows, ¿seguirá siendo el tiempo coherente?
  5. y las preguntas pueden continuar ad-infinitum...

Los calendarios... ¿ha trabajado alguien con calendarios sin sentir la necesidad de ser enterrado vivo? No hay correlación entre todos los calendarios. Por ejemplo, observemos dos hechos del calendario judío: el año del 2009 al 2010 corresponde al 5770 de su era, y el año tien 354 días (ó 353, ó 355) divididos en 12 meses lunares, llenando los días restantes con un mes periodicamente.

El mayor problema acerca de estos tres temas que estamos tocando: la mayoría de las preguntas surgen cuando han salido a la superficie en la forma de un bug.

Una aplicación normal a ser usada dentro de una compañía debe estar atenta a estos problemas. Regularmente, un desarrollador sólo usará el primer enfoque que le de el lenguaje ó el IDE al momento de necesitar entregar un nuevo producto. Resolver estos temas tal con las opciones predefinidas se convertirá en una decisión que se heredará en tus pasos siguientes en la compañía, y en la decisión de la que SIEMPRE te arrepentirás.

Estos tres temas son la razon de existir de este blog. Al revisar estos temas podemos percatarnos que hay muchos requerimientos básicos en la programación que afectan el comportamiento de un sistema y que no están bien enfocados para los principiantes, y donde los programadores avanzados sólo dan consejos generales pero no respuestas directas. Estos no son necesariamente los únicos temas, pero estaremos trabajando en ellos frecuentemente.

En términos vagos, esto fué lo que pasó con la diferencia de cuatro horas: no consideré el comportamiento del lenguaje al implementar el estándar de la compañía. En detalle, esto será analizado y corregido la próxima semana.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

Trackbacks are disabled.