Рубрика «TypeScript»

С выходом Model Context Protocol (MCP) от Anthropic разработчики по всему миру бросились подключать LLM (Claude Desktop, Claude Code, Cursor, автономных агентов) к внешним сервисам, локальным файлам и базам данных. Идея великолепная — единый стандартизированный протокол на базе JSON-RPC 2.0 для предоставления контекста и инструментов.

Но когда вы начинаете писать и отлаживать собственный MCP-сервер, быстро выясняется неприятная правда: инструментов для тестирования и статического анализа протокола в экосистеме практически не было.

В итоге разработчики наступают на одни и те же грабли:

  1. Одинокий console.log("Connected to DB")Читать полностью »

Мы делаем учебную игру: человек пишет цель своими словами («таблица умножения», «дроби за 5 класс», «английский для поездки»), а игра строит под неё путь из локаций. В каждой локации — порция из пяти заданий. Готовых курсов нет: тема может быть любой, поэтому задания пишет языковая модель (Claude от Anthropic) — под цель, уровень и последние ответы игрока.

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

  • «6 − 2 = 3»;

  • «7,4 + 2,65 = 10,05» помечено как неверное;

  • «после 8 идёт 10»;

  • «28 меньше 25»;

  • Читать полностью »

Сразу: проект сделан с помощью ИИ. Если вы против, статью можно пропустить.

Сам не люблю иишный слоп. Берусь только за то, что мне реально мешало/мешает, и все проверяю сам. Хотел попробовать kafka streams в проде с node.js + typescript, но не нашел хорошего решения, поэтому сделал сам.

Кому это нужно

Если у вас стек целиком на TypeScript, Kafka или вы уже читаете через @platformatic/kafkaЧитать полностью »

Мы делаем «Зархолд» — браузерную MMORPG, в которой любой бой, от первого кобольда до рейдового босса, — это пошаговая карточная дуэль. Клиент написан на React и PixiJS 8, сервер — на Fastify и PostgreSQL, а между ними лежит пакет shared с движком боя на TypeScript. Один и тот же код движка работает в браузере игрока и на сервере.

В статье расскажем, как мы устроили движок, чтобы сервер мог переиграть бой ход в ход, как включали серверную проверку, не задев честных игроков, и на каких граблях учились. Код — настоящий, из репозитория, местами сокращён.

Зачем серверу переигрывать бой

Читать полностью »

Хватит жечь гигабайты на антидетекты: как RFC 9421 и открытый протокол wbauth ускоряют AI-агентов в 5,5 раза


TL;DR. Мы перестали маскировать агентов под людей. Теперь они предъявляют криптографический паспорт: подпись Ed25519 по стандарту IETF RFC 9421. Холодный старт — 5 мс вместо 1744 мс. Запрос — 15,8 мс вместо 86,8 мс. Память — 0,76 МБ вместо 500 МБ. Прокси не нужны. Ниже разбираю архитектуру, канонизацию, проверку на WAF, код и методику замеров. Ограничения замеров тоже описаны честно.

Пролог: 40 гигабайт RAM ради того, чтобы притвориться бабушкой

Читать полностью »

Каждый лишний рендер — удар по перформансу. В React с его культом иммутабельности (который тянется с 2013 года) эта проблема знакома каждому, кто пристально наблюдал за тем, как ведут себя перф и метрики.

Теория

Путь от костылей к микрозадачам

Под капотом React при каждом изменении стейта строит свежий Virtual DOM для компонента и всех его «детей», а потом запускает диффинг со старым деревом. Процесс не бесплатный — готовьтесь греть CPU и забивать Main Thread пользователя.

Читать полностью »

Практический разбор архитектуры, где CommandBus передаёт намерения пользователя, а EventBus распространяет изменения состояния между независимыми частями интерфейса.

В небольшом frontend‑приложении обычно нет необходимости придумывать дополнительные слои абстракции. Пользователь нажал кнопку — компонент вызвал сервис. Сервис изменил данные — интерфейс обновился. Проблема появляется позже, когда одно и то же действие можно выполнить из нескольких мест, а на одно изменение состояния должны реагировать несколько независимых частей приложения.

С такой ситуацией я столкнулся при разработке Читать полностью »

Я фронтенд‑разработчик. Этой осенью сын пошёл в пятый класс, и с началом информатики я заметил, насколько медленно он печатает. Со смартфоном он на «ты», а за обычной клавиатурой теряется.

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

Читать полностью »

Я работаю над bffi‑rs, экспериментальным фреймворком для нативных биндингов Bun, написанным на Rust.

Проект появился из довольно практичной задачи. Я хотел сделать небольшое desktop‑приложение с нативным WebView, но при этом оставить Bun основным рантаймом.

В экосистеме уже есть решения для подобных приложений. Например, некоторые интеграции WebView для Bun используют Rust и napi-rs. В варианте Electrobun, который я рассматривал, для WebView используется Wry, а связка между Rust и JavaScript строится через napi-rsЧитать полностью »

Выражение */15 9-17 * * 1-5 компьютер понимает однозначно, а человек читает с трудом. Особенно это мешает, когда расписание задаёт пользователь: в боте‑напоминалке, в админке, в настройках отчётов. Человек хочет написать «каждые 15 минут с 9 до 18 по будням» и увидеть, что его поняли правильно. Писать для этого форму с пятью выпадающими списками не хочется никому.

Готовых решений для русского языка я не нашёл, поэтому написал своё.

Библиотека называется cronsense. Она переводит расписание, записанное обычными словами на русском или английском, в cron‑выражение и обратно:

Читать полностью »

https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js