Изречения некоторых
Возможность оставлять комментарии в Архиве я хотел иметь с первого же дня его запуска, но мои руки все никак до этого не доходили. Когда-то я уже начинал работу в этом направлении но бросил её на пол пути — стало просто лень. А тут я подумал поэкспериментировать, навайбкодить этот функционал и посмотреть, что из этого выйдет. Требования у меня были минимальны, а именно:
- Оставлять комментарии
- Отвечать на комментарии
- Отсутствие регистрации
- При этом хоть какая-нибудь топорная авторизация
- Безопасность на уровне щеколды на дырявых воротах
- Человечность
Совокупность этих требований а так же моё слегка ебанутое настроение привело к созданию монстра Франкенштейна, слепленного из говна и палок и сшитого из амбициозных и очень тупых идей. Потому что где, как не здесь, в Архиве, я волен делать что угодно и проводить самые ебанутые эксперименты?!
Регистрация без СМС
Когда-то в давние времена, возможно в 90-х, можно было встретить сайтец на котором оставить комментарий мог каждый и без лишних действий. Зашел, написал и отправил. Сейчас уже не то время. Сейчас на твой сайт набежит куча ботов и начнет пихать в него ссылки на гейскую порнуху и инъекции всех видов и сортов. Но Архив не такой! Архив сделан с идеей, что о нем никто не должен знать. Архив — это попытка самовыражения в никуда, это протест устоявшимся корыстным ценностям; отображение морали в текущем её виде — все еще существующей, но закопанной под огромной кучей дерьма так, чтоб её нужно было откапывать. Он сделан во время расцвета ИИ, чтоб поиск дал тебе другие релевантные результаты по запросу “a.i. Archive”, но не сам Архив. Архив никто не посещает кроме нескольких самых близких мне людей и меня самого. Поэтому я имею право пренебречь безопасностью и поставить удобство на первый план. Все же, хоть какой-то ржавый амбарный замок должен висеть на возможности пихать информацию в мою базу. Все что требуется пользователю, это знать ключ. Его личный ключ, при вводе которого он имеет право изречься. После первого ввода он сохраняется в local storage и повторно в этом же браузере не требуется. Этот ключ однозначно идентифицирует пользователя, а всю необходимую о нем (или о ней) информацию я вручную добавляю в базу. И все сделано так, что если ты перешел по отправленной тебе ссылке на эту статью, то по-идее уже авторизован и можешь выпездеться под своим именем. Вдобавок я каждому дам уникальную ссылку для авторизации, чтоб можно было “залогиниться” на другом устройстве. А для посетителей вольного плавания, волков-одиночек и троллей есть бэкдор, дыра, или иными словами универсальный ключ, который дает право оставить комментарий под именем случайного прохожего один раз в день. Чтоб разгадать этот ключ, нужно хорошо знать истоки Архива. Подсказка к нему кроется в верхнем левом пикселе.
Компьютерный отголосок
Классические системы комментирования мне не нравятся. Я их терпеть не могу. Корпоративные политики отполировали их до блеска и смыли все сколько-нибудь индивидуальные их черты. Везде эти толерантные словечки, лишенные любого подтекста или контекста, серые как мыши, тихие как вода и низкие как трава, подходящие всем и никому одновременно. Этим металлическим и безвкусным голосом читаются стандартные “КОММЕНТАРИИ”, “ОТВЕТИТЬ”, “ОТПРАВИТЬ”, “НАПИСАТЬ”. Черт возьми, как это тупо. Я заметил, что с подобного рода приевшимися надписями я иногда люблю поиграться в своем блоге. “Поздравляю, ты добрался до конца.” ты встретишь на первой странице; “Где ты” вместо “Про сайт” или приевшегося “Обо мне”; “Что ты пытаешься найти?” вместо бездушного “Поиск”. Почему сайт обязательно должен выглядеть и общаться с тобой как компьютер или менеджер по продажам?! Все эти тексты произрастают из корпоративного сегмента, из потребности быть удобными, привычными и понятными для пользователя. Но у меня не магазин и не бренд, у меня блог, и я могу делать, что хочу! Поэтому в пизду “Комментарии” и нахуй “Ответить”. Будет иначе и будет по-ебанутому.
Во-первых, теперь это никакие нахуй не комментарии — это изречения. Изречения некоторых, если быть точнее. Во-вторых, я хотел, чтоб это выглядело как диалог, потому что по сути это так и есть — между собой общаются люди. Привычные нам системы комментирования избавились от “лишнего” и обросли “нужным”. У меня в голове эти понятия перевернуты с ног на голову. По мне лишнее, это все время держать на виду дату и время. Аватарка для меня тоже лишняя, но она несомненно помогает лучше и быстрее идентифицировать пользователя. У меня дата с временем по умолчанию скрыта и показывается только при наведении на изречение. Вместо аватарки — смайлик, который ассоциируются у меня с этим человеком. Кнопка отправки сообщения именуется случайным словом, но на что ты нажал, то в итоге и будет в заголовке изречения. Если ты нажал “Сказануть”, то в итоге в изречении будет “Вася сказанул:” или “Катя сказанула:”. Это привносит немного разнообразия в конечный результат, делает процесс чуть более игривым, непредсказуемым и менее скучным.
В-третьих, больше всего я хотел сделать кнопку ответа на комментарий более оживленной и подходящей под контекст. Пусть “отвечают” на галимом реддите и твиттере, а у меня в блоге живут люди с настоящими эмоциями и чувствами, они могут негодовать, поддакивать, молчать, пояснять и возражать. На самом деле они могут намного больше, чем это. И я хотел, чтоб кнопка ответа на комментарий была чуть более очеловечена и пыталась как бы предугадать реакцию пользователя. Проблема в том, что если просто выбирать подобные глаголы рандомно, то получается несуразица. На ответ с позитивной коннотацией может например попасться кнопка “огрызнуться”, и это никуда не лепится вообще. Я вспомнил эту тупую назойливую фичу в современных почтовых клиентах, где АИ-шка подсказывает кнопками целый ответ на пришедший имейл. Использовать АИ-шку именно так — это пиздец полный. Но идея того, что компьютер может “понимать” контекст, всегда меня вдохновляла. LLM модели принесли нам именно эту возможность и я решил её эксплуатировать. В общем, я подключил API ChatGPT, для того чтоб подбирать глагол кнопки ответа на комментарий, который лучше всего подходит под контекст текущей ветки. Тем самым я хотел добиться эффекта этого “очеловечивания” интерфейса. В отличии от всех существующих решений, интерфейс не пытается сделать дело за человека, а пытается сам вести себя как живое существо. Он имеет тот же привычный старый вид, но будто говорит с тобой и подстраивается под контекст происходящего. Не полностью, а в мелких деталях. Ты и так визуально знаешь, где находится кнопка “ответить”, почему тогда она всегда должна провозглашать одно и то же действие?! И почему это действие должно обязательно звучать как команда компьютеру а не твоё желание?! В итоге ты можешь что-то “спиздануть”, а кто-то другой может тебя “высмеять”, “подьебать” или “пояснить” тебе.
Но как оказалось, сделать это было не так то просто. АИшная помойка то и дело тупила, была через чур махровой или просто постоянно повторялась. Пытаешься ей дать волю — она выдает какой-то кринж; пытаешься поставить в рамки — выдает одно и то же. На начальных этапах она могла вообще выдать что-то очень смешное, например глагол на вот этот комментарий Эда:
Добавь меня в тот чатик, я спрошу его интеллегентно зачем он на личности перешел.
Глагол: СВЕРГНУТЬ
Казалось, он не до конца понимает, что я от него хочу. Вроде как подбирает глагол, но действие направлено не в ту сторону, не в то русло. Или оно будто все время запаздывает на один комментарий. Но основная проблема была в придании ей какого-то характера. Что я в этом направлении не пытался делать, она не соответствовала моим идеалам. Чтоб она подбирала слова по той же “логике”, что и я, её нужно было наделить присущими мне характерными чертами. Но этого оказалось недостаточно. С каждой новой чертой она становилась все кринжовей и непонятней. Проблема есть еще и в том, что хочется сэкономить и обработать ответ как можно быстрее, поэтому настройки на минималках, без reasoning и на очень простой модели: gpt-5.4-mini.
Какое-то время я ковырялся с промптом, но потом заебался, оставил его с минимальным набором инструкций и ограничил списком глаголов, которые можно использовать. Еще я сделал возможность его дебажить. По сути, я прошу модель “смоделировать” свой ответ на комментарий, и уже под него подобрать глагол. На выход она отдает эту композицию из мнимого ответа и глагола. Таким образом я могу через глазок посмотреть на её “мыслительный процесс”, возможно в перспективе понять, как можно подкрутить промпт, чтоб этот ответ больше соответствовал действительности. А так же посмотреть, насколько четко подобран глагол под этот ответ. В общем, это дает чуть больше понимания чем руководствуется модель подбирая нужные глаголы.
Перенос старья
Еще несколько вечеров ушло на перенос всех существующих комментариев из телетайпа. Благо у меня получилось автоматизировать процесс их выгрузки и нормализации под текущую структуру, так что это было не слишком сложно. Основная масса комментариев от людей, которых я знаю — для них я завел в своей базе пользователей. Есть несколько комментариев от каких-то руснявых пользователей, их я поместил под эгидой аккаунта “Проходящего мимо”. Некоторые комментарии содержали картинки — их (картинки) я не переносил, так как в изречениях нет для этого поддержки. Вообще я долго размышлял, нужен ли функционал загрузки картинок, и основным аргументом против этого была сложность реализации. Та и я честно не знаю, хочу ли я иметь эту возможность здесь вообще. Пока что её нет и я не планирую её добавлять в ближайшем будущем. Но, как говорится, будем посмотреть.
Другие изменения
Я постепенно отхожу нахрен от телетайпа, поэтому удалил ссылку на него в заголовке. Место там мне еще пригодится в будущем для других вещей. Посчитал так же, что имеет смысл убрать на него и ссылку в футере статей а заодно и вообще убрать тип исходного блога — особой информационной нагрузки оно не несёт, но место тоже занимает. Изречения более важны и тоже занимают там теперь кусок пространства.
Канувшее в Лету
В какой-то момент у меня окончательно поплыл мозг от потока идей, и одна из них потенциально могла быть реализована. Но в виду надуманности проблематики, которую она решает, я её забросил на пол пути. Рассказал о ней Эду по телефону и он посмеялся и сказал, что она прикольная, поэтому решил о ней просто написать.

