«Уничтожает всё кругом:
Цветы, зверей, высокий дом,
Сжует железо, сталь сожрет,
И скалы в порошок сотрёт,
В этой загадке из »Хоббита« идет речь о времени. И если вы не угадали с ответом, ничего страшного: в отличие от Бильбо Беггинса, ваша жизнь от него не зависит.
Для Толкина время было неумолимой силой, которая стирает горы. Но если вы спросите современного программиста или инженера, что такое время, он вряд ли вспомнит про горы. Скорее, он вздрогнет и расскажет вам про исчезнувшие дни, про минуты, которые длятся 61 секунду, и про то, почему ваш самолёт вылетает завтра, а прилетает вчера.
Мы привыкли думать, что время — это простая и понятная шкала. Тик-так. Прошлое, настоящее, будущее. Но как только человечество попыталось загнать время в рамки календарей и механизмов, начался настоящий хаос. Хаос, который мы расхлёбываем до сих пор.
Меня зовут Иннокентий Солнцев, это подкаст
«До нас дошло». Сегодня мы начинаем дилогию о Времени. В первом выпуске мы не будем трогать Эйнштейна и теорию относительности. Мы поговорим о том, как люди изобрели часы и календари, и почему это была, возможно, наша самая большая ошибка. Мы узнаем, кто украл у истории 10 дней, почему в Непале сейчас на 15 минут больше, чем в Индии, и почему для компьютеров даты — это самый страшный тип данных.
Приготовьтесь, сверьте часы. Мы начинаем.
Вообще, прежде чем измерять время, люди пытались его осознать. Лингвисты обожают спорить о том, как грамматика влияет на наше восприятие времени.
Возьмём английский. Многие филологи утверждают, что в английском технически нет будущего времени. Есть прошлое, есть настоящее. А чтобы сказать о будущем, англичанину нужны »костыли« — вспомогательные глаголы вроде will (воля, желание) или going to (собираюсь). Будущее для них — это не факт, а намерение.
Вот, смотрите - »I will survive«. Я изъявляю волю выжить.
В русском языке всё иначе. У нас будущее время »вшито« в глагол так же прочно, как и прошедшее. Мы меняем само слово. Был — буду. Сделал — сделаю. Я переживу. Для нас будущее — это такая же неизбежность, как и прошлое.
Эти лингвистические различия вполне обоснованы — они отражают то, как разные культуры чувствуют мир. Но есть один нюанс. Как бы по-разному мы ни спрягали глаголы внутри своей головы, снаружи время для всех текло одинаково безжалостно. Вселенной плевать на нашу грамматику. Несмотря на все культурные барьеры, перед человечеством стояла одна, абсолютно одинаковая задача: как синхронизировать свои маленькие человеческие планы с гигантскими ритмами природы. И вовсе не для того, чтобы не опоздать на утреннюю планерку. Древнему человеку было плевать на минуты и секунды. Его время было циклическим, а не линейным. Круг дня, круг года. Главные дедлайны ставила природа: когда сеять зерно, когда разливается Нил, когда молиться богам.
Первым и самым надежным хронометром было Солнце. Воткнул палку в землю — получил гномон, прадедушку солнечных часов. Тень длинная — утро, тень короткая — полдень. Просто, надежно, батарейки менять не надо. Правда, есть баг: ночью и в пасмурную погоду сервис недоступен.
Чтобы решить эту проблему, изобрели водяные часы — клепсидры. Вода по капле вытекала из сосуда, и по уровню жидкости судили о времени. Кстати, именно благодаря клепсидрам у нас есть выражение »время истекло«. Их часто использовали в судах, чтобы ограничивать болтливых ораторов.
Но была у древнего времени одна особенность, которая свела бы с ума современного человека. Час не был фиксированным. Люди просто делили световой день на 12 частей. Летом, когда день длинный, и »час« был длинным. А зимой, когда темнело рано, час сжимался. Представьте, что ваш рабочий день зимой заканчивается в два раза быстрее, чем летом, хотя по часам они одинаковы. Звучит как мечта, но для точных расчетов это был кошмар.
И тут возникает парадокс. Можно подумать, что древние просто не умели считать время точно. Но это не так. Они просто смотрели на него с другой высоты. Им было плевать на минуты, но критически важно понимать циклы.
Лучшее тому доказательство — знаменитый Антикитерский механизм. Когда водолазы подняли этот кусок окислившейся бронзы со дна Эгейского моря, учёные сначала не поверили своим глазам. Это устройство, созданное за 100 лет до нашей эры, было сложнее, чем швейцарские часы 19-го века. Тридцать бронзовых шестерёнок в деревянном корпусе, первый в мире аналоговый компьютер. Но он не показывал »время« в нашем понимании. Он моделировал Вселенную. Механизм с безупречной точностью предсказывал положение Солнца и Луны, даты затмений на десятилетия вперёд и даже расписание праздников (включая Олимпиаду). Что еще безумнее - он вычислял это по пяти разным календарям, потому что греки не делили год на 12 месяцев, у них был 223-месячный цикл Сароса и уточняющий его 54-летний цикл Экселигмос, и еще целая пачка других циклов, включая 19-летний Метонов цикл (который, кстати, до сих пор лежит в основе расчета православной Пасхи) и 76-летний периоду Каллипа.
Вдумайтесь в этот контраст: древний грек не мог точно сказать, сколько сейчас минут — 15 или 40, — и продолжительность его часа »плавала« в зависимости от сезона. Но при этом он мог повернуть ручку механизма и точно узнать, в какой фазе будет Луна через 15 лет.
Они покорили Календарь, но даже не пытались приручить Часы.
Человечество жило в этом ритме »резинового времени« тысячелетиями. Пока не наступил момент, когда скорость жизни превысила скорость лошади.
Тысячелетиями человечество жило в режиме »локального времени«. Правило было простым: когда Солнце в зените — значит, полдень.
Но у Земли есть одна особенность — она круглая и вертится. Поэтому, когда в Лондоне били колокола к обеду, в Бристоле (на 200 км западнее) до полудня оставалось ещё 10 минут. А в Плимуте — все 16.
И это никого не волновало. Путешествие из Лондона в Бристоль на карете занимало пару дней. Разница во времени »размазывалась« по дороге. Вы просто подводили карманные часы по прибытии, и жизнь продолжалась. Никакого джетлага, никакой путаницы.
Всё изменилось, когда мир зашипел паром.
Железные дороги сжали пространство. Теперь расстояние, на которое раньше уходили дни, преодолевалось за часы. И внезапно эти »жалкие« 10-15 минут разницы между городами стали вопросом жизни и смерти.
Представьте, что вы — диспетчер в 1840 году. У вас одна колея. Поезд А выезжает из Лондона в 12:00. Поезд Б выезжает навстречу из Бристоля тоже в 12:00. Но чьих 12:00? Если машинист ориентируется по солнцу своего города, они встретятся на одном перегоне совсем не так, как планировалось.
Расписания превратились в ад. В путеводителях тех лет печатали таблицы конвертации: »Если вы в Бирмингеме, прибавьте 7 минут к лондонскому времени«. На вокзалах висели часы с двумя минутными стрелками: одна показывала »время Лондона«, другая — »время местное«.
Хаос закончился в 1840 году, когда Большая западная железная дорога (Great Western Railway) волевым решением постановила: плевать на Солнце. На всех наших станциях отныне действует только одно время — лондонское, время Гринвичской обсерватории (GMT).
Так родилось Железнодорожное время. Впервые в истории человечество решило, что время — это не природное явление, а договоренность. Часы на стене стали важнее Солнца в небе.
Люди сопротивлялись яростно. Города отказывались переводить стрелки, называя лондонское время »ложью«. В Бристоле, например, часы на бирже еще долго имели две минутные стрелки, принципиально показывая разницу. Но прогресс и желание не опоздать на поезд победили.
В России тоже пошли по этому же пути. У нас роль Гринвича играла Пулковская обсерватория. Вся железнодорожная империя жила строго по «Петербургскому времени». Это создавало удивительный парадокс: внутри здания вокзала в Москве было одно время, а на площади перед вокзалом — другое, местное, с разницей в 29 минут. Людям приходилось жить в двух измерениях: «по городу» и «по вокзалу». А представьте каково было в Сибири, где на станционных часах был петербургский день, а за окном — глухая таёжная ночь.
Мы синхронизировали часы, но нужно было решение, чтобы этими часами было удобно пользоваться. При этом мы даже не подозревали, какой хаос создаем, когда решили разделить весь земной шар на полоски — часовые пояса.
Казалось бы, идея простая: Земля круглая, в сутках 24 часа. Делим глобус на 24 дольки (как апельсин), каждая шириной 15 градусов. Внутри каждой дольки — одно время. Перешагнул границу — перевел стрелки на час. Гениально? В теории — да.
На практике в дело вмешалась политика. И география вышла из чата. Нужно было выбрать единую »нулевую точку« для всего мира.
В 1884 году в Вашингтоне собрались представители 25 держав, чтобы решить, где будет проходить Нулевой меридиан. Главная битва развернулась между Лондоном и Парижем. Французы яростно настаивали на своей обсерватории.
Гринвич тогда победил, не потому что он лучше, а потому что Британия владела морями. 72% всех морских карт мира уже были нарисованы с отсчетом от Гринвича. Менять их было бы слишком дорого.
Мир тогда согласился, но Париж затаил обиду. Франция отказывалась признавать Гринвич еще 30 лет. А когда в 1911 году они наконец сдались и перевели стрелки, французская гордость не позволила им принять лондонское время. В их законе было написано: »Время во Франции — это среднее парижское время, замедленное на 9 минут 21 секунду«. Что угодно, лишь бы не GMT.
А теперь посмотрите на карту Китая. Это огромная страна, она простирается на пять апельсиновых долек, географических часовых поясов. Но правительство решило: страна одна — время должно быть одно, столичное. Поэтому на западе Китая, в Синьцзяне, солнце летом заходит почти в полночь. И это не »белые ночи«, это административный абсурд. Организм кричит, что сейчас 8 вечера, а часы утверждают, что наступило завтра. Местные жители в итоге живут двойной жизнью: официально все учреждения работают по Пекину, а в быту люди тайком вычитают два часа, создавая своё, »подпольное« время, чтобы просто не сойти с ума.
Или возьмём Индию. Им показалось, что делить на целые часы — слишком грубо. Поэтому у них время GMT+5:30. Непал посмотрел на соседа и решил выделиться ещё сильнее: GMT+5:45. Просто чтобы подчеркнуть независимость.
Но настоящий кошмар начинается, когда страны решают »переехать« во времени.
Острова Самоа. Долгое время они жили в часовом поясе GMT-11, то есть »вчера« по отношению к Австралии — их главному торговому партнеру. Это было неудобно: когда в Сиднее уже понедельник и офисы работают, на Самоа всё ещё воскресенье, выходной. Теряли два рабочих дня в неделю.
И вот в 2011 году Самоа решает поменять свой часовой пояс на GMT+13. По сути, они просто отменили 30 декабря и прыгнули на сутки вперед. Жители легли спать вечером 29-го (в четверг), а проснулись утром 31-го (в субботу). Пятницы 30 декабря 2011 года в истории этой страны просто не существует.
Для людей это был забавный курьез и лишний повод для вечеринки. Для баз данных и софта, который работает с датами, это катастрофа. Представьте, что у вас есть контракт, который истекает 30 декабря. Или день рождения в этот день. Система просто выдает ошибку: `Date not found`.
И это не единичный случай. История знает пример покруче. В 1582 году папа Григорий XIII решил исправить ошибку в календаре Юлия Цезаря. Юлианский календарь отставал от солнечного года, и Пасха смещалась всё ближе к зиме.
Папа рубанул сплеча. Он издал буллу, по которой после четверга 4 октября сразу наступила пятница 15 октября. A FEW MOMENTS LATER
В католических странах послушались. А вот протестанты и православные отказались. Британия (и её колонии, включая будущие США) перешла на новый стиль только в 1752 году, »удалив« уже 11 дней. Россия держалась до 1918 года (хотя РПЦ все еще упорствует, и Рождество 25 декабря она празднует с опозданием уже на две недели).
Поэтому, если вы пишете программу, которая рассчитывает исторические даты, вам нужно знать не просто год, а где именно происходило событие. 5 октября 1582 года существовало в Лондоне и Москве, но его не было в Риме и Мадриде.
Исчезнувшие дни на Самоа — это экзотика, но вообще-то с нарушениями пространственно-временного континуума большинство людей сталкивается дважды в год. Речь, конечно, о переходе на летнее и зимнее время.
Изначально идею предложил Бенджамин Франклин, чтобы экономить свечи и уголь. Мол, сдвинем стрелки, и в рабочее время будет дольше светло. Экономия сомнительная, а вот головная боль — гарантированная.
С точки зрения логики, переход на летнее время (DST) — это безумие. Весной у нас крадут час сна, а осенью возвращают. Но для хронологии это означает, что весной в каких-то конкретных сутках 23 часа, а осенью — 25.
Представьте, что вы работаете в ночную смену в день осеннего перевода часов. В 3 часа ночи стрелки прыгают назад на 2 часа. И время с 02:00 до 03:00 происходит дважды.
Если ваша банковская система проводит транзакцию в 02:30, как понять — это было »первые« 02:30 или »вторые«? Без специальной пометки в базе данных это невозможно. Эта неоднозначность может стоить бизнесу миллионов долларов на ошибках в логах и дублировании операций.
И ещё один нюанс, который обожают педанты. Мы привыкли называть »нулевое« время GMT (Greenwich Mean Time). Но если вы приедете в Гринвичскую лабораторию летом и посмотрите на часы, вы увидите, что там... не GMT. Летом Британия переходит на BST (British Summer Time), которое на час опережает Гринвич. То есть даже в самом Гринвиче время не всегда совпадает с GMT! Их соседи-ирландцы, при этом решили сделать всё назло бывшей метрополии. У них физически на часах то же самое время, что и в Лондоне. Но юридически — это другой часовой пояс. Весь мир считает стандартом зиму и сдвигается летом вперед. Ирландия же законодательно объявила стандартом лето, а зимой сдвигается назад. Результат на циферблате один, но часовые пояса разные. Исключительно ради принципа.
И чтобы добить вас окончательно: самого термина GMT в науке и точных технологиях больше нет. Его заменили на UTC (Всемирное координированное время). Почему такая странная аббревиатура? Потому что англичане хотели CUT (Coordinated Universal Time), а французы — TUC (Temps Universel Coordonné). Чтобы никого не обидеть, буквы переставили и получилось бессмысленное UTC.
Вот в таком мире: с прыгающими часами, двойными ночами и политическими компромиссами — пришлось жить первым программистам. И когда им понадобилось объяснить компьютеру, »который сейчас час«, они приняли решение, которое аукается нам до сих пор.
Но прежде чем учить времени машины, людям стоило бы договориться между собой. Потому что человеческая запись даты — это настоящая Вавилонская башня.
Возьмите дату, записанную как 02/03/04. Что это?
Американец скажет: »3 февраля 2004 года«.
Европеец или россиянин поправит: »Нет, это 2 марта«.
А японец посмотрит и увидит »4 марта 2002 года«.
Добавьте сюда путаницу с 12-часовым форматом. Вы назначаете встречу на 12:00 PM. Это полдень или полночь? А по какому часовому поясу?
Спасением стал стандарт ISO 8601. Инженеры стукнули кулаком по столу и сказали: пишем строго от большего к меньшему. Год, месяц, день. 2024-03-02.
Это текстовый формат, который не вызывает разночтений и идеально сортируется. И еще он позволяет указать время с часовым поясом. К хвосту даты добавляется смещение: T15:00+03:00. Теперь любой сервер в мире поймет: ага, это три часа дня в Москве. Или просто буква Z на конце — »Zulu time«, чистое UTC. Никаких »лондонского« или »ирландского« времени, только сухие цифры смещения от нулевого меридиана.
Но стандарт ISO хорош для обмена данными. Это длинная строка текста. А когда компьютеры были большими, а память маленькой, инженерам нужно было решить: как хранить время максимально компактно? Записывать 20 байт на каждую дату — непозволительная роскошь для тех лет.
Разработчики операционной системы Unix (Кен Томпсон и Деннис Ритчи) поступили радикально просто. Они выбрали точку отсчета — 00:00:00 UTC 1 января 1970 года — и назвали её Эпоха Unix.
Всё время в компьютере — это просто одно число. Количество секунд, прошедших с этого момента (или оставшихся до того момента - тогда число будет отрицательным).
Сейчас, пока вы слушаете этот подкаст, это число примерно равно 1,7 миллиарда.
Это было гениально. Складывать и вычитать секунды процессор умеет мгновенно. Не нужно мучиться с високосными годами и месяцами разной длины. Но у любого решения есть цена. И для Unix-времени эта цена — Проблема 2038 года.
Дело в том, что в старых системах под хранение этого »счетчика секунд« выделили 32 бита. Это как одометр в старом автомобиле, у которого всего 5 окошек для цифр пробега, и после 100000 он уходит на второй круг. Максимальное число влезает в эти 32 бита — 2 147 483 647.
Это число секунд истечет 19 января 2038 года в 03:14:07 утра.
В эту секунду счетчик переполнится. И самое страшное — он не сбросится в ноль. Из-за особенностей двоичной арифметики он переключится в максимально отрицательное значение.
Компьютеры по всему миру решат, что сейчас не 2038 год, а 13 декабря 1901 года.
Это будет очень весело. Ипотека, которую вы взяли на 30 лет, вдруг окажется »просроченной« на 130 лет. Светофоры, банкоматы, встроенные системы в самолетах — всё, что работает на старом 32-битном коде, сойдет с ума. Конечно, в современных 64-битных системах этой проблемы нет. Там запаса секунд хватит на 290 миллиардов лет (Солнце погаснет раньше). Но сколько старого »железа« доживет до 2038-го где-нибудь в глубине инфраструктуры электростанций или больниц? Мы узнаем через 12 лет. Вы хотели бы стать героем фильма “Назад в будущее”? Great Scott!
Человечество проделало огромный путь. Мы отказались от Солнца ради расписания поездов. Мы разрезали планету на часовые пояса, запутали себя летним временем и заставили компьютеры считать секунды с 1970 года. Мы создали сложную систему клеток и рамок, чтобы упорядочить хаос. Но мы решили только половину задачи. Мы научились записывать время. Но как сделать так, чтобы часы на вашем телефоне, на сервере в Антарктиде и на спутнике GPS показывали одно и то же время? Что делать, если Земля вращается криво? И почему без теории относительности Эйнштейна ваш навигатор врал бы на 10 километров в день? Об этом будет вторая часть.
Говорят, лучше поздно, чем никогда. Хотя, как мы выяснили, для компьютера »поздно« может означать 1901 год. Берегите своё время. И спасибо, что сегодня оно... до нас дошло.
Этот выпуск для вас подготовил Иннокентий Солнцев и звукорежиссер Алексей Попов.
0 коментариев