Про меня

Я Бояршинов Дмитрий Владимирович, главный тестировщик, а также разработчик своих пет-проектов, про них ниже.

Работа
Главный тестировщик
Пет-проекты
Игра, панель сервера, Stenograph, боты, сайт команды
Стек
Python, Node.js, PowerShell, GitHub Actions, Claude Code

Вопросы по проектам и работе — в Telegram

Написать в Telegram

Проекты

«Это я!»

Пати-игры на телефонах для компании в одной комнате. Лобби по QR-коду, ничего ставить не нужно.

game.damagedealers.ru
Вход в игру и выбор режима

Что умеет

  • Сервер на Node.js и socket.io держит лобби и ходы игроков, клиент умещается в одну страницу.
  • Есть APK, в котором телефон сам становится сервером игры. Логика режимов общая для сайта и приложения.
  • Кнопка «Сообщить об ошибке» собирает описание от игрока, журнал его телефона, состояние лобби и лог сервера.

Режимы

  • Это я!
  • Крокодил
  • Алиас
  • Блэкджек
  • Шпион

Стек

  • Node.js
  • socket.io
  • Android
  • QR-коды

CI/CD для игры

Каждый push в main сам доходит до сервера. Если после выкладки игра не отвечает, возвращается прошлая версия.

1 мин 50 с от push до сервера в последнем запуске
Запуск в GitHub Actions: тесты, сборка APK и выкладка

Как проходит выкладка

  1. ТестыДвижок игр и сервер, по которому ходят боты: Крокодил 8×4 с отключениями игроков, Алиас, Блэкджек, Шпион.
  2. Совместимость с APKДвижок прогоняется в Rhino, как на телефоне, клиент APK сверяется с сайтом.
  3. Сборка APKПодпись ключом из секретов репозитория, файл уходит в Releases.
  4. ВыкладкаRunner на сервере делает бэкап, копирует файлы и перезапускает службу.
  5. Проверка или откатЕсли игра не ответила, восстанавливается бэкап.

Только зелёные тесты

Выкладка запускается, только если все тесты прошли. Ключ подписи и пароли лежат в секретах и не попадают в git.

Стек

  • GitHub Actions
  • self-hosted runner
  • PowerShell
  • Rhino

NSSM-панель

Пульт для всех служб на сервере и защита от тех, кто в него стучится.

panel.damagedealers.ru
99 атак из 1 814 запросов за одни сутки на скриншоте ниже
«Атаки»: карта, график и что ищут сканеры

Автобан

Много подозрительных запросов за короткое время, и адрес уходит в бан. За поиск секретов и эксплойтов банит сразу, повторный бан вдвое дольше.

Вход через Telegram

С нового адреса нужен код и подтверждение кнопкой в Telegram. Пускается только тот браузер, который просил.

«Службы»: боты и сайты с кнопками управления

Что ещё умеет

  • Сама находит службы NSSM в реестре: запуск, остановка, живые логи, правка .env.
  • Разбирает логи Caddy: кто ищет /.env, /wp-admin, /.git/config, из каких стран и сетей.
  • Блокирует брандмауэром Windows или через Caddy. Белый и чёрный списки.
  • Не даст забанить себя, loopback и сеть шире /8.

Stenograph

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

2 кнопки «Записать» и «Старт» — всё, что нужно от пользователя
Запись встречи: окно, звук системы и микрофон
Расшифровка с разделением по ролям

Протокол встречи

  • Сервер размечает, кто что сказал.
  • Постмит: кратко, ход обсуждения, решения, задачи с ответственными и сроками, открытые вопросы.
  • TXT, SRT/VTT с тайм-кодами или JSON. Русский, английский или автоопределение.

Безопасность и сервер

  • Доступ по персональным ключам. Запись удаляется сразу после расшифровки, незабранный результат через 6 часов.
  • Одна видеокарта на команду: задания в очереди, пользователь видит «Вы 2-й в очереди».
  • Сервер: Windows и NVIDIA от 6 ГБ. Рабочие места: Windows или Mac на Apple M1.

Работа с ИИ

Активно изучаю работу с ИИ и использую его в своих пет-проектах: и как инструмент разработки, и как часть самих продуктов.

ИИ в разработке

  • С Claude Code пишу код, скрипты установки и выкладки на сервер.
  • Ставлю задачу, а результат проверяю и тестирую сам — как тестировщик.
  • Эта страница собрана с Claude Code: дизайн, скриншоты, переезд сайтов на сервере.

ИИ внутри проектов

  • Stenograph распознаёт речь на видеокарте и размечает, кто что сказал.
  • Постмит в Stenograph составляет языковая модель прямо на компьютере: текст встречи никуда не отправляется.

Инструменты

  • Claude Code
  • распознавание речи
  • локальные языковые модели

D&D-персонажи

Калькулятор персонажей D&D 2024 для нашей компании. Игрок жмёт «Новый уровень» или «Предмет или деньги», а программа сама пересчитывает персонажа по правилам.

dnd.damagedealers.ru

Было → стало

После каждого шага видно, что изменилось и где это в листе персонажа.

Герои компании: у каждого игрока свой кабинет
Лист персонажа: характеристики, ресурсы, заклинания

Что умеет

  • Загружает персонажа из Long Story Short: JSON, PDF-лист или оба файла сразу.
  • На новом уровне спрашивает хиты, подкласс и характеристики там, где это положено правилами.
  • Отдаёт результат как JSON для загрузки обратно в LSS и как готовый лист для печати.
  • Хранит историю правок и подсвечивает расхождения с правилами. Таблицы классов сверены с next.dnd.su.

Стек

  • Node.js без зависимостей
  • данные в JSON
  • Caddy

Боты

Небольшие боты для команды и друзей. Все работают службами на сервере, за ними присматривает бот-надзиратель.

Watchdog: сводка за сутки и автобаны
Bot3d: расчёт стоимости 3D-печати
WatchdogTelegram
Следит за службами, присылает алерты панели и сводку атак, перезапускает упавшее кнопкой.
Bot3dTelegram
Считает стоимость 3D-печати по пластику, времени и весу, ведёт промокоды.
DamageDealersBotВКонтакте
Напоминает команде об игре и собирает, кто идёт.
FR13ENDSBotВКонтакте
Версия того же бота для друзей.
PostBotTelegram и ВК
Пересылает посты из Telegram-канала в группу ВКонтакте.
DamageDealersBot: сбор на игру

Стек

  • Python
  • python-telegram-bot
  • vk_api
  • NSSM

DamageDealers

Сайт страйкбольной команды из Перми: выезды, состав на игру, фотоотчёты и личный кабинет игрока.

team.damagedealers.ru

Новый адрес

damagedealers.ruteam.damagedealers.ru

Главная страница команды

Что внутри

  • Ближайшие выезды и состав на игру, после — фотоотчёт.
  • Личный кабинет со статистикой посещаемости.
  • Штаб: игры, участники, тексты, бэкап.
  • Ограничение частоты входа и журнал безопасности.

Стек

  • Node.js без зависимостей
  • данные в JSON
  • Caddy