MSD

Душераздирающее зрелище

Не могу молчать, хочу писать.

Случившийся давеча бунт гаджетов (и сервисов) наводит на меня тоску:

  1. Сюрпризом для меня оказалось количество мест, дублирующих TZ database: операционная система (про которую было известно заранее), PHP, PostgreSQL (в ветке 8.x база TZ старая), Java - это только то, про что я сам знаю. А реально мест - существенно больше.
  2. Таким же сюрпризом оказалось то, что сервисы надо перестартовывать, просто апдейта TZdb и /etc/localtime - недостаточно.
  3. Владельцам продвинутых гаджетов веселухи добавила
  4. ...

Про перевод часов, таймзону, PHP и Drupal

Вдруг кому поможет, поэтому тут (у меня теплится слабая надежда, что в ближайшие годы новых экспериментов с летним временем не будет, поэтому самому такие записки вроде не нужны).

PHP:

  1. У PHP база данных таймзон вшита в пузо и, конечно, не обновляется регулярно.
  2. Но есть pecl-timezonedb, который ее оверрайдит, со свежей базой (последняя имеет номер версии 2011.13), с этим расширением с таймзонами все станет отлично и любимая всеми Europe/Moscow будет работать как полагается по новым правилам.
  3. Но если вы живете под FreeBSD, то там /usr/ports/misc/pecl-timezonedb не обновлялся очень давно, посему:
    • Меняем там в Makefile 2010.9 на 2011.13
    • удаляем distinfo
    • make && make install
  4. Добавляем timezonedb.so в список extensions.ini (на FreeBSD это сделает make install)
  5. Перестартовываем PHP-fastcgi или Apache или что у вас там работает процесс-сервером для PHP
  6. Ура, можно накатить первый стакан.

Drupal 6:

  1. Сам по себе сразу начинает жить правильно (ну, насколько мне показалось). Т.е. таймзона меняется после апдейта PHP-timezonedb с +0300 на +0400 сама.
  2. Но! В Administer-Date-and-time есть настройка про User Configurable time-zone. Если она включена, то пользователю будут показываться даты-времена в его таймзоне. И весь созданный им контент будет иметь время создания рассчитанное из юзерской таймзоны.
  3. Но. Юзерская таймзона специфицирована в секундах смещения от UTC.
  4. Выходов два: или для всех российских пользователей взять и поправить скриптом (по хорошему, с учетом даты регистрации), или просто отменить настройку пользовательских таймзон. Я пошел по второму пути.

"я не знаю, был ли я все еще воскресным или уже понедельничным"

Update: первое место на конкурсе известно кого занимает PHP, где таблица таймзон - вшитая, а не системная. Всех бы убил, да. pecl-timezonedb спасает.

Приз зрительских симпатий за перевод часов получает Яндекс-почта.

Рассказываю:

  • На часах 11:26 (правильного времени), вхожу в Я-почту, вижу там внизу "последний вход в 10:54"
  • Действительно, в 10:54 я туда заходил, написать сам себе письмо и посмотреть на даты в заголовках (и все было прилично).
  • Выхожу (на часах 11:26), вхожу, выхожу, вхожу.
  • Надпись внизу остается все та же, про 10:54.
  • Повторяю еще и еще раз, наконец в 11:55 добиваюсь, надпись меняется на 11:26 (время начала экспериментов). Хотя с 11:26 я входил и выходил раз 10 минимум (а в промежутке 10:54-11:26 - нет).
  • Подозреваю, что в следующий раз "время последнего входа" сменится в 12:26 MSK, через полчасика проверю. Yes! Теперь оно залипло на 11:56

Я, естественно, не знаю в чем там причина, но предполагаю что

  • На части серверов время таки перевелось (часть - честно ставит правильный заголовок Date в почте, да и на глагне у Яндекса более-менее все в порядке)
  • В процессе работы Яндекс-Почты возникает передача (или разбор, или хранение) локального времени без учета таймзоны.

    Или, хитрее (и хуже): таймзона передается и анализируется, но в виде буковок MSK/MSD. А MSK у нас раньше была +0300, а стала +0400.

В ситуации, когда на серверах - разная таймзона, либо разное описание MSK (а что-то из этого, очевидно, имеет место быть), получается веселуха.

Второе место у телефона на WinMobile 6 (или 6.5, не вдавался), сообщение: произведен переход на летнее время.

А мораль в той басне понятно какая (это я не Яндексу, там сами разберутся, ибо умные):

  • Или хранить, передавать и т.п. все в UTC, а только визуализацию делать в локальном времени.
  • Или, в крайнем случае, в формате HH:MM:SS +OFST, но тогда честно разбирать смещение.
  • Но никаких HH:MM:SS (локальных) или HH:MM:SS TZNAME, потому что смысл TZNAME имеет свойство меняться, а разбирать время по полной истории всех таймзон - это же удавиться.

О время-время, темпо-темпо

Ну что, сколько у кого серверов перевело время сегодня с утра?

Я вот огорчился Mac OS X-ом: 10.7 ничего не перевела, а 10.6.8 (вышедшая сильно позже весеннего указа о непереводе) - перевела. Сдается мне, TZ database в Apple смотрят редко и неаккуратно. Одна радость, чинить понятно как: взять FreeBSD-шный zoneinfo и скомпилировать и еще обновить ICU. iOS5, по счастью, все сделал правильно, а то было бы совсем неудобно.

FreeBSD, впрочем, тоже не порадовала. 8-ка обновилась сама (но /etc/localtime, там где было не симлинком, пришлось копировать повторно), а на 6.x пришлось руками солнце закатывать. Официально, конечно, end of life там год назад случилась, но обидно же ж.

Linux-ы у меня все свежие - и в порядке. Кто не апдейтился годами - с теми понятно что будет.

С нетерпением жду вечера, хочу посмотреть у какого количества важных для меня сервисов полночь случится в 1:00 (т.е. всякие биллинги и все такое...)

Владельцы 2-3 режимных счетчиков электричества, расскажите, вам их перепрограммировали?

Subscribe to MSD