Продолжаю делать компьютерную HTML5-игру для Telegram «Memento mori» https://gitlab.com/orion55/memento
Небольшая казуальная штука на память: открываешь карточки, ищешь пары и стараешься уложиться в минимальное количество ходов.
Решил писать её вместе с AI Claude. И вот тут началось интересное. Я попросил реализовать авторизацию через Telegram и сохранение пользователей в базу --- фича сложная, многоступенчатая. Claude справился. Не с первого раза, но в целом достойно.
А потом я попросил написать API для таблицы лидеров - и начался цирк. Сначала мне предложили двухуровневый кэш: промежуточную таблицу в PostgreSQL плюс Redis. При том, что это пет-проект и трафика там кот наплакал. Попросил упростить - без Redis и без лишних сущностей. Тогда появилось материализованное представление. Объяснить, что мне нужен обычный SQL-запрос с нормальными индексами, удалось далеко не сразу.
В какой-то момент стало ясно: дело не в модели, а в ТЗ. Без нормальной постановки задачи результат получается соответствующий. Старая истина подтвердилась --- без ТЗ результат ХЗ. В итоге почти всю неделю писал документацию к проекту: формализовал входы, выходы, граничные случаи. Почувствовал себя бизнес-аналитиком.
Потом решил пойти дальше --- создал саб-агента в Claude, который делает код-ревью. И внезапно выяснилось, что только что написанный код таблицы лидеров содержит уязвимости. Отдельный квест - актуальность знаний. Последнюю версию NextJS Claude знает не лучшим образом, поэтому подключил Model Context Protocol (MCP)-сервер Context7 https://github.com/upstash/context7 Он подтягивает свежую документацию и сильно помогает.
В итоге, чтобы получить от Claude Code «просто нормальный код среднего уровня», приходится строить мини-фабрику: MCP-серверы, субагенты, маршрутизацию контекста, правила. Ты вроде просил фичу, а в итоге проектируешь среду, в которой она вообще может быть сгенерирована. И быстро понимаешь: всё упирается не в хитрые промпты, а в качественный бизнес-анализ и документацию. Пока не описаны процессы, границы, исключения и критерии «готово», агент будет уверенно ехать в разные стороны.
По ощущениям это уже чистое метапрограммирование. Ты не пишешь код --- ты строишь систему, которая пишет код. И это неожиданно похоже на generic'и: не «сделай Х», а «сделай механизм, который стабильно делает Х при разных входах». Самой сложной частью оказывается не генерация, а проектирование условий, в которых она становится предсказуемой.
Небольшая казуальная штука на память: открываешь карточки, ищешь пары и стараешься уложиться в минимальное количество ходов.
Решил писать её вместе с AI Claude. И вот тут началось интересное. Я попросил реализовать авторизацию через Telegram и сохранение пользователей в базу --- фича сложная, многоступенчатая. Claude справился. Не с первого раза, но в целом достойно.
А потом я попросил написать API для таблицы лидеров - и начался цирк. Сначала мне предложили двухуровневый кэш: промежуточную таблицу в PostgreSQL плюс Redis. При том, что это пет-проект и трафика там кот наплакал. Попросил упростить - без Redis и без лишних сущностей. Тогда появилось материализованное представление. Объяснить, что мне нужен обычный SQL-запрос с нормальными индексами, удалось далеко не сразу.
В какой-то момент стало ясно: дело не в модели, а в ТЗ. Без нормальной постановки задачи результат получается соответствующий. Старая истина подтвердилась --- без ТЗ результат ХЗ. В итоге почти всю неделю писал документацию к проекту: формализовал входы, выходы, граничные случаи. Почувствовал себя бизнес-аналитиком.
Потом решил пойти дальше --- создал саб-агента в Claude, который делает код-ревью. И внезапно выяснилось, что только что написанный код таблицы лидеров содержит уязвимости. Отдельный квест - актуальность знаний. Последнюю версию NextJS Claude знает не лучшим образом, поэтому подключил Model Context Protocol (MCP)-сервер Context7 https://github.com/upstash/context7 Он подтягивает свежую документацию и сильно помогает.
В итоге, чтобы получить от Claude Code «просто нормальный код среднего уровня», приходится строить мини-фабрику: MCP-серверы, субагенты, маршрутизацию контекста, правила. Ты вроде просил фичу, а в итоге проектируешь среду, в которой она вообще может быть сгенерирована. И быстро понимаешь: всё упирается не в хитрые промпты, а в качественный бизнес-анализ и документацию. Пока не описаны процессы, границы, исключения и критерии «готово», агент будет уверенно ехать в разные стороны.
По ощущениям это уже чистое метапрограммирование. Ты не пишешь код --- ты строишь систему, которая пишет код. И это неожиданно похоже на generic'и: не «сделай Х», а «сделай механизм, который стабильно делает Х при разных входах». Самой сложной частью оказывается не генерация, а проектирование условий, в которых она становится предсказуемой.
GitLab
Orion55 / memento · GitLab
👍9
Продолжаю делать компьютерную HTML5‑игру для Telegram «Memento mori». Неделя прошла не в геймдеве, а в тихой и упрямой войне под названием DevOps. Проект мало написать — его нужно доставить на удалённый сервер, который живёт 24/7 и не интересуется твоим вдохновением.
В качестве CI/CD я использую GitLab. Он получает код, по кнопке собирает Docker‑образы, складывает их в свой registry и запускает команды на удалённом сервере, чтобы вытянуть свежие образы и перезапустить контейнеры. Схема известная и рабочая. Но дьявол, как обычно, в нюансах: права, зависимости, мелкие несостыковки, которые съедают часы и нервы.
В 2026 году использовать Nginx как реверс‑прокси уже выглядит странно. OpenSource‑версия фактически умерла, активное развитие уехало в коммерческую сторону. Русская команда сделала форк и назвала его Angie https://angie.software/ — по сути, тот же Nginx, но с новыми модулями: Brotli, защита от DDoS, поддержка HTTP/3 и главное — модуль ACME.
Раньше всё было просто и муторно одновременно. Нужен SSL — ставишь certbot, получаешь бесплатный сертификат от Let’s Encrypt, через 90 дней обновляешь. Certbot в cron, то работает, то нет. И в какой‑то момент сайт внезапно с просроченным сертификатом. Мелочь, а геморроя вагон. В Angie модуль ACME берёт это на себя — сам получает и продлевает сертификаты, нужно только один раз грамотно настроить. Вот хороший видеоурок «Автоматические TLS‑сертификаты: модуль ACME» https://www.youtube.com/watch?v=ywJQ25tDwaY
И тут я решил усложнить себе жизнь — купить VPS в Латвии. Поднял сервер на 80‑м порту, подключил домен, всё заработало с первого раза. Почувствовал себя победителем. Но как только получил сертификат и включил 443 порт — сайт умер. Я перелопатил конфиги Angie, сетевые настройки, проверил TLS руками через openssl, убил кучу времени. А потом выяснилось, что Роскомнадзор активно режет зарубежные хостинги по 443 порту — в поисках сервисов из трёх букв, которые нельзя называть. Перенёс проект на хостинг в Санкт‑Петербург — и всё заработало мгновенно. Борьба идёт, но явно не с теми.
Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Пока это даже не бета, а скорее заглушка, но фундамент уже стоит.
Смысл этой игры — не деньги, а прокачка навыков программиста и DevOps. Есть золотое правило: внедрять за раз одну новую технологию, а остальное держать старым и проверенным. Я же умудрился параллельно учить NextJS, Phaser, Angie и Claude AI. Вероятность не довести проект до конца при таком наборе растёт не линейно, а умножается. Технологии могут быть модными, но проблемы никуда не исчезают — их просто красиво асфальтируют маркетингом.
На работе, как только я рассказал про игру, посыпались вопросы. «А что будет, когда Telegram отключат?» — пока его собираются не отключать, а замедлять и отпиливать функции. Даже если полностью прикроют, технически переехать в VK или куда‑то ещё не проблема. Технической разницы почти нет.
«Сколько заработаешь?» — нисколько. Это pet‑проект. Чтобы зарабатывать, надо сначала понимать, кому ты продаёшь, какие у людей боли и за что они готовы платить. Игры для детей, подростков и взрослых — это три разных мира. А в простых головоломках уровня “три в ряд” конкуренция такая, что без продуманной стратегии туда лучше не лезть.
«Когда выйдет в Steam?» — никогда. Там и без меня 80% проектов очень странного качества. Пополнять этот список желания нет.
Самое забавное — я думал, что основная работа будет в игровом движке. По факту backend, frontend и DevOps съедают процентов 95 времени. До самого геймплея добираюсь урывками. И это я ещё не трогал полноценный мультиплеер с сетевым взаимодействием и многопоточную обработку данных.
Смысл всего этого один — довести проект до конца, несмотря на инфраструктурные грабли, блокировки, несовпадение ожиданий и реальности. Потому что прохождение курсов — это иллюзия прогресса. А реальный проект быстро показывает, чего ты на самом деле стоишь.
В качестве CI/CD я использую GitLab. Он получает код, по кнопке собирает Docker‑образы, складывает их в свой registry и запускает команды на удалённом сервере, чтобы вытянуть свежие образы и перезапустить контейнеры. Схема известная и рабочая. Но дьявол, как обычно, в нюансах: права, зависимости, мелкие несостыковки, которые съедают часы и нервы.
В 2026 году использовать Nginx как реверс‑прокси уже выглядит странно. OpenSource‑версия фактически умерла, активное развитие уехало в коммерческую сторону. Русская команда сделала форк и назвала его Angie https://angie.software/ — по сути, тот же Nginx, но с новыми модулями: Brotli, защита от DDoS, поддержка HTTP/3 и главное — модуль ACME.
Раньше всё было просто и муторно одновременно. Нужен SSL — ставишь certbot, получаешь бесплатный сертификат от Let’s Encrypt, через 90 дней обновляешь. Certbot в cron, то работает, то нет. И в какой‑то момент сайт внезапно с просроченным сертификатом. Мелочь, а геморроя вагон. В Angie модуль ACME берёт это на себя — сам получает и продлевает сертификаты, нужно только один раз грамотно настроить. Вот хороший видеоурок «Автоматические TLS‑сертификаты: модуль ACME» https://www.youtube.com/watch?v=ywJQ25tDwaY
И тут я решил усложнить себе жизнь — купить VPS в Латвии. Поднял сервер на 80‑м порту, подключил домен, всё заработало с первого раза. Почувствовал себя победителем. Но как только получил сертификат и включил 443 порт — сайт умер. Я перелопатил конфиги Angie, сетевые настройки, проверил TLS руками через openssl, убил кучу времени. А потом выяснилось, что Роскомнадзор активно режет зарубежные хостинги по 443 порту — в поисках сервисов из трёх букв, которые нельзя называть. Перенёс проект на хостинг в Санкт‑Петербург — и всё заработало мгновенно. Борьба идёт, но явно не с теми.
Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Пока это даже не бета, а скорее заглушка, но фундамент уже стоит.
Смысл этой игры — не деньги, а прокачка навыков программиста и DevOps. Есть золотое правило: внедрять за раз одну новую технологию, а остальное держать старым и проверенным. Я же умудрился параллельно учить NextJS, Phaser, Angie и Claude AI. Вероятность не довести проект до конца при таком наборе растёт не линейно, а умножается. Технологии могут быть модными, но проблемы никуда не исчезают — их просто красиво асфальтируют маркетингом.
На работе, как только я рассказал про игру, посыпались вопросы. «А что будет, когда Telegram отключат?» — пока его собираются не отключать, а замедлять и отпиливать функции. Даже если полностью прикроют, технически переехать в VK или куда‑то ещё не проблема. Технической разницы почти нет.
«Сколько заработаешь?» — нисколько. Это pet‑проект. Чтобы зарабатывать, надо сначала понимать, кому ты продаёшь, какие у людей боли и за что они готовы платить. Игры для детей, подростков и взрослых — это три разных мира. А в простых головоломках уровня “три в ряд” конкуренция такая, что без продуманной стратегии туда лучше не лезть.
«Когда выйдет в Steam?» — никогда. Там и без меня 80% проектов очень странного качества. Пополнять этот список желания нет.
Самое забавное — я думал, что основная работа будет в игровом движке. По факту backend, frontend и DevOps съедают процентов 95 времени. До самого геймплея добираюсь урывками. И это я ещё не трогал полноценный мультиплеер с сетевым взаимодействием и многопоточную обработку данных.
Смысл всего этого один — довести проект до конца, несмотря на инфраструктурные грабли, блокировки, несовпадение ожиданий и реальности. Потому что прохождение курсов — это иллюзия прогресса. А реальный проект быстро показывает, чего ты на самом деле стоишь.
👍7❤1
Пока делаешь пет‑проект, постоянно натыкаешься на вещи, о которых обычно не думаешь. На этой неделе я воевал не с кодом, а с дизайном.
Продолжаю делать компьютерную HTML5-игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Следующий этап этой невидимой войны — дизайн. И вот тут быстро выяснилось, что красивые ИИ-эскизы и реальная вёрстка — это две большие разницы. Картинка на одном телефоне сидит нормально, на другом уже уехала, а там, где нужны точно поставленные интерактивные элементы, всё начинает разваливаться при первом же масштабировании.
Я вспомнил одну из прошлых работ. У нас был дизайнер, который рисовал великолепные макеты, но верстать их было сущим наказанием. То плавные линии. В природе ведь нет прямых линий, а вот вёрстка живёт исключительно прямоугольными блоками, то многоцветные градиентные тени — нет таких теней в CSS, то бесконечные оттенки чёрного, которые вроде бы разные, но попробуй потом всё это аккуратно собрать в интерфейс. Теперь в этой роли оказался уже я сам, только вместо живого дизайнера — ИИ. И, как выяснилось, ИИ тоже умеет рисовать красиво, но совершенно не думает о том, как это потом собирать руками.
В итоге пришлось расчехлять Photoshop и доводить всё напильником. Чтобы был понятен масштаб бедствия: я попросил ИИ нарисовать обычный крестик для закрытия окна в готическом стиле. Он нарисовал не кнопку закрытия, а какой-то мрачный крест с черепом, словно это артефакт из тёмного фэнтези. Я попросил сделать проще — получил тот же крест с черепом, только уже без фона. Убрал слово «готический» — и меня мгновенно унесло в киберпанк. В какой-то момент я плюнул и просто сам вырезал фон в Photoshop, чтобы получить нормальный объёмный металлический крестик, а не очередной полёт чужой фантазии.
Потом я решил доверить ИИ ещё и вёрстку страниц. И вот здесь стало совсем весело. Фронтенд у него получается откровенно плохо: то лишние обёртки лепит, то, наоборот, не хватает служебных блоков, без которых ничего нормально не тянется и не центрируется. На одном разрешении всё ещё как-то держится, а стоит только изменить размер области — и весь интерфейс ломается на глазах. При этом с бэкендом у ИИ ситуация заметно лучше. Если чётко расписать алгоритм, входные данные, выходные данные и граничные случаи, то код на серверной части он выдаёт вполне вменяемый.
На работе в это же время всплыла другая история. Корпоративная система неверно ищет телефонные звонки в базе данных АТС. Я написал подробное техзадание: что есть, в чём проблема, как её исправить, какие есть нефункциональные требования. Специально расписал всё очень подробно, почти как для джунов: с примерами кода, подсказками и пояснениями по ходу. Просто я не знаю реальный уровень наших программистов, а потому решил, что лучше переобъяснить, чем потом разгребать недопонимание и костыли.
Я даже отдельно спросил у начальника программистов, нормальна ли такая степень детализации и справятся ли они с задачей. На что он мне ответил фразой, которая, кажется, идеально описывает весь отечественный энтерпрайз: «Наши программисты закостылят что угодно». И вот в этот момент я почему-то испытал не ужас, а даже какую-то гордость за наш отдел. Потому что, как ни крути, в этой фразе было не только про костыли, но и про удивительную инженерную гибкость.
В итоге я поймал себя на простой мысли. ИИ хорошо помогает там, где всё можно строго формализовать: алгоритмы, данные, граничные случаи. Но как только начинается дизайн, интерфейсы и реальная вёрстка под десятки экранов — приходится возвращаться к старому инженерному инструменту: голове и напильнику. Пет‑проекты хороши тем, что очень быстро ставят всё на свои места.
Продолжаю делать компьютерную HTML5-игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Следующий этап этой невидимой войны — дизайн. И вот тут быстро выяснилось, что красивые ИИ-эскизы и реальная вёрстка — это две большие разницы. Картинка на одном телефоне сидит нормально, на другом уже уехала, а там, где нужны точно поставленные интерактивные элементы, всё начинает разваливаться при первом же масштабировании.
Я вспомнил одну из прошлых работ. У нас был дизайнер, который рисовал великолепные макеты, но верстать их было сущим наказанием. То плавные линии. В природе ведь нет прямых линий, а вот вёрстка живёт исключительно прямоугольными блоками, то многоцветные градиентные тени — нет таких теней в CSS, то бесконечные оттенки чёрного, которые вроде бы разные, но попробуй потом всё это аккуратно собрать в интерфейс. Теперь в этой роли оказался уже я сам, только вместо живого дизайнера — ИИ. И, как выяснилось, ИИ тоже умеет рисовать красиво, но совершенно не думает о том, как это потом собирать руками.
В итоге пришлось расчехлять Photoshop и доводить всё напильником. Чтобы был понятен масштаб бедствия: я попросил ИИ нарисовать обычный крестик для закрытия окна в готическом стиле. Он нарисовал не кнопку закрытия, а какой-то мрачный крест с черепом, словно это артефакт из тёмного фэнтези. Я попросил сделать проще — получил тот же крест с черепом, только уже без фона. Убрал слово «готический» — и меня мгновенно унесло в киберпанк. В какой-то момент я плюнул и просто сам вырезал фон в Photoshop, чтобы получить нормальный объёмный металлический крестик, а не очередной полёт чужой фантазии.
Потом я решил доверить ИИ ещё и вёрстку страниц. И вот здесь стало совсем весело. Фронтенд у него получается откровенно плохо: то лишние обёртки лепит, то, наоборот, не хватает служебных блоков, без которых ничего нормально не тянется и не центрируется. На одном разрешении всё ещё как-то держится, а стоит только изменить размер области — и весь интерфейс ломается на глазах. При этом с бэкендом у ИИ ситуация заметно лучше. Если чётко расписать алгоритм, входные данные, выходные данные и граничные случаи, то код на серверной части он выдаёт вполне вменяемый.
На работе в это же время всплыла другая история. Корпоративная система неверно ищет телефонные звонки в базе данных АТС. Я написал подробное техзадание: что есть, в чём проблема, как её исправить, какие есть нефункциональные требования. Специально расписал всё очень подробно, почти как для джунов: с примерами кода, подсказками и пояснениями по ходу. Просто я не знаю реальный уровень наших программистов, а потому решил, что лучше переобъяснить, чем потом разгребать недопонимание и костыли.
Я даже отдельно спросил у начальника программистов, нормальна ли такая степень детализации и справятся ли они с задачей. На что он мне ответил фразой, которая, кажется, идеально описывает весь отечественный энтерпрайз: «Наши программисты закостылят что угодно». И вот в этот момент я почему-то испытал не ужас, а даже какую-то гордость за наш отдел. Потому что, как ни крути, в этой фразе было не только про костыли, но и про удивительную инженерную гибкость.
В итоге я поймал себя на простой мысли. ИИ хорошо помогает там, где всё можно строго формализовать: алгоритмы, данные, граничные случаи. Но как только начинается дизайн, интерфейсы и реальная вёрстка под десятки экранов — приходится возвращаться к старому инженерному инструменту: голове и напильнику. Пет‑проекты хороши тем, что очень быстро ставят всё на свои места.
mementus.ru
Memento Mori
Memento Mori — мрачная игра на память: находи пары в готической атмосфере.
👍4
Иногда обычная рабочая неделя неожиданно превращается в сборник технических историй: немного администрирования, немного борьбы с кривыми конфигами, немного экспериментов с AI и параллельно разработка собственной игры. Каждая такая задача сначала выглядит мелкой и рутинной, но стоит копнуть глубже — и она внезапно превращается в маленькую археологическую экспедицию по старому коду, странным решениям и забытым настройкам.
На работе возникла задача синхронизировать фамилии из телефонного справочника с названиями телефонов. Ситуация типичная: условно телефон закреплён за Ивановым, Иванов уволился, вместо него пришёл Петров — а телефон продолжает показывать, что это Иванов. Просто потому, что никто не поменял CallerID.
Проблем оказалось две. Первая — в конфигурации АТС числилась куча телефонов, которые физически зарегистрированы и при этом отсутствуют в справочнике. Лишний мусор. Пришлось написать скрипт, который прошёлся по конфигу и вычистил всё, что не используется.
Вторая проблема оказалась веселее: конфигурационный файл с телефонами оказался «битый». У Asterisk есть забавная привычка — при одной ошибке он может орать, что всё пропало, но при этом спокойно игнорировать опечатки в ключах. Например: pickguproup вместо pickupgroup или usename вместо username. Плюс у части телефонов вообще пустые значения в callerid.
Руками такое не исправишь: телефонов больше трёхсот. Поэтому я написал несколько скриптов, которые прошлись по конфигу, поправили ключи, проверили callerid и привели всё в порядок. В итоге удалось восстановить 29 «сбойных» телефонов — и заодно отсортировать результаты по алфавиту.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта [https://mementus.ru/](https://mementus.ru/) , а вот бот [https://t.me/memento_mori_game_bot](https://t.me/memento_mori_game_bot) .
Читая документацию по Claude, я долго удивлялся: зачем там столько сущностей — субагенты, скилы, оркестрация. На практике быстро выяснилось, что у AI память очень короткая. После длинного диалога он начинает забывать критические детали.
Отсюда и появляется архитектура из маленьких агентов. Универсальный «многорукий» помощник, который делает всё сразу, работает плохо. А вот отдельный агент с чёткой задачей — например проанализировать код или подготовить текст — справляется заметно лучше.
Хорошо об этом написано в статье «Контекст‑инжиниринг для coding‑агентов: почему агент тупит не из‑за модели» [https://habr.com/ru/companies/cloud_ru/articles/1008522/](https://habr.com/ru/companies/cloud_ru/articles/1008522/)
На практике диалог с coding‑агентом быстро превращается в стабильный шаблон:
Сначала: «прочитай эти файлы и объясни, как устроен модуль и где могут быть баги».
Потом: «предложи план изменений по шагам, код пока не трогай».
И только после этого: «вноси изменения строго по плану; если от него отходишь — объясни почему».
По сути, текстовые файлы и куски контекста просто путешествуют между разными агентами. Когда задача чёткая и ограниченная — например «внести правку в код» или «проанализировать текст» — всё работает отлично. Когда задача становится слишком общей, агент начинает быстро забывать детали.
Был и забавный эпизод. Перестало собираться приложение. Я был уверен, что AI исправит это за пару минут. В итоге он два часа создавал и удалял строки, переписал половину проекта и почти всё вернул обратно. Ошибка же решилась заменой одной строки. Единственное полезное открытие из этой истории — ключ
На работе возникла задача синхронизировать фамилии из телефонного справочника с названиями телефонов. Ситуация типичная: условно телефон закреплён за Ивановым, Иванов уволился, вместо него пришёл Петров — а телефон продолжает показывать, что это Иванов. Просто потому, что никто не поменял CallerID.
Проблем оказалось две. Первая — в конфигурации АТС числилась куча телефонов, которые физически зарегистрированы и при этом отсутствуют в справочнике. Лишний мусор. Пришлось написать скрипт, который прошёлся по конфигу и вычистил всё, что не используется.
Вторая проблема оказалась веселее: конфигурационный файл с телефонами оказался «битый». У Asterisk есть забавная привычка — при одной ошибке он может орать, что всё пропало, но при этом спокойно игнорировать опечатки в ключах. Например: pickguproup вместо pickupgroup или usename вместо username. Плюс у части телефонов вообще пустые значения в callerid.
Руками такое не исправишь: телефонов больше трёхсот. Поэтому я написал несколько скриптов, которые прошлись по конфигу, поправили ключи, проверили callerid и привели всё в порядок. В итоге удалось восстановить 29 «сбойных» телефонов — и заодно отсортировать результаты по алфавиту.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта [https://mementus.ru/](https://mementus.ru/) , а вот бот [https://t.me/memento_mori_game_bot](https://t.me/memento_mori_game_bot) .
Читая документацию по Claude, я долго удивлялся: зачем там столько сущностей — субагенты, скилы, оркестрация. На практике быстро выяснилось, что у AI память очень короткая. После длинного диалога он начинает забывать критические детали.
Отсюда и появляется архитектура из маленьких агентов. Универсальный «многорукий» помощник, который делает всё сразу, работает плохо. А вот отдельный агент с чёткой задачей — например проанализировать код или подготовить текст — справляется заметно лучше.
Хорошо об этом написано в статье «Контекст‑инжиниринг для coding‑агентов: почему агент тупит не из‑за модели» [https://habr.com/ru/companies/cloud_ru/articles/1008522/](https://habr.com/ru/companies/cloud_ru/articles/1008522/)
На практике диалог с coding‑агентом быстро превращается в стабильный шаблон:
Сначала: «прочитай эти файлы и объясни, как устроен модуль и где могут быть баги».
Потом: «предложи план изменений по шагам, код пока не трогай».
И только после этого: «вноси изменения строго по плану; если от него отходишь — объясни почему».
По сути, текстовые файлы и куски контекста просто путешествуют между разными агентами. Когда задача чёткая и ограниченная — например «внести правку в код» или «проанализировать текст» — всё работает отлично. Когда задача становится слишком общей, агент начинает быстро забывать детали.
Был и забавный эпизод. Перестало собираться приложение. Я был уверен, что AI исправит это за пару минут. В итоге он два часа создавал и удалял строки, переписал половину проекта и почти всё вернул обратно. Ошибка же решилась заменой одной строки. Единственное полезное открытие из этой истории — ключ
claude --dangerously-skip-permissions, который отключает бесконечные запросы подтверждения.mementus.ru
Memento Mori
Memento Mori — мрачная игра на память: находи пары в готической атмосфере.
Но случилось маленькое эпохальное событие: вчера я наконец добрался до работы с игровым движком Phaser. Прошёл ровно месяц с начала проекта.
За это время удалось:
- создать мини-лендинг для [https://mementus.ru/](https://mementus.ru/)
- реализовать backend: авторизацию через Telegram, таблицу лидеров и игровые сессии
- настроить интеграцию с Telegram
- собрать CI/CD и перенести проект на VPS
- подготовить дизайн экранов
- реализовать три интерфейса: начало игры, таблицу лидеров и настройки
Я наивно думал, что такой объём работы уложится в одну‑две недели. Но без всей этой «невидимой» подготовки сам игровой процесс просто не запустить.
Плюс параллельно пришлось осваивать кучу новых инструментов. И главный вопрос всё время был не «что делать», а «как именно это сделать».
Но проект движется. А значит всё идёт правильно.
И чем дальше, тем яснее простая мысль: большие проекты собираются из десятков мелких задач, которые по отдельности выглядят совершенно безобидно. Сегодня ты просто «чуть‑чуть поправил конфиг», завтра «немного поговорил с AI», а через месяц внезапно понимаешь, что у тебя уже работает половина игры — хотя вроде бы всё это время занимался какой‑то ерундой.
За это время удалось:
- создать мини-лендинг для [https://mementus.ru/](https://mementus.ru/)
- реализовать backend: авторизацию через Telegram, таблицу лидеров и игровые сессии
- настроить интеграцию с Telegram
- собрать CI/CD и перенести проект на VPS
- подготовить дизайн экранов
- реализовать три интерфейса: начало игры, таблицу лидеров и настройки
Я наивно думал, что такой объём работы уложится в одну‑две недели. Но без всей этой «невидимой» подготовки сам игровой процесс просто не запустить.
Плюс параллельно пришлось осваивать кучу новых инструментов. И главный вопрос всё время был не «что делать», а «как именно это сделать».
Но проект движется. А значит всё идёт правильно.
И чем дальше, тем яснее простая мысль: большие проекты собираются из десятков мелких задач, которые по отдельности выглядят совершенно безобидно. Сегодня ты просто «чуть‑чуть поправил конфиг», завтра «немного поговорил с AI», а через месяц внезапно понимаешь, что у тебя уже работает половина игры — хотя вроде бы всё это время занимался какой‑то ерундой.
mementus.ru
Memento Mori
Memento Mori — мрачная игра на память: находи пары в готической атмосфере.
👍4
Кажется, AI — это просто, пока не начинаешь его внедрять.
На работе опять подъехала задача из разряда «сначала звучит просто, потом начинаешь копать». Речь про классификацию телефонных звонков: запись уходит на удалённый сервер, там расшифровывается, классифицируется по ряду параметров и результат возвращается в 1С. По идее — считать эффективность менеджеров по продажам. По факту — ещё одна система, которую потом надо будет поддерживать.
Сам AI я писать не буду, но поддерживать — буду. И вот это как раз настораживает. Голосовое меню я уже переделывал три раза, пока не закрыл все «хотелки» бизнеса, и здесь ощущения те же: сначала «давайте быстро», потом бесконечные правки. Вариантов решений, по сути, три: МТС https://mws.ru/, Яндекс https://aistudio.yandex.ru/ru и Мегафон. У всех есть свои no-code и low-code инструменты, но к no-code у меня стойкое недоверие.
Они хорошо работают на презентациях: простые кейсы, красивые схемы, всё кликается. Было хорошее сравнение — это как инвалидная коляска на рельсах: можно ехать и даже наслаждаться, но встать нельзя, и приедешь ровно туда, куда тебя везут. Но как только доходит до реальной логики, то, что в коде делается на одном экране, превращается в гигантскую потоковую диаграмму, в которой невозможно ориентироваться. В особо изощрённых случаях даже цикл собрать — отдельный квест. Да, здесь есть low-code, можно дописывать руками, но вопрос в том, насколько этого хватит, когда начнётся настоящая работа с данными.
А вся суть, как обычно, именно в данных. Видел кейс с AI-стартапом, который по факту делает несколько запросов к ChatGPT. Звучит просто, но основной объём работы — это подготовка данных: они кривые, неполные, противоречивые. Потом результат надо интерпретировать, проверить другой нейронкой и только после этого отдавать в BI или инфраструктуру заказчика. В итоге нейронки занимают процентов 10, всё остальное — грязная инженерная работа. Хорошо это разобрано в статье про внедрение AI в производство «Скучная правда про LLM: эффект дают не громкие слова, а простые сценарии с очевидной ценностью» https://habr.com/ru/companies/ru_mts/articles/925834/
Со своей стороны я пока закрыл самый приземлённый кусок — подготовку записей звонков. Нейронка лучше работает, если передавать звук в стерео: оператор в одном канале, абонент в другом. Asterisk это умеет, но делает максимально неудобно — пишет два отдельных файла без сжатия. Пришлось писать скрипт, который собирает их в один стерео WAV, а потом сжимает в mp3. Теперь осталось это всё стабильно отправлять на удалённый сервер и не сломать по дороге.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Перед тем как бросаться реализовывать фичи, решил сделать как советуют все умные люди — сначала план. Написал субагента-планировщика и получил список из 17 шагов. Я почему-то был уверен, что осталось 2-3 шага до победы.
Процесс работы с AI теперь выглядит так: спецификация → план → маленькие итерации → ревью → фиксация изменений в git. Начал реализовывать и сразу столкнулся с классикой: AI упорно изобретает свои «велосипеды» — таймеры, рандом, перемещения — вместо того, чтобы использовать то, что уже есть в Phaser. Приходится постоянно возвращать его в реальность.
Заодно открыл для себя, что в Phaser можно спокойно использовать реактивный подход через Zustand, причём даже без React. Это оказалось неожиданно удобно: состояние контролируемое, логика прозрачнее, и не надо городить лишние сущности. Игровое поле уже есть, играть даже можно, хотя с размерами карт я, конечно, промахнулся — придётся переделывать.
Чем дальше в это всё лезу, тем больше ощущение, что AI — это не про «умную магию», а про аккуратную инженерную рутину вокруг него. И если эту рутину не сделать нормально, никакая нейронка не спасёт.
На работе опять подъехала задача из разряда «сначала звучит просто, потом начинаешь копать». Речь про классификацию телефонных звонков: запись уходит на удалённый сервер, там расшифровывается, классифицируется по ряду параметров и результат возвращается в 1С. По идее — считать эффективность менеджеров по продажам. По факту — ещё одна система, которую потом надо будет поддерживать.
Сам AI я писать не буду, но поддерживать — буду. И вот это как раз настораживает. Голосовое меню я уже переделывал три раза, пока не закрыл все «хотелки» бизнеса, и здесь ощущения те же: сначала «давайте быстро», потом бесконечные правки. Вариантов решений, по сути, три: МТС https://mws.ru/, Яндекс https://aistudio.yandex.ru/ru и Мегафон. У всех есть свои no-code и low-code инструменты, но к no-code у меня стойкое недоверие.
Они хорошо работают на презентациях: простые кейсы, красивые схемы, всё кликается. Было хорошее сравнение — это как инвалидная коляска на рельсах: можно ехать и даже наслаждаться, но встать нельзя, и приедешь ровно туда, куда тебя везут. Но как только доходит до реальной логики, то, что в коде делается на одном экране, превращается в гигантскую потоковую диаграмму, в которой невозможно ориентироваться. В особо изощрённых случаях даже цикл собрать — отдельный квест. Да, здесь есть low-code, можно дописывать руками, но вопрос в том, насколько этого хватит, когда начнётся настоящая работа с данными.
А вся суть, как обычно, именно в данных. Видел кейс с AI-стартапом, который по факту делает несколько запросов к ChatGPT. Звучит просто, но основной объём работы — это подготовка данных: они кривые, неполные, противоречивые. Потом результат надо интерпретировать, проверить другой нейронкой и только после этого отдавать в BI или инфраструктуру заказчика. В итоге нейронки занимают процентов 10, всё остальное — грязная инженерная работа. Хорошо это разобрано в статье про внедрение AI в производство «Скучная правда про LLM: эффект дают не громкие слова, а простые сценарии с очевидной ценностью» https://habr.com/ru/companies/ru_mts/articles/925834/
Со своей стороны я пока закрыл самый приземлённый кусок — подготовку записей звонков. Нейронка лучше работает, если передавать звук в стерео: оператор в одном канале, абонент в другом. Asterisk это умеет, но делает максимально неудобно — пишет два отдельных файла без сжатия. Пришлось писать скрипт, который собирает их в один стерео WAV, а потом сжимает в mp3. Теперь осталось это всё стабильно отправлять на удалённый сервер и не сломать по дороге.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Перед тем как бросаться реализовывать фичи, решил сделать как советуют все умные люди — сначала план. Написал субагента-планировщика и получил список из 17 шагов. Я почему-то был уверен, что осталось 2-3 шага до победы.
Процесс работы с AI теперь выглядит так: спецификация → план → маленькие итерации → ревью → фиксация изменений в git. Начал реализовывать и сразу столкнулся с классикой: AI упорно изобретает свои «велосипеды» — таймеры, рандом, перемещения — вместо того, чтобы использовать то, что уже есть в Phaser. Приходится постоянно возвращать его в реальность.
Заодно открыл для себя, что в Phaser можно спокойно использовать реактивный подход через Zustand, причём даже без React. Это оказалось неожиданно удобно: состояние контролируемое, логика прозрачнее, и не надо городить лишние сущности. Игровое поле уже есть, играть даже можно, хотя с размерами карт я, конечно, промахнулся — придётся переделывать.
Чем дальше в это всё лезу, тем больше ощущение, что AI — это не про «умную магию», а про аккуратную инженерную рутину вокруг него. И если эту рутину не сделать нормально, никакая нейронка не спасёт.
mws.ru
МТС Web Services - облачные сервисы, решения и платформы для бизнеса
Бигтех-компания, предоставляющая облачные, AI-сервисы и платформенные решения под разные задачи бизнеса: от работы с данными до разработки продуктов и оптимизации процессов
👍3
ИИ не пишет стартапы на миллион. Он забирает скучную работу.
Посмотрел видео «Как изменится разработка с приходом ИИ» https://vk.com/video-163338141_456239886 — и оно слишком точно попало в мои мысли.
Владилен Минин разбирает разработку как цикл: анализ → дизайн → разработка → тестирование → деплой → поддержка. ИИ уже уверенно сидит в разработке и тестировании, но магии не случилось. Запрос уровня «сделай мне AI‑стартап на миллион в день без ошибок» остаётся фантазией. Рабочий вопрос проще: могу ли я отдать это джуну? Если да — это работа для AI‑агента. Всё остальное пока остаётся за человеком.
С языками ровно та же история. Новые не убили старые, и ИИ их тоже не убьёт. Там, где нужен C — будет C, где Java — будет Java. Просто появится ещё один инструмент в стеке. Пузырь это или нет — не так важно. Даже если пузырь, он слишком жирный, чтобы исчезнуть: датацентры с видеокартами никуда не денутся, просто займут своё место.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Игра уже процентов на 90 готова, в неё можно играть. Осталось довести лендинг и прикрутить мониторинг — и будет законченный продукт, а не вечный «ещё чуть-чуть».
Отдельное приключение — звуки. С картинками было проще. Нужно было найти звук переворачивающейся карты — решил сгенерировать через нейросети. ChatGPT выдал «мелодию» из одной ноты. После десятка попыток стало ясно: это уровень школьника с синтезатором на первом уроке. Подключил SUNO https://suno.com/ — получил трек на 3,5 минуты с мужским вокалом про переворачивание карты. Ну почти.
В итоге всё решилось через https://freesound.org/. Но и там свой цирк — я просто искал фанфары. Обычные, оркестровые, с трубами. А нашёл фанфары на ксилофоне, с криком петуха, в стиле аниме. Отдельный жанр — «композиторы», которые берут нормальную мелодию и мешают туда всё подряд. Найти нормальные фанфары оказалось задачей со звёздочкой. Нашёл. Остальное — техника: выровнять громкость, обрезать хвосты, привести форматы.
С Phaser тоже было весело. Абсолютное позиционирование — это боль. Простая задача: на десктопе 4 кнопки в ряд, на мобилке — 2×2. Во фронте это несколько строк. Здесь — функция с перерасчётом координат, куча арифметики ради четырёх кнопок. И это хороший пример того, как «игровой движок решает всё» — не совсем правда.
Когда начинал писать игру, думал, что буду в основном работать с движком и визуалом. По факту он закрывает только UI: отрисовка, ввод, взаимодействие. Всё остальное — бекенд, бизнес-логика на ООП, графика, devops — съедает львиную долю времени. Сам движок занял процентов десять от всей работы. Такой вот геймдев.
Если есть желание — зайдите в бот и попробуйте игру. Интересно, насколько она вообще воспринимается со стороны.
В итоге всё упирается не в инструменты, а в задачи: ИИ закрывает рутину, но думать и собирать систему по-прежнему приходится самому. И чем дальше, тем больше становится видно, где заканчивается «магия» и начинается обычная работа.
Посмотрел видео «Как изменится разработка с приходом ИИ» https://vk.com/video-163338141_456239886 — и оно слишком точно попало в мои мысли.
Владилен Минин разбирает разработку как цикл: анализ → дизайн → разработка → тестирование → деплой → поддержка. ИИ уже уверенно сидит в разработке и тестировании, но магии не случилось. Запрос уровня «сделай мне AI‑стартап на миллион в день без ошибок» остаётся фантазией. Рабочий вопрос проще: могу ли я отдать это джуну? Если да — это работа для AI‑агента. Всё остальное пока остаётся за человеком.
С языками ровно та же история. Новые не убили старые, и ИИ их тоже не убьёт. Там, где нужен C — будет C, где Java — будет Java. Просто появится ещё один инструмент в стеке. Пузырь это или нет — не так важно. Даже если пузырь, он слишком жирный, чтобы исчезнуть: датацентры с видеокартами никуда не денутся, просто займут своё место.
Параллельно продолжаю делать HTML5‑игру для Telegram «Memento mori». Вот сайт проекта https://mementus.ru/, а вот бот https://t.me/memento_mori_game_bot. Игра уже процентов на 90 готова, в неё можно играть. Осталось довести лендинг и прикрутить мониторинг — и будет законченный продукт, а не вечный «ещё чуть-чуть».
Отдельное приключение — звуки. С картинками было проще. Нужно было найти звук переворачивающейся карты — решил сгенерировать через нейросети. ChatGPT выдал «мелодию» из одной ноты. После десятка попыток стало ясно: это уровень школьника с синтезатором на первом уроке. Подключил SUNO https://suno.com/ — получил трек на 3,5 минуты с мужским вокалом про переворачивание карты. Ну почти.
В итоге всё решилось через https://freesound.org/. Но и там свой цирк — я просто искал фанфары. Обычные, оркестровые, с трубами. А нашёл фанфары на ксилофоне, с криком петуха, в стиле аниме. Отдельный жанр — «композиторы», которые берут нормальную мелодию и мешают туда всё подряд. Найти нормальные фанфары оказалось задачей со звёздочкой. Нашёл. Остальное — техника: выровнять громкость, обрезать хвосты, привести форматы.
С Phaser тоже было весело. Абсолютное позиционирование — это боль. Простая задача: на десктопе 4 кнопки в ряд, на мобилке — 2×2. Во фронте это несколько строк. Здесь — функция с перерасчётом координат, куча арифметики ради четырёх кнопок. И это хороший пример того, как «игровой движок решает всё» — не совсем правда.
Когда начинал писать игру, думал, что буду в основном работать с движком и визуалом. По факту он закрывает только UI: отрисовка, ввод, взаимодействие. Всё остальное — бекенд, бизнес-логика на ООП, графика, devops — съедает львиную долю времени. Сам движок занял процентов десять от всей работы. Такой вот геймдев.
Если есть желание — зайдите в бот и попробуйте игру. Интересно, насколько она вообще воспринимается со стороны.
В итоге всё упирается не в инструменты, а в задачи: ИИ закрывает рутину, но думать и собирать систему по-прежнему приходится самому. И чем дальше, тем больше становится видно, где заканчивается «магия» и начинается обычная работа.
VK Видео
Как изменится разработка с приходом ИИ / Владилен Минин
Крупнейшая профессиональная конференция фронтенд-разработчиков в России FrontendConf 2025 Презентация и тезисы: https://frontendconf.ru/moscow/2025/abstracts/15988 Доклад раскрывает текущее состояние разработки с использованием нейросетей, представляя вайбкодинг…
👍4❤1