пятница, 1 марта 2024 г.

Вчера было 29 февраля и выяснилось,

 Вчера было 29 февраля и выяснилось, что многие компьютерные системы не готовы к тому, что в году может быть ещё один дополнительный день.


Так, нейросеть ChatGPT выдавала, что "день неправильный", поскольку, по её мнению, "29 февраля может быть только в високосные годы, которые являются годами, кратными 4, за исключением тех, которые делятся на 100, но не на 400. Поскольку 2024 год делится на 4, а не на 100, он является високосным, однако 29 февраля 2024 года не существует, потому что в этом високосном году в феврале всего 28 дней".

В Новой Зеландии не работали некоторые бензоколонки, поскольку был глюк в платёжном программном обеспечении.

В Париже отключились и не работали уличные фонари.

В австралийском госпитале отключились телефонные линии.

В четырёх японских префектурах были проблемы с обновлениями водительских удостоверений.

Но круче всех отличилась EA со своей игрой гоночной игрой EA Sports WRC, которая просто не запускалась на PS5 и Xbox Series. Техподдержка компании в твиттере посоветовала всем геймерам просто перевести время консоли на 1 марта (твит набрал 1,3 млн просмотров), а геймеры посоветовали EA поменять разработчика.

Список багов у других компаний на 29 февраля можно глянуть тут.
_______
Источник | #zavtracast | #хроникицифровизации

____________________
Проблема 2038-го года. Осталось 14 лет, что по меркам айти, конечно, вечность, но пролетят они так быстро, что никто так ничего в итоге и не починит, попомните моё слово.

Суть в следующем: на вашем компьютере, планшете или телефоне стоит операционная система. У всех у них есть общие предки технологий, корни которых тянутся ещё с 1970-х, когда всё это компьютерное барахло было придумано.

Что всё это объединяет? А то, что в качестве основы для отсчёта времени компьютерами используется так называемое "время Unix". Это дата 1 января 1970 года, полночь. Чтобы компьютерам было проще считать, а людям проще программировать, договорились делать так: берём количество секунд в одном дне (86400 штук), записываем их в одно число, а потом чтобы считать разные даты или прибавляем или вычитаем секунды.

Так, полночь первого января 1970-го года будет у нас числом равным нулю. А второе января 1970-го года, полночь, будет у нас уже числом 86400. Третье января - уже 172800 и так далее.

Для сравнения, 1 марта 2024 года это у нас уже 1709251200. Вот столько секунд прошло с 1 января 1970-го.

В чём же проблема этого подхода? А то, что в программировании цифры обычно записывают в переменную integer (число), которое хранится в памяти компьютера в нескольких байтах. Конкретно, это число, хранилось в 32 битах (4 байта), а значит в него максимально помещалось число, равное 2147483647.

В общем, когда наступит вторник, 19 января 2038 года 03:14:17 по UTC-времени, то к этому числу надо будет прибавить ещё одну секунду, но переменная не даст это сделать, потому что больше в неё не помещается. Что делают компьютеры в этом случае? Они сбрасывают счётчик или на ноль или уходят в минус. И получится у нас не 2147483648, а -2147483648.

А теперь смотрим на то, к чему это может привести. Во-первых, время на компьютерах сброситься на 1901-й год (это минус 2147483648 секунд от 1 января 1970-го).
Во-вторых, многие программы будут работать и считать неправильно. Будет куча сбоев в программном обеспечении, причём часто не в нём самом конкретно, а в какой-нибудь маленькой библиотеке, которую ваша программа использует, авторы которой не потрудились исправить этот баг.

Примерно похожая ситуация была в 2000-м году, но там всё обошлось, поскольку проблему широко освещали сми, ну и миллениум у нас не каждый день меняется, а тут какой-то несчастный 2038-й, кто вообще выбрал эту дату?

При этом, нельзя сказать, что проблему не решают, в Windows, MacOS и Linux, например, ещё с 2010-го года время записывают в виде 64-битного числа (что даёт нам 2^63 степени секунд, это несколько миллиардов лет). Но предсказать,  <...>
@F_S_C_P

Комментариев нет:

ad