Rails 2.1: Ahora con zonas horarias!
Posted by andre Mon, 28 Apr 2008 21:54:00 GMT
Primero que nada trabajar con Ruby es puro placer después de haber peleado una buena parte del 2007 contra ASP.Net y esporádicamente contra PHP.
¿Qué tiene de malo ASP.Net? Es marciano. Lo bueno es el gran número de controles que agregan automágicamente comportamiento a las páginas, pero lamentablemente esto es apoyado por un enredadísimo sistema basado en eventos, similar en intención al modelo de Windows Forms, pero con comportamiento impredecible. Tampoco fomenta buenas prácticas (MVC, 3 capas, etc).
Respecto a PHP. Es un lenguaje de templates difícil de debuggear (si uno no usa Zend Studio). Fomenta combinar la lógica con HTML (AAH!! ASCO!!), así que uno se tiene que valer de frameworks como CakePHP o CodeIgniter para poder hacer algo mantenible sin tener que romperse la espalda. También desde hacer algunas versiones (PHP 4?) que soporta el paradigma orientado a objetos, pero con una sintaxis asquerosa, no hay this (o self) implícito, por lo que las clases se ven llenas the $this->algo() por todas partes. ACK!
Bueno, bueno. Quejas aparte, para gente que trabajamos en la web es importante considerar el mercado global. Eso es un cacho, ya que siempre en alguna parte hay que considerar dónde vive la gente y qué idioma habla (esto se evita si uno segmenta su público al mercado latino). Al considerar dónde vive la gente, uno tiene que pensar en qué zonas horarias viven, por lo que hay que considerar mostrarles las horas en su huso correspondiente. Esto puede ser un cacho, especialmente para sitios en dónde no se consideró en un principio soportar múltiples zonas horarias.
El problema está en que hay que intervenir en la forma en que se reciben y muestran las fechas de cada visitante y guardarlos en el almacén de datos en algún formato neutral. En el caso de ASP.Net y PHP esto claro que es un problema. En Rails no.
En Rails 2.1 para agregar zonas horarias a tu sitio tendrás que migrar las horas en la base de datos a UTC (si es que no están ya en ese huso) y agregar un atributo a tus usuarios para que guarden la zona horaria y escribir lo que sigue en application.rb:
before_filter :set_time_zone
def set_time_zone
Time.zone = @current_user.time_zone if @current_user
end
Más información en Rails 2.1 Time Zone support
