PurpleSchool
Иконка канала PurpleSchool

PurpleSchool

448 подписчиков

25
просмотров
Как вообще писать скиллы и как понять, хорошо ли они работают? Единого рецепта нет — здесь нужно экспериментировать и пробовать. Один из подходов — использовать специальный скилл от Claude по созданию скиллов, который включает eval-критерии. Это позволяет не просто написать скилл, а проверить, насколько он эффективен. Вы задаёте критерии оценки, а Claude прогоняет тесты и оценивает, где скилл проваливается, а где даёт нужный результат. Итеративно дорабатываете. Без eval-критериев вы никогда не узнаете, работает ваш скилл или просто создаёт видимость работы. Полный ответ на этот и другие вопросы смотрите в видео по ссылке под шортсом. #ии #ai #skills #aiskills #claude #aipipeline #aitools #aiarchitecture #aiagents #claudeskills
74
просмотра
Вышел fate 1.0 — production-ready дата-клиент для React, построенный на принципиально другом подходе. Вместо кэширования запросов fate кэширует нормализованные объекты. Разработчик описывает View-компоненты, которые собираются в дерево, а fate составляет из них один запрос на корневом уровне приложения. Дата-клиент поддерживает live-обновления через SSE — достаточно заменить useView на useLiveView. Fate также получил поддержку Drizzle и нативный HTTP-транспорт, Vite-плагин вместо ручного кодогенерации и сборку мусора для кэша. #devnews #fate #react #dataclient #datacaching #ssr #webdev #frontend
89
просмотров
Разбираю частые вопросы с собеседования про паттерн Unit of Work. Вопрос 1: как передать транзакцию в репозиторий? Репозиторий должен получать экземпляр Unit of Work через конструктор или параметр метода, а уже UoW управляет транзакцией и предоставляет доступ к репозиториям. Вопрос 2: зачем нужна Identity Map? Identity Map — это кэш внутри UoW, который хранит уже загруженные сущности. Он гарантирует, что в рамках одной транзакции один и тот же объект будет представлен одним экземпляром, что предотвращает конфликты и несогласованность. Вопрос 3: может ли Unit of Work работать как singleton? Нет, это антипаттерн. UoW должен создаваться для каждой бизнес-операции (например, на HTTP-запрос), потому что он управляет транзакцией и состоянием объектов. singleton привёл бы к пересечению транзакций и race condition. Вопрос 4: может ли репозиторий работать без Unit of Work? Да, может, но тогда каждый вызов репозитория будет сохраняться отдельно, и вы теряете атомарность при нескольких операциях. UoW нужен, когда в одной бизнес-операции задействовано несколько репозиториев или требуется группировка изменений. Ответы на все вопросы — в шортсе и в длинном видео на канале! #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #unitofwork
102
просмотра
Anthropic выпустил Claude Opus 4.8 — обновление, которое делает модель заметно точнее в следовании инструкциям и честнее в оценке своей работы. По бенчмаркам модель показывает результаты выше GPT-5.5 и других конкурентов, особенно в агентных задачах и работе с инструментами. Opus 4.8 стал в четыре раза реже пропускать ошибки в коде. Но главное — в Claude Code появилась функция Dynamic Workflows: Claude может планировать работу, запускать сотни параллельных подзадач в одной сессии и проверять результат, прежде чем вернуться к пользователю. Например, миграция кодовой базы на сотни тысяч строк от начала до готового merge-запроса. #devnews #claude #anthropic #claudeopus #claudecode #ai #aiagent #ии #aicoding
106
просмотров
Показываю, как работает Event Store — важное понятие для паттерна Event Sourcing, про которое вас точно спросят на бэкенд-собеседовании. Event Store — это специальное хранилище, которое сохраняет не текущее состояние объекта, а всю последовательность событий, которые привели к этому состоянию. В отличие от обычной базы данных, где мы обновляем одну запись, в Event Store каждое новое событие просто добавляется в конец ленты. У каждого события есть идентификатор агрегата, тип события, данные и версия (порядковый номер). Благодаря этому можно перестроить состояние агрегата на любой момент времени, воспроизведя все события по порядку. Примеры Event Store: EventStoreDB, Apache Kafka в роли event log, или даже обычная реляционная база с таблицей events, где каждое событие — отдельная строка. Главные плюсы: полный аудит, возможность отката, воспроизведение событий для аналитики. Минусы: сложность с обновлением старых событий и потенциально большой объём данных. #eventstore #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #eventsourcing
148
просмотров
Все переходят на AI-агентов, и Nuxt — не исключение. Nuxt представил собственного AI-помощника на nuxt.com. В отличие от обычных виджетов с поиском по документации, Nuxt Agent умеет показывать карточки модулей, шаблонов и провайдеров хостинга, создавать ссылки на StackBlitz для воспроизведения багов и искать по GitHub Issues. Агент работает на базе Claude Sonnet 4.6 и использует MCP-сервер для доступа к структурированным данным экосистемы Nuxt. Доступен через боковую панель, командой ⌘I или полноэкранный режим. #devnews #nuxt #frontend #aiagent #nuxtagent #vuejs #ai #ииагент #weebdev
107
просмотров
Разбираю паттерн Circuit Breaker — один из пяти, про которые вас точно спросят на бэкенд-собеседовании. Circuit Breaker защищает вашу систему от каскадных отказов при вызове внешних сервисов. Представьте, что ваш сервис вызывает медленный или упавший внешний API. Без Circuit Breaker каждый запрос будет ждать таймаута, тратя ресурсы и замедляя всю систему. Это может привести к тому, что закончатся потоки в пуле, и ваш сервис упадёт целиком из-за одного проблемного внешнего вызова. Circuit Breaker решает эту боль. Он работает как автоматический выключатель: в нормальном состоянии замкнут, запросы идут. Когда число ошибок превышает порог, выключатель размыкается, и все вызовы падают мгновенно с ошибкой, не доходя до проблемного сервиса. Через некоторое время Circuit Breaker переходит в полуоткрытое состояние и пробует пропустить один запрос. Если он успешен — выключатель снова замыкается, если нет — остаётся разомкнутым. Так система продолжает работать, даже когда внешний сервис недоступен. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #circuitbreaker #faulttolerance #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #microservices
118
просмотров
Вышел Rolldown 1.0 — высокопроизводительный бандлер на Rust от VoidZero. Rolldown совместим с плагинами Rollup, но работает в 10-30 раз быстрее, при этом по скорости находится на уровне esbuild. Именно под капотом Vite используется Rolldown, и именно для этого он сейчас и проектируется, хотя использовать его можно и отдельно. Бандлер поддерживает продвинутое code splitting с webpack-стилем, агрессивное удаление мёртвого кода через аннотации PURE и sideEffects, нативную файловую систему в watch-режиме и экспериментальную ленивую оптимизацию баррельных файлов. #devnews #rolldown #vite #void0 #rollup #bundler #esbuild #webdev
110
просмотров
Насколько мы защищены, если AI-инструменты перестанут работать? Успеем ли перестроиться? Если какой-то AI-инструмент перестаёт работать — ему практически сразу находится замена. Как Sora пропала, вышла Sora 2. Инструменты будут уходить и меняться, это нормально. На смену старым приходят улучшенные версии. Но важно: если у вас монолитная привязка к конкретному провайдеру и нет альтернатив — вы в зоне риска. Если вы используете абстракции, API-слои, держите документацию и скиллы в коде, а MCP-серверы построены гибко — перестроиться успеете за дни, а не месяцы. Главное — не писать код, который работает только с одним AI, и держать процесс прозрачным. Полный ответ на этот и другие вопросы смотрите в видео по ссылке под шортсом. #ии #ai #aipipeline #aitools #aiarchitecture #aiagents
136
просмотров
Вышел Node.js 24.16.0 LTS с обновлениями, которые многие ждали. randomUUIDv7 для сортируемых UUID, сигналы в fs.stat для прерывания операций через AbortController, рандомизация порядка тестов и моки таймеров для AbortSignal.timeout в test runner. Также добавлен цветной вывод в консоль через styleText с поддержкой hex-кодов. #devnews #nodejs #webdev #js #javascript #backend #coding
73
просмотра
Рассмотрим работу Outbox Паттерна на примере бизнес-операции create order, transfer money. В одной транзакции одновременно сохраняются бизнес-данные в таблицу orders и событие в таблицу outbox_events. Это гарантирует, что либо всё сохранится, либо ничего — транзакция либо коммитится, либо откатывается целиком. Дальше вступает в дело relay-процесс — отдельный фоновый воркер. Он читает новые события из outbox_events и отправляет их в брокер сообщений, например Kafka или RabbitMQ. После успешной отправки событие из outbox_events удаляется или помечается как обработанное. Благодаря такой схеме вы никогда не потеряете событие и не отправите его без сохранения бизнес-данных. Про другие паттерны, про которые вас спросят на бэкенд-собеседовании, смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #outboxpattern #microservices
160
просмотров
Переход с Cursor на Claude может быть оправдан, если вам нужны более продвинутые возможности AI-агентов и работа в терминале. Claude Code даёт больше контроля над процессом, лучше работает с большими проектами и эффективнее использует контекст. По деньгам: Claude действительно дороже Cursor, потому что вы платите за фактическое использование токенов, а не за фикс-сабскрипшен. Но если вы работаете с кодом профессионально и много, то дополнительные затраты окупаются скоростью и качеством генерации. При этом никто не мешает использовать оба инструмента под разные задачи. Как альтернативу ещё можно посмотреть в сторону Codex — у него своя специфика, и для некоторых сценариев он тоже подходит. Полный ответ на этот и другие вопросы смотрите в видео по ссылке под шортсом. #ии #ai #aipipeline #aitools #cursor #claude #codex #aiagents
94
просмотра
Про Event Sourcing вас точно спросят на бэкенд-собеседовании. Этот паттерн решает проблему потери истории изменений. В обычных подходах мы храним только текущее состояние объекта: например, последний баланс счёта. Но если кто-то изменил данные, мы не знаем, когда, кто и как это сделал. Event Sourcing предлагает хранить не текущее состояние, а всю последовательность событий, которые привели к этому состоянию: «счёт открыт», «зачислено 100 рублей», «списано 50 рублей». Из этих событий можно пересобрать состояние в любой момент времени. Какую боль это лечит? Полный аудит — всегда знаем, кто и что делал. Возможность отката до любого момента времени. Можно пересчитать состояние за другой период или восстановить данные после ошибки. Минусы: сложнее проектировать, нужно больше памяти для хранения событий. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #eventsourcing
171
просмотр
Тренд на отказ от MCP в пользу CLI — что я думаю? CLI сами по себе не решают проблему интеграции: им нужны готовые наборы инструментов под каждую задачу. А универсального коннектора, который умеет работать и с дизайн-системой, и с Git, и с API, и с токенами, — пока просто нет, кроме MCP. При этом MCP не противопоставлен CLI: его можно использовать прямо в командной строке или в любом UI. Но полностью заменить MCP на голый CLI не получится — это не замена, а скорее разные слои одного пайплайна. Полный ответ на этот и другие вопросы смотрите в видео по ссылке под шортсом. #mcp #cli #ai #aipipeline #aitools #llm #softwaredevelopment #aiagents
171
просмотр
Разбираю частые вопросы с собеседования про паттерн Repository. Первый вопрос: зачем нужен Repository, если есть ORM? ORM уже даёт абстракцию над таблицами, но Repository добавляет бизнесовую абстракцию — скрывает сложные запросы и условия. Второй вопрос: чем Repository отличается от DAO? DAO работает на уровне таблиц и возвращает объекты данных, Repository работает на уровне агрегатов и возвращает доменные объекты, не раскрывая детали хранения. Третий вопрос: возвращать entity из ORM или доменную модель? Лучше доменную модель — она не привязана к ORM и не тащит лишнего. Четвёртый вопрос: как тестировать код с Repository без БД? С помощью моков или подмены реализации — объявляете интерфейс репозитория в бизнес-слое, а в тестах подставляете заглушку с заранее заданным поведением, БД не нужна. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #repository #repositorypattern #orm
144
просмотра
Визуальная доступность включает несколько важных аспектов. Минимальный контраст текста и фона — 4.5:1 для обычного текста и 3:1 для крупного. Видимый focus ring — никогда не удаляйте outline: none без замены на контрастную видимую альтернативу. Размер кликабельной зоны — не меньше 44×44 пикселя для мобильных устройств. Анимации должны учитывать prefers-reduced-motion — если пользователь включил настройку, отключайте движущиеся элементы. При открытии модалки фон не должен скроллиться (блокировка скролла body). На собеседовании Middle и Senior важно показать понимание этих критериев WCAG. Полный разбор — в большом видео по ссылке под этим шортсом. #a11y #accessibility #frontend #frontendinterview #middle #senior #techinterview #codinginterview #wcag #visualaccessibility
149
просмотров
Разбираю зачем нужен паттерн Outbox — про него вас точно спросят на бэкенд-собеседовании. Outbox Pattern решает проблему надёжной отправки событий в микросервисной архитектуре. Когда вы сохраняете данные в базу и отправляете событие в очередь или брокер сообщений, эти две операции не атомарны. Если событие ушло, а база упала — данные потеряны. Если база сохранилась, а событие не ушло — другие сервисы не узнают об изменении. Outbox Pattern предлагает решение: вместо прямой отправки событие сохраняется в ту же транзакцию в отдельную таблицу Outbox в базе данных. Затем отдельный процесс (воркер или Debezium) читает из этой таблицы и отправляет события в брокер. Если отправка упала, событие не удаляется из Outbox и будет повторно отправлено. Если база откатилась — событие тоже откатится. В итоге либо всё сделано, либо ничего, и события никогда не теряются. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #outboxpattern #microservices
198
просмотров
Разбираю интерфейс паттерна Repository — один из пяти, про которые вас точно спросят на бэкенд-собеседовании. Repository — это прослойка между бизнес-логикой и хранилищем данных. В шортсе показываю доменную сущность, например User, и интерфейс репозитория с методами findById, save, delete, findAll. А затем реализацию этого интерфейса на TypeORM, где методы работают с реальной базой данных через EntityManager или getRepository. Такая абстракция позволяет легко тестировать бизнес-логику с моком репозитория и менять базу данных без переписывания кода. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #repository #repositorypattern #typeorm
3
просмотра
Доступный компонент невозможен без правильной работы с клавиатурой и фокусом. При открытии модалки фокус должен перемещаться внутрь. При закрытии — возвращаться на элемент, который её открыл. Клавиша Escape должна закрывать модалку. Focus trap — фокус не должен уходить из компонента на фоновые элементы, зацикливание по Tab внутри. Это реализуется через отслеживание фокуса и принудительное перемещение его на первый/последний элемент при достижении границы. На собеседовании Middle и Senior важно показать понимание клавиатурной навигации. Полный разбор — в большом видео по ссылке под этим шортсом. #a11y #keyboard #focustrap #accessibility #frontend #frontendinterview #middle #senior #techinterview #codinginterview
138
просмотров
Про паттерн Unit of Work вас точно спросят на бэкенд-собеседовании. В шортсе разберемся, зачем он нужен. Unit of Work — это паттерн, который группирует несколько операций в одну транзакцию. Он отслеживает все изменения, которые сделали репозитории, и в нужный момент отправляет их в базу данных одним коммитом. Рассказываю, какую проблему решает этот паттерн. Если бы Unit of Work не было, каждое изменение из репозитория сохранялось бы отдельно. При сохранении первого объекта всё ок, а второй упал с ошибкой — в базе остались бы частичные данные, согласованность нарушена. Пришлось бы вручную управлять транзакциями, открывая и закрывая их в бизнес-логике, что приводит к дублированию кода и ошибкам. Unit of Work берёт управление транзакциями на себя: либо всё сохранилось, либо ничего. Про другие паттерны смотрите в полном видео — ссылка под шортсом. #backend #backendinterview #designpatterns #codinginterview #techinterview #softwarearchitecture #unitofwork