Контекст
Неделя с шестого по четырнадцатое. Пропустил вторник — пишу сейчас. Было несколько параллельных веток: яхтенный бот, маркетплейс, persona factory, и один инцидент с железом который всё остальное поставил на паузу.
Чай на ноутбуке
Физический мир напомнил о себе
Пролил чай на ноутбук. Не воду — чай. Не чуть-чуть. Несколько секунд смотрел на экран и ждал чего-то плохого. Ноут не умер сразу — что, как выяснилось, не обязательно хороший знак: иногда короткое замыкание проявляется позже.
Первая реакция — подключить внешний диск и сделать бекап. Запустил rsync всей системы на KINGSTON. Процесс шёл больше часа, с предупреждениями про xattr на FAT-разделе — не страшно, данные скопировались. Пока шло, сидел и думал про то, сколько всего держится на одном куске железа, который можно залить чаем.
Ноут в итоге жив. Но ощущение осталось: бекапов не было вообще. Это не дыра в системе — это отсутствие системы как таковой. Надо чинить.
Автоматического бекапа не существовало. Один физический инцидент — и всё могло исчезнуть. Сейчас сделали вручную. Автоматизация — в следующий раз.
Persona Factory: боты говорят с ботами
Telegram открыл новый класс продуктов
Telegram выкатил обновление: боты теперь могут общаться друг с другом в групповых чатах. Это не мелочь — раньше бот видел только сообщения людей. Теперь видит других ботов.
Решил попробовать сразу. Собрали трёх ботов на бесплатных моделях, добавили в одну группу, написали responder — скрипт, который слушает входящие и отвечает от имени персонажей. Первые тесты были хаотичными: боты отвечали друг другу по кругу, пока не кончился лимит. Потом настроили фильтры.
Прокси давал проблемы — несколько раз запросы к Telegram API падали на одной из нод. Поменяли конфигурацию, заработало. Архитектура пока сырая — один файл responder.py, логи в хвост, без очереди. Но концепция работает: три персонажа живут в группе и разговаривают.
Когда платформа даёт новую возможность — первые прототипы делаются быстро именно потому что не знаешь ограничений. Знание приходит потом. Лучше сначала запустить.
tg-training: от логбука до расписания
Бот растёт в нескольких направлениях одновременно
На прошлой неделе задеплоили трекер. На этой он сильно разросся.
Первое: пришёл фидбек от Максима Г. по команде /logbook — вопросы про единицы измерения ветра, про то как вводить данные за тренировку одной цифрой если условия менялись. Переработали: оставили и м/с, и узлы, и кт — пусть ученик сам выбирает формат. Убрали лишнее из онбординга, который случайно задели при правке.
Второе: написали Privacy Policy. Физлицо, сервер в Германии — минимально необходимый текст чтобы формально соответствовать. Первый деплой выдал Internal Server Error на странице /privacy — нашли и починили.
Третье: попытались парсить booking.silavetra.com — систему записи на тренировки в яхт-клубе. Идея: знать своё реальное расписание изнутри бота, не заходя на сайт. Написали silavetra_sync.py, запустили через Playwright. Работает. Следующий шаг — показывать доступные слоты ученикам прямо в боте.
Инструкторского кабинета на silavetra нет. Пришлось парсить публичную страницу booking и фильтровать по имени. Хрупко, но работает пока структура не поменяется.
Тренировки на воде: персонализированные планы
Три человека, три разных уровня
Провёл тренировку с тремя учениками. Светлана — ходит давно, знает много, из-за этого иногда сомневается там где не надо. Юля — переключается между ролями, пока не нашла свою. Лиза — переоценивает уровень относительно реального опыта.
Раньше план был один на группу — общий. Теперь делаем персональный для каждого. Формат пока не устоялся: попробовали несколько вариантов, часть выглядела как для зала, не для воды. Юля прислала скриншот старого плана — показала что предпочитает тот формат. Договорились не удалять историю, показывать последний план.
Ветер 6 узлов, дождь, 9 градусов. Не лучшие условия, но вышли. Тренировка вокруг руля на слабом ветре — медленная лодка даёт больше времени на ошибку. Сработало.
Skill tree для яхтсменов
База знаний становится интерактивной
Параллельно с тренировочным ботом начал строить базу знаний по парусному спорту. Obsidian-vault, структурированные файлы по уровням — терминология, управление, тактика. Пока просто заполнение: приношу тезисы, Claude структурирует и добавляет вопросы чтобы двигаться дальше.
Потом появилась идея: сделать из этой базы RPG-подобное дерево навыков. Каждый ученик сам отмечает что уже освоил. Не тест от инструктора — самооценка. Это меняет динамику: ученик видит карту своих знаний, я вижу белые пятна, план тренировки строится из конкретных дыр, а не из общего "вы новичок".
Пока концепция. Следующий шаг — интерактивный веб поверх существующих markdown-файлов.
Самооценка точнее теста в начале пути. Человек знает что он делал — не знает только названий. Дерево навыков даёт язык для разговора о прогрессе.
Вывод с задержкой
Железо влияет на деньги
Вывод по G2G задержался — из-за ситуации с ноутом. Пайплайн не запускался несколько дней. Когда запустили — пришло 1337 (ожидали чуть больше). Пересчитали доли, провели выплаты.
Интересный момент: именно эта ситуация — когда задержка произошла из-за физического железа — поставила вопрос про автоматизацию подсчёта. Сейчас всё держится на том, что я запускаю пайплайн вручную примерно раз в неделю. Если не запускаю — данные устаревают, вывод задерживается.
Направление понятно: автоподсчёт или автозапуск пайплайна. Когда буду делать — не знаю. В следующий вывод, скорее всего.
Цифры недели
- 3 ученика на воде, 3 персональных плана
- 3 бота в одной группе — Persona Factory MVP
- 1 системный бекап на KINGSTON (первый вообще)
- 1337 — сумма вывода этой недели
silavetra_sync.pyнаписан и работает- Privacy Policy задеплоена — формально закрыты
Физический инцидент всегда напоминает о чём-то важном. В этот раз — о том, что автоматизация резервного копирования стоит дешевле одного стакана чая.