Сдуру пообещал рассказать про концепцию двумерного времени, широко известную в очень узких кругах архитекторов инфосистем. Штука реально интересная и полезная, но, конечно, крышесшибательная.
Короче, тред.
Лайк, ретвит и всё такое, ну вы знаете
1. Даже безо всякой двумерности понятие "время" становится лютейшим трэшем каждый раз, как только мы пытаемся копнуть глубже наивного представления, понятного и ребёнку. Действительно страшно запутанный и тяжёлый для понимания предмет.
2. Из известных философов честнее всего об этом говорил Кант. Если не боитесь утонуть, можете глянуть главу "Трансцедентальная эстетика" в КЧР. Удивительное дело, этот чел в середине 18-го века на кончике пера вывел неизбежность относительности пространства и времени.
3. В физике тоже не всё хорошо с этим предметом. Там недоопределённость понятия "время" является основной причиной того, что никак не получается создать квантовую теорию гравитации. Для других квантовых теорий пространство-время является сценой, но с гравитацией это не работает.
4. В наших IT даже безо всяких наворотов типа двумерности следует ожидать какой-нибудь хуйни каждый раз, когда нужно хранить/передавать/обрабатывать/показывать время. Все 33 удовольствия:
- Мать их часовые пояса.
- Мать его переход на летнее/зимнее время. ...
- Ёбаные в рот локали. Ненавижу. "05/06/2021" в США и Англии означает разное.
- Дата и ДатаВремя - немножко разные вещи. ДатаВремя работает как точка, а Дата это отрезок, полученный из.. нет, ни хера не из двух точек. При получении даты из времени забивается хуй на часовые пояса.
5. Ладно, это всё была присказка.
Итак, двумерное время. Мы все, конечно, знаем, что в нормальном мире у нас три пространственных и одно временнОе измерение. Инфотех это отменить не могут, но и фанатично следовать этой догме не обязаны. У нас тут не совсе мат.мир. IT это другоэ.
6. Представьте себе, что ведём чисто для себя какую-нибудь простенькую базку. Например, список дел. В эксельной табличке. Три колонки: "Что сделать", "Когда" и отметка "Сделано". Заметьте, что в колонке "Когда" у нас сидит время, ну в смысле дата, которая почти что тоже время.
7. Это всего лишь эксельная табличка, делаем в ней что хотим ни в чём себе не отказывая. Но стараемся придерживаться здравого смысла, который нам какбэ намекает, что в прошлом (П) у нас факт, в будущем (Б) планы, а в настоящем (Н) у нас то самое место, где планы становятся фактом
8. Схематично можно изобразить так:
- - П - - Н - - Б - -
Когда что-то запланированное доводится проебать, двигаем это вправо, или вообще нахер выкидываем. Формулировки дел тоже иногда корректируем. Иногда то, что было прокрыжено как "сделано", нужно переделать. Жыза, короче.
9. И тут у нас просыпается любопытство, а как планы на сегодня эволюционировали по ходу процесса. Было ли вот это конкретное дело изначально сюда запланировано или его я уже десять раз двигал вправо? Как оно было изначально сформулировано? Когда вообще возникла эта задача?
10. Есть ежедневные бэкапы, сравниваем файлики: сегодняшний (с), вчерашний (в) и позавчерашний (п). Получается такая стопка:
- - - - - П(с) - - Н(с) - - Б(с) -
- - - П(в) - - Н(в) - - Б(в) - - -
- П(п) - - Н(п) - - Б(п) - - - - -
Вот и два измерения: по горизонтали и по вертикали
11. То измерение, которое на схеме стало горизонталью, я привык называть "время в мире", а то, которое по вертикали - "время в базе". Как вы, возможно, догадывались, эксельные файлики были только для примера, и обычно весь такой угар происходит в базе данных.
12. Как видите, никакой мистики, альтнауки, путешествий сквозь червоточины и прочего мутного зашквара. Грешный материальный мир остаётся на месте со своим четырёхмерным пространством-временем, но в инфосистеме появляется доп. поле, которое тоже время, но с другой семантикой.
13. Технически это обычно реализуется как дополнительная табличка, имеющая следующую структуру:
<некие данные>, <время в мире>, <время в базе>, <изменение (число)>
Все изменения проводим текущем временем "в базе". Появление будет +1, удаление -1, ...
... перемещение на другое время "в мире" будет -1 со старого и +1 на новое. На самом деле "1" совсем не обязательно. При количественном планировании изменения могут быть денежными суммами, количествами выпускаемых изделий и т.п.
14. Когда нужно извлечь данные по состоянию "на сейчас", делаем запрос без фильтра по времени "в базе", суммируем "изменения" и отбрасываем из выдачи те строки, где получился ноль.
Когда по состоянию "на вчера", фильтруем по времени "в базе" по <= вчера.
15. Если нужно понять, как картина изменилась за вчера, выдёргиваем данные из полосы "вчера" и, главное, придумыаем, как показать пользователю минуса так, чтобы ему было понятно, удобно и красиво.
Вообще, это прикольно, рисовать на двумерном времени фигуры.
16. Ниже расскажу, когда нужно воздержаться от применения этой тезнологии, но сначала о том, как распознать ситуацию, когда она точно нужна.
Характерный паттерн - взаимно противоречивые требования: "запретить изменения задним числом" и "реализовать возможность заднего числа". ...
... Оба требования более чем обоснованные. Не подкопаешься. Как вы, наверно, уже догадались, запрет будет работать по измерению "в базе", а разрешение по измерению "в мире". И все довольны.
Без двух временных измерений это всё превращается в ужас на многочисленных костылях.
17. Как всегда оно так бывает, ништяки, приносимые этой технологией, не бесплатны. За всё придётся заплатить сполна.
а). При кажущейся простоте, очень трудная в реализации штука. Притом трудная не один раз, а постоянно. Там, где в "нормальной" базе простой SELECT, ...
... отныне добавится GROUP BY с HAVING. Сложные запросы станут совсем сложными. Там, где справлялся джун, теперь у мидла будет плавиться мозг.
б). Пользователям понять двумерное время ещё труднее. Пощадите их, попытайтесь скрыть время "в базе" за какими-нибудь их бизнес-терминами
в). Точно не надо пытаться всю логику реализовывать на этом принципе. Никто не оценит такой фанатизм. То, что Hennessy XO лучше воды, вовсе не означает, что на нём в том числе следут варить борщ.
Отсиделся в мьюте, в который меня сажали тупорылые твиттеровские робоцензоры за пропаганду cyицидa (которой, конечно, не было).
По этому поводу опубликую-ка я здесь свою старую ЖЖшную сказку "Как пережить пришествие искусственного интеллекта и остаться человеком".
Короче, тред.
1. Без паники. Любая уважающая себя инструкция по выживанию в сложных и непонятных условиях обязана начинаться этими словами. Как бы причудливо ни разворачивались события, паникой делу не поможешь.
2. Сразу обозначим список технологий, пришествие которых в первую очередь вызывает наше беспокойство: технологии слежки, «большие данные», искусственный интеллект.