[Перевод] LOLWUT: произведение искусства в команде БД

Автор — Сальваторе Санфилиппо aka antirez, один из основных разработчиков БД Redis, сотрудник Redis Labs. Статья опубликована 12 сентября 2018 года

Последние несколько дней оказались весьма напряжёнными. Одним из аргументов в споре о замене или не замене слов, используемых в коде репликации Redis, было следующее: стоит ли делать работу, которая не даёт никакого технологического результата? [Речь о замене терминов «хозяин/раб» при репликации — прим. пер.]

В процессе чистки исходников Redis от определённого слова, где это возможно, я подумал, что мне нравится писать код даже без измеримых технологических эффектов. Замена слов — слишком рутинная работа, она просто раздражает, даже если по ходу встречаются достойные технологические проблемы. Но есть другой вид кода с особым качеством, которое я бы назвал «hack value». Он может не решать никакой проблемы, но всё равно это достойная задача. Здесь несколько причин. Иногда процесс написания кода полезен сам по себе. Иногда для решения не самой важной проблемы используются технически продвинутые идеи. А иногда код пишется просто из эстетических соображений.
Бестолковые, хаотичные и горячие дискуссии последних дней в твиттере натолкнули на мысль, что сейчас мы очень далеки от первых хакеров 60-х гг. С каждым годом всё труднее и труднее обсуждать технологии с хакерской точки зрения — без готовых идей и проблем, где цель состоит в чистом исследовании. Для всего вокруг разработаны «лучшие практики». Для каждой идеи существует табу. Этому новому миру я говорю LOLWUT, потому что не чувствую себя его частью, и он совершенно не хакерский, по крайней мере, в моём видении. Таким образом, идея заключалась в том, чтобы потратить какое-то время на технически бесполезную идею, чтобы исследовать что-то из 60-х годов.

Я сразу вспомнил одно из своих любимых произведений компьютерного искусства — гравеллу Schotter от Георга Ниса. Автор написал на языке ALGOL программу для плоттера, которая генерировала произведения искусства, используя хаос (случайные числа). [Постепенно стройные фигуры на картине становятся всё более хаотичными — и наоборот, хаос планомерно упорядочиваются в организованную структуру, если повернуть картину на 180° — прим. пер.]. Эта гравелла великолепна по своей простоте и глубокому смыслу, который может понять зритель. Под покровом полного спокойствия, глубоко внутри порядка скрывается хаос. Если перевернуть картину вверх ногами, она похожа на море во время бури. На поверхности бушует хаос, а в глубине море остаётся спокойным.

Можно ли превратить произведение искусства в команду БД? Это довольно сложно, ведь Redis в основном используется из командной строки. В наше время консоли более навороченные, чем в прошлом, но отобразить приличную графику сложно. С другой стороны, у нас огромное преимущество вычислений в реальном времени — картина может стать динамичной и меняться при каждой генерации.

Прежде чем продолжить, покажу вам конечный результат:

f6318d3f7749cb528993ace11eebc171.png

Пусть и в очень низком разрешении, но оригинальная идея сохранилась. Здесь я применил трюк, который используют многие программы, показывающие разные интересные вещи в текстовой консоли. Первая часть решения — использовать шрифт Брайля в Юникоде для генерации пиксельной матрицы с бóльшим разрешением, чем у отдельных символов консоли. В частности, для каждого символа можно сделать сетку размером 2×8 пикселей.

Вторая часть — параметры для картины:

8933a0a7017ce6798a7e09216364ddce.png

Можно сгенерировать несколько версий картины, изменяя число квадратов и выходное разрешение. Наконец, я хотел написать исходный код как пример грамотного программирования — в форме, которая больше напоминает учебник с подробным описанием каждого шага, а не просто генератор в виде чёрного ящика. Код лежит здесь.

Начиная с Redis 5 команда LOLWUT станет стандартной. В каждой новой мажорной версии её функциональность будет меняться полностью. Неизменным остаётся только набор правил:

  1. Она не может делать ничего полезного.
  2. Она должна быстро работать, чтобы её было безопасно вызывать на серверах в продакшне.
  3. Результат должен быть интересным в некотором роде.


Первую версию я написал для Redis 5. В следующей версии попрошу кого-нибудь ещё из разработчиков Redis, кто захочет, в противном случае напишу сам (надеюсь, мне не придётся это делать). Команда LOLWUT должна нам напоминать, что наша работа — программирование — существует не только для пользы. Первоначально речь шла главным образом об изучении возможностей. Я надеюсь, что LOLWUT также напомнит сообществу Redis, что компьютеры созданы для людей, и что нельзя рассуждать стерильно, думая только о технологических последствиях. Есть живые люди, которые используют системы, которые строят системы и так далее.

© Habrahabr.ru