<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Granda | Ideas &amp; Code</title><link>https://granda.org/ru/</link><description>Recent content on Granda | Ideas &amp; Code</description><generator>Hugo</generator><language>ru</language><lastBuildDate>Sat, 16 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://granda.org/ru/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM на Sony PSP</title><link>https://granda.org/ru/2026/05/16/llm-%D0%BD%D0%B0-sony-psp/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/05/16/llm-%D0%BD%D0%B0-sony-psp/</guid><description>&lt;p&gt;Sony PSP-2000 — это портативная консоль MIPS с частотой 333 МГц выпуска 2007 года с 64 МБ ОЗУ. На этой неделе моя PSP запускает Transformer с 15 миллионами параметров и выводит английский текст на LCD-экран со скоростью один-два токена в секунду.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
 &lt;img src="https://granda.org/images/posts/an-llm-on-a-sony-psp-chat.png" alt="Фреймбуфер PSP в конце тестового прогона из 64 токенов. Промпт 'Once upon a time, there was a little girl named Layla', продолжение ниже, в подвале '64 tokens in 42.6s (1.5 tok/s)'." width="720" /&gt;
&lt;/p&gt;</description></item><item><title>Новый агент для кодирования от xAI, Grok Build, поставляется с промптами в открытом тексте</title><link>https://granda.org/ru/2026/05/15/%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9-%D0%B0%D0%B3%D0%B5%D0%BD%D1%82-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BE%D1%82-xai-grok-build-%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F-%D1%81-%D0%BF%D1%80%D0%BE%D0%BC%D0%BF%D1%82%D0%B0%D0%BC%D0%B8-%D0%B2-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%BC-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B5/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/05/15/%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9-%D0%B0%D0%B3%D0%B5%D0%BD%D1%82-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BE%D1%82-xai-grok-build-%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F-%D1%81-%D0%BF%D1%80%D0%BE%D0%BC%D0%BF%D1%82%D0%B0%D0%BC%D0%B8-%D0%B2-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%BC-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B5/</guid><description>&lt;p&gt;xAI &lt;a href="https://x.ai/news/grok-build-cli"&gt;запустил Grok Build&lt;/a&gt; вчера — их ответ на Claude Code и Codex CLI. Команда установки — одна строка, бинарный файл доступен только на их высшем потребительском уровне ($299/мес, $99 вводная цена), а сам агент взаимодействует с Grok 4 через HTTP-интерфейс, совместимый с OpenAI.&lt;/p&gt;
&lt;p&gt;Я скачал бинарный файл из любопытства — хотел узнать, на каком языке он написан. В итоге я получил около тридцати дословных системных промптов, имена каждого внутреннего субагента, каждое описание инструмента и довольно полную картину архитектуры. Ничего из этого не потребовало больше, чем &lt;code&gt;tr&lt;/code&gt; и &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Мёртвый переключатель для редактирования брандмауэра</title><link>https://granda.org/ru/2026/05/05/%D0%BC%D1%91%D1%80%D1%82%D0%B2%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B1%D1%80%D0%B0%D0%BD%D0%B4%D0%BC%D0%B0%D1%83%D1%8D%D1%80%D0%B0/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/05/05/%D0%BC%D1%91%D1%80%D1%82%D0%B2%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B1%D1%80%D0%B0%D0%BD%D0%B4%D0%BC%D0%B0%D1%83%D1%8D%D1%80%D0%B0/</guid><description>&lt;p&gt;Самая страшная строка в автоматизации домашней лаборатории — та, которая редактирует правило брандмауэра на маршрутизаторе, к которому вы подключены по SSH.&lt;/p&gt;
&lt;p&gt;Вот как Claude Code и я всё равно их редактируем.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="страх"&gt;Страх&lt;/h2&gt;
&lt;p&gt;Мне нужно было изменить правило UDM Pro под названием &lt;em&gt;&amp;ldquo;Block inter-VLAN traffic&amp;rdquo;&lt;/em&gt; с &lt;code&gt;accept&lt;/code&gt; на &lt;code&gt;drop&lt;/code&gt;. Правило было неправильно настроено долгое время — установлено в &lt;code&gt;accept&lt;/code&gt;, что замыкало все разрешения выше по потоку — и закрыть его обратно было основной целью. Оркестратор, выполнявший изменение, был VM NixOS в моей домашней сети. Если переключение прервало бы путь, который использовала та VM (или мой собственный SSH), я оказался бы заблокирован на собственном маршрутизаторе без консольного резерва.&lt;/p&gt;</description></item><item><title>Патчинг весов LLM вручную</title><link>https://granda.org/ru/2026/04/15/%D0%BF%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3-%D0%B2%D0%B5%D1%81%D0%BE%D0%B2-llm-%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/04/15/%D0%BF%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3-%D0%B2%D0%B5%D1%81%D0%BE%D0%B2-llm-%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E/</guid><description>&lt;p&gt;Я написал реализацию ROME — редактирования модели ранга 1 — с нуля, используя только &lt;code&gt;torch&lt;/code&gt; и &lt;code&gt;transformers&lt;/code&gt;. Цель: переписать один факт внутри GPT-2 Medium с помощью одного сложения матриц и посмотреть, что при этом происходит со всем остальным, что знает модель.&lt;/p&gt;
&lt;p&gt;Я выполнил четыре редактирования. Три были хирургически точными. Четвёртое показало, что «хирургичность» ROME чрезвычайно чувствительна к деталям реализации, о которых не обязательно думаешь заранее.&lt;/p&gt;
&lt;h2 id="четыре-редактирования"&gt;Четыре редактирования&lt;/h2&gt;
&lt;p&gt;Я выбрал факты, которые GPT-2 Medium действительно знает с уверенностью (P &amp;gt; 0.5 для правильного ответа), из четырёх разных областей:&lt;/p&gt;</description></item><item><title>Аналитика</title><link>https://granda.org/ru/analytics/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/analytics/</guid><description/></item><item><title>Создание симулятора бортового компьютера космического аппарата с Claude Code</title><link>https://granda.org/ru/2026/03/30/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0-%D0%B1%D0%BE%D1%80%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0-%D0%BA%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%B0-%D1%81-claude-code/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/03/30/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D0%BC%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0-%D0%B1%D0%BE%D1%80%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0-%D0%BA%D0%BE%D1%81%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%B0-%D1%81-claude-code/</guid><description>&lt;p&gt;Я хотел понять, как работают компьютеры космических аппаратов. Планирование в реальном времени, защита от радиации, устойчивые к задержкам сети, которые поддерживают связь марсоходов с Землёй. С приближением Artemis II (первой пилотируемой лунной миссии за более чем 50 лет) пришло время погрузиться в эту тему. Поэтому я создал симулятор. С нуля. С Claude Code в роли напарника-программиста.&lt;/p&gt;
&lt;p&gt;Никакого физического оборудования. Всё запускается в QEMU и Docker на ноутбуке. &lt;a href="https://github.com/granda/spacecraft-computing-sim"&gt;Код на GitHub.&lt;/a&gt;&lt;/p&gt;
&lt;div class="desktop-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 QEMU[&amp;#34;QEMU (Cortex-M3)&amp;#34;] --&amp;gt;|UART socket| Bridge[uart_bridge.py]
 Bridge --&amp;gt;|bpsendfile| SC[Spacecraft Node]
 SC --&amp;gt;|LTP + 5s delay| GS[Ground Station]

 subgraph Docker
 SC
 GS
 end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="mobile-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 QEMU[&amp;#34;QEMU (Cortex-M3)&amp;#34;] --&amp;gt;|UART socket| Bridge[uart_bridge.py]
 Bridge --&amp;gt;|bpsendfile| SC[&amp;#34;Spacecraft Node (Docker)&amp;#34;]
 SC --&amp;gt;|LTP + 5s delay| GS[&amp;#34;Ground Station (Docker)&amp;#34;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="почему-именно-этот-проект"&gt;Почему именно этот проект&lt;/h2&gt;
&lt;p&gt;Я хотел изучить что-то действительно сложное. Что-то, где концепции незнакомы, а инструменты беспощадны. Компиляторы C, нацеленные на ARM. Скрипты компоновщика. Ввод/вывод с отображением в память. Таблицы векторов прерываний.&lt;/p&gt;</description></item><item><title>Ваша припаркованная Tesla — это дата-центр</title><link>https://granda.org/ru/2026/03/13/%D0%B2%D0%B0%D1%88%D0%B0-%D0%BF%D1%80%D0%B8%D0%BF%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F-tesla-%D1%8D%D1%82%D0%BE-%D0%B4%D0%B0%D1%82%D0%B0-%D1%86%D0%B5%D0%BD%D1%82%D1%80/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/03/13/%D0%B2%D0%B0%D1%88%D0%B0-%D0%BF%D1%80%D0%B8%D0%BF%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F-tesla-%D1%8D%D1%82%D0%BE-%D0%B4%D0%B0%D1%82%D0%B0-%D1%86%D0%B5%D0%BD%D1%82%D1%80/</guid><description>&lt;p&gt;Ваш автомобиль припаркован 95% времени. Внутри него находится чип, способный выполнять 300–500 триллионов операций в секунду, подключённый к системе охлаждения, преобразователям мощности и сотовому радиомодулю. И он ничего не делает.&lt;/p&gt;
&lt;p&gt;Tesla и xAI хотят это изменить. 11 марта Илон Маск &lt;a href="https://www.cnbc.com/2026/03/11/musk-unveils-joint-tesla-xai-project-macrohard.html"&gt;представил «Macrohard»&lt;/a&gt; — внутри проект называется Digital Optimus — совместный проект, превращающий припаркованные Tesla в персональных ИИ-агентов. Не чат-ботов. Агентов, которые наблюдают за вашим экраном, управляют мышью и клавиатурой и делают реальную работу.&lt;/p&gt;</description></item><item><title>Визуальное QA как этап конвейера CI</title><link>https://granda.org/ru/2026/02/06/%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-qa-%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%B0%D0%BF-%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80%D0%B0-ci/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/02/06/%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-qa-%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%B0%D0%BF-%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80%D0%B0-ci/</guid><description>&lt;p&gt;Месяц назад я смержил PR. Code review выглядел хорошо. Тесты прошли. Потом я открыл сайт на своём телефоне, и боковая панель была полностью сломана.&lt;/p&gt;
&lt;p&gt;Исправление было тривиальным — отсутствующая media query. Баг был очевиден, как только ты действительно посмотрел на мобильный вид. Никто не посмотрел.&lt;/p&gt;
&lt;p&gt;Поэтому я добавил этап конвейера, который смотрит.&lt;/p&gt;
&lt;p&gt;Я открываю issue на GitHub, которое говорит:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Реализовать опцию Ручного Ввода для добавления клиентов. При клике открывается широкий выдвижной ящик с формой для создания нового клиента.&lt;/p&gt;</description></item><item><title>Для Кого Предназначен Agent Trace?</title><link>https://granda.org/ru/2026/01/30/%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%B5%D0%B4%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD-agent-trace/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/01/30/%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%B5%D0%B4%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD-agent-trace/</guid><description>&lt;p&gt;Cursor выпустил &lt;a href="https://github.com/cursor/agent-trace"&gt;Agent Trace&lt;/a&gt; — открытую спецификацию для отслеживания того, какой код в репозитории был написан LLM. Она записывает модель, инструмент, диалог и точные диапазоны строк — всё это добавляется в JSONL-файл в вашем проекте.&lt;/p&gt;
&lt;p&gt;Презентация: &amp;ldquo;Поскольку агенты пишут всё больше кода, важно понимать, что пришло от ИИ, а что от людей.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Я потратил время на чтение спецификации и эталонной реализации. Инженерная работа солидная — чистая схема, продуманная расширяемость, хороший список партнёров (Amp, Amplitude, Cloudflare, Cognition, Google, Vercel). Но я постоянно возвращался к одному вопросу: что вы &lt;em&gt;делаете&lt;/em&gt; с этими данными?&lt;/p&gt;</description></item><item><title>Богатые Ссылки для Ленивых Разработчиков</title><link>https://granda.org/ru/2026/01/10/%D0%B1%D0%BE%D0%B3%D0%B0%D1%82%D1%8B%D0%B5-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%BB%D0%B5%D0%BD%D0%B8%D0%B2%D1%8B%D1%85-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/01/10/%D0%B1%D0%BE%D0%B3%D0%B0%D1%82%D1%8B%D0%B5-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%BB%D0%B5%D0%BD%D0%B8%D0%B2%D1%8B%D1%85-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2/</guid><description>&lt;p&gt;Когда я делюсь ссылкой на блог в Twitter или Slack, она отображается как обычный текст. Без изображения предварительного просмотра. Просто URL вроде &lt;a href="https://granda.org/en/2026/01/02/claude-code-on-the-go/"&gt;granda.org/en/2026/01/02/claude-code-on-the-go/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Мне нужны были изображения Open Graph. Стандартный подход: вручную создавать изображение 1200x630 для каждого поста. Это утомительно. Я попросил Claude автоматизировать это.&lt;/p&gt;
&lt;div class="desktop-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 Push[git push] --&amp;gt; GHA[GitHub Actions]
 GHA --&amp;gt; Hugo[Hugo Server]
 GHA --&amp;gt; PW[Playwright]
 PW --&amp;gt;|screenshot| Hugo
 PW --&amp;gt; IMG[OG Image]
 IMG --&amp;gt; Commit[git commit]
 Commit --&amp;gt; Deploy[Deploy]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="mobile-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 Push[git push] --&amp;gt; GHA[GitHub Actions]
 GHA --&amp;gt; Hugo[Hugo Server]
 GHA --&amp;gt; PW[Playwright]
 PW --&amp;gt;|screenshot| Hugo
 PW --&amp;gt; IMG[OG Image]
 IMG --&amp;gt; Commit[git commit]
 Commit --&amp;gt; Deploy[Deploy]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="настройка"&gt;Настройка&lt;/h2&gt;
&lt;p&gt;Я объяснил Claude проблему: постам нужны изображения для социальных сетей, но я не хочу создавать их вручную. Сделать скриншот содержимого статьи, сохранить его как OG-изображение, автоматически обновить метаданные.&lt;/p&gt;</description></item><item><title>Отписаться</title><link>https://granda.org/ru/unsubscribe/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/unsubscribe/</guid><description>&lt;p id="unsubscribe-message"&gt;Обработка...&lt;/p&gt;
&lt;script&gt;
(function() {
 const params = new URLSearchParams(window.location.search);
 const msg = document.getElementById('unsubscribe-message');

 if (params.get('success') === 'true') {
 msg.textContent = 'Вы отписались от рассылки.';
 } else if (params.get('error') === 'missing') {
 msg.textContent = 'Ошибка: Не предоставлен токен отписки.';
 } else if (params.get('error') === 'invalid') {
 msg.textContent = 'Ошибка: Недействительная ссылка отписки.';
 } else {
 msg.textContent = 'Ошибка: Произошла неизвестная ошибка.';
 }
})();
&lt;/script&gt;</description></item><item><title>Мой QA-инженер — это LLM</title><link>https://granda.org/ru/2026/01/09/%D0%BC%D0%BE%D0%B9-qa-%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80-%D1%8D%D1%82%D0%BE-llm/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/01/09/%D0%BC%D0%BE%D0%B9-qa-%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80-%D1%8D%D1%82%D0%BE-llm/</guid><description>&lt;p&gt;Claude может нажимать на кнопки.&lt;/p&gt;
&lt;p&gt;Звучит банально, но это меняет то, как я создаю UI. С Playwright MCP Claude не просто пишет код — он открывает браузер, переходит на localhost и проверяет, что все действительно работает. Он находит баги, которые я пропустил бы при ревью кода.&lt;/p&gt;
&lt;h2 id="настройка"&gt;Настройка&lt;/h2&gt;
&lt;p&gt;Playwright MCP дает Claude автоматизацию браузера. Я запускаю его с headless Chromium:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;playwright&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;@anthropic-ai/mcp-server-playwright&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--headless&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь Claude может перемещаться, кликать, печатать и делать скриншоты. Он видит то, что видят пользователи.&lt;/p&gt;</description></item><item><title>Создание Собственной Рассылки с Claude</title><link>https://granda.org/ru/2026/01/07/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D1%81-claude/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/01/07/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D1%81-claude/</guid><description>&lt;p&gt;Второй день всплеска трафика с Hacker News. Сорок тысяч посетителей, никакого способа связаться с ними снова. Мне нужна была форма подписки на рассылку.&lt;/p&gt;
&lt;p&gt;Я посмотрел на Buttondown, Beehiiv, Substack, ConvertKit. Все излишне сложное. Мне нужно было только собирать электронные адреса. Мне не нужны были кампании, аналитика или управление подписчиками. И я хотел владеть своими данными.&lt;/p&gt;
&lt;p&gt;Поэтому я попросил Claude построить это.&lt;/p&gt;
&lt;div class="desktop-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 User([User]) --&amp;gt; Form[Newsletter Form]
 Form --&amp;gt;|POST /api/subscribe| Worker[Cloudflare Worker]
 Worker --&amp;gt; KV[(Cloudflare KV)]
 KV -.-&amp;gt;|Daily sync| GHA[GitHub Actions]
 GHA -.-&amp;gt; Repo[(subscribers.jsonl)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="mobile-only"&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 User([User]) --&amp;gt; Form[Newsletter Form]
 Form --&amp;gt;|POST /api/subscribe| Worker[Cloudflare Worker]
 Worker --&amp;gt; KV[(Cloudflare KV)]
 KV -.-&amp;gt;|Daily sync| GHA[GitHub Actions]
 GHA -.-&amp;gt; Repo[(subscribers.jsonl)]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="настройка"&gt;Настройка&lt;/h2&gt;
&lt;p&gt;Я дал Claude токен Cloudflare API через переменную окружения и описал, что я хочу: форму, которая собирает электронные адреса и хранит их где-то, где я контролирую.&lt;/p&gt;</description></item><item><title>Claude Code на Ходу</title><link>https://granda.org/ru/2026/01/02/claude-code-%D0%BD%D0%B0-%D1%85%D0%BE%D0%B4%D1%83/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2026/01/02/claude-code-%D0%BD%D0%B0-%D1%85%D0%BE%D0%B4%D1%83/</guid><description>&lt;p&gt;Я запускаю шесть агентов Claude Code параллельно с моего телефона. Без ноутбука, без настольного компьютера — только Termius на iOS и облачная VM.&lt;/p&gt;
&lt;h2 id="настройка"&gt;Настройка&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 A[Phone] --&amp;gt;|Termius + mosh| B[Tailscale VPN]
 B --&amp;gt; C[Vultr VM]
 C --&amp;gt; D[Claude Code]
 D --&amp;gt;|PreToolUse hook| E[Poke webhook]
 E --&amp;gt;|Push notification| A
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Цикл таков: запустить задачу, убрать телефон в карман, получить уведомление, когда Claude нужен ввод. Асинхронная разработка откуда угодно.&lt;/p&gt;
&lt;h2 id="инфраструктура"&gt;Инфраструктура&lt;/h2&gt;
&lt;p&gt;VM Vultr в Силиконовой долине:&lt;/p&gt;</description></item><item><title>Позволить ИИ Сделать Это</title><link>https://granda.org/ru/2025/12/28/%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D0%B8%D1%82%D1%8C-%D0%B8%D0%B8-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%8D%D1%82%D0%BE/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2025/12/28/%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D0%B8%D1%82%D1%8C-%D0%B8%D0%B8-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%8D%D1%82%D0%BE/</guid><description>&lt;p&gt;Мне нужен был dev-сервер: VM с SSH-доступом и установленными инструментами разработки. Я описал Claude Code, что мне нужно, и позволил ему заняться настройкой.&lt;/p&gt;
&lt;h2 id="промпт"&gt;Промпт&lt;/h2&gt;
&lt;p&gt;Я попросил VM на Vultr с 8 ядрами и 32ГБ RAM, доступную только через Tailscale, с постоянными сессиями, которые переживают обрывы сети.&lt;/p&gt;
&lt;h2 id="что-построил-claude-code"&gt;Что Построил Claude Code&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Провизионировал VM через API Vultr&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Он создал экземпляр 8 ядер/32ГБ с Ubuntu, дождался IP, затем подключился по SSH как root.&lt;/p&gt;</description></item><item><title>Автоматический перевод блога с помощью Claude и GitHub Actions</title><link>https://granda.org/ru/2025/12/23/%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-%D0%B1%D0%BB%D0%BE%D0%B3%D0%B0-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-claude-%D0%B8-github-actions/</link><pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2025/12/23/%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-%D0%B1%D0%BB%D0%BE%D0%B3%D0%B0-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-claude-%D0%B8-github-actions/</guid><description>&lt;p&gt;Каждый пост, который я пишу, переводится автоматически. Claude выполняет перевод, коммитит результаты в main, и переведённые версии деплоятся вместе с оригиналом.&lt;/p&gt;
&lt;h2 id="процесс"&gt;Процесс&lt;/h2&gt;
&lt;p&gt;Рабочий процесс перевода запускается в GitHub Actions, когда английский контент мержится в main:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;main]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;content/**/*.en.md&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 B[Мерж в main] --&amp;gt; C[Переводы сгенерированы]
 C --&amp;gt; D[Закоммичено в main]
 D --&amp;gt; E[Продакшен деплой со всеми языками]
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="промпт"&gt;Промпт&lt;/h2&gt;
&lt;p&gt;Рабочий процесс использует &lt;a href="https://github.com/anthropics/claude-code-action"&gt;claude-code-action&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>О сайте</title><link>https://granda.org/ru/authorship/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/ru/authorship/</guid><description>&lt;h2 id="аннотация"&gt;Аннотация&lt;/h2&gt;
&lt;p&gt;Этот документ описывает методологию авторства, используемую в данном блоге.&lt;/p&gt;
&lt;h2 id="1-введение"&gt;1. Введение&lt;/h2&gt;
&lt;p&gt;Этот блог в значительной степени создается при помощи больших языковых моделей (LLMs). Автор обеспечивает направление, редактирование и контроль качества; машина предоставляет первоначальные черновики и переводы.&lt;/p&gt;
&lt;h2 id="2-обоснование"&gt;2. Обоснование&lt;/h2&gt;
&lt;p&gt;Автор верит в прозрачность в отношении создания контента с помощью AI. Вместо того чтобы скрывать используемые инструменты, это раскрытие направлено на:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Установление соответствующих ожиданий для читателей&lt;/li&gt;
&lt;li&gt;Содействие честным нормам в отношении контента AI&lt;/li&gt;
&lt;li&gt;Признание совместного характера современного письма&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="3-что-это-означает"&gt;3. Что Это Означает&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Идеи&lt;/strong&gt;: Человеческого происхождения&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Структура&lt;/strong&gt;: Совместная&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Проза&lt;/strong&gt;: Преимущественно создается AI, проверяется человеком&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Переводы&lt;/strong&gt;: Полностью создаются AI (не проверяются человеком)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-обеспечение-качества"&gt;4. Обеспечение Качества&lt;/h2&gt;
&lt;p&gt;Английский контент проходит человеческую проверку перед публикацией. Переводы генерируются автоматически и могут содержать ошибки или неудачные формулировки. Автор несет ответственность за окончательный опубликованный контент на английском языке.&lt;/p&gt;</description></item><item><title>Обо мне</title><link>https://granda.org/ru/about/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/ru/about/</guid><description>&lt;h2 id="аннотация"&gt;Аннотация&lt;/h2&gt;
&lt;p&gt;Этот документ содержит справочную информацию об авторе данного блога.&lt;/p&gt;
&lt;h2 id="1-биография"&gt;1. Биография&lt;/h2&gt;
&lt;p&gt;Инженер-программист с 15-летним опытом, из которых 10 лет проведены в профессиональной деятельности.
Области специализации:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Распределённые системы&lt;/li&gt;
&lt;li&gt;Серверная разработка и инфраструктура&lt;/li&gt;
&lt;li&gt;Полностековая и сквозная разработка продуктов&lt;/li&gt;
&lt;li&gt;Проектирование пользовательских интерфейсов&lt;/li&gt;
&lt;li&gt;Построение безопасных и надёжных систем&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-контакты"&gt;2. Контакты&lt;/h2&gt;
&lt;p&gt;Всегда рад связаться с коллегами по индустрии:
&lt;a href="https://x.com/mtt"&gt;@mtt&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Привет, мир</title><link>https://granda.org/ru/2025/12/20/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82-%D0%BC%D0%B8%D1%80/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><guid>https://granda.org/ru/2025/12/20/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82-%D0%BC%D0%B8%D1%80/</guid><description>&lt;p&gt;Добро пожаловать в мой блог! Это моя первая публикация.&lt;/p&gt;
&lt;p&gt;Я буду делиться здесь идеями, заметками и тем, что меня интересует.&lt;/p&gt;</description></item></channel></rss>