День рождения Пола Маккартни и баг с кешированием в Википедии

    Как вы, возможно, знаете — вчера (18.06.2013) был день рождения Пола Маккартни (год рождения — 1942). Я — не большой фанат, так что об этом мне сообщили соц. сети — Вконтакте и Фейсбук. Странным было только то, что в Вконтакте писали, что ему исполнился 71 год, в то время как на Фейсбуке — что 70. Решил сверить эти данные с Википедией, и вот что обнаружилось.

    Под катом — суть проблемы (ничего критического, но довольно занимательно, на мой взгляд).


    По-моему мнению, в этой дезинформации виновата Википедия и вот почему: откройте английскую версию статьи о Маккартни (ссылка) и вы увидите, что его возраст — 70; откройте русскую версию статьи (ссылка) и вы увидите, что возраст — 71 год (на всякий случай, в конце заметки приведу скриншоты подтверждающие это).

    Дело в следующем:
    1. если посмотреть в заголовки ответа на HTTP запрос к английской версии статьи, то можно увидеть, что заголовок Last-Modified содержит значение Mon, 17 Jun 2013 22:03:16 GMT. А еще остальные заголовки указывают, на то, что содержимое страницы было закешировано;
    2. если посмотреть в заголовки ответа на HTTP запрос к русской версии статьи, то можно увидеть, что Last-Modified равно Tue, 18 Jun 2013 18:29:03 GMT;
    3. теперь можно посмотреть историю правок обеих статей и, действительно, английская версия была отредактирована накануне дня рождения, а русская — в день рождения Маккартни.


    Однако значение возраста должно было поменяться и в английской версии. Попробуем получить свежую версию страницы добавив к запросу "?" (ссылка). Это действительно помогло — теперь отображается правильный возраст (но не на оригинальной странице без "?").

    Резюме проблемы: Википедия не отслеживает дату и время изменения страницы, когда изменения происходят в автоматически вычисляемых полях.

    Выводы:

    • Я проверил еще несколько статей, содержащих автоматическое вычисление возраста, и в некоторых из них проблема повторяется. Значит, возрасту из Википедии нельзя безоговорочно доверять :-)
    • Следует учитывать весь динамический контент на странице при разработке системы кеширования. Как мне кажется, вычисляемые поля на страницы Википедии были добавлены позже, после того, как была создана система кеширования. И эта система не была пересмотрена после добавления вычисляемых полей.
    • Проблема — не очень серьезная, так как может быть исправлена со временем путем обновления статьи кем-либо из участников Википедии. Сложно найти статьи, которые редактировались очень давно и содержали бы вычисляемые поля.


    Скриншоты:
    Русская версия image
    Английская версия image
    Английская с "?" в конце URL image

    P.S.
    Я не знаю, имеются ли в Википедии другие вычисляемые поля, которые могут быть затронуты проблемой. Также, я не знаю, имеется ли у Википедии баг-трекер, и стоит ли вообще исправлять проблему.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 39

      +83
      Хех, а я всегда думал, что там вручную правят возраст энтузиасты утром в нужный день:)
        +38
        О_о
          +10
          Аккурат в 0:00 нужного дня.

          А лучше — точненько в час рождения кумира! ))
            +38
            Энтузиасты вручную правят дату смерти… ой, молчу-молчу.
            +1
            Возможно я заблуждаюсь, но мне кажется, что такие простые вещи должны считаться на стороне пользователя каким-нибудь скриптиком.
            Или это вызовет какие-то проблемы, скажем, с генерацией PDF или печатных версий, или с чем-нибудь ещё?
              +2
              Да, я думаю из-за этих проблем сделано именно так.

              Простым решением в данном случае будет выставлять заголовок Expires для таких страниц, чтобы кеш-сервер инвалидировал свой кеш как раз в дни рождения.
                –5
                >Простым решением в данном случае будет выставлять заголовок Expires для таких страниц, чтобы кеш-сервер инвалидировал свой кеш как раз в дни рождения.

                адский костыль
                  0
                  Вы про заголовок Expires в общем? Или видите другое решение в данном случае?
                    0
                    Как правило там не сложный расчет и вполне с ним справился бы и javascript, при этом кэшированная версия всегда выглядела бы правильно и производительность кэша не изменилась бы.
                      0
                      а как же экспорт в пдф, печатные версии? с джаваскриптом может быть много подводных камней, вплоть до его блокировки в браузере пользователя (еще ж есть мобильные устройства, а там целый зоопарк).
                        +3
                        Ну, всегда можно выводить «70[возможно устарело]» в случае отсутствия поддержки js.
                0
                А если я заставлю мою ОС думать, что сейчас 1941й год?
                Надеюсь мне такой скрипт напишет, что еще не родился, а то «исполнился -1 год» звучит не очень круто
                  0
                  Хотя время можно брать с сервера, глупости глаголю. От пользователя требуется часовой пояс(хотя есть ли смысл его учитывать?)
                +1
                Уже в англоязычной вики Полу 71, может дело ещё в часовых поясах, в Лондоне то только 8:44. А вот где интересно находится сервер на котором храниться англоязычная страница про Пола)
                  –1
                  Ну, прошли уже примерно сутки (если считать с 18.06.2013 00:00:00 — то 35 часов по моему времени) + я все еще вижу 70 (после удаления кеша браузера, и попыток выполнения запросов через wget ).

                  Даже посетила меня мысль — вдруг у моего провайдера есть локальный кеширующий прокси. Зашел с канадского сервера — показывает 70.
                    0
                    Также есть другие примеры: en.wikipedia.org/wiki/Peter_Serafinowicz (40, вместо 41)
                      0
                      10 июля 1972
                        0
                        Извиняюсь, попутал месяц. Вот другой пример en.wikipedia.org/wiki/Matthew_Breeze (10 June 1972 (age 40))
                          0
                          41.
                          ;(
                            0
                            как ответили ниже в комментариях — версия страницы может отличаться для авторизованных пользователей. Также, сейчас уже сбросили кеш.
                    +14
                    Значит, возрасту из Википедии нельзя безоговорочно доверять :-)


                    Очевидно, что Википедии воообще нельзя безоговорочно доверять.
                    Впрочем, ничему в этой жизни нельзя безоговорочно доверять. :)
                      +2
                      «Никому нельзя верить. Мне — можно.»
                      +2
                      В руВики есть специальный форум для обсуждения таких находок (адрес http://ru.wikipedia.org/wiki/Википедия: Форум/Технический).
                      Насколько я помню, есть в штате Википедии (не русской, а вообще) и технические работники и багтрекер, но его URL так, навскидку, не скажу.
                      +1
                      «Пол может сделать достойные вещи, если его хорошенечко напугать» © Леннон о последних сольных работах Пола.
                        0
                        О последних, которые слышал Джон?
                        +2
                        В русской версии Пол выглядит веселее, несмотря на больший возраст.
                          +3
                          и моложе)
                          +8
                          Вот о чём запись, учитывая что это IT-сообщество? Код MediaWiki открыт, код шаблонов, считающих возраст, открыт. Всё можно посмотреть и выяснить точно, а не делать шаткие предположения.

                          JFYI:
                          1. Для сброса кеша не обязательно править статью, достаточно добавить «?action=purge», тем самым сбросив кеш страницы.
                          2. Есть стабильные версии статей, и в случае стабилизации статья, отображаемая анонимным пользователям может не соответствовать текущему коду.
                          3. Сейчас появились модули на Lua, и скоро подсчёт возраста будет переведён на них. Хотя как они взаимодействуют с кешем, сказать пока не могу.
                            +3
                            Спасибо за комментарий. Я недостаточно знаком с Mediawiki и его IT-сообществом (уверен, что вы согласитесь, что невозможно знать всё о всех открытых проектах и честно говоря, я не был уверен, что кеширование осуществляется движком, а не сторонним кеш сервером). Если вы часть этого IT-сообщества, то можете прокомментировать проблему более объективно и, возможно, решить. Для этого и был написан пост.

                            Информация полезна, еще раз спасибо. Однако проблему полностью не решает:
                            1) не все это знают (я, например, не знал)
                            2) большинство пользователей анонимны и следовательно им показывается неактуальная версия
                            3) это хорошо, надеюсь, что проблема будет исправлена
                              +1
                              Есть 1) разработчики MediaWiki, 2) участники английского раздела, которые занимаются шаблонами там, 3) участники русского раздела, которые занимаются шаблонами тут. Я из всех этих групп вхожу только в третью, поэтому с ходу про кеширование и движок могу мало что рассказать, и про английский шаблон тоже. Можно поразбираться, но на это нужно время, и его сейчас нет. Если верить справке, то «текущие» значения времени действительно не текущие, а соответствуют значению на момент генерации HTML из вики-текста.

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

                              PS: Выше давали ссылки на технический форум и багзилу, туда писать о проблемах с Википедией полезнее.
                            +1
                            ?action=purge не помогает?
                              0
                              Об этом уже написали выше. Помогает, но не вызывать же purge вручную для каждой страницы с подсчетом возраста?
                                +2
                                Для авторизованных пользователей есть «магический» гаджет UTC-clock, который добавляет в правый верхний угол время в UTC. При нажатии на этот текст делается purge текущей страницы. Даже подтверждение при этом не нужно. Разумеется, это в настройках зарегистрированного участника.
                                  +9
                                  Можно написать бота, который будет с полуночи поздравлять именинников с помощью того-же ?action=purge
                                    +5
                                    «Написал», поставил в крон. Будет каждый день с 00:05 по UTC дёргать страницы именинников в русском разделе. Но всё равно костыль.
                              • НЛО прилетело и опубликовало эту надпись здесь

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое