Reading view

Я построил AI-тренера, который всегда следит за моим отдыхом и пишет тренировки мне в часы

Пятьдесят дней назад планирование моих тренировок переехало из головы и переписки в телеграм-бота. Он читает восстановление из WHOOP и форму из TrainingPeaks, рассуждает через Claude и сам пишет структурированные тренировки обратно в календарь — оттуда они уезжают в Garmin Connect и на часы. За это время он записал в календарь 72 тренировки, а стоимость эксплуатации (дроплет, инференс, подписки) составила около 4 500 рублей в месяц против 30 000+ за живого тренера с теми же подписками на спортивные сервисы.

Официального доступа к TrainingPeaks у меня нет: в партнёрскую программу я написал и получил отказ без объяснения причин. В статье — как я всё равно научился писать в чужой календарь: обмен куки веб-сессии на bearer, GET-merge-PUT вместо несуществующего PATCH, поле, которое на чтении приходит объектом, а на запись требует JSON внутри JSON, и почему IF и TSS плановой тренировки приходится считать самому.

Вторая половина — про то, где это ломалось. Три отказа за пятьдесят дней, и ни один не был виной модели: устаревший в настройках пороговый темп, мой собственный баг с зонами не того вида спорта, один невалидный OAuth-scope, отбивавший запрос согласия целиком, и ответы, обрывавшиеся на полуслове из-за параметра, у которого «по умолчанию» значит разное у разных моделей. Плюс три дня, когда я был уверен, что агент зря меня бережёт, — а данные говорят, что прав был он.

Спортивного результата пока нет: до целевого марафона сто дней, но надеюсь на лучшее.

Как это устроено и во что обошлось
  •  

Вставай, Василий: как мы отобрали у пульта право поднимать гуманоида

Может ли робот встать по голосовой команде, если производитель это запретил?

Гуманоид Walker Tienkung поднимается на ноги только с физического пульта: короткое нажатие кнопки будит моторы и проводит самодиагностику, а длинное — ровно секунда удержания — поднимает из нулевой позы в стойку. Мы решили отдать весь этот путь голосу и быстро упёрлись в проблему: наши программные «нажатия» система молча игнорировала, а переход «встать» оказался заблокирован намеренно — команда принималась без ошибки, но робот не реагировал.

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

Читать далее
  •  
❌