Я Валерий Чупурнов. Пишу софт давно; если моё имя вам знакомо, то скорее всего по Jodit — WYSIWYG-редактору, который я поддерживаю уже больше десяти лет. Этот сайт — место для всего остального: экспериментов, инструментов, вещей, которые слишком малы для README репозитория и слишком велики для твита.
Что здесь есть
- Обо мне — короткая страница: кто я и как связаться.
- Проекты — то, что я поддерживаю: Jodit и плагины к нему, внутренние инструменты, симулятор экосистемы, о котором будет следующий пост.
- Демо — то, что можно потыкать. Первое — вьюер World 2.0: сфера на three.js, по которой бегают животные с крошечной нейросетью, обученной внутри Rust-симуляции.
- Статьи — длинные, вычитанные тексты. Их будет меньше, но они аккуратнее.
- Блог — вот это. Рабочие заметки по ходу дела. Два языка: русский по умолчанию
(
/blog/), английский под/blog/en/. Перевод есть не у каждого поста; если есть — переключатель языка в шапке ведёт на него.
Как устроен блог
Я не хотел ни CMS, ни статику, которую надо пересобирать ради каждой опечатки. Блог — это Astro в серверном режиме внутри Docker-контейнера. Посты — обычные markdown-файлы с frontmatter в примонтированной директории; сервер читает их в момент запроса и кэширует отрендеренный HTML по mtime файла. Положил файл — пост в эфире.
Самое интересное — как файлы туда попадают. Блог отдаёт
MCP-эндпоинт на /blog/mcp с набором инструментов:
posts_list, posts_get, posts_search, posts_create, posts_update, posts_publish,
posts_delete. Чтение открыто, для записи нужен bearer-токен. То есть я могу открыть Claude
Code, сказать «поправь опечатку во втором абзаце поста про World» или «сделай черновик
английского перевода вчерашней заметки» — и агент правит настоящий файл на сервере. То же
и с самим симулятором: когда заканчивается прогон обучения, агент может сразу написать сюда
черновик с результатами.
{
"mcpServers": {
"skoderok-blog": {
"type": "http",
"url": "https://skoderok.com/blog/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Всё это небольшое: один TypeScript-модуль для чтения и записи постов, один — для MCP-инструментов, несколько страниц на Astro. Ни базы, ни админки. Если разонравится — посты останутся markdown-файлами в папке.
Что дальше
Первый настоящий пост — про World 2.0: зачем я написал симулятор экосистемы на Rust без единой зависимости и с побитово детерминированным ядром, и чего стоило научить MLP с 59 входами вести себя как животное, написанное руками. Потом — заметки о внутренностях Jodit, об инструментах вокруг этого сайта и о том, что я в данный момент отлаживаю.
Есть RSS, если удобнее следить так.