Часть 1
Праздничное настроение отгудело. Астрономы занялись обычной работой.
13 января 2020 года мимо Земли пролетает огромное космическое тело размером с Нептун. Что это было так никто и не понял, потому что появилось и исчезло космическое тело ровно из ниоткуда. Уфологи, физики и астрономы долго спорили о природе возникшего явления. Уфологи выдвигали идеи о том, что некий космический корабль пришельцев совершил гиперпрыжок в пространство возле Земли, понял, что промахнулся и лететь нужно дальше и провёл гиперпрыжок снова. В пользу этой теории говорили записи с некоторых устройств, записывающих радиоэфир. Физики и астрономы пытались оспорить мнение, указывая на сильные пульсации, зафиксированные приборами. К тому же, корабли подобного размера построить просто немыслимо. С Земли его видно не было. Фотографий из космоса сделать никто не смог. Да и вряд ли бы успел. Тело возле Земли появилось всего на 10 минут. Приборы конечно отработали мгновенно, но вот люди не сразу сообразили что происходит и куда смотреть. Обозвали странное тело «Чеширским котом».
Часть 2
В кафе сидели два небритых мужика. Обычные футболки, джинсы. На глазах очки. По телевизору крутили репортажи о произошедшем явлении. У учёных брали интервью. Идеи по большей части сводились к домыслам.
Адрей и Сергей потягивали пиво после успешно закрытого проекта по внедрению новой SCADA. Андрей направил палец в ближайший монитор.
— Михалыч, как думаешь? Инопланетяне?
— Нет, Андрюха. Не похоже. Пересмотрели фильмов Диснеевских. Мне кажется это какой-то разрыв в пространстве-времени. Оказалась рядом с Землей какая-нибудь черная дыра и начало затягивать.
— Ну дык Землю затянуло бы, не?
— А потом разрыв закрылся. Чёрт его знает почему. Впрочем, почему бы и не инопланетяне. Создали прибор, открыли червоточину, ресурсов хватило на 10 минут. Червоточина закрылась.
— Да уж. День ещё такой дурацкий. 13 числа.
— Ты в магию чисел веришь что ли? Ты бы астрологов мнения ещё спросил.
— Ой да ладно.
Часть 3
Под действием гравитации «Чеширского кота» орбита Земли чуть-чуть сместилась на более длинную и стала ровно на 24 часа длиннее.
Международная служба вращения Земли стала рассуждать, как вписать в календарь образовавшееся дополнительное время в году. Через пару часов жарких дискуссий у экспертов возникла пара решений.
Первым предложением было официально утвердить 29 февраля обычным днем. Получается, что каждые 4 года потребуется добавлять ещё один день, а 30 февраля добавлять в високосные года. Но вот незадача. 2020 год уже високосный. Придётся добавлять тогда 30 и 31 февраля?
Второе предложение выдвинул австралийский представитель. Раз инцидент произошел в январе, то и время прибавлять надо в январе. Добавить 32 число, а остальные месяцы не трогать. Идея нашла поклонников.
Вспомнили забытые идеи о введении постоянных календарей Конта и Армелина, 13-месячного календаря.
Самые смелые календари энтузиастов не нашли, ведь придётся вносить множество изменений во все сферы жизни, переучивать стариков. Эксперты надеялись, что у нового руководства не возникнет желания добавить день максимально близко к инциденту. К сожалению, новое руководство было не слишком дальновидно и голосованием выбрало второй вариант.
Было решено добавить именно 32 января.
Часть 4
СМИ мгновенно распространили новость. Возмущению программистов не было предела. Решение подвергли жесткой критике. Правительства крупных стран пытались предложить другие форматы решения проблемы.
Под давлением общества и крупных инвесторов удалось отстоять первый вариант решения проблемы. Но на текущий год решение было уже принято, а новое вступит в силу только в 2021 году.
Службы NTP не напряглись. Отсчет идёт в секундах с 1970 года, так что синхронизация пройдёт. Опыт ввода дополнительной секунды уже был обкатан. Остаётся вопрос в отображении и вводе дат на уровне приложений.
Технические директора крупных вендоров ПО поняли, что придётся выкатить патчи для своих библиотек. Времени очень мало. Нужно сделать апдейт версий баз данных. Придется обновить версии библиотек. Для всех версий старого ПО апдейтов не будет.
Часть 5
Из новостей CTO средней софтверной компании «ProfurTech» Михаил Андреев узнал о новостях.
— «Я календарь переверну и снова 32 января» — хмыкнул себе под нос.
Идей сходу не было.
Проекты с кучей легаси. Часть работает на внутренних серверах, к которым есть доступ. Ладно, на своих серверах уж что-нибудь придумаем. Выкатим патчики, туда-сюда.
Назначил встречу с директорами.
— Добрый день, коллеги. Вы уже наверняка слышали новости про введение новой даты в этом году. Думаю, что вас новость не сильно взволновала, но есть пара неприятных факторов.
— Каких же?
— Введение новой даты означает, что наше программное обеспечение будет работать со сбоями. Начиная от операционных систем, заканчивая всем программным обеспечением, которое сейчас функционирует на заводах.
— С одной стороны, процессы должны идти гладко. Когда наступит 32 января, операционные системы начнут думать, что сегодня 1 февраля. Данные соответственно тоже будут писаться за 1 февраля. Пользователи не смогут корректно выбрать текущую дату. Часть записей будет введена либо как за 31 января, либо как за 1 февраля.
Когда наступит 1 февраля, придется вручную «перещелкнуть» дату на 1 февраля. Кое-где должна пройти автоматическая синхронизация с мировыми часами через Интернет. Но тут у меня пока уверенности нет.
Данные от реального 1 февраля начнут дополнять или перезаписывать данные от «нереального» 1 февраля. То есть в таблицах будут записи из будущего.
В коде может быть логика, которая завязана на то, что данных из будущего нет. И если в эти два дня что-то пойдёт не так, то найти ошибку будет очень сложно.
Обновление программ займёт много времени. Сначала нам нужно дождаться патчей от вендоров, потом задеплоить это всё на сервера, проверить регресс. И это всё равно не гарантирует нам отсутствие ошибок.
Я перечислил не все возможные проблемы, часть у меня в голове и это только идеи, которые можно проверить только на практике. Предлагаю выключить серверы на 32 января и запустить их в настоящее 1 февраля.
В зале воцарилось молчание. Через минуту молчание прервал директор: «Выходит, вы программисты, получаете деньги, а проблему решить не можете?»
— Я ээээ… тут не виноват. Такого же не было никогда в истории.
— Так как ты хочешь, чтобы мы останавливали производство на заводах? Сначала программное обеспечение внедрили, а теперь без него ничего не будет работать! Сейчас ты мне заявляешь, что один чёртов день в году заводы гарантированно будет работать со сбоями. Мы поставляем контроллеры в энергетику и в медицину. Люди будут замерзать и умирать? Бизнес потеряет несколько миллионов.
Михаил понял, к чему идёт дело, склонил голову и выдохнул.
— Мы постараемся сделать всё, что сможем.
Часть 6
Мысли к Мише после речи начали подкатывать волнами. Только придумаешь решение к одной проблеме, как тут же приходит новая волна интуитивных выводов.
— Тааак, что в части проектов используют .Net Framework 3.5. Это значит, что Microsoft не выпустит обновления. Ладно, сервисы вроде не так уж сильно критичны, тут наверно сможем уговорить руководство выключить на день.
— Скрипты у нас на Python 2.7. С 2020 версии 2.* перестали поддерживать.
— Старые и новые проекты используют старенький MS SQL Server. Базы просто так не обновить.
— Как будут обновляться наши клиенты? Нашу АСОДУ с наскоку ещё можно пропатчить. А вот программки от Schneider Electric и ABB обновить не выйдет. Тем более они ломаные.
— Бухгалтерия наверно с ума сойдёт, потому что не сможет правильно вводить данные и подготовить отчеты. 1С сойдёт с ума?
— Мы же хотели вводить свою абстракцию работы с датами в 2015. Эээх, ничему опыт не учит. Хотя, это бы помогло только нашим самописным программам. Остальное ПО вокруг бы всё равно работало не так, как надо.
Часть 7
Миша понял, что сделать с проблемами ничего не сможет, руководство не переубедить, собрал вещички и купил билеты на 29 января на Мальдивы. Чуть-чуть заранее, чтобы самолет точно долетел.
От автора:
Я честно долго пытался придумать продолжение истории. Как трагически падают приложения, а программисты подхачивают на лету. Но не удалось придумать достаточно интересных идей, как можно разрулить такую ситуацию и как красиво преподнести в форме истории. С интересом почитаю ваши идеи в комментариях.