Как измерить человеческую глупостьЧитать полностью »
Как измерить человеческую глупостьЧитать полностью »
Я задался вопросом: как должен выглядеть видеоредактор, если проектировать его в эпоху ИИ-агентов — не «редактор плюс кнопка с нейросетью», а инструмент, где агент работает на том же таймлайне, теми же операциями, что и человек? Ответа не нашлось, и я начал писать свой.
Так появился Kadr — открытый (GPL-3.0) многодорожечный видеоредактор на Electron + React + TypeScript: GPU-композитинг на WebGL2, WYSIWYG-экспорт, локальное распознавание речи, программируемая моушн-графика на React — и настоящая интерактивная сессия Claude Code в панели рядом с превью, подключённая к живому проекту через MCP.
Я много работаю с кодинг‑агентами в Claude Code. В какой‑то момент поймал себя на том, что не представляю, на что уходят токены. Счёт в конце месяца есть, а из чего он складывается, непонятно. Написал небольшую утилиту, которая читает то, что Claude Code и так пишет на диск, и раскладывает расходы по статьям. То, что она показала, мне не понравилось.
Веб-аналитика живёт за дашбордами и HTTP-API. Чтобы получить ответ на простой вопрос вроде «откуда пришёл трафик за прошлую неделю и сколько из этого дошло до цели», человек лезет в интерфейс Метрики, а программа — собирает запрос к Reporting API, помнит про namespace полей, лимиты и форматы ответа. LLM-агент (Claude, модель в Cursor, любой другой) по умолчанию не умеет ни того, ни другого: у него нет ни доступа к вашему счётчику, ни знания о том, как устроен API.
Мостом между агентом и внешней системой служит MCP — Model Context ProtocolЧитать полностью »
На прошлой неделе я снова потратил полдня на то, чтобы понять, почему фронт падает после обновления бэка. Локально работало, а на стейдже ошибка. Оказалось, бэкендер переименовал поле в ответе, но не обновил документацию и не предупредил команду. Я узнал об этом только когда код упал на стейдже - вручную править ручку пришлось уже постфактум, разбираясь с ошибкой.
С этим надо было что-то делать.
Я начал использовать генерируемый API-клиент. По сути, это набор ручек (функций для запросов) и типов к ним, которые генерируются на основе открытого API - yaml-файла сваггера.
Казалось, что DatePicker от Cloude сразу был готов в prod, но:
Я запустил NVDA, переключился клавишей Tab по нашему новому DatePicker'у, и фокус выскочил за пределы диалогового окна. В Читать полностью »
Всё началось с бага, на который я убил вечер. В Tauri фронтенд вызывает Rust-команды так:
const user = await invoke("get_user", { userId: 42 });
Строка с именем команды, объект с аргументами, никакой проверки типов. У меня в Rust аргумент назывался user_id, и я честно передал user_id с фронта. В рантайме прилетело что-то вроде invalid args 'userId' for command 'get_user' — Tauri по умолчанию переименовывает snake_case-аргументы в camelCase. Это написано в документации, я это даже знал. Но знание, которое не проверяет компилятор, — не знание, а примета.
Дальше по классике: возвращаемый тип у invoke — anyЧитать полностью »
Мне хотелось написать небольшое приложение. Я работаю fullstack‑разработчиком, поэтому для разработки я решил использовать web‑технологии. Мне хотелось, чтобы я мог написать код один раз, и чтобы он запускался на всех моих устройствах (windows, linux, android).
Мне хотелось использовать готовые инструменты. Я был уверен, что их мне будет достаточно. Посмотрел на существующие решения: electron, neutralinojs, apache cordova, tauri, capacitor, ... Все они мне не нравились по разным причинам. Разберём основные моменты:
ElectronЧитать полностью »