На ранней стадии разработки я как-то машинально поставил ограничение на количество вводимых символов в комментарии. А потом сел и задумался — какое именно количество поставить? 100 символов? 1000? Почему 1000? А что если мне не хватает буквально два слова, чтоб закончить свою мысль?! Жалко десять букв?! Это как с суммой на скидку — наберите товаров на 300 грн. и получите скидку 5%. Набираешь на 299.99 и получаешь хуй за щеку. Продавцу жалко одной копейки? Ради скидки я доплачу эту копейку просто так, но такой возможности нет! Так же и с комментариями. Нет никакой объективной аргументации, почему именно такое количество символов максимальное, и нет никакой причины чтоб немножечко не превысить эту норму. Я долго думал над этим числом и никак не мог аргументировать себе свой же выбор. Поэтому решил применить принцип человечности и тут, все очень просто: если тебе не хватает пространства для высказывания, ты можешь просто попросить. Написать эти ключевые фразы в комментарии и лимит на его длину повышается:
- Прошу дозволения вставить словечко!
- Позвольте высказаться еще!
- Осмелюсь покорнейше просить слова!
- Извольте излить душу еще немножко!
- С вашего благословения, осмелюсь продолжить!
Изначальный лимит должен был соответствовать 13-му элементу последовательности Фибоначчи — 233 символа. Каждая просящая фраза повышала бы его на одну позицию последовательности, при этом все равно сьедая лимит сама собой. Каждую фразу можно было использовать только один раз, она должна была начинаться с новой строки и их нельзя было компоновать вместе. Таким образом можно было выбить себе текста на 2584 символа.
Но потом я вернулся на Землю и задумался о корне проблемы — ограничениях. Понял простую истину: лучше, когда их вообще нет. Если мне не жалко символов, то почему я изначально должен ставить ограничение на длину изречения и заставлять пользователя молить о добавке?! Но сама идея меня сильно веселила, я её реализовал практически полностью а потом тупо выпилил.
И еще одно — в пизду лайки. Когда-то их придумал какой-то Марк Цукерберг или кто-то из инстаграма, и теперь это основное пропитание голодающих шакалов энгейджмента. Были лайки, были дайзлайки, потом дизлайки убрали, потом добавили “реакции”, “эмодзи” и всякую чепуху. Теперь не обязательно отвечать на сообщение, думать и зацикливаться. Можно просто тыкнуть кнопку “LOL”. Нахуй это все. Хочешь высказать речь — выскажи. Не хочешь, то промолчи, уйди. Мне глубоко похуй, нравится тебе мой пост или нет, зато мне интересно, есть ли у тебя какие-то мысли на его счет или собственные интересные истории. Можешь меня потроллить или похуесосить в своем изречении, мне будет это немного интереснее, чем увидеть 100500 лайков.
Далее
Что мне не нравится — это визуализация индентации. Простые пунктирные линии смотрятся как-то убого, и у меня была идея сделать её изящными стрелочками от изречения к изречению. Но к сожалению это довольно сложный кусок работы, который просто задержит деплой изречений в прод. Хотелось бы еще сделать возможность цитирования, но пока не знаю как это лучше реализовать. Тоже оставляю это на будущее. Про аплоад картинок уже сказал.
А далее, если все получится так же как и в этот раз, я планирую еще одно незаметное но сложное улучшение, но не в изречениях. И об этом будет отдельный детальный пост.
Так что добро пожаловать к написанию интересных, содержательных и вдумчивых изречений. Помни: все-таки они мне стоят денег!