<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>
<title>vikulin-va.ru</title>
<link>https://vikulin-va.ru/</link>
<description>Use Case Pattern — методология проектирования Java-сервисов: архитектура, спецификация, кейс маркетплейса и AI-агенты.</description>
<language>ru</language>
<atom:link href="https://vikulin-va.ru/rss.xml" rel="self" type="application/rss+xml"/>
<lastBuildDate>Thu, 17 Sep 2026 00:52:13 GMT</lastBuildDate>
<item>
<title>Синтаксис и типы Java: с чего начинается код</title>
<link>https://vikulin-va.ru/java/syntax-and-types/</link>
<description>Базовый синтаксис Java простыми словами: переменные и var, примитивы против объектов, автобоксинг, неизменяемые строки, операторы и управляющие конструкции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/syntax-and-types/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>ООП в Java: классы, наследование, интерфейсы, record и enum</title>
<link>https://vikulin-va.ru/java/oop/</link>
<description>Объектно-ориентированное программирование в Java простыми словами: классы и объекты, инкапсуляция, наследование, интерфейсы, полиморфизм, record и enum.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/oop/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Коллекции Java: списки, множества и словари</title>
<link>https://vikulin-va.ru/java/collections/</link>
<description>List, Set и Map простыми словами: какие бывают реализации, когда что выбирать, как перебирать, зачем equals/hashCode и как делать неизменяемые коллекции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/collections/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Как устроена HashMap внутри</title>
<link>https://vikulin-va.ru/java/hashmap-internals/</link>
<description>Что у HashMap под капотом: массив бакетов, индекс по hashCode, коллизии и связные списки, дерево при пороге 8, load factor 0.75, ресайз и зачем нужен equals.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/hashmap-internals/</guid>
<pubDate>Tue, 30 Jun 2026 18:33:57 GMT</pubDate>
</item>
<item>
<title>Дженерики в Java: типобезопасность без приведения типов</title>
<link>https://vikulin-va.ru/java/generics/</link>
<description>Зачем нужны дженерики, как писать обобщённые классы и методы, что значат ? extends и ? super и почему стирание типов меняет правила игры.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/generics/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Исключения в Java: иерархия, checked/unchecked, try-with-resources</title>
<link>https://vikulin-va.ru/java/exceptions/</link>
<description>Как устроены исключения в Java: иерархия Throwable, checked и unchecked, try/catch/finally, try-with-resources, свои исключения и частые антипаттерны.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/exceptions/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Лямбды и Stream API в Java</title>
<link>https://vikulin-va.ru/java/lambdas-and-streams/</link>
<description>Что такое функциональные интерфейсы, лямбды и method reference, как работает Stream API (filter/map/reduce/collect) и когда стрим лучше обычного цикла, а когда — наоборот.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/lambdas-and-streams/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Records, Optional и современный Java</title>
<link>https://vikulin-va.ru/java/records-and-modern/</link>
<description>Как record убирает рутину в классах-данных, Optional спасает от NPE, а switch, sealed-классы, pattern matching и text blocks делают код Java 21 короче и яснее.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/records-and-modern/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Сборка мусора в Java</title>
<link>https://vikulin-va.ru/java/garbage-collection/</link>
<description>Зачем нужна автоматическая сборка мусора, как устроена куча и поколения, какие бывают сборщики (Serial, Parallel, G1, ZGC) и что задают флаги -Xms/-Xmx.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/garbage-collection/</guid>
<pubDate>Tue, 30 Jun 2026 17:16:00 GMT</pubDate>
</item>
<item>
<title>Инструменты Java: JDK, javac, jar, Maven и Gradle</title>
<link>https://vikulin-va.ru/java/tooling/</link>
<description>Что такое JDK, JRE и JVM, как компилировать javac и запускать java, что лежит в jar, зачем нужны Maven и Gradle и как управлять версией JDK.</description>
<guid isPermaLink="true">https://vikulin-va.ru/java/tooling/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Синтаксис и типы Python: с чего начать</title>
<link>https://vikulin-va.ru/python/syntax-and-types/</link>
<description>Базовый синтаксис Python: отступы вместо скобок, динамическая типизация, базовые типы, f-строки, изменяемые и неизменяемые объекты — с задачами на закрепление.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/syntax-and-types/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Структуры данных Python: list, tuple, dict, set</title>
<link>https://vikulin-va.ru/python/data-structures/</link>
<description>Когда брать list, tuple, dict или set, как работают срезы, comprehensions, распаковка и сортировка по ключу — приёмы работы с коллекциями и задачи на них.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/data-structures/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Функции и модули в Python: аргументы, замыкания, import</title>
<link>https://vikulin-va.ru/python/functions-and-modules/</link>
<description>Функции в Python: позиционные и именованные аргументы, значения по умолчанию, *args/**kwargs, область видимости и замыкания, модули, import и __name__ — с задачами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/functions-and-modules/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>ООП в Python: классы, наследование и дандер-методы</title>
<link>https://vikulin-va.ru/python/oop/</link>
<description>Классы, __init__ и self, наследование и миксины, дандер-методы, duck typing, @property и dataclass — когда нужен класс, а когда хватит функции, плюс задачи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/oop/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Исключения и контекстные менеджеры в Python</title>
<link>https://vikulin-va.ru/python/exceptions-and-context/</link>
<description>Как устроены исключения в Python: try/except/else/finally, иерархия, свои классы ошибок и почему нельзя их глотать. Контекстные менеджеры, with и задачи на них.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/exceptions-and-context/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Итераторы и генераторы в Python: ленивая обработка данных</title>
<link>https://vikulin-va.ru/python/iterators-generators/</link>
<description>Как работает протокол итератора, зачем нужны генераторы и yield, генераторные выражения и itertools — почему это экономит память, и задача на бесконечный генератор.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/iterators-generators/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Аннотации типов в Python</title>
<link>https://vikulin-va.ru/python/type-hints/</link>
<description>Зачем типизация в динамическом языке, как писать аннотации, что даёт typing и mypy, почему подсказки типов не влияют на выполнение, и задача на проверку данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/type-hints/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Инструменты Python: интерпретатор, venv, pip и pyproject.toml</title>
<link>https://vikulin-va.ru/python/tooling/</link>
<description>Как устроена рабочая среда Python: интерпретатор и версии, виртуальные окружения venv, pip и зависимости, pyproject.toml, форматтеры ruff и black, запуск скриптов и модулей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/python/tooling/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Синтаксис и типы Go: первое знакомство</title>
<link>https://vikulin-va.ru/go-basics/syntax-and-types/</link>
<description>Пакеты, func main, var и :=, базовые типы, нулевые значения, константы, if/for/switch и почему в Go нет тернарного оператора — основы языка простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/syntax-and-types/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Структуры и методы в Go: данные, поведение и композиция</title>
<link>https://vikulin-va.ru/go-basics/structs-and-methods/</link>
<description>Как в Go устроены struct, их поля и инициализация, методы с value и pointer receiver, и почему вместо наследования здесь используют встраивание структур.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/structs-and-methods/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Интерфейсы Go: маленькие, неявные, по делу</title>
<link>https://vikulin-va.ru/go-basics/interfaces/</link>
<description>Как работают интерфейсы в Go: неявная реализация, маленькие контракты, пустой any, утверждение типа и type switch, и почему стоит принимать интерфейсы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/interfaces/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Срезы и map в Go: как устроены и где грабли</title>
<link>https://vikulin-va.ru/go-basics/slices-and-maps/</link>
<description>Чем массив отличается от среза, что такое len и cap, как работает append и почему два среза могут делить один массив. Плюс map: чтение с ok и range.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/slices-and-maps/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Ошибки в Go: error как значение</title>
<link>https://vikulin-va.ru/go-basics/errors/</link>
<description>Как Go работает с ошибками без исключений: error — это обычное значение. Идиома if err != nil, создание и обёртывание ошибок, errors.Is/As, panic/recover.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/errors/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Горутины и каналы в Go: основы конкурентности</title>
<link>https://vikulin-va.ru/go-basics/goroutines-and-channels/</link>
<description>Как Go запускает тысячи задач одновременно: горутины через go func, обмен данными через каналы, буферизация, select и WaitGroup — простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/goroutines-and-channels/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Указатели в Go: &amp; и *, значения и ссылки</title>
<link>https://vikulin-va.ru/go-basics/pointers/</link>
<description>Указатели в Go простыми словами: что делают &amp; и *, зачем нужны, когда передавать значение, а когда указатель, что такое nil и почему нет арифметики указателей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/pointers/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Инструменты Go: модули, сборка, форматирование</title>
<link>https://vikulin-va.ru/go-basics/tooling/</link>
<description>Как устроен go-инструментарий: модули и go.mod, команды build/run/test, форматирование gofmt и проверка vet. Что пришло на смену GOPATH и зачем.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go-basics/tooling/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Основы JavaScript</title>
<link>https://vikulin-va.ru/typescript/js-essentials/</link>
<description>С чего начать: let/const, типы данных, функции и стрелки, объекты, массивы, деструктуризация и почему === лучше == — база перед TypeScript.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/js-essentials/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Базовые типы TypeScript: аннотации, вывод, union и any</title>
<link>https://vikulin-va.ru/typescript/types-basics/</link>
<description>Зачем TypeScript поверх JavaScript, как работают аннотации и вывод типов, чем отличаются type и interface, что такое union, литералы, any, unknown и never.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/types-basics/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Сужение типов и guards в TypeScript</title>
<link>https://vikulin-va.ru/typescript/narrowing-and-guards/</link>
<description>Как TypeScript сужает типы через typeof, instanceof, in и проверки на null, что такое пользовательские type guards, discriminated unions и работа с unknown.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/narrowing-and-guards/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Дженерики в TypeScript: переиспользуемый типобезопасный код</title>
<link>https://vikulin-va.ru/typescript/generics/</link>
<description>Что такое generic в TypeScript и зачем он нужен: обобщённые функции, типы и интерфейсы, ограничения через extends и базовые utility types простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/generics/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Классы и декораторы в TypeScript</title>
<link>https://vikulin-va.ru/typescript/classes-and-decorators/</link>
<description>Классы в TypeScript с нуля: поля, модификаторы доступа, конструктор, наследование, абстрактные классы и интерфейсы. Что такое декораторы и зачем они во фреймворках (Angular, NestJS).</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/classes-and-decorators/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Асинхронность и event loop в TypeScript</title>
<link>https://vikulin-va.ru/typescript/async-and-event-loop/</link>
<description>Как Node выполняет асинхронный код одним потоком: event loop простыми словами, путь от колбэков к Promise и async/await, обработка ошибок и параллельные операции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/async-and-event-loop/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Модули и npm: как код собирается из частей</title>
<link>https://vikulin-va.ru/typescript/modules-and-npm/</link>
<description>Как TypeScript-код делится на модули (import/export против require), зачем нужен package.json, чем dependencies отличаются от devDependencies и что такое semver.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/modules-and-npm/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Инструменты TypeScript и Node: с чего начать</title>
<link>https://vikulin-va.ru/typescript/tooling/</link>
<description>Node и npm/pnpm, компилятор tsc и tsconfig.json, запуск через tsx, структура проекта и линтеры — минимальный набор, чтобы начать писать на TypeScript.</description>
<guid isPermaLink="true">https://vikulin-va.ru/typescript/tooling/</guid>
<pubDate>Tue, 30 Jun 2026 16:59:09 GMT</pubDate>
</item>
<item>
<title>Зачем этот курс и кому он подойдёт</title>
<link>https://vikulin-va.ru/curriculum/about-the-course/</link>
<description>Куда меняется профессия, когда написание кода перестало быть узким местом, кто такой продукт-инженер и при чём тут эта программа: кому она подойдёт, а кому нет, как устроены фазы, опросы, тесты и тренажёры.</description>
<guid isPermaLink="true">https://vikulin-va.ru/curriculum/about-the-course/</guid>
<pubDate>Tue, 1 Sep 2026 07:01:06 GMT</pubDate>
</item>
<item>
<title>Библиотеки Use Case Pattern для Java</title>
<link>https://vikulin-va.ru/use-case-pattern/libraries/</link>
<description>Эталонные Java/Spring библиотеки методологии Use Case Pattern: usecase-pattern, ddd-building-blocks, hexagonal-architecture. Open-source, Apache-2.0, без vendor-lock. Также — обоснование выбора стандартного стека.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/libraries/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Почему jOOQ вместо JPA / MyBatis / Spring Data</title>
<link>https://vikulin-va.ru/use-case-pattern/libraries/jooq/</link>
<description>Почему мы выбрали jOOQ как persistence-слой в Use Case Pattern + DDD + CQRS. Сравнение с Hibernate/JPA, MyBatis, Spring Data JDBC: где они скрывают SQL и ломают агрегат, а где jOOQ оставляет контроль команде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/libraries/jooq/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>ddd-building-blocks: DDD-абстракции для Java</title>
<link>https://vikulin-va.ru/use-case-pattern/libraries/ddd-building-blocks/</link>
<description>ddd-building-blocks — open-source библиотека DDD-абстракций для Java/Spring: Entity, AggregateRoot, ValueObject, DomainEvent, Repository, Specification. Эталонная база, на которую опираются правила R-ENT/R-AGG/R-VO и AI-скилл ucp-ddd-tactical-review.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/libraries/ddd-building-blocks/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>usecase-pattern — Java-библиотека UseCase / Handler / Dispatcher</title>
<link>https://vikulin-va.ru/use-case-pattern/libraries/usecase-pattern/</link>
<description>usecase-pattern — open-source Java-библиотека: UseCase / UseCaseHandler / UseCaseDispatcher, маркеры UseCaseCommand / UseCaseQuery для CQRS, Spring Boot auto-configuration, метрики Micrometer на каждый use case. Эталонная база для слоистой архитектуры Use Case Pattern.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/libraries/usecase-pattern/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>hexagonal-architecture — аннотации портов/адаптеров + ArchUnit</title>
<link>https://vikulin-va.ru/use-case-pattern/libraries/hexagonal-architecture/</link>
<description>hexagonal-architecture — open-source Java-библиотека: аннотации @Port, @Adapter, @UseCase для разметки слоёв Ports &amp; Adapters + ArchUnit-правила, которые ловят нарушения границ домена и инфраструктуры на каждом PR. Теория и обоснование выбора — в разделе «Гексагональная архитектура».</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/libraries/hexagonal-architecture/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Кейс: маркетплейс — как я понял задачу</title>
<link>https://vikulin-va.ru/use-case-pattern/case/</link>
<description>Сквозной кейс методологии в формате «я повторю, как понял задачу»: бизнес-описание маркетплейса своими словами, без архитектурных терминов. Этот текст затем прогоняется через скиллы методологии — из него получаются API, доменная модель и UseCase-ы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Как разбить систему на сервисы: карта маркетплейса</title>
<link>https://vikulin-va.ru/use-case-pattern/case/services-map/</link>
<description>Пошаговый разбор: как от бизнес-задачи прийти к карте сервисов маркетплейса — Event Storming, Bounded Contexts, кто чем владеет, как сервисы общаются и что происходит при отказе соседа.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/services-map/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Notification Service: как устроена отправка уведомлений</title>
<link>https://vikulin-va.ru/use-case-pattern/case/notification-service/</link>
<description>Как устроен сервис уведомлений в маркетплейсе: Kafka-потребитель событий заказа, email через Mailgun, push через FCM, идемпотентность, ретраи и журнал доставки — разбор на конкретном кейсе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/notification-service/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Catalog Service: как устроен сервис каталога товаров</title>
<link>https://vikulin-va.ru/use-case-pattern/case/catalog-service/</link>
<description>Разбираем Catalog Service из кейса маркетплейса: жизненный цикл карточки товара, разграничение доступа между продавцом и Order Service, схема базы данных, REST-контракт и типичные ошибки проектирования.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/catalog-service/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Catalog Service: от бизнес-описания до кода за один рабочий день</title>
<link>https://vikulin-va.ru/use-case-pattern/case/catalog-service-walkthrough/</link>
<description>Пошаговый разбор: как бизнес-описание маркетплейса превращается в работающий Spring Boot сервис с тестами. Реальная последовательность команд, выдержки из кода, результат — за 3 часа вместо 2–3 дней.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/catalog-service-walkthrough/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Order Service: как устроен сервис заказов в маркетплейсе</title>
<link>https://vikulin-va.ru/use-case-pattern/case/order-service/</link>
<description>Разбираем, как устроен сервис заказов в маркетплейсе: жизненный цикл заказа от черновика до завершения, три агрегата (Order, Dispute, Refund), как они координируются через события, и зачем нужны споры и возвраты как отдельные сущности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/case/order-service/</guid>
<pubDate>Thu, 10 Sep 2026 08:01:50 GMT</pubDate>
</item>
<item>
<title>Уровень зрелости 0: снимок существующего кода</title>
<link>https://vikulin-va.ru/use-case-pattern/level-0/</link>
<description>Что делать, когда сервис уже работает, а документации нет: как восстановить описание системы прямо из кода, зачем это нужно и как потом двигаться дальше.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/level-0/</guid>
<pubDate>Fri, 22 May 2026 05:58:06 GMT</pubDate>
</item>
<item>
<title>Уровень зрелости 1: Слоёный</title>
<link>https://vikulin-va.ru/use-case-pattern/level-1/</link>
<description>Слоёная архитектура Controller → Service → Repository: как она устроена, когда её достаточно, где она начинает мешать и какие сигналы говорят, что пора к следующему уровню.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/level-1/</guid>
<pubDate>Sun, 26 Apr 2026 15:57:40 GMT</pubDate>
</item>
<item>
<title>Уровень зрелости 2: UseCase + Handler</title>
<link>https://vikulin-va.ru/use-case-pattern/level-2/</link>
<description>Уровень зрелости 2: каждая бизнес-операция выделяется в отдельный UseCase и Handler, контроллер отдаёт операцию диспетчеру, метрики и обработка ошибок встроены автоматически. CQRS — опция этого уровня.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/level-2/</guid>
<pubDate>Sun, 26 Apr 2026 15:57:40 GMT</pubDate>
</item>
<item>
<title>Уровень зрелости 3: DDD + Hexagonal</title>
<link>https://vikulin-va.ru/use-case-pattern/level-3/</link>
<description>Что такое DDD и гексагональная архитектура простыми словами: агрегаты защищают бизнес-правила, порты изолируют базу данных и внешние сервисы, Handler становится оркестратором. Когда стоит брать этот уровень, а когда он дороже пользы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/level-3/</guid>
<pubDate>Sun, 26 Apr 2026 15:57:40 GMT</pubDate>
</item>
<item>
<title>Use Case спецификация: формат</title>
<link>https://vikulin-va.ru/use-case-pattern/spec-template/</link>
<description>Что такое спецификация Bounded Context, как она устроена и зачем нужна: корневой файл, файлы агрегатов, карточки команд, матрица переходов, уровни зрелости 0–3.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/spec-template/</guid>
<pubDate>Sun, 26 Apr 2026 15:33:23 GMT</pubDate>
</item>
<item>
<title>Use Case Pattern: как применять пошагово</title>
<link>https://vikulin-va.ru/use-case-pattern/howto/</link>
<description>Пошаговый гид: как добавить одну операцию в существующий сервис за несколько минут и как выстроить новый сервис с нуля — два сценария, конкретные команды, практики и типичные ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/howto/</guid>
<pubDate>Wed, 29 Apr 2026 19:22:29 GMT</pubDate>
</item>
<item>
<title>Настройка Claude Code под Use Case Pattern</title>
<link>https://vikulin-va.ru/use-case-pattern/plugins-setup/</link>
<description>Как подключить 44 скиллов Use Case Pattern к Claude Code, добавить плагин superpowers, MCP-сервер context7 и Java LSP — пошаговая инструкция с проверкой каждого компонента.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/plugins-setup/</guid>
<pubDate>Tue, 28 Apr 2026 15:17:55 GMT</pubDate>
</item>
<item>
<title>AI пишет код. Зачем тогда методология?</title>
<link>https://vikulin-va.ru/use-case-pattern/methodology-and-ai/</link>
<description>AI без методологии хорош для прототипа — для команды превращается в зоопарк. Пять сценариев, где AI разваливается, и сравнение двух проходов с кодом на Java, Go, TypeScript…</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/methodology-and-ai/</guid>
<pubDate>Sun, 26 Apr 2026 21:38:29 GMT</pubDate>
</item>
<item>
<title>AI-native компания: маленькая команда + агенты, и почему ей всё равно нужна методология</title>
<link>https://vikulin-va.ru/use-case-pattern/ai-native-company/</link>
<description>AI-native компания: 3–7 человек, AI-агенты вместо рутинных ролей, скорость команды из 50. Как устроена разработка внутри и почему без методологии она разваливается за первые…</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/ai-native-company/</guid>
<pubDate>Thu, 30 Apr 2026 19:49:45 GMT</pubDate>
</item>
<item>
<title>Executable standard: исполняемые правила как ESLint для архитектуры</title>
<link>https://vikulin-va.ru/use-case-pattern/executable-standard/</link>
<description>Версионируемый набор правил + AI-агент вместо тимлида-узкого места: как executable standard закрывает архитектурный слой, который SonarQube и ESLint не достают.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/executable-standard/</guid>
<pubDate>Mon, 6 Jul 2026 08:40:56 GMT</pubDate>
</item>
<item>
<title>Use Case Pattern и BMAD-METHOD: стандарты или роли</title>
<link>https://vikulin-va.ru/use-case-pattern/vs-bmad/</link>
<description>Сравнение Use Case Pattern с BMAD-METHOD: агенты-роли и цикл поставки против доменной спецификации и исполняемых стандартов кода — что решает каждый подход и как выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/vs-bmad/</guid>
<pubDate>Sat, 1 Aug 2026 19:51:45 GMT</pubDate>
</item>
<item>
<title>Use Case Pattern и spec-driven инструменты</title>
<link>https://vikulin-va.ru/use-case-pattern/vs-spec-driven/</link>
<description>Чем Use Case спецификация отличается от OpenSpec, Spec Kit и Kiro: спека изменения против спеки системы, сценарии WHEN/THEN против доменной модели с инвариантами и что стоит позаимствовать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/use-case-pattern/vs-spec-driven/</guid>
<pubDate>Sat, 1 Aug 2026 19:51:45 GMT</pubDate>
</item>
<item>
<title>Типы в JavaScript: примитивы, объекты и typeof</title>
<link>https://vikulin-va.ru/javascript/values-and-types/</link>
<description>Семь примитивов и объекты: чем значение отличается от ссылки, почему typeof null — это object, где живут NaN и undefined, и зачем знать про упаковку примитивов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/values-and-types/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Приведение типов: ==, === и truthy/falsy</title>
<link>https://vikulin-va.ru/javascript/coercion/</link>
<description>Как JavaScript превращает типы друг в друга: явное и неявное приведение, полный список falsy-значений, правила == без мистики и почему [] + [] — пустая строка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/coercion/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Область видимости: var, let, const и поднятие</title>
<link>https://vikulin-va.ru/javascript/scope-hoisting/</link>
<description>Лексическая область видимости на пальцах: чем блочные let/const отличаются от функционального var, что такое поднятие и временная мёртвая зона, и почему цикл с var ломает колбэки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/scope-hoisting/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Замыкания: как работают и зачем нужны</title>
<link>https://vikulin-va.ru/javascript/closures/</link>
<description>Замыкание без мистики: функция помнит область, где родилась. Счётчики и приватное состояние, фабрики функций, ловушка устаревшего замыкания и почему это основа хуков React.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/closures/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Прототипы: делегирование и классы как сахар</title>
<link>https://vikulin-va.ru/javascript/prototypes/</link>
<description>Как на самом деле устроено наследование в JavaScript: цепочка прототипов, разница prototype и __proto__, Object.create — и что именно прячет за собой синтаксис class.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/prototypes/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Объекты: ссылки, копирование и неизменяемость</title>
<link>https://vikulin-va.ru/javascript/objects-and-references/</link>
<description>Почему изменение «копии» меняет оригинал: ссылки против значений, поверхностное копирование через spread, глубокое через structuredClone, Object.freeze и зачем React неизменяемость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/objects-and-references/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Промисы изнутри: цепочки, ошибки и async/await</title>
<link>https://vikulin-va.ru/javascript/promises-inside/</link>
<description>Промис как автомат из трёх состояний: что возвращает then, как ошибки летят по цепочке до ближайшего catch, чем await является на самом деле и когда нужны Promise.all и allSettled.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/promises-inside/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Итераторы и генераторы</title>
<link>https://vikulin-va.ru/javascript/iterators-generators/</link>
<description>Что общего у for..of, spread и деструктуризации: протокол итератора, Symbol.iterator своими руками, генераторы с yield как конвейер по требованию и асинхронный перебор for await..of.</description>
<guid isPermaLink="true">https://vikulin-va.ru/javascript/iterators-generators/</guid>
<pubDate>Thu, 9 Jul 2026 12:17:14 GMT</pubDate>
</item>
<item>
<title>Основы CSS: синтаксис, подключение и первые свойства</title>
<link>https://vikulin-va.ru/css-in-depth/css-basics/</link>
<description>Стартовая площадка цикла: из чего состоит CSS-правило, три способа подключить стили, классы как рабочий инструмент, базовые свойства текста и цвета, DevTools для стилей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/css-basics/</guid>
<pubDate>Thu, 9 Jul 2026 15:07:50 GMT</pubDate>
</item>
<item>
<title>Каскад, специфичность и наследование</title>
<link>https://vikulin-va.ru/css-in-depth/cascade-and-specificity/</link>
<description>Почему стиль «не применяется»: как браузер выбирает победителя из конфликтующих правил — источник, специфичность, порядок; что наследуется само и зачем нужны CSS-переменные.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/cascade-and-specificity/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Селекторы: комбинаторы, псевдоклассы и псевдоэлементы</title>
<link>https://vikulin-va.ru/css-in-depth/selectors/</link>
<description>Язык прицеливания CSS: комбинаторы, состояния через :hover и :focus-visible, счёт детей с :nth-child, ::before/::after и современные :is, :where, :has.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/selectors/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Блочная модель: размеры, box-sizing и схлопывание отступов</title>
<link>https://vikulin-va.ru/css-in-depth/box-model/</link>
<description>Из чего состоит размер элемента: content, padding, border и margin, почему все ставят box-sizing: border-box, куда схлопываются вертикальные отступы и что рисуют border-radius и box-shadow.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/box-model/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Поток документа: display, visibility и наследие float</title>
<link>https://vikulin-va.ru/css-in-depth/display-and-flow/</link>
<description>Как элементы выстраиваются без единой строчки раскладки: блочные и строчные элементы, чем display: none отличается от visibility: hidden и почему float сегодня только для обтекания.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/display-and-flow/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Позиционирование: от static до sticky и z-index</title>
<link>https://vikulin-va.ru/css-in-depth/positioning/</link>
<description>Пять значений position и их логика: relative как якорь, absolute относительно позиционированного предка, fixed и sticky, и почему z-index: 9999 не всегда сверху — контексты наложения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/positioning/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Flexbox: оси, выравнивание и распределение места</title>
<link>https://vikulin-va.ru/css-in-depth/flexbox/</link>
<description>Одномерная раскладка на пальцах: главная и поперечная оси, justify-content против align-items, тройка flex-grow/shrink/basis, gap и почему min-width: 0 чинит переполнение.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/flexbox/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Grid: двумерная вёрстка</title>
<link>https://vikulin-va.ru/css-in-depth/grid/</link>
<description>Раскладка строками и колонками сразу: треки и единица fr, repeat с minmax, автосетка без медиазапросов, именованные области grid-template-areas и когда grid, а когда flexbox.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/grid/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Единицы и адаптивность: rem, проценты, vw и clamp</title>
<link>https://vikulin-va.ru/css-in-depth/units-and-sizing/</link>
<description>Чем мерить в CSS: px против rem и em, от чего считаются проценты, вьюпорт-единицы и их мобильные варианты, резиновая типографика через clamp и медиазапросы, которые остаются.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/units-and-sizing/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>Оформление: градиенты, тени, фильтры и трансформации</title>
<link>https://vikulin-va.ru/css-in-depth/visual-effects/</link>
<description>Декоративный слой CSS: линейные и радиальные градиенты, фоны и object-fit, filter и backdrop-filter, 2D-трансформации с transform-origin и каркас @keyframes-анимации.</description>
<guid isPermaLink="true">https://vikulin-va.ru/css-in-depth/visual-effects/</guid>
<pubDate>Thu, 9 Jul 2026 14:46:06 GMT</pubDate>
</item>
<item>
<title>this: контекст вызова</title>
<link>https://vikulin-va.ru/frontend/this-binding/</link>
<description>Четыре правила определения this в JavaScript, стрелочные функции и лексический контекст, потеря this при передаче колбэков и способы её починить — с примерами-ловушками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/this-binding/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Event loop: как работает и где стреляет</title>
<link>https://vikulin-va.ru/frontend/event-loop/</link>
<description>Event loop в глубину: call stack и очереди, макро- и микрозадачи, порядок setTimeout против Promise.then, голодание микрозадач, рендер между задачами и разбиение длинных задач.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/event-loop/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>События DOM: всплытие, погружение, делегирование</title>
<link>https://vikulin-va.ru/frontend/dom-events/</link>
<description>Модель событий DOM: capture → target → bubble, target против currentTarget, делегирование через один обработчик на контейнер, passive-слушатели и кастомные события.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/dom-events/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Критический путь рендера</title>
<link>https://vikulin-va.ru/frontend/critical-rendering-path/</link>
<description>Как браузер превращает HTML и CSS в пиксели: DOM, CSSOM, layout, paint, composite; что блокирует рендер, reflow против repaint, layout thrashing и чек-лист быстрого первого рендера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/critical-rendering-path/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Обработка ошибок в JavaScript и браузере</title>
<link>https://vikulin-va.ru/frontend/js-error-handling/</link>
<description>Платформенный уровень обработки ошибок: пределы try/catch, ошибки в промисах и unhandledrejection, глобальные обработчики window.onerror, мониторинг в проде и source maps.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/js-error-handling/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Анимации: CSS и оптимизации</title>
<link>https://vikulin-va.ru/frontend/animations/</link>
<description>Анимации без тормозов: CSS transition и animation против JS, transform и opacity вместо layout-свойств, will-change, 60fps и кадровый бюджет, requestAnimationFrame и prefers-reduced-motion.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/animations/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Сборка фронтенда: бандлеры и подходы</title>
<link>https://vikulin-va.ru/frontend/bundling/</link>
<description>Зачем нужна сборка и как работает бандлер: Vite и webpack, dev против prod, code splitting и динамический import, tree shaking на ESM и анализ толщины бандла.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/bundling/</guid>
<pubDate>Mon, 6 Jul 2026 18:11:00 GMT</pubDate>
</item>
<item>
<title>Структура проекта и компонентная модель</title>
<link>https://vikulin-va.ru/frontend/project-structure/</link>
<description>Как устроен React+TypeScript-проект: раскладка по фичам, компонент как единица, типизация props и границы — фундамент frontend-специализации продукт-инженера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/project-structure/</guid>
<pubDate>Thu, 25 Jun 2026 07:12:38 GMT</pubDate>
</item>
<item>
<title>Архитектурные подходы фронтенда: как выбрать структуру</title>
<link>https://vikulin-va.ru/frontend/architecture-approaches/</link>
<description>Обзор способов организовать код фронтенда: по типам и по фичам, Atomic Design, Feature-Sliced Design, слоёная архитектура — чем отличаются и что выбрать под размер проекта.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/architecture-approaches/</guid>
<pubDate>Thu, 13 Aug 2026 10:57:44 GMT</pubDate>
</item>
<item>
<title>Feature-Sliced Design: слои, слайсы и правила импортов</title>
<link>https://vikulin-va.ru/frontend/feature-sliced-design/</link>
<description>Feature-Sliced Design — методология структуры фронтенда: слои app/pages/widgets/features/entities/shared, слайсы по доменам, сегменты и правило импортов сверху вниз.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/feature-sliced-design/</guid>
<pubDate>Thu, 13 Aug 2026 10:57:44 GMT</pubDate>
</item>
<item>
<title>Границы архитектуры: их стережёт линтер, а не ревью</title>
<link>https://vikulin-va.ru/frontend/architecture-boundaries/</link>
<description>Почему договорённости об импортах нарушаются, как запретить импорт вверх по слоям правилом линтера, зачем слайсу публичный вход и как искать мёртвый код.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/architecture-boundaries/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Компоненты React: структура и композиция</title>
<link>https://vikulin-va.ru/frontend/components/</link>
<description>Что такое компонент React, как выбрать его границы, почему React выбрал композицию вместо наследования, чем props отличается от state и как переиспользовать компоненты без лишнего усложнения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/components/</guid>
<pubDate>Thu, 25 Jun 2026 07:13:19 GMT</pubDate>
</item>
<item>
<title>TypeScript в React</title>
<link>https://vikulin-va.ru/frontend/typescript-react/</link>
<description>Что такое TypeScript, зачем его добавляют в React-проекты и как типизировать пропсы, события, состояния и ref — простой разбор для начинающих.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/typescript-react/</guid>
<pubDate>Thu, 25 Jun 2026 11:51:13 GMT</pubDate>
</item>
<item>
<title>Хуки: кастомные и ловушки useEffect</title>
<link>https://vikulin-va.ru/frontend/hooks/</link>
<description>Хуки React: извлечение логики в кастомные хуки, правила хуков, ловушки useEffect — зависимости, гонки, лишние и ненужные эффекты.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/hooks/</guid>
<pubDate>Thu, 25 Jun 2026 11:51:57 GMT</pubDate>
</item>
<item>
<title>Состояние: локальное и серверное</title>
<link>https://vikulin-va.ru/frontend/state/</link>
<description>Что такое состояние во frontend, чем локальное отличается от серверного, когда использовать useState, useReducer, context и внешний стор — простыми словами с примерами на React.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/state/</guid>
<pubDate>Thu, 25 Jun 2026 07:14:18 GMT</pubDate>
</item>
<item>
<title>Загрузка данных в React: TanStack Query</title>
<link>https://vikulin-va.ru/frontend/data-fetching/</link>
<description>Как работает TanStack Query: зачем он нужен, как объявить запрос через useQuery, обработать ошибки, сделать мутацию и инвалидировать кеш. Для тех, кто только начинает работать с запросами в React.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/data-fetching/</guid>
<pubDate>Thu, 25 Jun 2026 07:15:00 GMT</pubDate>
</item>
<item>
<title>Клиент из OpenAPI: генерация типов, хуков и моков</title>
<link>https://vikulin-va.ru/frontend/api-client-generation/</link>
<description>Как из описания API получить типы, готовые хуки запросов и моки для тестов, почему написанные руками типы врут и что происходит, когда бэкенд меняет контракт.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/api-client-generation/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Обработка ошибок и Suspense</title>
<link>https://vikulin-va.ru/frontend/error-handling/</link>
<description>Обработка ошибок во frontend: error boundaries для сбоев рендера, состояния ошибок данных, Suspense для загрузки, graceful degradation интерфейса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/error-handling/</guid>
<pubDate>Thu, 25 Jun 2026 11:52:38 GMT</pubDate>
</item>
<item>
<title>Формы: react-hook-form и zod</title>
<link>https://vikulin-va.ru/frontend/forms/</link>
<description>Формы в React: react-hook-form и валидация схемой zod, согласованной с backend-контрактом; управление полями и ошибками без лишних ререндеров.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/forms/</guid>
<pubDate>Thu, 25 Jun 2026 07:15:42 GMT</pubDate>
</item>
<item>
<title>Состояние в адресной строке: фильтры, страницы и ссылки</title>
<link>https://vikulin-va.ru/frontend/url-state/</link>
<description>Почему фильтры и пагинацию держат в адресной строке, а не в useState, как разобрать параметры схемой и что положить в стор, а что в адрес.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/url-state/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Роутинг: React Router</title>
<link>https://vikulin-va.ru/frontend/routing/</link>
<description>Роутинг в React через React Router: маршруты и вложенность, загрузка данных по маршруту, защищённые маршруты и параметры.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/routing/</guid>
<pubDate>Thu, 25 Jun 2026 07:16:26 GMT</pubDate>
</item>
<item>
<title>Next.js: серверный рендер, серверные компоненты и Server Actions</title>
<link>https://vikulin-va.ru/frontend/next-and-rendering/</link>
<description>Чем серверный рендер отличается от обычного React-приложения, что такое серверные компоненты и Server Actions и когда Next.js нужен, а когда только мешает.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/next-and-rendering/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Статические сайты: сборка заранее, MDX и контент без сервера</title>
<link>https://vikulin-va.ru/frontend/static-sites/</link>
<description>Что такое статическая сборка, чем она отличается от серверного рендера, как хранить контент в MDX с проверкой полей и когда статики достаточно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/static-sites/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Стилизация и дизайн-токены</title>
<link>https://vikulin-va.ru/frontend/styling/</link>
<description>Как устроена стилизация во frontend: CSS Modules, Tailwind, CSS-in-JS — что выбрать и почему, что такое дизайн-токены и зачем хранить цвета и отступы в одном месте.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/styling/</guid>
<pubDate>Thu, 25 Jun 2026 07:17:04 GMT</pubDate>
</item>
<item>
<title>Доступность (a11y)</title>
<link>https://vikulin-va.ru/frontend/accessibility/</link>
<description>Что такое доступность и зачем она нужна: семантическая HTML-разметка, управление с клавиатуры, когда и как применять ARIA, как проверять доступность автоматически и руками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/accessibility/</guid>
<pubDate>Thu, 25 Jun 2026 07:17:49 GMT</pubDate>
</item>
<item>
<title>Производительность рендеринга</title>
<link>https://vikulin-va.ru/frontend/performance/</link>
<description>Производительность React: когда нужны React.memo/useMemo/useCallback и когда они вредят, code-splitting через lazy и Suspense, контроль размера бандла.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/performance/</guid>
<pubDate>Thu, 25 Jun 2026 11:53:23 GMT</pubDate>
</item>
<item>
<title>Окружение и секреты во фронтенде</title>
<link>https://vikulin-va.ru/frontend/env-and-secrets/</link>
<description>Почему всё, что попало в сборку фронтенда, публично, как проверять переменные окружения схемой при старте и чем настройки стендов отличаются от секретов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/env-and-secrets/</guid>
<pubDate>Sun, 30 Aug 2026 08:02:42 GMT</pubDate>
</item>
<item>
<title>Тестирование frontend: Vitest и Testing Library</title>
<link>https://vikulin-va.ru/frontend/testing/</link>
<description>Как тестировать frontend с нуля: Vitest как раннер, Testing Library для работы с компонентами, поиск элементов по роли, подмена запросов и пирамида тестов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/frontend/testing/</guid>
<pubDate>Thu, 25 Jun 2026 07:18:33 GMT</pubDate>
</item>
<item>
<title>Мобильная разработка: web-first, гибрид или натив</title>
<link>https://vikulin-va.ru/mobile/mobile-strategy/</link>
<description>Три подхода к мобильной разработке — web-first, гибрид, натив — чем отличаются, что выигрываешь и что теряешь в каждом, и как выбрать правильный для своего продукта.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/mobile-strategy/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>PWA: устанавливаемое веб-приложение</title>
<link>https://vikulin-va.ru/mobile/pwa/</link>
<description>Что такое Progressive Web App и как работает в браузере: web app manifest, service worker, Cache API — офлайн-режим и установка на домашний экран без магазина приложений. Ограничения iOS.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/pwa/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Capacitor: веб-приложение в нативной обёртке</title>
<link>https://vikulin-va.ru/mobile/capacitor/</link>
<description>Что такое Capacitor и зачем он нужен: как упаковать React-приложение в iOS и Android без переписывания на Swift и Kotlin, как работает мост к нативным API, и чем Capacitor отличается от Cordova.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/capacitor/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Доступ к нативным возможностям: мост и плагины</title>
<link>https://vikulin-va.ru/mobile/native-apis/</link>
<description>Как из TypeScript добраться до камеры, геолокации и файловой системы мобильного устройства через мост Capacitor: готовые плагины, разрешения и написание своего плагина.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/native-apis/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>iOS: WKWebView, App Store и ограничения</title>
<link>https://vikulin-va.ru/mobile/ios-wkwebview/</link>
<description>Что такое WKWebView, почему iOS ограничивает веб строже Android, как собрать приложение через Xcode и Capacitor, и что проверяет ревьюер App Store по гайдлайну 4.2.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/ios-wkwebview/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Android: TWA, Play Store и WebView</title>
<link>https://vikulin-va.ru/mobile/android-twa/</link>
<description>Как отправить веб-приложение в Play Store без написания нативного кода: что такое Trusted Web Activity, чем она отличается от Capacitor, как настроить Digital Asset Links и опубликовать .aab-бандл.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/android-twa/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Push-уведомления в мобильном вебе</title>
<link>https://vikulin-va.ru/mobile/push-notifications/</link>
<description>Что такое push-уведомления, как работают Web Push и нативный push через FCM и APNs, как подключить их в Capacitor-приложении и почему iOS — особый случай.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/push-notifications/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Офлайн и хранение данных на устройстве</title>
<link>https://vikulin-va.ru/mobile/offline-and-storage/</link>
<description>Простыми словами: что такое офлайн-first, зачем нужен service worker и какие стратегии кеша выбирать, где хранить данные на устройстве (IndexedDB, Preferences, SQLite), как устроена синхронизация и что делать при конфликтах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/offline-and-storage/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Когда web-first не хватает: предел и натив</title>
<link>https://vikulin-va.ru/mobile/when-native/</link>
<description>Где заканчивается WebView и начинается натив: конкретные ситуации, когда PWA и Capacitor перестают справляться, и как выбрать между React Native, Flutter и полным нативом на Swift или Kotlin.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mobile/when-native/</guid>
<pubDate>Fri, 26 Jun 2026 16:49:33 GMT</pubDate>
</item>
<item>
<title>Когда нужен e2e</title>
<link>https://vikulin-va.ru/e2e/when-to-e2e/</link>
<description>Что такое сквозной тест, зачем он нужен, почему e2e-тестов должно быть мало и как выбрать критические пути, которые стоит покрывать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/when-to-e2e/</guid>
<pubDate>Fri, 26 Jun 2026 10:56:35 GMT</pubDate>
</item>
<item>
<title>Настройка Playwright</title>
<link>https://vikulin-va.ru/e2e/setup/</link>
<description>Как установить Playwright, написать конфиг с нуля, настроить браузеры и baseURL, разложить тесты по папкам и запустить первый сквозной сценарий — всё с объяснением зачем это нужно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/setup/</guid>
<pubDate>Fri, 26 Jun 2026 10:57:23 GMT</pubDate>
</item>
<item>
<title>Локаторы в Playwright: как находить элементы на странице</title>
<link>https://vikulin-va.ru/e2e/locators/</link>
<description>Как Playwright находит элементы на странице: почему CSS и XPath ломают тесты, что такое user-facing локаторы getByRole/getByLabel/getByText, как сужать поиск фильтрами и при чём тут доступность.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/locators/</guid>
<pubDate>Fri, 26 Jun 2026 10:58:16 GMT</pubDate>
</item>
<item>
<title>Структура тестов: fixtures и page objects</title>
<link>https://vikulin-va.ru/e2e/test-structure/</link>
<description>Как организовать e2e-тесты в Playwright, чтобы они не превратились в свалку copy-paste: изоляция, кастомные fixtures и page object model — от первых принципов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/test-structure/</guid>
<pubDate>Fri, 26 Jun 2026 10:59:20 GMT</pubDate>
</item>
<item>
<title>Утверждения и ожидание в Playwright</title>
<link>https://vikulin-va.ru/e2e/assertions-and-waiting/</link>
<description>Как работают web-first утверждения и авто-ожидание в Playwright: почему sleep ломает тесты, как expect(locator) ждёт сам, и когда нужно явное ожидание условия.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/assertions-and-waiting/</guid>
<pubDate>Fri, 26 Jun 2026 11:00:15 GMT</pubDate>
</item>
<item>
<title>Тестовые данные и аутентификация в Playwright</title>
<link>https://vikulin-va.ru/e2e/test-data-and-auth/</link>
<description>Как подготовить данные для e2e-теста через API, а не через UI, зачем сохранять сессию в storageState и переиспользовать её, и как изолировать тесты друг от друга чтобы они не мешали при параллельном запуске.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/test-data-and-auth/</guid>
<pubDate>Fri, 26 Jun 2026 11:01:30 GMT</pubDate>
</item>
<item>
<title>Сеть: перехват и мок запросов в Playwright</title>
<link>https://vikulin-va.ru/e2e/network/</link>
<description>Как перехватывать и подменять сетевые запросы в Playwright: route и fulfill, когда мокать внешние зависимости, а когда гнать запрос через настоящий backend — и почему граница важна.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/network/</guid>
<pubDate>Fri, 26 Jun 2026 11:02:21 GMT</pubDate>
</item>
<item>
<title>Нестабильные тесты: почему e2e падают без причины</title>
<link>https://vikulin-va.ru/e2e/flakiness/</link>
<description>Что такое нестабильный тест и почему он опаснее отсутствующего: главные причины (тайминги, гонки, общее состояние, сеть), как их устранить, зачем нужен карантин и что такое детерминизм в тестах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/flakiness/</guid>
<pubDate>Fri, 26 Jun 2026 11:03:13 GMT</pubDate>
</item>
<item>
<title>E2E-тесты в CI: запуск, ускорение и разбор падений</title>
<link>https://vikulin-va.ru/e2e/ci/</link>
<description>Как запустить Playwright в конвейере: установка браузеров, параллельный запуск и sharding для скорости, traces и скриншоты для разбора падений, HTML-отчёт — и когда гонять полный набор, а когда только критику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/e2e/ci/</guid>
<pubDate>Fri, 26 Jun 2026 11:04:07 GMT</pubDate>
</item>
<item>
<title>Кто такой продукт-инженер: роль и цикл работы</title>
<link>https://vikulin-va.ru/product-engineer/the-role/</link>
<description>Что продукт-инженер реально делает: цикл от проблемы пользователя до бизнес-метрики, чем роль отличается от разработчика и продакт-менеджера, и какие навыки её составляют.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/the-role/</guid>
<pubDate>Sun, 5 Jul 2026 09:09:37 GMT</pubDate>
</item>
<item>
<title>Исполняемые правила vs SonarQube vs ESLint vs ревью тимлидом</title>
<link>https://vikulin-va.ru/product-engineer/vs-sonarqube/</link>
<description>Чем исполняемые правила агента отличаются от SonarQube, ESLint и ревью тимлидом — таблица по 12 параметрам с примерами на Java, Go, TypeScript, Python.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/vs-sonarqube/</guid>
<pubDate>Sat, 27 Jun 2026 08:24:54 GMT</pubDate>
</item>
<item>
<title>Как ревьюить код, который написал AI</title>
<link>https://vikulin-va.ru/product-engineer/ai-code-review/</link>
<description>Что искать в PR, написанном с Claude/Copilot/Cursor: контракт на стыках, крайние случаи, тесты на поведение — с примерами на Java, Go, TypeScript, Python.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/ai-code-review/</guid>
<pubDate>Sat, 27 Jun 2026 08:24:54 GMT</pubDate>
</item>
<item>
<title>Как работают модели ИИ: предсказание следующего токена</title>
<link>https://vikulin-va.ru/product-engineer/how-ai-models-work/</link>
<description>Как на самом деле работает языковая модель: предсказание следующего токена, обучение на тексте, почему она хороша в языке и коде и почему у неё нет «понимания» в человеческом смысле.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/how-ai-models-work/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Галлюцинации ИИ: почему модель уверенно выдумывает</title>
<link>https://vikulin-va.ru/product-engineer/hallucinations/</link>
<description>Почему языковые модели уверенно выдумывают факты, функции и источники, когда это происходит чаще всего и как снижать риск: заземление на данные, проверка, инструменты.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/hallucinations/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Токены и стоимость: за что вы платите в работе с ИИ</title>
<link>https://vikulin-va.ru/product-engineer/tokens-and-cost/</link>
<description>Что такое токен, как текст и код превращаются в токены, чем отличаются входные и выходные токены и как из этого складывается стоимость и скорость работы с ИИ.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/tokens-and-cost/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Контекст: что модель держит в голове за один раз</title>
<link>https://vikulin-va.ru/product-engineer/context-window/</link>
<description>Что такое контекстное окно, почему модель «забывает» и путается на длинных диалогах, чем релевантный контекст лучше большого и как продукт-инженер управляет контекстом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/context-window/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Вызов инструментов: как модель выходит за пределы текста</title>
<link>https://vikulin-va.ru/product-engineer/tool-calling/</link>
<description>Как модель вызывает инструменты (функции): почему это превращает текстовый предсказатель в исполнителя, как устроен цикл «запрос → инструмент → результат» и где это применяют.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/tool-calling/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Агенты: модель в цикле с инструментами и целью</title>
<link>https://vikulin-va.ru/product-engineer/agents/</link>
<description>Что такое ИИ-агент простыми словами: модель в цикле «план → действие → наблюдение» с инструментами и целью, чем он отличается от обычного запроса, где помогает и где ломается.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/agents/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Из чего состоит LLM-фича</title>
<link>https://vikulin-va.ru/product-engineer/llm-app-basics/</link>
<description>Как устроена функциональность на основе большой языковой модели: промпт, контекст, вызов модели и обработка ответа, чем разработка LLM-фичи отличается от обычного кода и как её проверять.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/llm-app-basics/</guid>
<pubDate>Sun, 19 Jul 2026 20:12:44 GMT</pubDate>
</item>
<item>
<title>LangChain: оркестрация LLM-приложений</title>
<link>https://vikulin-va.ru/product-engineer/langchain/</link>
<description>Что такое LangChain простыми словами: зачем нужен фреймворк для оркестрации языковых моделей, что такое цепочки, память, ретриверы и инструменты, и когда он помогает, а когда достаточно голого SDK.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/langchain/</guid>
<pubDate>Sun, 19 Jul 2026 20:12:44 GMT</pubDate>
</item>
<item>
<title>RAG и эмбеддинги: как дать модели ваши данные</title>
<link>https://vikulin-va.ru/product-engineer/rag-and-embeddings/</link>
<description>RAG и эмбеддинги простыми словами: почему модель не знает ваших данных, как эмбеддинги превращают текст в векторы смысла, как работает семантический поиск и почему подмешивание найденного в промпт снижает выдумки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/rag-and-embeddings/</guid>
<pubDate>Sun, 19 Jul 2026 20:12:44 GMT</pubDate>
</item>
<item>
<title>Векторные базы данных</title>
<link>https://vikulin-va.ru/product-engineer/vector-databases/</link>
<description>Векторные базы данных простыми словами: зачем нужно хранилище для эмбеддингов, как работает приближённый поиск ближайших соседей, чем pgvector отличается от выделенных решений и когда что выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/vector-databases/</guid>
<pubDate>Sun, 19 Jul 2026 20:12:44 GMT</pubDate>
</item>
<item>
<title>Агентные приложения: инструменты и автономные циклы</title>
<link>https://vikulin-va.ru/product-engineer/agents-and-tools/</link>
<description>Агентные приложения простыми словами: чем агент отличается от одного вызова модели, как работает цикл «рассуждение → действие → наблюдение», зачем нужны ограничители и когда агент оправдан, а когда избыточен.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/agents-and-tools/</guid>
<pubDate>Sun, 19 Jul 2026 20:12:44 GMT</pubDate>
</item>
<item>
<title>Spec-driven development: сначала спецификация, потом код</title>
<link>https://vikulin-va.ru/product-engineer/spec-driven-development/</link>
<description>Что такое spec-driven development и зачем он с AI-агентами: цикл «предложение → требования → дизайн → задачи → архив», сценарии WHEN/THEN, инструменты OpenSpec, Spec Kit и Kiro, и где этот подход ломается.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/spec-driven-development/</guid>
<pubDate>Sat, 12 Sep 2026 19:25:27 GMT</pubDate>
</item>
<item>
<title>Работа с агентами: базовый цикл продуктивной сессии</title>
<link>https://vikulin-va.ru/product-engineer/working-with-agents/</link>
<description>Как продуктивно работать с кодовым агентом: дать контекст и цель, работать итерациями, держать шаги проверяемыми и не отпускать контроль — базовый цикл, на котором стоит всё остальное.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/working-with-agents/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Ежедневная работа с агентом: разобраться, сделать, починить</title>
<link>https://vikulin-va.ru/product-engineer/daily-work-with-agent/</link>
<description>Три задачи, которые с агентом решают каждый день: понять незнакомый код, довести функциональность от замысла до готового среза и найти причину ошибки. Порядок шагов, на котором это работает.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/daily-work-with-agent/</guid>
<pubDate>Tue, 1 Sep 2026 11:31:14 GMT</pubDate>
</item>
<item>
<title>Ревью и тестирование кода с агентом</title>
<link>https://vikulin-va.ru/product-engineer/review-and-testing/</link>
<description>Как использовать агента для ревью и тестов: первый проход ревью и генератор тестов, но с проверяемым критерием и человеком на границе — и почему тесты от того же агента проверяют особенно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/review-and-testing/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Как настроить агента под свой проект: правила, память, инструменты</title>
<link>https://vikulin-va.ru/product-engineer/configuring-agents/</link>
<description>Агент не знает ваш проект и каждую сессию начинает с чистого листа. Четыре слоя настройки — постоянные правила, скиллы, память в репозитории и инструменты через MCP — плюс границы прав.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/configuring-agents/</guid>
<pubDate>Sun, 5 Jul 2026 06:58:19 GMT</pubDate>
</item>
<item>
<title>Какой язык программирования выбрать для AI-кодинга</title>
<link>https://vikulin-va.ru/product-engineer/language-for-ai/</link>
<description>Как выбрать язык, когда код пишет агент: пять критериев AI-friendly языка, сравнительная таблица 14 языков и практические выводы — для своего продукта и для команды.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/language-for-ai/</guid>
<pubDate>Sat, 27 Jun 2026 08:24:54 GMT</pubDate>
</item>
<item>
<title>Проблема, а не решение</title>
<link>https://vikulin-va.ru/product-engineer/problem-not-solution/</link>
<description>Продукт начинается с проблемы пользователя и задачи, которую он «нанимает» продукт решить, — не с фичи. Как отличить проблему от решения и почему решение без названной проблемы — догадка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/problem-not-solution/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Контакт с пользователем</title>
<link>https://vikulin-va.ru/product-engineer/talking-to-users/</link>
<description>Настоящую проблему узнаёшь только в контакте с пользователем: короткий разговор, наблюдение, проверка гипотез. Почему без обратной связи продукт строится вслепую и как наладить контакт.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/talking-to-users/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Бизнес-метрика, а не метрика выпуска</title>
<link>https://vikulin-va.ru/product-engineer/outcome-metrics/</link>
<description>Успех продукта — это решённая проблема (бизнес-результат), а не отгруженная фича (выпуск). Как выбрать бизнес-метрику, не обмануться метрикой выпуска и связать её с проблемой пользователя.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/outcome-metrics/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Приоритизация: наименьший ценный срез</title>
<link>https://vikulin-va.ru/product-engineer/prioritization-smallest-slice/</link>
<description>Что строить первым и что не строить вовсе. Как резать объём до наименьшего среза, который даёт ценность и проверяет гипотезу, — и почему «потом доделаем» обычно не наступает.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/prioritization-smallest-slice/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Язык домена: понятия, словарь и граф знаний</title>
<link>https://vikulin-va.ru/product-engineer/domain-model-basics/</link>
<description>Из каких понятий состоит задача, чем модель понятий отличается от схемы базы, как из неё вырастает словарь, общий для бизнеса, кода и агента, — и когда понятия превращаются в граф знаний.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/domain-model-basics/</guid>
<pubDate>Sat, 1 Aug 2026 09:04:30 GMT</pubDate>
</item>
<item>
<title>От модели понятий к контракту, который исполняет агент</title>
<link>https://vikulin-va.ru/product-engineer/from-model-to-spec/</link>
<description>Как система понятий разворачивается в спецификацию — сущности, состояния, команды, инварианты — и как продуктовый срез превращается в короткий контракт, по которому агент собирает предсказуемо.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/from-model-to-spec/</guid>
<pubDate>Sat, 1 Aug 2026 09:04:30 GMT</pubDate>
</item>
<item>
<title>Владение от идеи до пользователя</title>
<link>https://vikulin-va.ru/product-engineer/end-to-end-ownership/</link>
<description>Продукт-инженер ведёт весь путь — от проблемы через код до выката и обратной связи, без перекидывания через стену между ролями. Что значит владеть результатом, а не задачей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/end-to-end-ownership/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>AI как рычаг продукт-инженера</title>
<link>https://vikulin-va.ru/product-engineer/ai-as-leverage/</link>
<description>Как AI и методология дают одному человеку закрыть весь продукт: что делегировать агентам, что оставить себе и где методология держит согласованность между сессиями.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/ai-as-leverage/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Приёмка результата AI: критерии и тесты из спеки</title>
<link>https://vikulin-va.ru/product-engineer/verifying-ai-output/</link>
<description>AI написал код — как убедиться, что он сделал нужное, а не правдоподобное: приёмка по критериям из контракта, тесты из спеки, что проверять руками и где AI чаще всего ошибается правдоподобно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/verifying-ai-output/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Релиз и петля метрик в одиночку</title>
<link>https://vikulin-va.ru/product-engineer/ship-and-measure/</link>
<description>Довести до пользователя и померить бизнес-результат силами одного человека: минимальный релизный конвейер, что мерить (бизнес-метрика, а не метрика выпуска), как замкнуть петлю «выкатил → увидел → поправил» без команды.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/ship-and-measure/</guid>
<pubDate>Thu, 2 Jul 2026 14:54:53 GMT</pubDate>
</item>
<item>
<title>Методология для AI: Use Case Pattern и другие способы</title>
<link>https://vikulin-va.ru/product-engineer/choosing-a-methodology/</link>
<description>Вся программа говорила: агенту нужен контракт, исполняемый стандарт, общий язык. Пора назвать конкретную методологию — Use Case Pattern и чем её выбор отличается от других способов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/product-engineer/choosing-a-methodology/</guid>
<pubDate>Thu, 2 Jul 2026 18:02:02 GMT</pubDate>
</item>
<item>
<title>Стратегические паттерны DDD на Go</title>
<link>https://vikulin-va.ru/domain-driven-design/go/02-strategic-patterns/</link>
<description>Стратегические паттерны DDD с примерами на Go: Bounded Context, Context Map, Ubiquitous Language и отношения контекстов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/go/02-strategic-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Тактические паттерны DDD на Go</title>
<link>https://vikulin-va.ru/domain-driven-design/go/03-tactical-patterns/</link>
<description>Тактические паттерны DDD с примерами на Go: Entity, Value Object, Aggregate, Domain Event и Repository.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/go/03-tactical-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Интеграционные паттерны DDD на Go</title>
<link>https://vikulin-va.ru/domain-driven-design/go/04-integration-patterns/</link>
<description>Интеграционные паттерны DDD с примерами на Go: Anticorruption Layer, Open Host Service, Published Language и событийная интеграция.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/go/04-integration-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Принципы проектирования в DDD на Go</title>
<link>https://vikulin-va.ru/domain-driven-design/go/05-design-principles/</link>
<description>Принципы проектирования в DDD с примерами на Go: инварианты, иммутабельность и богатая модель против анемичной.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/go/05-design-principles/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Стратегические паттерны DDD на TypeScript</title>
<link>https://vikulin-va.ru/domain-driven-design/node/02-strategic-patterns/</link>
<description>Стратегические паттерны DDD с примерами на TypeScript: Bounded Context, Context Map, Ubiquitous Language и отношения контекстов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/node/02-strategic-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Тактические паттерны DDD на TypeScript</title>
<link>https://vikulin-va.ru/domain-driven-design/node/03-tactical-patterns/</link>
<description>Тактические паттерны DDD с примерами на TypeScript: Entity, Value Object, Aggregate, Domain Event и Repository.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/node/03-tactical-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Интеграционные паттерны DDD на TypeScript</title>
<link>https://vikulin-va.ru/domain-driven-design/node/04-integration-patterns/</link>
<description>Интеграционные паттерны DDD с примерами на TypeScript: Anticorruption Layer, Open Host Service, Published Language и событийная интеграция.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/node/04-integration-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Принципы проектирования в DDD на TypeScript</title>
<link>https://vikulin-va.ru/domain-driven-design/node/05-design-principles/</link>
<description>Принципы проектирования в DDD с примерами на TypeScript: инварианты, иммутабельность и богатая модель против анемичной.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/node/05-design-principles/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Что такое DDD и зачем он нужен</title>
<link>https://vikulin-va.ru/domain-driven-design/01-what-is-ddd/</link>
<description>Domain-Driven Design простыми словами: какую проблему решает, что такое Ubiquitous Language, Bounded Context, Aggregate и Domain Event, когда DDD оправдан, а когда избыточен.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/01-what-is-ddd/</guid>
<pubDate>Sat, 11 Apr 2026 15:41:43 GMT</pubDate>
</item>
<item>
<title>Стратегические паттерны DDD</title>
<link>https://vikulin-va.ru/domain-driven-design/02-strategic-patterns/</link>
<description>Что такое Bounded Context, Ubiquitous Language, Context Map и поддомены — объясняем с нуля: зачем делить систему на части, как зафиксировать границы и не утонуть в путанице терминов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/02-strategic-patterns/</guid>
<pubDate>Sat, 11 Apr 2026 15:41:43 GMT</pubDate>
</item>
<item>
<title>Тактические паттерны DDD</title>
<link>https://vikulin-va.ru/domain-driven-design/03-tactical-patterns/</link>
<description>Простыми словами: что такое Entity, Value Object, Aggregate, Domain Event, Repository и Factory в DDD, зачем они нужны и как выглядят на практике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/03-tactical-patterns/</guid>
<pubDate>Sat, 11 Apr 2026 15:41:43 GMT</pubDate>
</item>
<item>
<title>Интеграционные паттерны DDD</title>
<link>https://vikulin-va.ru/domain-driven-design/04-integration-patterns/</link>
<description>Как разные части большой системы общаются между собой в DDD: Anti-Corruption Layer, Open Host Service, Customer–Supplier, Conformist, Shared Kernel, Partnership, Separate Ways и Domain Events — простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/04-integration-patterns/</guid>
<pubDate>Sat, 11 Apr 2026 15:41:43 GMT</pubDate>
</item>
<item>
<title>Принципы проектирования в DDD</title>
<link>https://vikulin-va.ru/domain-driven-design/05-design-principles/</link>
<description>Как думать при проектировании доменной модели: перемалывание знаний, модель в коде, изоляция домена, явные концепции и гибкий дизайн — простыми словами с примерами на Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/05-design-principles/</guid>
<pubDate>Sat, 11 Apr 2026 15:41:43 GMT</pubDate>
</item>
<item>
<title>Онтология и доменная модель: система понятий до агрегатов</title>
<link>https://vikulin-va.ru/domain-driven-design/06-ontology-and-domain-model/</link>
<description>Откуда берётся доменная модель: онтология как система понятий домена, как понятия, связи, состояния и правила превращаются в Entity, Aggregate, Domain Event и инварианты — и почему агрегат не таблица.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/06-ontology-and-domain-model/</guid>
<pubDate>Sat, 1 Aug 2026 09:14:34 GMT</pubDate>
</item>
<item>
<title>Event Storming: добываем модель домена у бизнеса</title>
<link>https://vikulin-va.ru/domain-driven-design/07-event-storming/</link>
<description>Как за один воркшоп вытащить систему понятий из голов бизнеса: события домена на стикерах, хронология, горячие точки, команды и агрегаты — и как из кластеров событий проступают границы контекстов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/07-event-storming/</guid>
<pubDate>Sat, 1 Aug 2026 09:14:34 GMT</pubDate>
</item>
<item>
<title>Стратегические паттерны DDD на Python</title>
<link>https://vikulin-va.ru/domain-driven-design/python/02-strategic-patterns/</link>
<description>Стратегические паттерны DDD с примерами на Python: Bounded Context, Context Map, Ubiquitous Language и отношения контекстов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/python/02-strategic-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Тактические паттерны DDD на Python</title>
<link>https://vikulin-va.ru/domain-driven-design/python/03-tactical-patterns/</link>
<description>Тактические паттерны DDD с примерами на Python: Entity, Value Object, Aggregate, Domain Event и Repository.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/python/03-tactical-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Интеграционные паттерны DDD на Python</title>
<link>https://vikulin-va.ru/domain-driven-design/python/04-integration-patterns/</link>
<description>Интеграционные паттерны DDD с примерами на Python: Anticorruption Layer, Open Host Service, Published Language и событийная интеграция.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/python/04-integration-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Принципы проектирования в DDD на Python</title>
<link>https://vikulin-va.ru/domain-driven-design/python/05-design-principles/</link>
<description>Принципы проектирования в DDD с примерами на Python: инварианты, иммутабельность и богатая модель против анемичной.</description>
<guid isPermaLink="true">https://vikulin-va.ru/domain-driven-design/python/05-design-principles/</guid>
<pubDate>Thu, 9 Jul 2026 17:56:17 GMT</pubDate>
</item>
<item>
<title>Распределённые паттерны: согласованность данных между сервисами на Go</title>
<link>https://vikulin-va.ru/patterns/go/distributed-patterns/</link>
<description>Как обеспечить согласованность данных в микросервисах на Go без единой транзакции: 2PC, SAGA, Transactional Outbox, Event Sourcing — простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/go/distributed-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Структурные паттерны микросервисов на Go</title>
<link>https://vikulin-va.ru/patterns/go/microservices-structural/</link>
<description>API Gateway, BFF, Sidecar, Service Mesh, Strangler Fig, ACL, Service Discovery на Go — объясняем с нуля, зачем каждый нужен, когда применять и как выглядит на практике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/go/microservices-structural/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны отказоустойчивости: Retry, Circuit Breaker, Bulkhead, DLQ на Go</title>
<link>https://vikulin-va.ru/patterns/go/resilience/</link>
<description>Почему в распределённых системах сбои неизбежны и как защитить Go-сервис: Retry, Circuit Breaker, Timeout, Bulkhead, Fallback, Rate Limiter и Dead Letter Queue с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/go/resilience/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Пакетная обработка данных: как не сломать фоновый обработчик на Go</title>
<link>https://vikulin-va.ru/patterns/go/batch-processing/</link>
<description>Что не так с наивным циклом на time.Ticker, почему он ломается при двух репликах и как сделать фоновую обработку на Go надёжной: FOR UPDATE SKIP LOCKED, аренда задачи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/go/batch-processing/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Распределённые паттерны: согласованность данных между сервисами на TypeScript</title>
<link>https://vikulin-va.ru/patterns/node/distributed-patterns/</link>
<description>Как обеспечить согласованность данных в микросервисах на TypeScript: SAGA, Transactional Outbox, Event Sourcing, Idempotent Consumer, Distributed Lock — с примерами на NestJS.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/node/distributed-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Структурные паттерны микросервисов на TypeScript</title>
<link>https://vikulin-va.ru/patterns/node/microservices-structural/</link>
<description>API Gateway, BFF, Sidecar, Service Mesh, Strangler Fig, ACL, Service Discovery на TypeScript и NestJS — зачем нужен каждый паттерн, когда применять и как выглядит в коде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/node/microservices-structural/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны отказоустойчивости: Retry, Circuit Breaker, Bulkhead, DLQ на TypeScript</title>
<link>https://vikulin-va.ru/patterns/node/resilience/</link>
<description>Как не дать одному упавшему сервису положить всё остальное: Retry, Circuit Breaker, Timeout, Bulkhead, Fallback, Rate Limiter и DLQ на TypeScript — opossum и p-retry.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/node/resilience/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Пакетная обработка данных: как не сломать фоновый обработчик на TypeScript</title>
<link>https://vikulin-va.ru/patterns/node/batch-processing/</link>
<description>Что не так с наивным @Interval-циклом на TypeScript, почему он ломается при двух репликах и как выстроить надёжную фоновую обработку: SKIP LOCKED, аренда задачи, повторы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/node/batch-processing/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Луковая архитектура (Onion Architecture)</title>
<link>https://vikulin-va.ru/patterns/onion/</link>
<description>Onion Architecture простыми словами: концентрические слои с доменной моделью в центре, правило зависимостей «только внутрь», чем она похожа на гексагональную и Clean Architecture и когда её применять.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/onion/</guid>
<pubDate>Sun, 28 Jun 2026 13:10:15 GMT</pubDate>
</item>
<item>
<title>Распределённые паттерны</title>
<link>https://vikulin-va.ru/patterns/distributed-patterns/</link>
<description>Как обеспечить согласованность данных в микросервисах без единой транзакции: 2PC, SAGA, Transactional Outbox, Event Sourcing, Idempotent Consumer, Distributed Lock — простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/distributed-patterns/</guid>
<pubDate>Mon, 18 May 2026 07:54:55 GMT</pubDate>
</item>
<item>
<title>Паттерны отказоустойчивости</title>
<link>https://vikulin-va.ru/patterns/resilience/</link>
<description>Почему в распределённых системах сбои неизбежны и как не дать одному упавшему сервису положить всё остальное. Разбираем Retry, Circuit Breaker, Timeout, Bulkhead, Fallback, Rate Limiter и Dead Letter Queue с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/resilience/</guid>
<pubDate>Mon, 18 May 2026 07:54:55 GMT</pubDate>
</item>
<item>
<title>Структурные паттерны микросервисов</title>
<link>https://vikulin-va.ru/patterns/microservices-structural/</link>
<description>API Gateway, BFF, Sidecar, Service Mesh, Strangler Fig, ACL, Service Discovery — объясняем с нуля, зачем каждый нужен, когда применять и как выглядит на практике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/microservices-structural/</guid>
<pubDate>Mon, 18 May 2026 07:54:55 GMT</pubDate>
</item>
<item>
<title>Пакетная обработка данных: как не сломать фоновый обработчик</title>
<link>https://vikulin-va.ru/patterns/batch-processing/</link>
<description>Что не так с наивным @Scheduled-циклом, почему он ломается при двух репликах и как выстроить надёжную фоновую обработку: FOR UPDATE SKIP LOCKED, аренда задачи, повторные попытки с задержкой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/batch-processing/</guid>
<pubDate>Sat, 6 Jun 2026 17:10:31 GMT</pubDate>
</item>
<item>
<title>Event Sourcing: хранить события, а не состояние</title>
<link>https://vikulin-va.ru/patterns/event-sourcing/</link>
<description>Event Sourcing простыми словами: хранить не текущее состояние, а поток событий; как из них собирается состояние, связь с CQRS, снапшоты и почему это дорого и нужно редко.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/event-sourcing/</guid>
<pubDate>Thu, 2 Jul 2026 05:08:47 GMT</pubDate>
</item>
<item>
<title>Распределённые паттерны: согласованность данных между сервисами на Python</title>
<link>https://vikulin-va.ru/patterns/python/distributed-patterns/</link>
<description>Согласованность данных в микросервисах на Python без единой транзакции: 2PC, SAGA, Transactional Outbox, Event Sourcing, Idempotent Consumer, Distributed Lock — с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/python/distributed-patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Структурные паттерны микросервисов на Python</title>
<link>https://vikulin-va.ru/patterns/python/microservices-structural/</link>
<description>API Gateway, BFF, Sidecar, Service Mesh, Strangler Fig, ACL, Service Discovery на Python — объясняем с нуля, зачем каждый нужен, когда применять и как выглядит на практике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/python/microservices-structural/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны отказоустойчивости: Retry, Circuit Breaker, Bulkhead, DLQ на Python</title>
<link>https://vikulin-va.ru/patterns/python/resilience/</link>
<description>Как не дать одному упавшему сервису положить всю систему на Python: Retry, Circuit Breaker, Timeout, Bulkhead, Fallback, Rate Limiter и Dead Letter Queue — tenacity и aiobreaker.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/python/resilience/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Пакетная обработка данных: как не сломать фоновый обработчик на Python</title>
<link>https://vikulin-va.ru/patterns/python/batch-processing/</link>
<description>Что не так с наивным циклом на celery beat, почему он ломается при двух репликах и как выстроить надёжную фоновую обработку на Python: FOR UPDATE SKIP LOCKED и аренда задачи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/python/batch-processing/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны обмена сообщениями через AMQP на Go</title>
<link>https://vikulin-va.ru/amqp/go/patterns/</link>
<description>Классические паттерны AMQP/RabbitMQ на Go с amqp091-go: work queue, publish/subscribe, routing, topic, RPC через очередь, idempotent consumer и ловушки повторной доставки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/go/patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны обмена сообщениями через AMQP на TypeScript</title>
<link>https://vikulin-va.ru/amqp/node/patterns/</link>
<description>Классические паттерны AMQP/RabbitMQ на TypeScript и amqplib: work queue, publish/subscribe, routing, topic, RPC через очередь, idempotent consumer — и ловушки повторной доставки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/node/patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Протокол AMQP: exchange, queue, binding, ack</title>
<link>https://vikulin-va.ru/amqp/protocol/</link>
<description>Что такое AMQP 0.9.1 простыми словами: как устроены exchange, queue, binding, routing key, зачем нужны ack и nack, как работают prefetch, publisher confirms и TTL — с примерами и аналогиями.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/protocol/</guid>
<pubDate>Mon, 18 May 2026 08:24:13 GMT</pubDate>
</item>
<item>
<title>RabbitMQ в production: кластеризация, типы очередей и мониторинг</title>
<link>https://vikulin-va.ru/amqp/rabbitmq-production/</link>
<description>Простыми словами: как RabbitMQ устроен в реальном окружении — кластеризация, три типа очередей (Classic, Quorum, Streams), репликация между регионами через Federation и Shovel, мониторинг через Prometheus и ориентиры по производительности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/rabbitmq-production/</guid>
<pubDate>Mon, 18 May 2026 08:24:13 GMT</pubDate>
</item>
<item>
<title>Spring AMQP: как отправлять и получать сообщения через RabbitMQ</title>
<link>https://vikulin-va.ru/amqp/spring-amqp/</link>
<description>Простыми словами: что такое Spring AMQP, как настроить RabbitTemplate для отправки и @RabbitListener для получения, как работает сериализация в JSON, что делать с ошибками через retry и Dead Letter Exchange, и как не потерять сообщения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/spring-amqp/</guid>
<pubDate>Mon, 18 May 2026 08:24:13 GMT</pubDate>
</item>
<item>
<title>Паттерны обмена сообщениями через AMQP</title>
<link>https://vikulin-va.ru/amqp/patterns/</link>
<description>Разбираем классические паттерны на AMQP/RabbitMQ с нуля: work queue, publish/subscribe, routing, topic, RPC через очередь, idempotent consumer. Когда что брать, как настроить в Spring AMQP и какие ловушки ждут при повторной доставке.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/patterns/</guid>
<pubDate>Mon, 18 May 2026 08:24:13 GMT</pubDate>
</item>
<item>
<title>AMQP vs Kafka: какой брокер выбрать</title>
<link>https://vikulin-va.ru/amqp/vs-kafka/</link>
<description>Простыми словами: чем RabbitMQ отличается от Kafka, как устроена каждая модель и по каким признакам выбирать. Разбор по семи критериям — пропускная способность, порядок доставки, хранение истории, маршрутизация, операционная сложность.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/vs-kafka/</guid>
<pubDate>Mon, 18 May 2026 08:24:13 GMT</pubDate>
</item>
<item>
<title>Паттерны обмена сообщениями через AMQP на Python</title>
<link>https://vikulin-va.ru/amqp/python/patterns/</link>
<description>Классические паттерны AMQP/RabbitMQ в Python: work queue, publish/subscribe, routing, topic, RPC через очередь, idempotent consumer. Как настроить в aio-pika и где ловушки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/amqp/python/patterns/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Apache Kafka: топики, партиции, порядок и гарантии на Go</title>
<link>https://vikulin-va.ru/kafka/go/fundamentals/</link>
<description>Простыми словами: зачем нужна Kafka, как устроены топики и партиции, почему ключ влияет на порядок, и как писать producer и consumer на Go с segmentio/kafka-go.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/go/fundamentals/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Kafka в production на Go: kafka-go, DLQ, Schema Registry, тюнинг, безопасность</title>
<link>https://vikulin-va.ru/kafka/go/production-essentials/</link>
<description>Kafka в Go-сервисе перед выходом в production: Writer и Reader из kafka-go, ручной commit, Dead Letter Queue и retry-топики, Schema Registry, consumer lag, тюнинг и SASL/SSL.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/go/production-essentials/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Apache Kafka: топики, партиции, порядок и гарантии на TypeScript</title>
<link>https://vikulin-va.ru/kafka/node/fundamentals/</link>
<description>Основы Kafka с примерами на TypeScript и kafkajs: топики и партиции, роль ключа сообщения, consumer groups, гарантии доставки и как выбрать подходящую.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/node/fundamentals/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Kafka в production на TypeScript: kafkajs, DLQ, Schema Registry, тюнинг, безопасность</title>
<link>https://vikulin-va.ru/kafka/node/production-essentials/</link>
<description>Как подключить Kafka к NestJS-приложению на TypeScript через kafkajs: producer и eachMessage, Dead Letter Queue, Schema Registry, consumer lag, тюнинг и безопасность.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/node/production-essentials/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Apache Kafka: топики, партиции, порядок и гарантии</title>
<link>https://vikulin-va.ru/kafka/fundamentals/</link>
<description>Простыми словами: зачем нужна Kafka, как устроены топики и партиции, почему ключ сообщения влияет на порядок, как работают consumer groups, что значат гарантии доставки и как их выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/fundamentals/</guid>
<pubDate>Mon, 18 May 2026 08:04:20 GMT</pubDate>
</item>
<item>
<title>Kafka в production: Spring Kafka, DLQ, Schema Registry, тюнинг, безопасность</title>
<link>https://vikulin-va.ru/kafka/production-essentials/</link>
<description>Как подключить Kafka к Spring Boot-приложению и что нужно настроить перед выходом в production: KafkaTemplate и @KafkaListener, обработка ошибок и Dead Letter Queue, Schema Registry для эволюции схем, consumer lag, тюнинг производительности и основы безопасности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/production-essentials/</guid>
<pubDate>Mon, 18 May 2026 08:04:20 GMT</pubDate>
</item>
<item>
<title>Kafka Streams: потоковая обработка</title>
<link>https://vikulin-va.ru/kafka/streams/</link>
<description>Kafka Streams простыми словами: обработка событий прямо в вашем сервисе без отдельного кластера — KStream и KTable, окна и join, state stores, exactly-once и когда вместо него хватит обычного consumer.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/streams/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Apache Kafka на Python: топики, партиции, порядок и гарантии</title>
<link>https://vikulin-va.ru/kafka/python/fundamentals/</link>
<description>Простыми словами: зачем нужна Kafka, как устроены топики и партиции, почему ключ влияет на порядок, как работают consumer groups и какие гарантии выбрать в Python с aiokafka.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/python/fundamentals/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Kafka в production на Python: aiokafka, DLQ, Schema Registry, тюнинг, безопасность</title>
<link>https://vikulin-va.ru/kafka/python/production-essentials/</link>
<description>Как подключить Kafka к Python-приложению и что настроить перед production: aiokafka producer и consumer, Dead Letter Queue, Schema Registry, consumer lag, тюнинг и безопасность.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kafka/python/production-essentials/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Что такое Keycloak и зачем он нужен</title>
<link>https://vikulin-va.ru/keycloak/what-is-keycloak/</link>
<description>Keycloak с нуля: готовый сервер входа и единого входа (SSO). Какую проблему решает, что такое IAM и SSO простыми словами, где он стоит относительно приложения и API.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/what-is-keycloak/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>OAuth2 и OIDC простыми словами</title>
<link>https://vikulin-va.ru/keycloak/oauth2-oidc-basics/</link>
<description>Разбираем 4 роли OAuth2 на бытовой аналогии с пропуском в здание и чётко разводим OAuth2 (доступ, access_token) и OIDC (личность, id_token, scope openid).</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/oauth2-oidc-basics/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Realm, client, роли и пользователи в Keycloak</title>
<link>https://vikulin-va.ru/keycloak/realms-clients-roles/</link>
<description>Модель Keycloak с нуля: realm как изолированное пространство, client (public vs confidential), группы, realm-роли против client-ролей — и разбор на маркетплейсе: один realm, client на приложение, роли под людей и под действия.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/realms-clients-roles/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Authorization Code Flow и PKCE по шагам</title>
<link>https://vikulin-va.ru/keycloak/authorization-code-flow/</link>
<description>Authorization Code Flow в Keycloak по шагам: зачем redirect на логин, что такое authorization code, зачем меняют его на токены отдельным запросом и зачем нужен PKCE.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/authorization-code-flow/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Keycloak и Spring Security: проверка токенов</title>
<link>https://vikulin-va.ru/keycloak/spring-security-integration/</link>
<description>Как Spring Boot в роли OAuth2 Resource Server проверяет access_token: SecurityFilterChain, BearerTokenAuthenticationFilter, JwtDecoder с ключами по JWKS, маппинг ролей, ответ 401 — и готовый конфиг доступа сервиса заказов маркетплейса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/spring-security-integration/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Роли и доступ: RBAC и ABAC с Keycloak</title>
<link>https://vikulin-va.ru/keycloak/roles-and-access/</link>
<description>Как роль из токена Keycloak доезжает до проверки доступа: realm- и client-роли, claims realm_access и resource_access, маппинг в GrantedAuthority, RBAC и ABAC — и разбор на маркетплейсе, где роли мало, а нужен владелец записи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/roles-and-access/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Три токена Keycloak: access, id, refresh — куда какой</title>
<link>https://vikulin-va.ru/keycloak/tokens-and-pitfalls/</link>
<description>Разбираем без путаницы: access_token шлётся в API, id_token — для фронтенда, refresh_token — только в Keycloak. Плюс формат токена (JWT или opaque) и где какие токены хранят в маркетплейсе: витрина, мобильное, backoffice.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/tokens-and-pitfalls/</guid>
<pubDate>Sat, 27 Jun 2026 18:01:01 GMT</pubDate>
</item>
<item>
<title>Kerberos и LDAP: корпоративная аутентификация</title>
<link>https://vikulin-va.ru/keycloak/ldap-kerberos/</link>
<description>Kerberos и LDAP простыми словами: LDAP как каталог пользователей (Active Directory), Kerberos как билетный SSO, и как Keycloak связывает их с приложением — федерация LDAP и SPNEGO.</description>
<guid isPermaLink="true">https://vikulin-va.ru/keycloak/ldap-kerberos/</guid>
<pubDate>Fri, 14 Aug 2026 10:50:56 GMT</pubDate>
</item>
<item>
<title>Kubernetes: pod, deployment, service — с чего начать</title>
<link>https://vikulin-va.ru/kubernetes/fundamentals/</link>
<description>Что такое Kubernetes и зачем он нужен: объясняем с нуля идею желаемого состояния, pod, Deployment, Service и Ingress — как эти четыре объекта складываются в работающую систему.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/fundamentals/</guid>
<pubDate>Sat, 6 Jun 2026 18:14:04 GMT</pubDate>
</item>
<item>
<title>Сеть в Kubernetes: Service, DNS, Ingress, NetworkPolicy</title>
<link>https://vikulin-va.ru/kubernetes/networking/</link>
<description>Как работает сеть в Kubernetes: почему IP пода нельзя использовать напрямую, что такое Service и его типы, как сервисы находят друг друга по имени, как внешний трафик попадает в кластер через Ingress, и зачем нужна NetworkPolicy.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/networking/</guid>
<pubDate>Sat, 6 Jun 2026 18:14:04 GMT</pubDate>
</item>
<item>
<title>Spring Boot в Kubernetes: probes, ресурсы и JVM, graceful shutdown</title>
<link>https://vikulin-va.ru/kubernetes/spring-boot-in-k8s/</link>
<description>Как правильно запустить Spring Boot в Kubernetes: настроить три probe через Actuator, выделить памяти с учётом JVM-накладных расходов, не терять запросы при перезапуске и передавать конфигурацию через ConfigMap и Secret.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/spring-boot-in-k8s/</guid>
<pubDate>Sat, 6 Jun 2026 18:14:04 GMT</pubDate>
</item>
<item>
<title>Деплой в Kubernetes: манифесты, Helm, rolling update, GitOps</title>
<link>https://vikulin-va.ru/kubernetes/deploy-and-config/</link>
<description>Простыми словами: как описать приложение в YAML-манифестах, зачем нужны Helm и kustomize, как работает rolling update и почему readiness probe — это про безопасность выкатки, а не формальность.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/deploy-and-config/</guid>
<pubDate>Sat, 6 Jun 2026 18:14:04 GMT</pubDate>
</item>
<item>
<title>Kubernetes на практике: отладка подов и kubectl-команды</title>
<link>https://vikulin-va.ru/kubernetes/operations/</link>
<description>Как разобраться, почему сервис не работает в Kubernetes: набор kubectl-команд и пошаговый разбор CrashLoopBackOff, OOMKilled, ImagePullBackOff, Pending, мигающей readiness и разрыва цепочки Ingress→Service→pod.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/operations/</guid>
<pubDate>Sat, 6 Jun 2026 18:14:04 GMT</pubDate>
</item>
<item>
<title>OpenShift: чем отличается от чистого Kubernetes</title>
<link>https://vikulin-va.ru/kubernetes/openshift/</link>
<description>OpenShift простыми словами: что дистрибутив Red Hat добавляет поверх Kubernetes — Routes, сборка S2I, Security Context Constraints, oc и консоль — и что это значит разработчику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/openshift/</guid>
<pubDate>Fri, 14 Aug 2026 10:50:56 GMT</pubDate>
</item>
<item>
<title>Helm: пакетный менеджер Kubernetes</title>
<link>https://vikulin-va.ru/kubernetes/helm/</link>
<description>Helm простыми словами: как упаковать набор Kubernetes-манифестов в чарт с шаблонами и values, ставить и обновлять релизы одной командой и параметризовать один сервис под dev и prod.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/helm/</guid>
<pubDate>Mon, 17 Aug 2026 09:26:14 GMT</pubDate>
</item>
<item>
<title>ArgoCD: GitOps-доставка в Kubernetes</title>
<link>https://vikulin-va.ru/kubernetes/argocd/</link>
<description>ArgoCD простыми словами: как Git становится источником правды для кластера, а ArgoCD непрерывно приводит Kubernetes к состоянию из репозитория — декларативно, с автосинхронизацией и лечением дрейфа.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kubernetes/argocd/</guid>
<pubDate>Mon, 17 Aug 2026 09:26:14 GMT</pubDate>
</item>
<item>
<title>gRPC: быстрые вызовы между сервисами</title>
<link>https://vikulin-va.ru/api-styles/grpc/</link>
<description>gRPC простыми словами: бинарный протокол поверх HTTP/2, контракты в protobuf, кодогенерация, виды вызовов и стриминг — когда gRPC уместнее REST и какой ценой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/api-styles/grpc/</guid>
<pubDate>Thu, 2 Jul 2026 05:08:47 GMT</pubDate>
</item>
<item>
<title>GraphQL: клиент запрашивает ровно нужное</title>
<link>https://vikulin-va.ru/api-styles/graphql/</link>
<description>GraphQL простыми словами: один запрос вместо нескольких, схема и резолверы, решение over- и under-fetching, и чем платят за гибкость — кэширование, N+1, контроль нагрузки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/api-styles/graphql/</guid>
<pubDate>Thu, 2 Jul 2026 05:08:47 GMT</pubDate>
</item>
<item>
<title>HATEOAS: зрелость REST и гиперссылки</title>
<link>https://vikulin-va.ru/api-styles/hateoas/</link>
<description>HATEOAS и модель зрелости Ричардсона простыми словами: ответы с гиперссылками на действия, уровни REST 0-3, зачем это и почему на практике применяют редко.</description>
<guid isPermaLink="true">https://vikulin-va.ru/api-styles/hateoas/</guid>
<pubDate>Thu, 2 Jul 2026 05:08:47 GMT</pubDate>
</item>
<item>
<title>Как устроена сеть: модели OSI и TCP/IP</title>
<link>https://vikulin-va.ru/networking/osi-and-tcp-ip/</link>
<description>Модель OSI и стек TCP/IP простыми словами: семь слоёв и четыре, что происходит на каждом уровне и зачем backend-разработчику эта карта при отладке сети.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/osi-and-tcp-ip/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>IP-адреса, порты и NAT</title>
<link>https://vikulin-va.ru/networking/ip-and-ports/</link>
<description>Как пакет находит нужную машину и сервис: IPv4 и IPv6, приватные и публичные адреса, порты, NAT и почему за одним внешним адресом прячется целая сеть.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/ip-and-ports/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>TCP и UDP: надёжность против скорости</title>
<link>https://vikulin-va.ru/networking/tcp-and-udp/</link>
<description>Два транспортных протокола простыми словами: как TCP гарантирует доставку через рукопожатие и подтверждения, чем берёт UDP и когда backend выбирает каждый.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/tcp-and-udp/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>DNS: как доменное имя превращается в адрес</title>
<link>https://vikulin-va.ru/networking/dns/</link>
<description>DNS простыми словами: как имя превращается в IP, что такое рекурсивный резолвер и авторитетные серверы, зачем записи A, CNAME, MX и почему TTL важен для сервиса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/dns/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>HTTP: методы, статусы, заголовки</title>
<link>https://vikulin-va.ru/networking/http/</link>
<description>Как устроен HTTP-запрос и ответ: методы GET/POST/PUT/DELETE, коды статусов, заголовки, тело, идемпотентность и кэширование — язык, на котором говорят веб-сервисы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/http/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>HTTPS и TLS: шифрование и рукопожатие</title>
<link>https://vikulin-va.ru/networking/https-tls/</link>
<description>Как HTTP становится защищённым: что делает TLS, как проходит рукопожатие и обмен ключами, зачем сертификаты и центры сертификации и что такое TLS-термination.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/https-tls/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>HTTP/1.1, HTTP/2 и HTTP/3: что поменялось</title>
<link>https://vikulin-va.ru/networking/http-versions/</link>
<description>Чем HTTP/2 и HTTP/3 отличаются от HTTP/1.1: head-of-line blocking, мультиплексирование, бинарные кадры, переход на QUIC и что это даёт backend-сервису.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/http-versions/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>Соединения: keep-alive, пулы и таймауты</title>
<link>https://vikulin-va.ru/networking/connections/</link>
<description>Почему открыть TCP+TLS-соединение дорого и как это влияет на сервис: keep-alive, пулы соединений к базе и соседним сервисам, таймауты подключения и чтения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/connections/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>Два пула: к базе и по HTTP — чем отличаются и как топят друг друга</title>
<link>https://vikulin-va.ru/networking/two-pools/</link>
<description>Пул к базе и пул HTTP-соединений выглядят одинаково, а устроены по-разному: одно соединение занято всей транзакцией, другое освобождается после ответа. Отсюда разные размеры, мультиплексирование и общая авария.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/two-pools/</guid>
<pubDate>Wed, 2 Sep 2026 09:28:27 GMT</pubDate>
</item>
<item>
<title>Балансировщики и обратные прокси</title>
<link>https://vikulin-va.ru/networking/load-balancing/</link>
<description>Как трафик доходит до одного из многих экземпляров сервиса: обратный прокси и балансировщик, L4 против L7, алгоритмы распределения, health-checks и sticky-сессии.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/load-balancing/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>Сеть и надёжность: таймауты, ретраи, идемпотентность</title>
<link>https://vikulin-va.ru/networking/reliability/</link>
<description>Сеть ненадёжна по природе: почему нужны таймауты на каждый вызов, как безопасно повторять запросы, что такое идемпотентность, circuit breaker и почему «оно зависло».</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/reliability/</guid>
<pubDate>Wed, 1 Jul 2026 18:54:12 GMT</pubDate>
</item>
<item>
<title>Сетевая диагностика с хоста: что смотреть, когда сервис не отвечает</title>
<link>https://vikulin-va.ru/networking/diagnostics/</link>
<description>Сервис не отвечает — куда смотреть по шагам: живо ли имя, открыт ли порт, где теряется время в запросе, сколько соединений висит и что видно в дампе трафика.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/diagnostics/</guid>
<pubDate>Fri, 4 Sep 2026 19:57:57 GMT</pubDate>
</item>
<item>
<title>WebSocket, SSE и long polling</title>
<link>https://vikulin-va.ru/networking/websockets-sse/</link>
<description>Как сервер уведомляет клиента: long polling, Server-Sent Events и WebSocket — механика и код каждого способа (Java, Python, Go, Node + JS-клиент), таблица сравнения и правила выбора.</description>
<guid isPermaLink="true">https://vikulin-va.ru/networking/websockets-sse/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Основы AWS: аккаунты, IAM, регионы и VPC</title>
<link>https://vikulin-va.ru/aws/fundamentals/</link>
<description>Знакомство с AWS для начинающих: что такое аккаунт, как IAM решает кто что может, зачем регионы и зоны доступности и как устроена сеть VPC — простыми словами и с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/fundamentals/</guid>
<pubDate>Sat, 6 Jun 2026 18:24:35 GMT</pubDate>
</item>
<item>
<title>Сеть в AWS: VPC, подсети, NAT и security groups</title>
<link>https://vikulin-va.ru/aws/networking/</link>
<description>Разбираем сеть AWS простыми словами: что такое VPC и подсети public/private, как работают таблицы маршрутов, NAT и Internet Gateway, чем security group отличается от NACL.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/networking/</guid>
<pubDate>Fri, 26 Jun 2026 12:25:41 GMT</pubDate>
</item>
<item>
<title>IAM в AWS: пользователи, роли и политики</title>
<link>https://vikulin-va.ru/aws/iam/</link>
<description>Разбираем IAM в AWS для начинающих: чем роль отличается от пользователя, как читать JSON-политики, что такое least privilege и временные креды через STS.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/iam/</guid>
<pubDate>Fri, 26 Jun 2026 12:26:26 GMT</pubDate>
</item>
<item>
<title>Где запускать сервис в AWS: EC2, ECS, EKS или Lambda</title>
<link>https://vikulin-va.ru/aws/compute/</link>
<description>Разбираем четыре способа запустить backend в AWS — виртуальные машины EC2, контейнеры ECS/Fargate, managed Kubernetes EKS и функции Lambda — и как выбрать под задачу.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/compute/</guid>
<pubDate>Sat, 6 Jun 2026 18:24:35 GMT</pubDate>
</item>
<item>
<title>Масштабирование и доступность в AWS</title>
<link>https://vikulin-va.ru/aws/scaling-and-availability/</link>
<description>Простыми словами про Auto Scaling, балансировщики ALB и NLB, зоны доступности и health checks: как сервис в AWS держит нагрузку и не падает при сбоях.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/scaling-and-availability/</guid>
<pubDate>Fri, 26 Jun 2026 12:27:10 GMT</pubDate>
</item>
<item>
<title>Serverless в AWS: Lambda, события, cold start, API Gateway</title>
<link>https://vikulin-va.ru/aws/serverless/</link>
<description>Что такое serverless и Lambda простыми словами: событийная модель, почему появляется cold start и как его уменьшить, зачем нужны API Gateway и Step Functions.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/serverless/</guid>
<pubDate>Fri, 26 Jun 2026 12:34:12 GMT</pubDate>
</item>
<item>
<title>Управляемые данные в AWS: RDS, ElastiCache, SQS, MSK</title>
<link>https://vikulin-va.ru/aws/managed-data/</link>
<description>Что облако берёт на себя в работе с данными: RDS и Aurora вместо своего PostgreSQL, ElastiCache вместо Redis, SQS как очередь, MSK как Kafka, DocumentDB как MongoDB — для начинающих.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/managed-data/</guid>
<pubDate>Sat, 6 Jun 2026 18:24:35 GMT</pubDate>
</item>
<item>
<title>DynamoDB: ключи, индексы и когда брать вместо SQL</title>
<link>https://vikulin-va.ru/aws/dynamodb/</link>
<description>Разбираем DynamoDB для начинающих: partition и sort key, индексы GSI и LSI, режимы оплаты, single-table design и в каких задачах он лучше реляционной базы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/dynamodb/</guid>
<pubDate>Fri, 26 Jun 2026 12:28:01 GMT</pubDate>
</item>
<item>
<title>AWS из Spring Boot: SDK v2, credentials chain и LocalStack</title>
<link>https://vikulin-va.ru/aws/spring-integration/</link>
<description>Как из Spring Boot приложения работать с AWS: SDK v2 и клиенты-бины, цепочка получения прав без ключей в коде, Spring Cloud AWS для SQS и секретов, тесты на LocalStack.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/spring-integration/</guid>
<pubDate>Sat, 6 Jun 2026 18:24:35 GMT</pubDate>
</item>
<item>
<title>Безопасность и наблюдаемость в AWS: Secrets Manager, SSM, KMS, CloudWatch</title>
<link>https://vikulin-va.ru/aws/security-observability/</link>
<description>Где хранить пароли в облаке, чем Secrets Manager отличается от SSM Parameter Store, зачем нужен KMS и как читать логи и метрики через CloudWatch. Простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/security-observability/</guid>
<pubDate>Sat, 6 Jun 2026 18:24:35 GMT</pubDate>
</item>
<item>
<title>Оптимизация затрат в AWS: с чего начать</title>
<link>https://vikulin-va.ru/aws/cost-optimization/</link>
<description>Как осознанно платить за AWS меньше: модели оплаты on-demand, reserved, spot и savings plans, right-sizing, классы хранилища и контроль расходов для новичков.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/cost-optimization/</guid>
<pubDate>Fri, 26 Jun 2026 12:28:42 GMT</pubDate>
</item>
<item>
<title>Отказоустойчивость и аварийное восстановление в AWS</title>
<link>https://vikulin-va.ru/aws/resilience-and-dr/</link>
<description>Понятно для новичков: multi-AZ против multi-region, что такое RPO и RTO, четыре стратегии аварийного восстановления в AWS и зачем регулярно проверять бэкапы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/resilience-and-dr/</guid>
<pubDate>Fri, 26 Jun 2026 12:29:25 GMT</pubDate>
</item>
<item>
<title>AWS Well-Architected Framework: шесть столпов и как ими пользоваться</title>
<link>https://vikulin-va.ru/aws/well-architected/</link>
<description>Что такое AWS Well-Architected Framework и его шесть столпов: операционное совершенство, безопасность, надёжность, эффективность, затраты, устойчивость — и как ими пользоваться.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/well-architected/</guid>
<pubDate>Fri, 26 Jun 2026 12:30:06 GMT</pubDate>
</item>
<item>
<title>Infrastructure as Code: основы</title>
<link>https://vikulin-va.ru/aws/iac-fundamentals/</link>
<description>Что такое Infrastructure as Code простыми словами: declarative против imperative, state, idempotency и drift на понятных примерах Terraform, CloudFormation и CDK.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/iac-fundamentals/</guid>
<pubDate>Fri, 26 Jun 2026 16:05:34 GMT</pubDate>
</item>
<item>
<title>Terraform: HCL, провайдеры, состояние и модули</title>
<link>https://vikulin-va.ru/aws/terraform/</link>
<description>Terraform — самый популярный инструмент инфраструктуры как кода. Разбираем HCL, провайдеры, ресурсы, цикл init-plan-apply-destroy, state и модули на примерах с AWS.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/terraform/</guid>
<pubDate>Fri, 26 Jun 2026 16:05:34 GMT</pubDate>
</item>
<item>
<title>CloudFormation: шаблоны и стеки</title>
<link>https://vikulin-va.ru/aws/cloudformation/</link>
<description>Родной для AWS инструмент инфраструктуры как кода: пишете шаблон на YAML или JSON, а CloudFormation создаёт, обновляет и удаляет ресурсы стеком.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/cloudformation/</guid>
<pubDate>Fri, 26 Jun 2026 16:05:34 GMT</pubDate>
</item>
<item>
<title>AWS CDK: инфраструктура как программа</title>
<link>https://vikulin-va.ru/aws/cdk/</link>
<description>Что такое AWS CDK простыми словами: пишете инфраструктуру кодом на привычном языке, CDK синтезирует CloudFormation-шаблон и деплоит. Конструкты L1, L2, L3, App и Stack.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/cdk/</guid>
<pubDate>Fri, 26 Jun 2026 16:05:34 GMT</pubDate>
</item>
<item>
<title>IaC на практике: state, секреты, доставка</title>
<link>https://vikulin-va.ru/aws/state-and-delivery/</link>
<description>Что отличает учебный пример инфраструктуры как кода от настоящего проекта: где хранить state и блокировка, как не утечь секретами, окружения и доставка через конвейер.</description>
<guid isPermaLink="true">https://vikulin-va.ru/aws/state-and-delivery/</guid>
<pubDate>Fri, 26 Jun 2026 16:05:34 GMT</pubDate>
</item>
<item>
<title>Основы Yandex Cloud: организация, каталоги, IAM, сети</title>
<link>https://vikulin-va.ru/yandex-cloud/fundamentals/</link>
<description>Знакомство с Yandex Cloud для начинающих: как устроена иерархия организация → облако → каталог, как Cloud IAM решает кто что может, зачем зоны доступности и как работает облачная сеть — простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/fundamentals/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Сеть в Yandex Cloud: облачная сеть, подсети, NAT, группы безопасности</title>
<link>https://vikulin-va.ru/yandex-cloud/networking/</link>
<description>Разбираем сеть Yandex Cloud простыми словами: что такое облачная сеть и подсети по зонам, как ресурс получает публичный или внутренний IP, зачем NAT-шлюз и как работают группы безопасности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/networking/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Cloud IAM в Yandex Cloud: сервисные аккаунты, роли, привязки</title>
<link>https://vikulin-va.ru/yandex-cloud/iam/</link>
<description>Разбираем Cloud IAM в Yandex Cloud для начинающих: чем сервисный аккаунт отличается от пользователя, как устроены роли и привязки, что такое least privilege и как код получает временный IAM-токен без ключей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/iam/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Где запускать сервис в Yandex Cloud: Compute Cloud, Kubernetes, Serverless Containers, Cloud Functions</title>
<link>https://vikulin-va.ru/yandex-cloud/compute/</link>
<description>Четыре способа поднять backend в Yandex Cloud простыми словами: виртуальная машина Compute Cloud, Managed Kubernetes, Serverless Containers и Cloud Functions — чем отличаются и как выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/compute/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Масштабирование и доступность в Yandex Cloud</title>
<link>https://vikulin-va.ru/yandex-cloud/scaling-and-availability/</link>
<description>Как держать нагрузку и не падать при сбоях в Yandex Cloud простыми словами: группы виртуальных машин с автомасштабированием и автовосстановлением, балансировщики, проверки здоровья и несколько зон доступности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/scaling-and-availability/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Serverless в Yandex Cloud: Cloud Functions, триггеры, API Gateway</title>
<link>https://vikulin-va.ru/yandex-cloud/serverless/</link>
<description>Serverless в Yandex Cloud простыми словами: что такое Cloud Functions, какие бывают триггеры, зачем API Gateway, что такое холодный старт и когда serverless удобнее обычного сервиса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/serverless/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Управляемые данные в Yandex Cloud: PostgreSQL, Redis, Message Queue, Kafka</title>
<link>https://vikulin-va.ru/yandex-cloud/managed-data/</link>
<description>Что облако берёт на себя в работе с данными в Yandex Cloud для начинающих: Managed PostgreSQL вместо своего сервера, Managed Redis для кэша, Message Queue как очередь, Managed Kafka как брокер.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/managed-data/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>YDB: масштабируемая база данных Yandex Cloud</title>
<link>https://vikulin-va.ru/yandex-cloud/ydb/</link>
<description>YDB простыми словами: распределённая база данных Yandex Cloud с SQL и распределёнными транзакциями, serverless и dedicated режимы, чем отличается от Managed PostgreSQL и когда её брать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/ydb/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Object Storage в Yandex Cloud: объектное хранилище и классы хранения</title>
<link>https://vikulin-va.ru/yandex-cloud/object-storage/</link>
<description>Object Storage в Yandex Cloud простыми словами: что такое бакет и объект, S3-совместимый API, классы хранения (стандарт, холодный, ледяной), lifecycle-правила и из чего складывается стоимость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/object-storage/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Yandex Cloud из Spring Boot: доступ к сервисам из кода</title>
<link>https://vikulin-va.ru/yandex-cloud/sdk-integration/</link>
<description>Как обращаться к Yandex Cloud из Spring Boot простыми словами: Object Storage через AWS S3 SDK, Message Queue через SQS-совместимый клиент, аутентификация через сервисный аккаунт и метаданные, тестирование без облака.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/sdk-integration/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Безопасность и наблюдаемость в Yandex Cloud: Lockbox, KMS, Cloud Logging, Monitoring</title>
<link>https://vikulin-va.ru/yandex-cloud/security-observability/</link>
<description>Где хранить пароли и как видеть, что происходит в Yandex Cloud простыми словами: Lockbox для секретов, KMS для шифрования, Cloud Logging для логов, Monitoring для метрик и алертов, Audit Trails для аудита.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/security-observability/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Оптимизация затрат в Yandex Cloud: с чего начать</title>
<link>https://vikulin-va.ru/yandex-cloud/cost-optimization/</link>
<description>Как осознанно платить за Yandex Cloud меньше для начинающих: модели оплаты, прерываемые виртуальные машины, right-sizing, классы хранения, исходящий трафик, serverless под нерегулярную нагрузку и контроль расходов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/cost-optimization/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Отказоустойчивость и аварийное восстановление в Yandex Cloud</title>
<link>https://vikulin-va.ru/yandex-cloud/resilience-and-dr/</link>
<description>Как пережить сбой в Yandex Cloud простыми словами: несколько зон доступности, резервные копии, снимки дисков, RPO и RTO, стратегии восстановления и чем отказоустойчивость отличается от аварийного восстановления.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/resilience-and-dr/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Terraform в Yandex Cloud: инфраструктура как код</title>
<link>https://vikulin-va.ru/yandex-cloud/terraform/</link>
<description>Terraform в Yandex Cloud простыми словами: зачем описывать инфраструктуру кодом, как устроен провайдер и ресурсы, что такое состояние (state) и где его хранить, зачем переменные и модули.</description>
<guid isPermaLink="true">https://vikulin-va.ru/yandex-cloud/terraform/</guid>
<pubDate>Sun, 19 Jul 2026 18:05:07 GMT</pubDate>
</item>
<item>
<title>Основы Azure: подписки, группы ресурсов, Entra ID, сеть</title>
<link>https://vikulin-va.ru/azure/fundamentals/</link>
<description>Знакомство с Microsoft Azure для начинающих: как устроена иерархия подписка → группа ресурсов, как Entra ID и RBAC решают кто что может, зачем регионы и зоны и как работает виртуальная сеть — простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/fundamentals/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Сеть в Azure: Virtual Network, подсети, NSG, NAT</title>
<link>https://vikulin-va.ru/azure/networking/</link>
<description>Разбираем сеть Azure простыми словами: что такое Virtual Network и подсети, как ресурс получает публичный или внутренний IP, как работают Network Security Groups, NAT Gateway и Private Link, зачем балансировщики.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/networking/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Entra ID и RBAC в Azure: удостоверения, роли, managed identity</title>
<link>https://vikulin-va.ru/azure/iam/</link>
<description>Разбираем доступ в Azure для начинающих: чем Entra ID отличается от RBAC, что такое роли и назначения, зачем managed identity вместо ключей, что такое least privilege и service principal.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/iam/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Где запускать сервис в Azure: Virtual Machines, AKS, Container Apps, Functions</title>
<link>https://vikulin-va.ru/azure/compute/</link>
<description>Способы поднять backend в Azure простыми словами: виртуальная машина, Azure Kubernetes Service, Container Apps, Azure Functions и App Service — чем отличаются и как выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/compute/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Масштабирование и доступность в Azure</title>
<link>https://vikulin-va.ru/azure/scaling-and-availability/</link>
<description>Как держать нагрузку и не падать при сбоях в Azure простыми словами: масштабируемые наборы виртуальных машин с автомасштабированием, балансировщики, проверки здоровья и несколько зон доступности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/scaling-and-availability/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Serverless в Azure: Azure Functions, триггеры, API Management</title>
<link>https://vikulin-va.ru/azure/serverless/</link>
<description>Serverless в Azure простыми словами: что такое Azure Functions, какие бывают триггеры, зачем Durable Functions и API Management, что такое холодный старт и когда serverless удобнее обычного сервиса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/serverless/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Управляемые данные в Azure: PostgreSQL, Redis, Service Bus, Event Hubs</title>
<link>https://vikulin-va.ru/azure/managed-data/</link>
<description>Что облако берёт на себя в работе с данными в Azure для начинающих: Azure Database for PostgreSQL вместо своего сервера, Cache for Redis, Service Bus как очередь, Event Hubs как Kafka.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/managed-data/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Cosmos DB: глобально распределённая база данных Azure</title>
<link>https://vikulin-va.ru/azure/cosmos-db/</link>
<description>Cosmos DB простыми словами: глобально распределённая многомодельная NoSQL-база Azure, ключ секционирования, уровни согласованности, единицы запросов (RU), чем отличается от Azure Database for PostgreSQL и когда её брать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/cosmos-db/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Blob Storage в Azure: объектное хранилище и уровни доступа</title>
<link>https://vikulin-va.ru/azure/object-storage/</link>
<description>Blob Storage в Azure простыми словами: что такое контейнер и блоб, уровни доступа (Hot, Cool, Cold, Archive), lifecycle-правила, SAS-токены, варианты избыточности и из чего складывается стоимость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/object-storage/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Azure из Spring Boot: доступ к сервисам из кода</title>
<link>https://vikulin-va.ru/azure/sdk-integration/</link>
<description>Как обращаться к Azure из Spring Boot простыми словами: Blob Storage и Service Bus через Azure SDK, аутентификация через DefaultAzureCredential и managed identity, тестирование без облака через Azurite.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/sdk-integration/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Безопасность и наблюдаемость в Azure: Key Vault, Azure Monitor, Application Insights</title>
<link>https://vikulin-va.ru/azure/security-observability/</link>
<description>Где хранить пароли и как видеть, что происходит в Azure простыми словами: Key Vault для секретов, Azure Monitor и Log Analytics для логов и метрик, Application Insights для приложения, Defender и Activity Log.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/security-observability/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Оптимизация затрат в Azure: с чего начать</title>
<link>https://vikulin-va.ru/azure/cost-optimization/</link>
<description>Как осознанно платить за Azure меньше для начинающих: модели оплаты, зарезервированные экземпляры, spot-машины, savings plans, right-sizing, уровни хранения, исходящий трафик и контроль расходов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/cost-optimization/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Отказоустойчивость и аварийное восстановление в Azure</title>
<link>https://vikulin-va.ru/azure/resilience-and-dr/</link>
<description>Как пережить сбой в Azure простыми словами: зоны доступности и парные регионы, резервные копии, гео-избыточное хранилище, RPO и RTO, Azure Site Recovery и чем отказоустойчивость отличается от аварийного восстановления.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/resilience-and-dr/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Инфраструктура как код в Azure: Bicep, ARM, Terraform</title>
<link>https://vikulin-va.ru/azure/iac/</link>
<description>Инфраструктура как код в Azure простыми словами: зачем описывать инфраструктуру кодом, чем ARM-шаблоны отличаются от Bicep, где место Terraform, что такое состояние и где его хранить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/azure/iac/</guid>
<pubDate>Sun, 19 Jul 2026 18:36:04 GMT</pubDate>
</item>
<item>
<title>Основы GCP: проекты, Cloud IAM, регионы, сеть</title>
<link>https://vikulin-va.ru/gcp/fundamentals/</link>
<description>Знакомство с Google Cloud Platform для начинающих: как устроена иерархия организация → папка → проект, как Cloud IAM решает кто что может, зачем регионы и зоны и как работает VPC — простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/fundamentals/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Сеть в GCP: VPC, подсети, правила файрвола, Cloud NAT</title>
<link>https://vikulin-va.ru/gcp/networking/</link>
<description>Разбираем сеть Google Cloud простыми словами: что такое глобальная VPC и региональные подсети, как ресурс получает внешний или внутренний IP, как работают правила файрвола, Cloud NAT и балансировщики.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/networking/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Cloud IAM в GCP: сервисные аккаунты, роли, привязки</title>
<link>https://vikulin-va.ru/gcp/iam/</link>
<description>Разбираем Cloud IAM в Google Cloud для начинающих: чем сервисный аккаунт отличается от пользователя, как устроены роли и привязки, что такое least privilege, Workload Identity и как код получает доступ без ключей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/iam/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Где запускать сервис в GCP: Compute Engine, GKE, Cloud Run, Cloud Functions</title>
<link>https://vikulin-va.ru/gcp/compute/</link>
<description>Способы поднять backend в Google Cloud простыми словами: виртуальная машина Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions и App Engine — чем отличаются и как выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/compute/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Масштабирование и доступность в GCP</title>
<link>https://vikulin-va.ru/gcp/scaling-and-availability/</link>
<description>Как держать нагрузку и не падать при сбоях в Google Cloud простыми словами: группы экземпляров с автомасштабированием и автовосстановлением, глобальный балансировщик, проверки здоровья и несколько зон.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/scaling-and-availability/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Serverless в GCP: Cloud Run, Cloud Functions, Eventarc</title>
<link>https://vikulin-va.ru/gcp/serverless/</link>
<description>Serverless в Google Cloud простыми словами: чем Cloud Run отличается от Cloud Functions, какие бывают триггеры, зачем Eventarc и API Gateway, что такое холодный старт и когда serverless удобнее обычного сервиса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/serverless/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Управляемые данные в GCP: Cloud SQL, Memorystore, Pub/Sub</title>
<link>https://vikulin-va.ru/gcp/managed-data/</link>
<description>Что облако берёт на себя в работе с данными в Google Cloud для начинающих: Cloud SQL вместо своего PostgreSQL, Memorystore для кэша, Pub/Sub как очередь и поток событий, AlloyDB и Managed Kafka.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/managed-data/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Firestore и другие NoSQL в GCP: Bigtable, Spanner</title>
<link>https://vikulin-va.ru/gcp/firestore/</link>
<description>NoSQL-базы Google Cloud простыми словами: Firestore как serverless документная база, Bigtable для огромных потоков данных, Spanner как глобально распределённая SQL — чем отличаются и когда брать вместо Cloud SQL.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/firestore/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Cloud Storage в GCP: объектное хранилище и классы хранения</title>
<link>https://vikulin-va.ru/gcp/object-storage/</link>
<description>Cloud Storage в Google Cloud простыми словами: что такое бакет и объект, классы хранения (Standard, Nearline, Coldline, Archive), lifecycle-правила, signed URL, типы размещения и из чего складывается стоимость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/object-storage/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>GCP из Spring Boot: доступ к сервисам из кода</title>
<link>https://vikulin-va.ru/gcp/sdk-integration/</link>
<description>Как обращаться к Google Cloud из Spring Boot простыми словами: Cloud Storage и Pub/Sub через клиентские библиотеки, аутентификация через Application Default Credentials, подключение к Cloud SQL и тестирование без облака.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/sdk-integration/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Безопасность и наблюдаемость в GCP: Secret Manager, Cloud Logging, Cloud Monitoring</title>
<link>https://vikulin-va.ru/gcp/security-observability/</link>
<description>Где хранить пароли и как видеть, что происходит в Google Cloud простыми словами: Secret Manager для секретов, Cloud KMS для шифрования, Cloud Logging для логов, Cloud Monitoring для метрик и алертов, Audit Logs.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/security-observability/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Оптимизация затрат в GCP: с чего начать</title>
<link>https://vikulin-va.ru/gcp/cost-optimization/</link>
<description>Как осознанно платить за Google Cloud меньше для начинающих: скидки за длительное и зарезервированное использование, spot-машины, right-sizing, классы хранения, исходящий трафик и контроль расходов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/cost-optimization/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Отказоустойчивость и аварийное восстановление в GCP</title>
<link>https://vikulin-va.ru/gcp/resilience-and-dr/</link>
<description>Как пережить сбой в Google Cloud простыми словами: несколько зон и мультирегион, резервные копии, снимки дисков, мультирегиональное хранилище, RPO и RTO и чем отказоустойчивость отличается от аварийного восстановления.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/resilience-and-dr/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Terraform в GCP: инфраструктура как код</title>
<link>https://vikulin-va.ru/gcp/terraform/</link>
<description>Terraform в Google Cloud простыми словами: зачем описывать инфраструктуру кодом, как устроен провайдер и ресурсы, что такое состояние (state) и где его хранить, чем помогают Config Connector и Infrastructure Manager.</description>
<guid isPermaLink="true">https://vikulin-va.ru/gcp/terraform/</guid>
<pubDate>Sun, 19 Jul 2026 18:50:40 GMT</pubDate>
</item>
<item>
<title>Зачем нужны структуры данных и алгоритмы</title>
<link>https://vikulin-va.ru/algorithms/intro/</link>
<description>Введение в структуры данных и алгоритмы для начинающих: что это такое простыми словами, три роли, обзор «какая структура для чего» и карта соответствий с классами коллекций Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/intro/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Математика для O-нотации: логарифмы, степени и скорость роста</title>
<link>https://vikulin-va.ru/algorithms/math-for-big-o/</link>
<description>Школьная математика, которую забыли: что такое степень и логарифм простыми словами, почему log₂ N — это число делений пополам, и как из этого читается O-нотация. Вспоминалка перед алгоритмами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/math-for-big-o/</guid>
<pubDate>Tue, 18 Aug 2026 10:10:55 GMT</pubDate>
</item>
<item>
<title>Массивы, двоичный поиск и O-нотация</title>
<link>https://vikulin-va.ru/algorithms/arrays/</link>
<description>Массивы и двоичный поиск простыми словами: линейный и двоичный поиск, O-нотация (O(1), O(N), O(log N)) и как это сделано в Java — ArrayList и Arrays.binarySearch.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/arrays/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Простая сортировка: пузырёк, выбор, вставка</title>
<link>https://vikulin-va.ru/algorithms/simple-sorting/</link>
<description>Три простых алгоритма сортировки простыми словами: пузырёк, выбор и вставки — как работают, почему все три O(N²), что такое устойчивость и почему вставки живут внутри Arrays.sort.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/simple-sorting/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Стеки и очереди</title>
<link>https://vikulin-va.ru/algorithms/stacks-and-queues/</link>
<description>Стеки и очереди простыми словами: LIFO и FIFO, push/pop и enqueue/dequeue, циклическая очередь, дек и приоритетная очередь — и почему в Java берут ArrayDeque, а не Stack.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/stacks-and-queues/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Связанные списки</title>
<link>https://vikulin-va.ru/algorithms/linked-lists/</link>
<description>Связанные списки простыми словами: узлы и ссылки вместо индексов, односвязный и двусвязный список, итераторы — и почему LinkedList в Java почти всегда проигрывает ArrayList.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/linked-lists/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Рекурсия</title>
<link>https://vikulin-va.ru/algorithms/recursion/</link>
<description>Рекурсия простыми словами: базовое условие, стек вызовов, разделяй и властвуй на примерах факториала и сортировки слиянием — и почему в библиотеке Java это TimSort.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/recursion/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Нетривиальная сортировка: Шелла, быстрая, поразрядная</title>
<link>https://vikulin-va.ru/algorithms/advanced-sorting/</link>
<description>Быстрые алгоритмы сортировки простыми словами: Шелла, быстрая через разбиение вокруг опорного и поразрядная без сравнений — и что на самом деле вызывает Arrays.sort в Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/advanced-sorting/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Двоичные деревья</title>
<link>https://vikulin-va.ru/algorithms/binary-trees/</link>
<description>Двоичные деревья поиска простыми словами: правило левый-меньше-правый, поиск, вставка, обход и удаление узла, почему дерево вырождается и что вместо него даёт TreeMap.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/binary-trees/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Красно-чёрные деревья</title>
<link>https://vikulin-va.ru/algorithms/red-black-trees/</link>
<description>Красно-чёрные деревья простыми словами: почему дерево поиска вырождается, как повороты и перекраска держат баланс и что из этого работает внутри TreeMap и TreeSet.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/red-black-trees/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Деревья 2-3-4 и B-деревья</title>
<link>https://vikulin-va.ru/algorithms/2-3-4-trees/</link>
<description>Деревья 2-3-4 простыми словами: узел с несколькими ключами, разбиение на спуске, родство с красно-чёрным TreeMap и почему B-деревья стали основой индексов баз данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/2-3-4-trees/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Хеш-таблицы</title>
<link>https://vikulin-va.ru/algorithms/hash-tables/</link>
<description>Хеш-таблицы простыми словами: хеш-функция и коллизии, открытая адресация и метод цепочек, коэффициент заполнения и как это устроено внутри HashMap в Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/hash-tables/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Пирамиды (кучи)</title>
<link>https://vikulin-va.ru/algorithms/heaps/</link>
<description>Пирамида (куча) простыми словами: слабая упорядоченность и хранение в массиве, всплытие и погружение за O(log N), пирамидальная сортировка и PriorityQueue в Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/heaps/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Графы</title>
<link>https://vikulin-va.ru/algorithms/graphs/</link>
<description>Графы простыми словами: вершины и рёбра, матрица и список смежности, обход в глубину и в ширину, топологическая сортировка — и на каких коллекциях Java граф собирают.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/graphs/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Взвешенные графы: минимальный остов и кратчайший путь</title>
<link>https://vikulin-va.ru/algorithms/weighted-graphs/</link>
<description>Взвешенные графы простыми словами: минимальное остовное дерево, алгоритм Дейкстры, труднорешаемые задачи — и почему Дейкстру в Java пишут на PriorityQueue с оговорками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/weighted-graphs/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Два указателя и скользящее окно</title>
<link>https://vikulin-va.ru/algorithms/two-pointers-and-window/</link>
<description>Два указателя и скользящее окно простыми словами: встречные и попутные указатели, окно переменной ширины — и почему приём быстр на ArrayList и вязнет на LinkedList.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/two-pointers-and-window/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Префиксные суммы</title>
<link>https://vikulin-va.ru/algorithms/prefix-sums/</link>
<description>Префиксные суммы простыми словами: сумма любого отрезка как разность двух чисел, зачем массив префиксов длиннее исходного, разностный массив и Arrays.parallelPrefix в Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/prefix-sums/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Двоичный поиск по ответу</title>
<link>https://vikulin-va.ru/algorithms/binary-search-on-answer/</link>
<description>Двоичный поиск по ответу простыми словами: поиск в диапазоне ответов, монотонность условия, границы и инвариант цикла — и что умеют TreeMap и TreeSet в Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/binary-search-on-answer/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Монотонный стек</title>
<link>https://vikulin-va.ru/algorithms/monotonic-stack/</link>
<description>Монотонный стек простыми словами: как за один проход ответить «когда впервые станет больше», почему время линейное при вложенном цикле, монотонная очередь на ArrayDeque.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/monotonic-stack/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Динамическое программирование</title>
<link>https://vikulin-va.ru/algorithms/dynamic-programming/</link>
<description>Динамическое программирование простыми словами: почему наивная рекурсия считает одно и то же, как мемоизация и таблица убирают повтор, состояние и переход, разбор на примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/dynamic-programming/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Перебор с отсечением</title>
<link>https://vikulin-va.ru/algorithms/backtracking/</link>
<description>Перебор с отсечением простыми словами: дерево вариантов, откат состояния, отсечения вместо безнадёжного перебора, коллекции Java под состояние и разбор на примере.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/backtracking/</guid>
<pubDate>Mon, 24 Aug 2026 13:54:55 GMT</pubDate>
</item>
<item>
<title>Как выбрать структуру данных</title>
<link>https://vikulin-va.ru/algorithms/choosing-structures/</link>
<description>Как выбрать структуру данных: массив, список, дерево или хеш-таблица, шпаргалка по скорости операций и карта соответствия классам Java — ArrayList, HashMap, TreeMap, ArrayDeque.</description>
<guid isPermaLink="true">https://vikulin-va.ru/algorithms/choosing-structures/</guid>
<pubDate>Sun, 19 Jul 2026 19:29:54 GMT</pubDate>
</item>
<item>
<title>Конечные автоматы и стейт-машины: что это и когда нужны</title>
<link>https://vikulin-va.ru/state-machines/what-is-a-state-machine/</link>
<description>Что такое конечный автомат простыми словами: состояния, переходы и запрещённые переходы. Когда россыпь boolean-флагов пора заменить стейт-машиной, а когда хватит обычного if.</description>
<guid isPermaLink="true">https://vikulin-va.ru/state-machines/what-is-a-state-machine/</guid>
<pubDate>Wed, 19 Aug 2026 18:09:57 GMT</pubDate>
</item>
<item>
<title>Как реализовать стейт-машину в Java</title>
<link>https://vikulin-va.ru/state-machines/implementing-in-java/</link>
<description>Четыре способа написать стейт-машину в Java: enum со switch, таблица переходов, State-паттерн из GoF и библиотека Spring Statemachine. Что выбрать под задачу и как хранить состояние без гонок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/state-machines/implementing-in-java/</guid>
<pubDate>Wed, 19 Aug 2026 18:09:57 GMT</pubDate>
</item>
<item>
<title>BPM и оркестрация процессов: Camunda и аналоги</title>
<link>https://vikulin-va.ru/state-machines/bpm-and-orchestration/</link>
<description>Когда своей стейт-машины в коде мало и нужен BPM-движок: что такое Camunda и BPMN, аналоги Temporal, Zeebe, Flowable, AWS Step Functions, и когда движок вместо кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/state-machines/bpm-and-orchestration/</guid>
<pubDate>Wed, 19 Aug 2026 18:09:57 GMT</pubDate>
</item>
<item>
<title>Зачем Java-разработчику Kotlin</title>
<link>https://vikulin-va.ru/kotlin/why-kotlin/</link>
<description>Где сегодня живёт Kotlin — Android, backend на Spring, Gradle-скрипты; что язык даёт на практике и почему переход с Java занимает недели: одна JVM, одни библиотеки, полная совместимость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/why-kotlin/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Синтаксис Kotlin после Java</title>
<link>https://vikulin-va.ru/kotlin/syntax-basics/</link>
<description>Базовый синтаксис Kotlin глазами Java-разработчика: val и var, вывод типов, функции и выражения, when вместо switch, шаблоны строк, именованные аргументы и значения по умолчанию.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/syntax-basics/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Null-safety в Kotlin: типы против NPE</title>
<link>https://vikulin-va.ru/kotlin/null-safety/</link>
<description>Как Kotlin убирает NullPointerException на уровне типов: nullable и non-null типы, операторы ?., ?: и !!, let для проверок, lateinit — и platform types на границе с Java-кодом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/null-safety/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Классы в Kotlin: data, sealed, object</title>
<link>https://vikulin-va.ru/kotlin/classes-and-data/</link>
<description>Классы Kotlin для Java-разработчика: свойства вместо полей с геттерами, data classes против records и Lombok, sealed-иерархии с проверкой полноты when, object и companion вместо статики.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/classes-and-data/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Функции и коллекции в Kotlin</title>
<link>https://vikulin-va.ru/kotlin/functions-and-collections/</link>
<description>Extension-функции, лямбды без функциональных интерфейсов, scope-функции let/apply/run и коллекции Kotlin: read-only по умолчанию, map/filter без Stream-церемоний и sequences для ленивости.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/functions-and-collections/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Корутины Kotlin и virtual threads</title>
<link>https://vikulin-va.ru/kotlin/coroutines/</link>
<description>Корутины простыми словами: suspend-функции, structured concurrency, диспетчеры — и честное сравнение с virtual threads из Java 21: где подходы сходятся и чем различаются на практике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/coroutines/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Kotlin и Spring Boot на практике</title>
<link>https://vikulin-va.ru/kotlin/spring-kotlin/</link>
<description>Что меняется в Spring Boot при переходе на Kotlin: плагины kotlin-spring и kotlin-jpa, конструкторная инъекция без магии, data class как DTO, nullability в контроллерах и тесты.</description>
<guid isPermaLink="true">https://vikulin-va.ru/kotlin/spring-kotlin/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Зачем тестировщику Python и как запустить первую строку</title>
<link>https://vikulin-va.ru/qa-python/why-python/</link>
<description>Что даёт тестировщику умение писать код, почему именно Python, как его поставить и запустить первую программу — и почему начинать удобнее прямо в тренажёре.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/why-python/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Переменные, строки и числа</title>
<link>https://vikulin-va.ru/qa-python/variables-and-strings/</link>
<description>Первое, из чего состоит любая программа: переменные, числа и строки. Как собрать сообщение из кусков, привести строку к числу и почему «200» и 200 — разные вещи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/variables-and-strings/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Сравнения и условия: как программа принимает решение</title>
<link>https://vikulin-va.ru/qa-python/conditions/</link>
<description>Сравнение ожидаемого с фактическим, True и False, if/elif/else и логические операторы and, or, not — основа любой проверки в тесте.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/conditions/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Списки и словари: JSON — это словарь</title>
<link>https://vikulin-va.ru/qa-python/lists-and-dicts/</link>
<description>Два хранилища, на которых держится вся работа с данными: список для перечня и словарь для «поле — значение». Как читать вложенный ответ сервиса и не падать на отсутствующем поле.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/lists-and-dicts/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Циклы: пройти по всем и ничего не пропустить</title>
<link>https://vikulin-va.ru/qa-python/loops/</link>
<description>Цикл for по списку и по словарю, накопление суммы и счётчика, перебор с проверкой — то, ради чего тестировщик и берётся за код: сто записей вместо пяти выборочных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/loops/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Функции: собрать проверку в одном месте</title>
<link>https://vikulin-va.ru/qa-python/functions/</link>
<description>Как перестать копировать один и тот же кусок кода: функция с параметрами, возврат значения, значения по умолчанию — и почему подготовка данных в тесте всегда выносится в функцию.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/functions/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>assert и ошибки: как проверка сообщает о поломке</title>
<link>https://vikulin-va.ru/qa-python/assert-and-errors/</link>
<description>assert вместо if, сообщение при падении, try/except и понимание чужих ошибок — момент, когда код превращается в тест.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/assert-and-errors/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Разбор данных: посчитать, сверить, найти расхождение</title>
<link>https://vikulin-va.ru/qa-python/working-with-data/</link>
<description>Три задачи, ради которых тестировщик и берётся за код: посчитать по выгрузке то, чего нет в интерфейсе, сверить два набора данных и найти, что пропало и что лишнее.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/working-with-data/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>pytest: первый настоящий тест</title>
<link>https://vikulin-va.ru/qa-python/pytest-basics/</link>
<description>Как выглядит тест в рабочем проекте: файлы test_*.py, функции test_*, запуск одной командой, фикстуры вместо копирования подготовки и параметризация вместо десяти похожих тестов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/pytest-basics/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Автотесты API на Python: собрать всё вместе</title>
<link>https://vikulin-va.ru/qa-python/api-autotests/</link>
<description>Финал раздела: как устроен проект с автотестами API, что проверять в ответе, как готовить данные и почему зелёный тест ничего не гарантирует, пока он не падал на сломанном сервисе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-python/api-autotests/</guid>
<pubDate>Sat, 12 Sep 2026 19:36:16 GMT</pubDate>
</item>
<item>
<title>Что такое тестирование и зачем оно нужно</title>
<link>https://vikulin-va.ru/qa-manual/what-is-testing/</link>
<description>Тестирование как одно сравнение: ожидаемое против фактического, лестница источников эталона, расчёт «проверить всё нельзя» и цена бага по этапам.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/what-is-testing/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Кто такой тестировщик и его роль в команде</title>
<link>https://vikulin-va.ru/qa-manual/qa-role/</link>
<description>Чем занят тестировщик: вопросы до кода, проверки на сборке, картина рисков перед релизом. Что решает он, а что владелец продукта, и чем QA отличается от QC.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/qa-role/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Мифы о тестировании и что реально нужно для старта</title>
<link>https://vikulin-va.ru/qa-manual/myths-and-skills/</link>
<description>Нужно ли программировать, заменит ли ИИ, отвечает ли тестировщик за все баги — восемь мифов на одной форме регистрации и честный список навыков для старта с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/myths-and-skills/</guid>
<pubDate>Tue, 7 Jul 2026 08:54:51 GMT</pubDate>
</item>
<item>
<title>Ручное и автоматизированное тестирование: в чём разница</title>
<link>https://vikulin-va.ru/qa-manual/manual-vs-automated/</link>
<description>Чем ручное тестирование отличается от автоматизированного: из чего состоит автотест, почему он краснеет на исправном приложении, что значит зелёный прогон и с чего начинать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/manual-vs-automated/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Жизненный цикл ПО и место тестирования (SDLC и STLC)</title>
<link>https://vikulin-va.ru/qa-manual/sdlc-stlc/</link>
<description>Путь задачи от идеи до поддержки (SDLC) и путь одной проверки внутри него (STLC): что на входе каждого шага, что остаётся на руках, приёмка сборки и петля перепроверок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/sdlc-stlc/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Модели разработки ПО: waterfall, V-модель и итерации</title>
<link>https://vikulin-va.ru/qa-manual/development-models/</link>
<description>Водопад, V-модель и итерации на одном требовании: когда подключается тестировщик, что он получает на вход, куда уходит найденный баг и почему регресс растёт с каждой итерацией.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/development-models/</guid>
<pubDate>Tue, 7 Jul 2026 09:06:49 GMT</pubDate>
</item>
<item>
<title>Уровни тестирования: модульное, интеграционное, системное, приёмочное</title>
<link>https://vikulin-va.ru/qa-manual/test-levels/</link>
<description>Четыре уровня тестирования на одном сквозном примере: что ловит модульная проверка, что стык, что путь покупателя и что приёмка — и почему заглушка на стенде врёт.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-levels/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Виды тестирования: функциональное и нефункциональное</title>
<link>https://vikulin-va.ru/qa-manual/test-types/</link>
<description>Функциональное и нефункциональное, позитив и негатив, дымовой набор, санитарная проверка, повторная проверка бага и регресс — какой прогон на какой вопрос отвечает.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-types/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Нефункциональные виды тестирования на практике</title>
<link>https://vikulin-va.ru/qa-manual/nonfunctional-types/</link>
<description>Скорость, безопасность, удобство, доступность и совместимость для ручного тестировщика: ориентиры отклика и p95, шесть проверок прав без спецсредств, контраст 4,5:1.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/nonfunctional-types/</guid>
<pubDate>Tue, 7 Jul 2026 12:13:19 GMT</pubDate>
</item>
<item>
<title>Чёрный, белый и серый ящик; smoke, регресс и sanity</title>
<link>https://vikulin-va.ru/qa-manual/black-white-box/</link>
<description>Три режима видимости — чёрный, белый и серый ящик — на одной ошибке с бонусами: что даёт экран, что журнал и база, что код, и правило пяти минут.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/black-white-box/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Исследовательское тестирование и степень формализации</title>
<link>https://vikulin-va.ru/qa-manual/exploratory-testing/</link>
<description>Три степени формализации проверок, устав сессии из четырёх строк, заметки, из которых собирается баг-репорт, заготовки идей и порядок от простого позитивного к сложному негативному.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/exploratory-testing/</guid>
<pubDate>Tue, 7 Jul 2026 12:13:19 GMT</pubDate>
</item>
<item>
<title>Локализационное тестирование</title>
<link>https://vikulin-va.ru/qa-manual/localization-testing/</link>
<description>Локализационное тестирование простыми словами: локаль и словарь ключей, вшитые в код строки, множественные формы, форматы дат и чисел, валюта и налог, длина перевода, часовые пояса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/localization-testing/</guid>
<pubDate>Sat, 4 Jul 2026 09:41:54 GMT</pubDate>
</item>
<item>
<title>Как писать тест-кейс: шаги и ожидаемый результат</title>
<link>https://vikulin-va.ru/qa-manual/test-case/</link>
<description>Из каких частей собран тест-кейс и что ломается без каждой, как написать шаг и откуда берётся ожидаемый результат — на сквозном примере оплаты бонусами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-case/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Качество тест-кейса: балансы, показательность и типичные ошибки</title>
<link>https://vikulin-va.ru/qa-manual/test-case-quality/</link>
<description>Почему правильно оформленный кейс всё равно ничего не находит: показательность, независимость от соседей, хрупкость и повторяемость, чистка набора и ревью кейсов в паре.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-case-quality/</guid>
<pubDate>Tue, 7 Jul 2026 13:26:06 GMT</pubDate>
</item>
<item>
<title>Тест-план и тест-сьюты: как организовать проверки</title>
<link>https://vikulin-va.ru/qa-manual/test-plan/</link>
<description>Тест-план как договорённость о границах: два списка объёма, критерии входа и выхода, риск и мера — на коротком плане одной задачи; чем сьют отличается от прогона.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-plan/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Отчёт о результатах тестирования и метрики</title>
<link>https://vikulin-va.ru/qa-manual/test-reporting-metrics/</link>
<description>Четыре читателя отчёта и их вопросы, пять обязательных частей, вывод из состояния, условия и названного риска, шесть метрик и почему «90 % пройдено» без веса врёт.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-reporting-metrics/</guid>
<pubDate>Tue, 7 Jul 2026 14:25:23 GMT</pubDate>
</item>
<item>
<title>Оценка трудозатрат в тестировании</title>
<link>https://vikulin-va.ru/qa-manual/effort-estimation/</link>
<description>Почему «проверю за день» врёт, разбор одной задачи на 18 часов по частям, чем часы работы отличаются от календарных дней, оценка по аналогии и тремя точками, видимый запас.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/effort-estimation/</guid>
<pubDate>Tue, 7 Jul 2026 14:25:23 GMT</pubDate>
</item>
<item>
<title>Техники тест-дизайна: классы эквивалентности и граничные значения</title>
<link>https://vikulin-va.ru/qa-manual/test-design-techniques/</link>
<description>Как из сорока трёх значений одного поля получить шесть проверок: классы эквивалентности, пара значений на каждой границе, шаг для денег, дат и строк, строки чек-листа.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-design-techniques/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Таблицы решений и попарное тестирование</title>
<link>https://vikulin-va.ru/qa-manual/decision-tables-pairwise/</link>
<description>Когда результат зависит от сочетания условий: таблица решений по шагам, свёртка одинаковых строк, пустая клетка как дыра в требованиях и попарное покрытие — 12 проверок вместо 48.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/decision-tables-pairwise/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Чек-листы и тестовые данные</title>
<link>https://vikulin-va.ru/qa-manual/checklists-and-data/</link>
<description>Чем строка чек-листа отличается от темы, как список вырастает из требования и сколько строк в нём нормально, какие данные готовить заранее и почему они протухают.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/checklists-and-data/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Пользовательские сценарии, персонажи и наборы кейсов</title>
<link>https://vikulin-va.ru/qa-manual/user-scenarios/</link>
<description>Чем сценарий отличается от набора отдельных проверок, откуда берут шаги, что проверять на стыках систем и как он рвётся на середине — на пути от гостя до возврата денег.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/user-scenarios/</guid>
<pubDate>Tue, 7 Jul 2026 13:26:06 GMT</pubDate>
</item>
<item>
<title>Что такое баг: severity и priority</title>
<link>https://vikulin-va.ru/qa-manual/what-is-a-bug/</link>
<description>Что считать багом, чем дефект отличается от «так задумано», и как оценить его через severity (серьёзность) и priority (приоритет) — с понятными примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/what-is-a-bug/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Как писать баг-репорт</title>
<link>https://vikulin-va.ru/qa-manual/bug-report/</link>
<description>Из чего состоит хороший баг-репорт: заголовок, шаги воспроизведения, ожидаемый и фактический результат, окружение и вложения — и частые ошибки новичков.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/bug-report/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Качество баг-репорта: логика, свойства и типичные ошибки</title>
<link>https://vikulin-va.ru/qa-manual/bug-report-quality/</link>
<description>Как писать баг-репорты, которые чинят: формула «что сделали, что получили, что ожидали», степень детализации, один дефект — один отчёт, борьба с дубликатами и типичные ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/bug-report-quality/</guid>
<pubDate>Tue, 7 Jul 2026 14:03:39 GMT</pubDate>
</item>
<item>
<title>Поиск первопричины дефекта</title>
<link>https://vikulin-va.ru/qa-manual/root-cause-analysis/</link>
<description>Почему «кнопка не работает» — это симптом, а не дефект: цепочка от проявления к первопричине, алгоритм гипотез и проверок и как исследование меняет качество баг-репорта.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/root-cause-analysis/</guid>
<pubDate>Tue, 7 Jul 2026 15:11:48 GMT</pubDate>
</item>
<item>
<title>Жизненный цикл бага и трекеры (Jira)</title>
<link>https://vikulin-va.ru/qa-manual/bug-lifecycle-trackers/</link>
<description>Путь дефекта от находки до закрытия: статусы бага, кто и когда их меняет, и как это выглядит в трекере вроде Jira — простыми словами для новичка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/bug-lifecycle-trackers/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Тест-менеджмент: TestRail, Qase, Zephyr</title>
<link>https://vikulin-va.ru/qa-manual/test-management-tools/</link>
<description>Зачем нужны системы управления тестами, что такое тест-ран и как в TestRail, Qase или Zephyr хранят тест-кейсы и отмечают результаты прогонов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/test-management-tools/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Основы веб-технологий: HTML, CSS, JavaScript и DOM</title>
<link>https://vikulin-va.ru/qa-manual/web-basics/</link>
<description>Из чего собрана веб-страница простыми словами: HTML — структура, CSS — оформление, JavaScript — поведение, DOM — живое дерево страницы, и зачем это знать тестировщику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/web-basics/</guid>
<pubDate>Sat, 4 Jul 2026 09:41:54 GMT</pubDate>
</item>
<item>
<title>Клиент-сервер и HTTP: как страница общается с сервером</title>
<link>https://vikulin-va.ru/qa-manual/client-server-http/</link>
<description>Клиент-серверная архитектура простыми словами: клиент и сервер, протоколы HTTP и HTTPS, из чего состоят запрос и ответ, HTTP-методы, статус-коды и JSON.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/client-server-http/</guid>
<pubDate>Sat, 4 Jul 2026 09:41:54 GMT</pubDate>
</item>
<item>
<title>DevTools браузера для тестировщика</title>
<link>https://vikulin-va.ru/qa-manual/browser-devtools/</link>
<description>Инструменты разработчика в браузере глазами тестировщика: консоль с ошибками, вкладка Network с запросами и панель Elements — что и зачем там смотреть.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/browser-devtools/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Основы API-тестирования в Postman</title>
<link>https://vikulin-va.ru/qa-manual/api-testing-postman/</link>
<description>Что такое API и зачем его тестировать руками: методы GET и POST, статус-коды, тело запроса и ответа и первые проверки в Postman — простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/api-testing-postman/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Какие бывают API: REST, SOAP и GraphQL</title>
<link>https://vikulin-va.ru/qa-manual/api-styles/</link>
<description>Три стиля API глазами тестировщика: ресурс и метод в REST, XML-конверт и Fault в SOAP, выбор полей и errors в GraphQL — и где искать контракт в OpenAPI и Swagger.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/api-styles/</guid>
<pubDate>Sun, 13 Sep 2026 09:33:13 GMT</pubDate>
</item>
<item>
<title>Основы сетей: как запрос находит сервер</title>
<link>https://vikulin-va.ru/qa-manual/network-basics/</link>
<description>Что происходит между кликом и ответом сервера: адрес, порт и DNS, из чего состоит URL, TCP против UDP, слои сети, прокси и VPN — и чем всё это проверить руками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/network-basics/</guid>
<pubDate>Sun, 13 Sep 2026 09:13:46 GMT</pubDate>
</item>
<item>
<title>Вход в систему: аутентификация, авторизация и токены</title>
<link>https://vikulin-va.ru/qa-manual/auth-and-tokens/</link>
<description>Идентификация, аутентификация и авторизация на одном примере магазина; сессия против токена, JWT и refresh — и что тестировщик проверяет, кроме формы входа.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/auth-and-tokens/</guid>
<pubDate>Sun, 13 Sep 2026 09:13:46 GMT</pubDate>
</item>
<item>
<title>SQL для тестировщика</title>
<link>https://vikulin-va.ru/qa-manual/sql-for-testers/</link>
<description>Зачем тестировщику SQL и минимум запросов для проверки данных: SELECT, WHERE, JOIN и подсчёт строк — чтобы убедиться, что в базе именно то, что ожидалось.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/sql-for-testers/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Кроссбраузерное и мобильное тестирование</title>
<link>https://vikulin-va.ru/qa-manual/cross-browser-mobile/</link>
<description>Почему сайт по-разному выглядит в разных браузерах и на телефонах, что такое адаптивность и как проверять на устройствах и эмуляторах вручную.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/cross-browser-mobile/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Тестирование мобильных приложений</title>
<link>https://vikulin-va.ru/qa-manual/mobile-testing/</link>
<description>Чем телефон отличается от браузера: виды приложений и PWA, прерывания и потеря состояния, офлайн, разрешения, обновление поверх, глубокие ссылки, push и логи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/mobile-testing/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Команды Linux и терминал для тестировщика</title>
<link>https://vikulin-va.ru/qa-manual/linux-terminal/</link>
<description>Зачем тестировщику терминал и минимум команд Linux: навигация по папкам, просмотр файлов и логов (cat, tail, grep), и где потренироваться в онлайн-терминале.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/linux-terminal/</guid>
<pubDate>Sat, 4 Jul 2026 09:41:54 GMT</pubDate>
</item>
<item>
<title>Форматы данных: JSON, XML, YAML и CSV</title>
<link>https://vikulin-va.ru/qa-manual/data-formats/</link>
<description>Четыре упаковки одних и тех же данных: типы и null в JSON, обязательные поля в JSON Schema, атрибуты и префиксы XML, отступы YAML и разделители CSV.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/data-formats/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Логи и наблюдение за системой</title>
<link>https://vikulin-va.ru/qa-manual/logs-and-monitoring/</link>
<description>Уровни DEBUG, INFO, WARN и ERROR, сквозной идентификатор запроса, поиск в Kibana по полю и времени, метрики и дашборды в Grafana — и как понять, чей это дефект.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/logs-and-monitoring/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>QA в Agile и Scrum: роль в спринте</title>
<link>https://vikulin-va.ru/qa-manual/qa-in-agile/</link>
<description>Как устроена работа по Scrum и где в спринте тестировщик: бэклог, планирование, дейли, ревью и ретро — и почему тестирование идёт вместе с разработкой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/qa-in-agile/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Тестирование по требованиям</title>
<link>https://vikulin-va.ru/qa-manual/testing-requirements/</link>
<description>Как проверять то, что описано в задаче: что такое требования и критерии приёмки, почему хорошие требования тестируемы и как задавать вопросы аналитику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/testing-requirements/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Уровни и свойства хороших требований</title>
<link>https://vikulin-va.ru/qa-manual/requirements-quality/</link>
<description>Бизнес-требования, пользовательские и продуктные: зачем тестировщику уровни требований и по каким свойствам проверять их качество — от атомарности до недвусмысленности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/requirements-quality/</guid>
<pubDate>Tue, 7 Jul 2026 09:22:57 GMT</pubDate>
</item>
<item>
<title>Ревью требований: техники и хорошие вопросы</title>
<link>https://vikulin-va.ru/qa-manual/requirements-review/</link>
<description>Как проверять требования до кода: три формы ревью, приём «придумай проверку», разница между плохим и хорошим вопросом и правила работы с чужим документом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/requirements-review/</guid>
<pubDate>Tue, 7 Jul 2026 09:22:57 GMT</pubDate>
</item>
<item>
<title>Как устроена автоматизация: подходы и экономика</title>
<link>https://vikulin-va.ru/qa-manual/automation-basics/</link>
<description>Что стоит за словом «автотесты»: когда автоматизация окупается и когда вредит, лестница подходов от записи действий до BDD и как готовить кейсы к автоматизации.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/automation-basics/</guid>
<pubDate>Tue, 7 Jul 2026 15:46:12 GMT</pubDate>
</item>
<item>
<title>CI/CD: конвейер, тесты и артефакты</title>
<link>https://vikulin-va.ru/qa-manual/ci-for-testers/</link>
<description>Что такое CI/CD и из чего собран конвейер: сборка, модульные тесты, стенд, дымовой набор и отчёт; где в нём автотесты, что такое артефакт и как разбирают красный прогон.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/ci-for-testers/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Git для тестировщика: ветки, коммиты и слияния</title>
<link>https://vikulin-va.ru/qa-manual/git-for-testers/</link>
<description>Git глазами тестировщика: коммит и ветка на пальцах, обычный поток работы, чем merge отличается от rebase, что делать с конфликтом и как найти сборку с правкой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/git-for-testers/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Куда расти дальше в тестировании</title>
<link>https://vikulin-va.ru/qa-manual/where-to-grow/</link>
<description>Пути развития тестировщика: автоматизация, нагрузочное тестирование, безопасность, аналитика и менеджмент — куда двигаться после освоения ручного QA.</description>
<guid isPermaLink="true">https://vikulin-va.ru/qa-manual/where-to-grow/</guid>
<pubDate>Fri, 3 Jul 2026 13:56:37 GMT</pubDate>
</item>
<item>
<title>Что такое база данных и таблицы</title>
<link>https://vikulin-va.ru/sql/what-is-a-database/</link>
<description>Почему данные приложений живут в базе, а не в файлах: что такое СУБД, как устроена таблица, зачем нужен первичный ключ и как таблицы ссылаются друг на друга.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/what-is-a-database/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>SELECT: выбрать, отфильтровать, отсортировать</title>
<link>https://vikulin-va.ru/sql/select-basics/</link>
<description>Первый SQL-запрос: SELECT и FROM, фильтры WHERE, LIKE, IN и BETWEEN, сортировка ORDER BY и ограничение LIMIT: первый запрос целиком, от выборки до порядка строк.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/select-basics/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>JOIN: собрать данные из нескольких таблиц</title>
<link>https://vikulin-va.ru/sql/joins/</link>
<description>Почему данные лежат в разных таблицах и как их соединять: INNER JOIN и LEFT JOIN, условие по ключам, ловушки с потерянными и задвоенными строками и как читать результат соединения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/joins/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>Агрегаты: COUNT, GROUP BY и HAVING</title>
<link>https://vikulin-va.ru/sql/aggregates/</link>
<description>Ответы на вопросы «сколько» и «на какую сумму»: COUNT, SUM, AVG, MIN и MAX, группировка GROUP BY, фильтр групп HAVING, COUNT DISTINCT и типичные ошибки группировки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/aggregates/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>Оконные функции: считать, не схлопывая строки</title>
<link>https://vikulin-va.ru/sql/window-functions/</link>
<description>Когда нужны и строки, и подсчёт по ним: OVER и PARTITION BY, ROW_NUMBER и RANK, последняя запись по каждому клиенту, нарастающий итог, LAG — и когда окно уместнее GROUP BY.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/window-functions/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>NULL и типы данных: где все спотыкаются</title>
<link>https://vikulin-va.ru/sql/null-and-types/</link>
<description>Почему NULL — это не ноль и не пустая строка, как искать его через IS NULL, чем '10' отличается от 10, что знать про даты и типы и какие ошибки с ними всплывают на проде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/null-and-types/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>INSERT, UPDATE, DELETE и транзакции</title>
<link>https://vikulin-va.ru/sql/modifying-data/</link>
<description>Как менять данные и не устроить катастрофу: INSERT, UPDATE и DELETE с обязательным WHERE, ритуал «сначала SELECT», транзакции BEGIN/COMMIT/ROLLBACK как страховка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/modifying-data/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>Подзапросы и CTE: запрос внутри запроса</title>
<link>https://vikulin-va.ru/sql/subqueries/</link>
<description>Подзапрос в WHERE через IN и через сравнение, коррелированный подзапрос и его цена, EXISTS и NOT EXISTS, производная таблица в FROM и WITH, чтобы читать запрос сверху вниз.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/subqueries/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Схема базы данных: таблицы, ключи и представления</title>
<link>https://vikulin-va.ru/sql/ddl-and-views/</link>
<description>Как читать устройство базы: CREATE, ALTER и DROP TABLE, первичный и внешний ключ, каскадное удаление, связующая таблица, CHAR против VARCHAR, VIEW и ACID.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/ddl-and-views/</guid>
<pubDate>Sun, 13 Sep 2026 10:16:34 GMT</pubDate>
</item>
<item>
<title>Почему запрос медленный: индексы на пальцах</title>
<link>https://vikulin-va.ru/sql/slow-queries/</link>
<description>Отчего один запрос отвечает мгновенно, а другой висит минуту: полный перебор таблицы, индекс как оглавление книги, случаи, когда индекс не работает, и первое знакомство с EXPLAIN.</description>
<guid isPermaLink="true">https://vikulin-va.ru/sql/slow-queries/</guid>
<pubDate>Wed, 8 Jul 2026 15:55:42 GMT</pubDate>
</item>
<item>
<title>Что такое Git и зачем он каждому</title>
<link>https://vikulin-va.ru/git/what-is-git/</link>
<description>Git простыми словами: снимки вместо копий папок, три состояния файла, локальный и удалённый репозиторий — и первые команды, с которых начинается любая работа с кодом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/what-is-git/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Коммиты и история: add, commit, log и .gitignore</title>
<link>https://vikulin-va.ru/git/commits-and-history/</link>
<description>Ремесло коммита: атомарные изменения и понятные сообщения, чтение истории через log и diff, поиск виновной строки через blame и что никогда не должно попадать в репозиторий.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/commits-and-history/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Ветки и слияние: merge и конфликты</title>
<link>https://vikulin-va.ru/git/branches-and-merge/</link>
<description>Ветка как передвижная закладка на цепочке коммитов: создание и переключение, fast-forward против merge-коммита и спокойный пошаговый разбор конфликтов слияния.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/branches-and-merge/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Удалённые репозитории: push, pull и fetch</title>
<link>https://vikulin-va.ru/git/remotes/</link>
<description>Как локальный Git общается с сервером: origin и отслеживаемые ветки, разница fetch и pull, отклонённый push и почему force-push в общие ветки запрещён.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/remotes/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Pull request и код-ревью</title>
<link>https://vikulin-va.ru/git/pull-requests/</link>
<description>Как ветка превращается в изменение проекта: оформление pull request, прохождение ревью без обид, доработки по замечаниям и три способа слить — merge, squash, rebase.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/pull-requests/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Rebase и cherry-pick: переписывание истории</title>
<link>https://vikulin-va.ru/git/rebase-and-cherry-pick/</link>
<description>Rebase против merge без религии: перенос ветки на свежее основание, интерактивная приборка коммитов перед ревью, золотое правило «не переписывать отправленное» и cherry-pick.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/rebase-and-cherry-pick/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Отмена и спасение: reset, revert, reflog</title>
<link>https://vikulin-va.ru/git/undo-and-recovery/</link>
<description>Страховочная сетка Git: отменить незакоммиченное через restore, откатить коммиты через reset и revert (и когда какой), спрятать работу в stash и вернуть «потерянное» через reflog.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/undo-and-recovery/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Модели ветвления: Git Flow, GitHub Flow, trunk-based</title>
<link>https://vikulin-va.ru/git/branching-models/</link>
<description>Как команды организуют ветки: тяжеловесный Git Flow с develop и release-ветками, простой GitHub Flow вокруг pull request и trunk-based с фиче-флагами — сравнение и критерии выбора.</description>
<guid isPermaLink="true">https://vikulin-va.ru/git/branching-models/</guid>
<pubDate>Fri, 10 Jul 2026 11:06:26 GMT</pubDate>
</item>
<item>
<title>Принципы CI/CD: конвейер от коммита до прода</title>
<link>https://vikulin-va.ru/cicd/pipeline-principles/</link>
<description>Что такое CI/CD и как он устроен: почему артефакт собирают один раз, зачем держать main зелёным, чем деплой отличается от релиза и как паритет окружений помогает избежать сюрпризов на проде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cicd/pipeline-principles/</guid>
<pubDate>Sat, 6 Jun 2026 18:36:12 GMT</pubDate>
</item>
<item>
<title>CI для Java/Spring: сборка, тесты, quality gates</title>
<link>https://vikulin-va.ru/cicd/ci-java/</link>
<description>Как устроен CI-конвейер для Spring Boot проекта: зачем кешировать Gradle, как запускать тесты в правильном порядке с Testcontainers и какие проверки должны блокировать слияние кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cicd/ci-java/</guid>
<pubDate>Sat, 6 Jun 2026 18:36:12 GMT</pubDate>
</item>
<item>
<title>Стратегии релиза: rolling, blue-green, canary, feature flags</title>
<link>https://vikulin-va.ru/cicd/release-strategies/</link>
<description>Что происходит, когда новый код встречается с реальными пользователями: rolling update, blue-green, canary и feature flags — чем отличаются, когда применять и как быстро откатиться.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cicd/release-strategies/</guid>
<pubDate>Sat, 6 Jun 2026 18:36:12 GMT</pubDate>
</item>
<item>
<title>Ветки и релизный цикл: trunk-based, версии, GitOps</title>
<link>https://vikulin-va.ru/cicd/branching-and-releases/</link>
<description>Простыми словами: почему ветки на месяц ломают CI, что такое trunk-based development, как выбрать между SHA и SemVer, зачем нужен GitOps и как выглядит полная петля от коммита до продакшена.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cicd/branching-and-releases/</guid>
<pubDate>Sat, 6 Jun 2026 18:36:12 GMT</pubDate>
</item>
<item>
<title>ACID и уровни изоляции транзакций в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/acid-and-isolation/</link>
<description>Простыми словами: что такое ACID, почему PostgreSQL никогда не показывает грязные данные, чем отличаются Read Committed, Repeatable Read и Serializable — и когда что выбирать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/acid-and-isolation/</guid>
<pubDate>Mon, 18 May 2026 06:27:24 GMT</pubDate>
</item>
<item>
<title>Партиционирование и шардирование в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/partitioning-and-sharding/</link>
<description>Простым языком: когда таблица перестаёт помещаться в память или на диск и что с этим делать. Как работает партиционирование (RANGE, LIST, HASH), зачем нужен DEFAULT-раздел и чем отличается шардирование.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/partitioning-and-sharding/</guid>
<pubDate>Mon, 18 May 2026 06:22:20 GMT</pubDate>
</item>
<item>
<title>Covering Index в PostgreSQL: зачем нужен INCLUDE</title>
<link>https://vikulin-va.ru/postgres/covering-index/</link>
<description>Что такое covering index и зачем нужен синтаксис INCLUDE: как PostgreSQL читает данные из индекса без обращения к таблице, почему index-only scan иногда всё равно лезет в heap и как это исправить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/covering-index/</guid>
<pubDate>Mon, 25 May 2026 15:09:36 GMT</pubDate>
</item>
<item>
<title>Веса в полнотекстовом поиске PostgreSQL (FTS)</title>
<link>https://vikulin-va.ru/postgres/fts-weights/</link>
<description>Что такое веса A/B/C/D в полнотекстовом поиске PostgreSQL, как setweight делает совпадение в названии важнее совпадения в описании, как хранить tsvector в generated column с GIN-индексом и считать ранг через ts_rank.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/fts-weights/</guid>
<pubDate>Mon, 25 May 2026 15:09:36 GMT</pubDate>
</item>
<item>
<title>Числа в PostgreSQL: bigint, numeric, boolean и как не потерять деньги</title>
<link>https://vikulin-va.ru/postgres/numbers/</link>
<description>Разбираем числовые типы PostgreSQL с нуля: почему bigint для id, как GENERATED ALWAYS AS IDENTITY заменил serial, чем опасен float для денег и когда нужен numeric.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/numbers/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Строковые типы в PostgreSQL: text, varchar и char</title>
<link>https://vikulin-va.ru/postgres/strings/</link>
<description>Разбираемся, почему text — это дефолт в PostgreSQL, когда varchar(n) уместен, чем опасен char(n), как сделать поиск без учёта регистра и что такое TOAST.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/strings/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Время и таймзоны в PostgreSQL — почему timestamptz и как с ним работать</title>
<link>https://vikulin-va.ru/postgres/time/</link>
<description>Что такое timestamptz и почему timestamp без таймзоны ломает данные. Как timestamptz хранит UTC и конвертирует при вводе-выводе. Маппинг на Java, Go, Node, Python. INTERVAL, +infinity и тестируемость.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/time/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>UUID в PostgreSQL: тип uuid, v7 против v4, bigint vs UUID</title>
<link>https://vikulin-va.ru/postgres/uuid/</link>
<description>Почему uuid лучше varchar(36), чем UUID v7 отличается от v4 и зачем это важно для btree-индексов, когда выбрать bigint, а когда UUID — и как генерировать v7 на стороне приложения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/uuid/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Перечисления в PostgreSQL: ENUM, справочник или CHECK</title>
<link>https://vikulin-va.ru/postgres/enum/</link>
<description>Как хранить статусы и перечислимые значения в PostgreSQL: когда выбрать PG ENUM, когда справочную таблицу, когда text + CHECK — и почему boolean не заменяют числом или символом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/enum/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>JSONB в PostgreSQL — что это, как работает и когда применять</title>
<link>https://vikulin-va.ru/postgres/jsonb/</link>
<description>Что такое JSONB в PostgreSQL, чем отличается от json, как хранить гибкие данные без потери скорости, когда JSONB спасает, а когда превращает базу в нечитаемую кашу.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/jsonb/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Массивы и range-типы в PostgreSQL: теги, бронирования, EXCLUDE</title>
<link>https://vikulin-va.ru/postgres/arrays-ranges/</link>
<description>Когда PostgreSQL-массив лучше отдельной таблицы, как range-типы упрощают работу с интервалами и как EXCLUDE constraint заменяет триггеры для защиты от пересекающихся броней.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/arrays-ranges/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Именование объектов в PostgreSQL — snake_case, единственное число, префиксы</title>
<link>https://vikulin-va.ru/postgres/naming/</link>
<description>Как правильно называть таблицы, колонки, индексы и constraints в PostgreSQL: snake_case без кавычек, единственное число для таблиц, префиксы ix_/uk_/fk_/ck_ и суффиксы _at/_amount/_count — с примерами частых ошибок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/naming/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Типы индексов в PostgreSQL — B-tree, GIN, GiST, BRIN</title>
<link>https://vikulin-va.ru/postgres/indexes-types/</link>
<description>Что такое индексы в PostgreSQL и какой тип выбрать: B-tree подходит для большинства запросов, GIN — для JSONB и массивов, GiST — для диапазонов и геометрии, BRIN — для огромных таблиц журналов. С примерами и таблицей выбора.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/indexes-types/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Составные индексы PostgreSQL и правило левого префикса</title>
<link>https://vikulin-va.ru/postgres/indexes-composite/</link>
<description>Составные индексы PostgreSQL: почему индекс есть, но не работает, правило левого префикса, порядок полей (равенство → range → ORDER BY), покрывающий INCLUDE и FK без индекса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/indexes-composite/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Как выбрать индекс и считать селективность в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/indexes-selectivity/</link>
<description>Простыми словами: что такое селективность, почему PostgreSQL иногда игнорирует индекс и делает seq-scan, как читать pg_stats и EXPLAIN ANALYZE, когда помогает составной индекс и как обновлять статистику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/indexes-selectivity/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>EXPLAIN ANALYZE — как читать план запроса PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/explain/</link>
<description>Как пользоваться EXPLAIN ANALYZE в PostgreSQL: что означают узлы плана, как найти узкое место, что делать с Seq Scan, Hash Join и сортировкой на диске — простое объяснение с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/explain/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Блокировки в PostgreSQL: SELECT FOR UPDATE, SKIP LOCKED и advisory locks</title>
<link>https://vikulin-va.ru/postgres/locks/</link>
<description>PostgreSQL блокировки с нуля: зачем нужен SELECT FOR UPDATE, как работает SKIP LOCKED для очереди задач, когда выбрать optimistic вместо pessimistic, что такое advisory lock и как предотвратить deadlock.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/locks/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Уровни изоляции транзакций в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/isolation-levels/</link>
<description>Что такое уровни изоляции транзакций в PostgreSQL, какие аномалии они предотвращают, как выбрать нужный уровень и что делать с ошибкой 40001 — простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/isolation-levels/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Spring @Transactional: как работают транзакции и где они ломаются</title>
<link>https://vikulin-va.ru/postgres/transactional-spring/</link>
<description>Простыми словами: что делает @Transactional и как Spring открывает транзакцию через прокси, где ставить аннотацию и почему не на контроллере, главная ловушка self-invocation, режимы propagation, почему checked-исключения не откатывают и что делать с длинными транзакциями.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/transactional-spring/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Connection pooling в PostgreSQL — HikariCP, PgBouncer и формула Wooldridge</title>
<link>https://vikulin-va.ru/postgres/connection-pool/</link>
<description>Почему PostgreSQL держит отдельный процесс ОС на каждое соединение, как правильно выбрать размер пула по формуле Wooldridge, какие параметры настраивать и когда добавлять PgBouncer.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/connection-pool/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Миграции PostgreSQL без остановки сервиса</title>
<link>https://vikulin-va.ru/postgres/migrations/</link>
<description>Как менять схему PostgreSQL без остановки сервиса: почему ALTER TABLE блокирует всё, что такое Expand-Contract и N-1 совместимость, как безопасно добавлять индексы, внешние ключи и переименовывать колонки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/migrations/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Полнотекстовый поиск в PostgreSQL — tsvector, GIN, russian</title>
<link>https://vikulin-va.ru/postgres/fts/</link>
<description>Как устроен полнотекстовый поиск в PostgreSQL: tsvector и tsquery, GIN-индекс, стемминг по-русски, ранжирование через ts_rank, подсветка совпадений и нечёткий поиск с pg_trgm.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/fts/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Materialized views в PostgreSQL: как работают и когда использовать</title>
<link>https://vikulin-va.ru/postgres/materialized-views/</link>
<description>Materialized view — это сохранённый результат тяжёлого запроса. Объясняем, зачем нужен, как правильно обновлять без блокировок, и когда вместо него лучше другое решение.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/materialized-views/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Партиционирование в PostgreSQL: когда нужно и как устроено</title>
<link>https://vikulin-va.ru/postgres/partitioning/</link>
<description>Что такое партиционирование в PostgreSQL, зачем оно нужно и когда без него лучше обойтись. Разбираем типы RANGE/LIST/HASH, выбор ключа, управление партициями через pg_partman и главный практический плюс — мгновенное удаление старых данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/partitioning/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Multi-tenancy в PostgreSQL: row, schema, db per tenant</title>
<link>https://vikulin-va.ru/postgres/multi-tenancy/</link>
<description>Три способа хранить данные нескольких клиентов в PostgreSQL: общая таблица с tenant_id, отдельные схемы или отдельные базы. Объясняем разницу, когда что выбрать и как не допустить утечку данных между клиентами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/multi-tenancy/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>PostGIS: геоданные в PostgreSQL — точки, полигоны, поиск в радиусе</title>
<link>https://vikulin-va.ru/postgres/postgis/</link>
<description>PostGIS — расширение для хранения и запроса геоданных прямо в PostgreSQL: поиск в радиусе, проверка вхождения в полигон, ближайшие N точек. Объясняем с нуля: типы, индексы, частые ошибки и примеры на Java, Go, Node, Python.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/postgis/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Репликация PostgreSQL: read-replica и маршрутизация запросов</title>
<link>https://vikulin-va.ru/postgres/replication/</link>
<description>Виды репликации PostgreSQL — потоковая, синхронная, каскадная, логическая, CDC — с преимуществами и недостатками, плюс read-replica, маршрутизация запросов и ловушка read-after-write.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/replication/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Расширения PostgreSQL: pg_trgm, pgcrypto, pg_stat_statements и другие</title>
<link>https://vikulin-va.ru/postgres/extensions/</link>
<description>Что такое расширения PostgreSQL, какие из них стоит включать на любом проекте и зачем: pg_stat_statements, pgcrypto, pg_trgm, btree_gist, citext, pg_partman, pg_repack — объяснение с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/extensions/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Триггеры и хранимые процедуры PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/triggers/</link>
<description>Что такое триггеры и хранимые процедуры в PostgreSQL, как они работают, когда их применять оправданно, а когда лучше обойтись кодом приложения — простое объяснение с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/triggers/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>VACUUM, autovacuum и bloat в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/vacuum/</link>
<description>Почему таблицы в PostgreSQL распухают со временем, как VACUUM освобождает место от мёртвых строк, что такое bloat и XID wraparound, и когда autovacuum перестаёт справляться.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/vacuum/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Мониторинг PostgreSQL: slow queries, активность и ключевые метрики</title>
<link>https://vikulin-va.ru/postgres/monitoring/</link>
<description>Как понять, что происходит внутри PostgreSQL: pg_stat_statements для поиска медленных запросов, pg_stat_activity для текущих сессий, auto_explain для автоматических планов, и какие метрики важно держать на дашборде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/monitoring/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Отчёт нагрузки PostgreSQL: как читать и ставить диагноз</title>
<link>https://vikulin-va.ru/postgres/workload-report/</link>
<description>Снимки статистики и отчёт за период — то же, чем в Oracle служит AWR. Как устроены pg_profile и pgpro_pwr, в каком порядке читать разделы отчёта, как от чисел дойти до причины и какие ловушки чтения дают ложный диагноз.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/workload-report/</guid>
<pubDate>Tue, 1 Sep 2026 05:25:29 GMT</pubDate>
</item>
<item>
<title>Отчёт нагрузки своими руками: запросы по каждому разделу</title>
<link>https://vikulin-va.ru/postgres/workload-report-queries/</link>
<description>Разбираем отчёт по разделам и для каждого показываем запрос, который его порождает: нагрузка, ожидания, ASH, блокировки, обслуживание, топы SQL, чекпоинты и возраст базы. Что означают колонки, на что смотреть и где ловушки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/workload-report-queries/</guid>
<pubDate>Tue, 1 Sep 2026 05:46:35 GMT</pubDate>
</item>
<item>
<title>Резервные копии PostgreSQL: pg_dump, pg_basebackup и PITR</title>
<link>https://vikulin-va.ru/postgres/backup/</link>
<description>Что такое логический и физический backup в PostgreSQL, когда использовать pg_dump, а когда pg_basebackup, как работает восстановление на момент времени (PITR) и какие правила нужно соблюдать, чтобы backup действительно спас.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/backup/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>WAL в PostgreSQL: что это и как влиять на объём журнала</title>
<link>https://vikulin-va.ru/postgres/wal/</link>
<description>Что такое Write-Ahead Log в PostgreSQL, почему UPDATE пишет строку целиком, как HOT и fillfactor сокращают WAL, чем COPY быстрее INSERT, и какие ошибки разработчика заставляют журнал расти бесконтрольно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/wal/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Анонимизация дампа PostgreSQL для разработчика</title>
<link>https://vikulin-va.ru/postgres/anonymization/</link>
<description>Как передать разработчику дамп производственной базы без нарушения закона: что такое PII, шесть стратегий анонимизации, полный пример скрипта, postgresql_anonymizer и защита от re-identification.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/anonymization/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>Частые ошибки при выборе типов в PostgreSQL</title>
<link>https://vikulin-va.ru/postgres/antipatterns/</link>
<description>Разбираем 14 типичных ошибок при проектировании схемы PostgreSQL: varchar(255), timestamp без таймзоны, float для денег, PG ENUM, JSONB вместо колонок — и как делать правильно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/postgres/antipatterns/</guid>
<pubDate>Sat, 27 Jun 2026 18:54:43 GMT</pubDate>
</item>
<item>
<title>ACID, read и write concerns, транзакции в MongoDB на Go</title>
<link>https://vikulin-va.ru/mongodb/go/acid-and-consistency/</link>
<description>Простыми словами: что такое ACID в MongoDB, почему один документ атомарен, зачем write и read concern, как открыть транзакцию и causal consistency из Go через mongo-go-driver.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/go/acid-and-consistency/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>ACID, read и write concerns, транзакции в MongoDB на TypeScript</title>
<link>https://vikulin-va.ru/mongodb/node/acid-and-consistency/</link>
<description>Что такое ACID в MongoDB с примерами на TypeScript: атомарность документа, write concern и read concern, многодокументные транзакции через Node.js-драйвер, causal consistency.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/node/acid-and-consistency/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>ACID, read и write concerns, транзакции в MongoDB</title>
<link>https://vikulin-va.ru/mongodb/acid-and-consistency/</link>
<description>Простыми словами: что такое ACID в MongoDB, почему один документ всегда атомарен, когда нужны write concern и read concern, как работают многодокументные транзакции и что такое causal consistency.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/acid-and-consistency/</guid>
<pubDate>Mon, 18 May 2026 06:59:05 GMT</pubDate>
</item>
<item>
<title>Репликация и шардинг в MongoDB</title>
<link>https://vikulin-va.ru/mongodb/replication-and-sharding/</link>
<description>Как MongoDB хранит данные на нескольких серверах: что такое replica set и oplog, как происходит переключение при сбое, когда переходить на шардинг и как выбрать shard key чтобы нагрузка распределялась равномерно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/replication-and-sharding/</guid>
<pubDate>Mon, 18 May 2026 06:59:05 GMT</pubDate>
</item>
<item>
<title>Моделирование документов в MongoDB: embed vs reference, индексы</title>
<link>https://vikulin-va.ru/mongodb/schema-modeling/</link>
<description>Как хранить связанные данные в MongoDB: когда вкладывать данные в документ, а когда ссылаться по id, как работают шесть видов индексов и зачем нужна JSON Schema валидация.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/schema-modeling/</guid>
<pubDate>Mon, 18 May 2026 06:59:05 GMT</pubDate>
</item>
<item>
<title>ACID, read и write concerns, транзакции в MongoDB на Python</title>
<link>https://vikulin-va.ru/mongodb/python/acid-and-consistency/</link>
<description>Простыми словами: что такое ACID в MongoDB, почему документ атомарен, когда нужны write и read concern, как работают транзакции в Python с Motor и что такое causal consistency.</description>
<guid isPermaLink="true">https://vikulin-va.ru/mongodb/python/acid-and-consistency/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Как устроен Neo4j: property graph, узлы, рёбра и обход без индексов</title>
<link>https://vikulin-va.ru/neo4j/fundamentals/</link>
<description>Простыми словами: из чего состоит property graph (узлы, рёбра, свойства, метки), почему обход связей в Neo4j дёшев благодаря index-free adjacency и чем это отличается от JOIN в реляционной базе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/neo4j/fundamentals/</guid>
<pubDate>Mon, 17 Aug 2026 09:17:01 GMT</pubDate>
</item>
<item>
<title>Cypher: язык запросов к графу простыми словами</title>
<link>https://vikulin-va.ru/neo4j/cypher/</link>
<description>Как читать и писать запросы на Cypher: шаблоны связей (node)-[:REL]-&gt;(node), MATCH и WHERE, пути переменной длины, создание и обновление через CREATE и MERGE.</description>
<guid isPermaLink="true">https://vikulin-va.ru/neo4j/cypher/</guid>
<pubDate>Mon, 17 Aug 2026 09:17:01 GMT</pubDate>
</item>
<item>
<title>Neo4j: моделирование графа, индексы и эксплуатация</title>
<link>https://vikulin-va.ru/neo4j/modeling-and-operations/</link>
<description>Как проектировать граф от запросов, а не от сущностей: узел или свойство, направление связи, индексы и ограничения уникальности; и как Neo4j живёт в проде — память, бэкапы, когда нужна репликация.</description>
<guid isPermaLink="true">https://vikulin-va.ru/neo4j/modeling-and-operations/</guid>
<pubDate>Mon, 17 Aug 2026 09:17:01 GMT</pubDate>
</item>
<item>
<title>Архитектура Cassandra: кольцо без главного узла</title>
<link>https://vikulin-va.ru/cassandra/architecture/</link>
<description>Как устроена Cassandra изнутри: masterless-кольцо и партиционирование по токенам, gossip, путь записи через commit log, memtable и SSTable, compaction и tombstones, репликация по нескольким дата-центрам.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cassandra/architecture/</guid>
<pubDate>Sun, 19 Jul 2026 20:29:44 GMT</pubDate>
</item>
<item>
<title>Модель данных Cassandra: partition key и clustering columns</title>
<link>https://vikulin-va.ru/cassandra/data-model/</link>
<description>Как устроена модель данных Cassandra: wide-column-строки, из чего состоит первичный ключ (partition key и clustering columns), почему таблицы проектируют от запросов и денормализуют, что можно и нельзя писать в CQL.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cassandra/data-model/</guid>
<pubDate>Sun, 19 Jul 2026 20:29:44 GMT</pubDate>
</item>
<item>
<title>Согласованность и репликация в Cassandra</title>
<link>https://vikulin-va.ru/cassandra/consistency-and-replication/</link>
<description>Настраиваемая согласованность Cassandra простыми словами: replication factor, уровни согласованности (ONE, QUORUM, LOCAL_QUORUM, ALL), правило R + W &gt; RF для строгого чтения, hinted handoff, read repair, облегчённые транзакции и чего Cassandra не гарантирует.</description>
<guid isPermaLink="true">https://vikulin-va.ru/cassandra/consistency-and-replication/</guid>
<pubDate>Sun, 19 Jul 2026 20:29:44 GMT</pubDate>
</item>
<item>
<title>Spring DI/IoC, bean scopes</title>
<link>https://vikulin-va.ru/spring/di-and-lifecycle/</link>
<description>Как Spring создаёт и связывает объекты: ApplicationContext, BeanFactory, скоупы (singleton, prototype, request, session), @Configuration vs @Component, условные бины, BeanPostProcessor, циклические зависимости. Жизненный цикл бина — отдельная статья.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/di-and-lifecycle/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Жизненный цикл Spring-бина с примерами</title>
<link>https://vikulin-va.ru/spring/bean-lifecycle/</link>
<description>Простыми словами: как Spring создаёт бин и в каком порядке внедряет зависимости и вызывает @PostConstruct, чем @PostConstruct отличается от InitializingBean и init-метода, что происходит при остановке (@PreDestroy, DisposableBean) и почему в конструкторе зависимости из полей ещё null.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/bean-lifecycle/</guid>
<pubDate>Mon, 18 May 2026 09:45:26 GMT</pubDate>
</item>
<item>
<title>Spring Boot auto-configuration, properties, profiles</title>
<link>https://vikulin-va.ru/spring/boot-auto-configuration/</link>
<description>Как Spring Boot собирает ApplicationContext автоматически: @EnableAutoConfiguration, AutoConfiguration.imports, условные бины, externalized configuration, @ConfigurationProperties vs @Value, профили, как написать собственный starter.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/boot-auto-configuration/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring MVC: контроллеры, REST, валидация и обработка ошибок</title>
<link>https://vikulin-va.ru/spring/mvc/</link>
<description>Простыми словами: как Spring MVC доводит HTTP-запрос до нужного метода, что делает DispatcherServlet, как писать REST-контроллеры (@RestController, @GetMapping, @PathVariable, @RequestBody), проверять данные через Bean Validation и возвращать понятные ошибки в одном месте.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/mvc/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring WebFlux: когда брать, Mono/Flux, R2DBC</title>
<link>https://vikulin-va.ru/spring/webflux/</link>
<description>Reactive-стек Spring: чем отличается от Spring MVC, когда оправдан, основные типы Mono/Flux, особенности контроллеров и репозиториев (R2DBC), типичные ловушки (block, threadlocal, context propagation), границы применимости с виртуальными потоками Java 21+.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/webflux/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>@Transactional в Spring: транзакции, propagation, ловушки</title>
<link>https://vikulin-va.ru/spring/transactional/</link>
<description>Простыми словами: что такое транзакция и зачем @Transactional, как она работает через прокси и почему ломается на вызовах через this и private-методах, какие бывают режимы propagation, что такое isolation и rollback, почему checked-исключения не откатывают и зачем readOnly.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/transactional/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Data JPA: репозитории, запросы по имени, проекции, N+1</title>
<link>https://vikulin-va.ru/spring/data-jpa/</link>
<description>Простыми словами: что делает Spring Data JPA, как из имени метода рождается запрос, когда писать @Query, что такое проекции, чем Page отличается от Slice, откуда берётся проблема N+1 и как её лечить, и зачем выключают Open Session In View.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/data-jpa/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Events: @EventListener, @TransactionalEventListener, асинхронные события</title>
<link>https://vikulin-va.ru/spring/events/</link>
<description>Простыми словами про события внутри Spring-приложения: зачем они нужны, как опубликовать событие через ApplicationEventPublisher и поймать через @EventListener, чем синхронный слушатель отличается от @Async, и почему @TransactionalEventListener привязывает обработку к фазе транзакции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/events/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring AOP: аспекты, прокси и почему @Transactional иногда молчит</title>
<link>https://vikulin-va.ru/spring/aop/</link>
<description>Простыми словами: что такое аспект, pointcut и advice, как Spring оборачивает бины в прокси (JDK proxy и CGLIB), зачем нужен @Aspect и почему @Transactional или @Cacheable иногда не срабатывают при вызове метода изнутри того же класса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/aop/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Security: фильтры, AuthN, AuthZ, OAuth2</title>
<link>https://vikulin-va.ru/spring/security/</link>
<description>Архитектура Spring Security: SecurityFilterChain, аутентификация vs авторизация, OAuth2 Resource Server (валидация JWT), OAuth2 Client (получение токена), method security (@PreAuthorize/@PostAuthorize), CSRF, session management, типичные конфигурации для REST-сервиса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/security/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Testing: @SpringBootTest, слайсы, TestContainers</title>
<link>https://vikulin-va.ru/spring/testing/</link>
<description>Пирамида тестов в Spring: unit-тесты без контекста, слайсы (@WebMvcTest, @DataJpaTest, @JsonTest), полный интеграционный @SpringBootTest, MockMvc и WebTestClient, тестирование транзакций и rollback, TestContainers для реальной БД/Kafka/RabbitMQ.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/testing/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Actuator, Micrometer, трейсинг</title>
<link>https://vikulin-va.ru/spring/actuator-observability/</link>
<description>Spring Boot Actuator: health, info, custom endpoints, security. Micrometer как абстракция над метриками (Counter, Timer, Gauge), connectors к Prometheus/CloudWatch/Datadog. Distributed tracing через Micrometer Tracing + OpenTelemetry. Структурированное логирование с correlation ID.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/actuator-observability/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Spring Scheduled, Async, виртуальные потоки</title>
<link>https://vikulin-va.ru/spring/scheduled-and-async/</link>
<description>Spring @Scheduled (cron, fixedDelay, fixedRate) и @Async для асинхронных операций. Пулы потоков (TaskExecutor, TaskScheduler), стандартные ловушки (self-invocation, exception swallowing). Виртуальные потоки Java 21+ в Spring Boot 3.2+: что меняют, когда WebFlux всё ещё нужен.</description>
<guid isPermaLink="true">https://vikulin-va.ru/spring/scheduled-and-async/</guid>
<pubDate>Mon, 18 May 2026 09:08:39 GMT</pubDate>
</item>
<item>
<title>Структура проекта и проводка зависимостей в Go</title>
<link>https://vikulin-va.ru/go/project-structure-and-wiring/</link>
<description>Как устроен Go-сервис: раскладка пакетов вокруг cmd/ и internal/, почему в Go нет DI-контейнера и как вместо него граф зависимостей собирают руками в main, конфигурация из переменных окружения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/project-structure-and-wiring/</guid>
<pubDate>Wed, 24 Jun 2026 14:02:53 GMT</pubDate>
</item>
<item>
<title>Роутинг в Go: net/http и chi</title>
<link>https://vikulin-va.ru/go/routing-with-chi/</link>
<description>Как устроен роутинг в Go: стандартный net/http, почему берут chi, URL-параметры, группы маршрутов и middleware — простым языком с примерами кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/routing-with-chi/</guid>
<pubDate>Wed, 24 Jun 2026 14:03:31 GMT</pubDate>
</item>
<item>
<title>Обработчики и JSON в Go</title>
<link>https://vikulin-va.ru/go/handlers-and-json/</link>
<description>Как работают обработчики HTTP-запросов в Go: читаем тело запроса, декодируем JSON, формируем ответ — без магии биндинга, явно и предсказуемо.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/handlers-and-json/</guid>
<pubDate>Wed, 24 Jun 2026 14:04:10 GMT</pubDate>
</item>
<item>
<title>Валидация в Go</title>
<link>https://vikulin-va.ru/go/validation/</link>
<description>Как проверять входящие данные в Go: библиотека go-playground/validator с тегами на структурах, ручная проверка для сложных правил, граница между форматом данных и бизнес-правилами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/validation/</guid>
<pubDate>Wed, 24 Jun 2026 14:04:45 GMT</pubDate>
</item>
<item>
<title>Middleware</title>
<link>https://vikulin-va.ru/go/middleware/</link>
<description>Что такое middleware в Go, зачем он нужен и как работает: цепочка обёрток вокруг http.Handler, логирование, восстановление после паники, идентификатор запроса — на net/http и chi.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/middleware/</guid>
<pubDate>Wed, 24 Jun 2026 14:05:20 GMT</pubDate>
</item>
<item>
<title>Context и отмена в Go</title>
<link>https://vikulin-va.ru/go/context-and-cancellation/</link>
<description>Что такое context.Context в Go, зачем он нужен, как ставить таймауты и дедлайны, как правильно пробрасывать контекст до базы и почему нельзя его обрывать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/context-and-cancellation/</guid>
<pubDate>Wed, 24 Jun 2026 14:06:05 GMT</pubDate>
</item>
<item>
<title>Ошибки в Go и перевод в HTTP</title>
<link>https://vikulin-va.ru/go/errors-and-http/</link>
<description>Как Go работает с ошибками без исключений: явная передача error, контекст через %w, sentinel-ошибки, errors.Is и errors.As, panic и recover, перевод доменных ошибок в HTTP-коды.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/errors-and-http/</guid>
<pubDate>Wed, 24 Jun 2026 14:06:46 GMT</pubDate>
</item>
<item>
<title>Аутентификация и авторизация в Go</title>
<link>https://vikulin-va.ru/go/auth/</link>
<description>Как устроена аутентификация и авторизация в Go: JWT-токены, middleware-цепочка, пользователь в context и проверка прав доступа — без отдельного фреймворка, из явных деталей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/auth/</guid>
<pubDate>Wed, 24 Jun 2026 14:07:29 GMT</pubDate>
</item>
<item>
<title>Персистентность в Go: sqlc и pgx</title>
<link>https://vikulin-va.ru/go/persistence-sqlc/</link>
<description>Как Go-сервис работает с PostgreSQL: sqlc генерирует типобезопасный код из обычного SQL, pgx управляет соединениями, транзакции оборачивают логику целиком. Без ORM и без магии.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/persistence-sqlc/</guid>
<pubDate>Wed, 24 Jun 2026 14:08:17 GMT</pubDate>
</item>
<item>
<title>Конкурентность и graceful shutdown в Go</title>
<link>https://vikulin-va.ru/go/concurrency-and-shutdown/</link>
<description>Горутины, каналы, errgroup, worker pool и корректная остановка сервиса через http.Server.Shutdown — как Go управляет параллельной работой и завершением.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/concurrency-and-shutdown/</guid>
<pubDate>Wed, 24 Jun 2026 14:08:59 GMT</pubDate>
</item>
<item>
<title>Тестирование в Go</title>
<link>https://vikulin-va.ru/go/testing/</link>
<description>Как тестировать Go-код с нуля: пакет testing, table-driven тесты, проверка HTTP-обработчиков через httptest, подмена зависимостей через интерфейсы и тесты с реальной базой данных через testcontainers.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/testing/</guid>
<pubDate>Wed, 24 Jun 2026 14:09:37 GMT</pubDate>
</item>
<item>
<title>Наблюдаемость Go-сервиса: логи, трейсы, метрики, health-checks</title>
<link>https://vikulin-va.ru/go/observability/</link>
<description>Как понять, что происходит внутри Go-сервиса в продакшене: структурные логи через slog, трейсинг OpenTelemetry, метрики Prometheus и health-checks для Kubernetes — с примерами кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/go/observability/</guid>
<pubDate>Wed, 24 Jun 2026 14:10:19 GMT</pubDate>
</item>
<item>
<title>Модули и Dependency Injection в NestJS</title>
<link>https://vikulin-va.ru/nestjs/modules-and-di/</link>
<description>Простыми словами: зачем NestJS нужен DI-контейнер, что такое провайдер и модуль, чем отличаются scopes и как работают динамические модули.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/modules-and-di/</guid>
<pubDate>Wed, 24 Jun 2026 09:39:06 GMT</pubDate>
</item>
<item>
<title>Контроллеры и роутинг в NestJS</title>
<link>https://vikulin-va.ru/nestjs/controllers-and-routing/</link>
<description>Простыми словами: как NestJS сопоставляет HTTP-маршруты методам контроллера, как доставать данные из пути, строки запроса и тела, зачем нужен декоратор HttpCode и почему логику оставляют за пределами контроллера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/controllers-and-routing/</guid>
<pubDate>Wed, 24 Jun 2026 09:39:51 GMT</pubDate>
</item>
<item>
<title>Валидация и pipes в NestJS</title>
<link>https://vikulin-va.ru/nestjs/validation-and-pipes/</link>
<description>Что такое pipe в NestJS, как работает ValidationPipe с class-validator, зачем нужны whitelist и transform, как написать свой pipe — простыми словами с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/validation-and-pipes/</guid>
<pubDate>Wed, 24 Jun 2026 09:40:32 GMT</pubDate>
</item>
<item>
<title>Guards: аутентификация и авторизация в NestJS</title>
<link>https://vikulin-va.ru/nestjs/guards-and-auth/</link>
<description>Что такое guard в NestJS, как защитить маршрут JWT-токеном через Passport, как проверять роли через Reflector и где граница между guard и бизнес-логикой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/guards-and-auth/</guid>
<pubDate>Wed, 24 Jun 2026 09:41:18 GMT</pubDate>
</item>
<item>
<title>Interceptors: сквозная логика в NestJS</title>
<link>https://vikulin-va.ru/nestjs/interceptors/</link>
<description>Что такое interceptor в NestJS, как он оборачивает обработку запроса, зачем нужен RxJS внутри, как трансформировать ответ и логировать тайминги — без дублирования в каждом контроллере.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/interceptors/</guid>
<pubDate>Wed, 24 Jun 2026 09:41:59 GMT</pubDate>
</item>
<item>
<title>Exception filters: обработка ошибок</title>
<link>https://vikulin-va.ru/nestjs/exception-filters/</link>
<description>Что такое exception filters в NestJS, как они перехватывают исключения и превращают их в HTTP-ответы, зачем нужен единый формат ошибок и как отделить доменные исключения от протокольных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/exception-filters/</guid>
<pubDate>Wed, 24 Jun 2026 09:42:37 GMT</pubDate>
</item>
<item>
<title>NestJS: конфигурация и жизненный цикл приложения</title>
<link>https://vikulin-va.ru/nestjs/config-and-lifecycle/</link>
<description>Как правильно читать настройки из переменных окружения через ConfigModule, проверять их на старте и управлять ресурсами через lifecycle-хуки — onModuleInit, onApplicationShutdown и graceful shutdown.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/config-and-lifecycle/</guid>
<pubDate>Wed, 24 Jun 2026 09:43:21 GMT</pubDate>
</item>
<item>
<title>Персистентность: TypeORM</title>
<link>https://vikulin-va.ru/nestjs/persistence-typeorm/</link>
<description>Как NestJS работает с базой данных через TypeORM: подключение, описание таблиц сущностями, запросы через репозитории, транзакции и миграции схемы — от нуля до рабочего примера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/persistence-typeorm/</guid>
<pubDate>Wed, 24 Jun 2026 09:44:07 GMT</pubDate>
</item>
<item>
<title>Async, расписание и фоновые задачи в NestJS</title>
<link>https://vikulin-va.ru/nestjs/async-and-tasks/</link>
<description>Как работает асинхронность в NestJS: async-провайдеры для старта приложения, задачи по расписанию через @nestjs/schedule, очереди на BullMQ — и когда что выбрать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/async-and-tasks/</guid>
<pubDate>Wed, 24 Jun 2026 09:44:49 GMT</pubDate>
</item>
<item>
<title>Тестирование NestJS: Jest, тестовый модуль и e2e</title>
<link>https://vikulin-va.ru/nestjs/testing/</link>
<description>Как тестировать NestJS-приложения с нуля: тестовый модуль через Test.createTestingModule, замена провайдеров на моки, сквозные HTTP-тесты через supertest и работа с реальной базой данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/testing/</guid>
<pubDate>Wed, 24 Jun 2026 09:45:27 GMT</pubDate>
</item>
<item>
<title>Наблюдаемость в NestJS: логи, трейсы, метрики и health-checks</title>
<link>https://vikulin-va.ru/nestjs/observability/</link>
<description>Как устроена наблюдаемость в NestJS с нуля: структурные логи через Logger и nestjs-pino, health-checks для Kubernetes через @nestjs/terminus, трейсинг OpenTelemetry и метрики Prometheus.</description>
<guid isPermaLink="true">https://vikulin-va.ru/nestjs/observability/</guid>
<pubDate>Wed, 24 Jun 2026 09:46:06 GMT</pubDate>
</item>
<item>
<title>Структура приложения и конфигурация FastAPI</title>
<link>https://vikulin-va.ru/fastapi/app-structure-and-config/</link>
<description>Как устроено FastAPI-приложение изнутри: объект FastAPI и APIRouter, управление ресурсами через lifespan, типизированная конфигурация через pydantic-settings, удобная раскладка кода по пакетам.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/app-structure-and-config/</guid>
<pubDate>Wed, 24 Jun 2026 07:10:25 GMT</pubDate>
</item>
<item>
<title>Dependency Injection в FastAPI: Depends</title>
<link>https://vikulin-va.ru/fastapi/dependency-injection/</link>
<description>Что такое Depends в FastAPI, как работает дерево зависимостей, зачем нужны yield-зависимости и как подменить зависимость в тестах — объясняем с нуля на примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/dependency-injection/</guid>
<pubDate>Wed, 24 Jun 2026 07:11:16 GMT</pubDate>
</item>
<item>
<title>Роутинг и обработка запросов</title>
<link>https://vikulin-va.ru/fastapi/routing-and-requests/</link>
<description>Как работает роутинг в FastAPI: path operations, APIRouter, параметры пути и запроса, тело запроса, response_model и статус-коды — простым языком с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/routing-and-requests/</guid>
<pubDate>Wed, 24 Jun 2026 07:22:01 GMT</pubDate>
</item>
<item>
<title>Pydantic: валидация и сериализация</title>
<link>https://vikulin-va.ru/fastapi/pydantic-validation/</link>
<description>Pydantic v2 в FastAPI — простыми словами: зачем нужны модели, как устроены валидаторы field_validator и model_validator, как работает сериализация и почему важно разделять модели запроса и ответа.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/pydantic-validation/</guid>
<pubDate>Wed, 24 Jun 2026 07:22:46 GMT</pubDate>
</item>
<item>
<title>Async и конкурентность</title>
<link>https://vikulin-va.ru/fastapi/async-and-concurrency/</link>
<description>Как работает асинхронность в FastAPI: event loop, разница между async def и def, threadpool для синхронного кода, async-клиенты и главная ловушка блокировки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/async-and-concurrency/</guid>
<pubDate>Wed, 24 Jun 2026 07:23:34 GMT</pubDate>
</item>
<item>
<title>Middleware и обработка ошибок</title>
<link>https://vikulin-va.ru/fastapi/middleware-and-errors/</link>
<description>Простыми словами: что такое middleware в FastAPI, как работает цепочка вызовов, зачем нужны обработчики исключений и как настроить единый формат ошибок для всего API.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/middleware-and-errors/</guid>
<pubDate>Wed, 24 Jun 2026 07:24:27 GMT</pubDate>
</item>
<item>
<title>Фоновые задачи и расписание в FastAPI</title>
<link>https://vikulin-va.ru/fastapi/background-tasks/</link>
<description>Что такое BackgroundTasks в FastAPI, где он работает хорошо, а где теряет данные — и как выбрать между встроенным механизмом и внешней очередью задач вроде arq или Celery.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/background-tasks/</guid>
<pubDate>Wed, 24 Jun 2026 07:25:14 GMT</pubDate>
</item>
<item>
<title>SQLAlchemy и Alembic во FastAPI</title>
<link>https://vikulin-va.ru/fastapi/persistence-sqlalchemy/</link>
<description>Как подключить SQLAlchemy 2.0 к FastAPI: создание async-движка, декларативные модели через Mapped, сессия на запрос через Depends, управление транзакциями и миграции схемы через Alembic.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/persistence-sqlalchemy/</guid>
<pubDate>Wed, 24 Jun 2026 07:26:27 GMT</pubDate>
</item>
<item>
<title>Аутентификация и авторизация во FastAPI</title>
<link>https://vikulin-va.ru/fastapi/security/</link>
<description>Как защитить FastAPI-приложение: OAuth2 и JWT простыми словами, как получить текущего пользователя через зависимость, как проверять роли и почему нельзя доверять телу запроса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/security/</guid>
<pubDate>Wed, 24 Jun 2026 07:27:27 GMT</pubDate>
</item>
<item>
<title>Тестирование FastAPI</title>
<link>https://vikulin-va.ru/fastapi/testing/</link>
<description>Как тестировать FastAPI с нуля: TestClient для синхронных тестов, httpx.AsyncClient для асинхронных, pytest-фикстуры, подмена зависимостей через dependency_overrides и тестовая база данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/testing/</guid>
<pubDate>Wed, 24 Jun 2026 07:28:10 GMT</pubDate>
</item>
<item>
<title>Наблюдаемость во FastAPI</title>
<link>https://vikulin-va.ru/fastapi/observability/</link>
<description>Как сделать FastAPI-сервис наблюдаемым: структурные логи в JSON, трейсинг через OpenTelemetry, метрики Prometheus и правильные health-checks для Kubernetes — с примерами кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/fastapi/observability/</guid>
<pubDate>Wed, 24 Jun 2026 07:29:00 GMT</pubDate>
</item>
<item>
<title>Модели разработки: от Waterfall к Agile</title>
<link>https://vikulin-va.ru/methodologies/models/</link>
<description>Как менялись подходы к организации разработки: Waterfall, V-модель, итеративная разработка и Agile. Разбираем, где каждая ломается и как выбрать под задачу.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/models/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>Scrum: роли, события и артефакты</title>
<link>https://vikulin-va.ru/methodologies/scrum/</link>
<description>Scrum простыми словами: короткие итерации sprint, три роли, четыре артефакта и пять событий. Как устроен каркас и какие ошибки его ломают.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/scrum/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>Kanban: поток, WIP-лимиты и вытягивание</title>
<link>https://vikulin-va.ru/methodologies/kanban/</link>
<description>Kanban как управление потоком работы: доска и колонки-этапы, WIP-лимиты и закон Литтла, вытягивание вместо выталкивания, метрики lead time и throughput.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/kanban/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>Extreme Programming: инженерные практики Agile</title>
<link>https://vikulin-va.ru/methodologies/xp/</link>
<description>Что такое Extreme Programming (XP): TDD, парное программирование, CI, рефакторинг и простой дизайн — практики, которые делают частые релизы безопасными.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/xp/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>Оценка и планирование: story points и velocity</title>
<link>https://vikulin-va.ru/methodologies/estimation/</link>
<description>Почему оценка в часах врёт, что такое story points и Planning Poker, как velocity помогает прогнозировать спринты и почему её нельзя использовать как метрику продуктивности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/estimation/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>Масштабирование Agile: SAFe и LeSS</title>
<link>https://vikulin-va.ru/methodologies/scaling/</link>
<description>Как Agile работает, когда команд не одна, а десятки: зависимости и общий backlog, фреймворки SAFe и LeSS, Spotify-модель и главный принцип масштабирования.</description>
<guid isPermaLink="true">https://vikulin-va.ru/methodologies/scaling/</guid>
<pubDate>Fri, 14 Aug 2026 12:08:07 GMT</pubDate>
</item>
<item>
<title>SOLID: пять принципов проектирования на Go</title>
<link>https://vikulin-va.ru/design-patterns/go/solid/</link>
<description>Простыми словами: что такое SOLID, зачем эти принципы нужны и как SRP, OCP, LSP, ISP, DIP проявляются в обычном Go-коде — разбор на понятных примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/go/solid/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны GoF: все 23 простыми словами на Go</title>
<link>https://vikulin-va.ru/design-patterns/go/gof/</link>
<description>Все 23 паттерна GoF простыми словами: суть каждого, где он встречается в Go и стандартной библиотеке и нужен ли вам в своём коде. С примерами на Go.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/go/gof/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>GRASP: назначение ответственностей на Go</title>
<link>https://vikulin-va.ru/design-patterns/go/grasp/</link>
<description>Девять принципов GRASP из книги Лармана на Go: как понять, какому типу отдать метод, почему логика должна жить рядом с данными, и как это выглядит в реальном Go-коде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/go/grasp/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>DRY, KISS, YAGNI и другие инженерные принципы на Go</title>
<link>https://vikulin-va.ru/design-patterns/go/principles/</link>
<description>Что такое DRY, KISS, YAGNI, Separation of Concerns, Law of Demeter, Fail Fast, принцип наименьшего удивления и бритва Оккама в Go-коде — и где у каждого границы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/go/principles/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>SOLID: пять принципов проектирования на TypeScript</title>
<link>https://vikulin-va.ru/design-patterns/node/solid/</link>
<description>Простыми словами: что такое SOLID, зачем эти принципы нужны и как SRP, OCP, LSP, ISP, DIP проявляются в обычном TypeScript-коде — разбор на понятных примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/node/solid/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны GoF: все 23 простыми словами на TypeScript</title>
<link>https://vikulin-va.ru/design-patterns/node/gof/</link>
<description>Все 23 паттерна GoF простыми словами: суть каждого, где он встречается в реальных фреймворках и нужен ли вам в своём коде. С примерами на TypeScript.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/node/gof/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>GRASP: назначение ответственностей на TypeScript</title>
<link>https://vikulin-va.ru/design-patterns/node/grasp/</link>
<description>Простыми словами: девять принципов GRASP из книги Лармана — какому классу отдать метод, почему логика живёт рядом с данными и как это выглядит в TypeScript-коде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/node/grasp/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>DRY, KISS, YAGNI и другие инженерные принципы на TypeScript</title>
<link>https://vikulin-va.ru/design-patterns/node/principles/</link>
<description>Простыми словами: DRY, KISS, YAGNI, Separation of Concerns, Law of Demeter, Fail Fast, принцип наименьшего удивления и бритва Оккама в TypeScript-коде — где у каждого границы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/node/principles/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>SOLID: пять принципов проектирования</title>
<link>https://vikulin-va.ru/design-patterns/solid/</link>
<description>Простыми словами: что такое SOLID, зачем эти принципы нужны и как SRP, OCP, LSP, ISP, DIP проявляются в обычном коде — разбор на понятных примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/solid/</guid>
<pubDate>Sat, 6 Jun 2026 15:45:44 GMT</pubDate>
</item>
<item>
<title>Clean Code: имена, функции, комментарии</title>
<link>https://vikulin-va.ru/design-patterns/clean-code/</link>
<description>Clean Code простыми словами: как называть переменные и функции, почему функция делает одно, когда комментарий помогает, а когда врёт, и где чистый код превращается в догму.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/clean-code/</guid>
<pubDate>Fri, 14 Aug 2026 04:53:06 GMT</pubDate>
</item>
<item>
<title>Паттерны GoF: все 23 простыми словами</title>
<link>https://vikulin-va.ru/design-patterns/gof/</link>
<description>Все 23 паттерна GoF простыми словами: суть каждого, где он встречается в реальных фреймворках и нужен ли вам в своём коде. С примерами на Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/gof/</guid>
<pubDate>Sat, 6 Jun 2026 15:45:44 GMT</pubDate>
</item>
<item>
<title>GRASP: назначение ответственностей</title>
<link>https://vikulin-va.ru/design-patterns/grasp/</link>
<description>Простыми словами: девять принципов GRASP из книги Лармана — как понять, какому классу отдать метод, почему логика должна жить рядом с данными, и как эти принципы выглядят в реальном коде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/grasp/</guid>
<pubDate>Sat, 6 Jun 2026 15:55:00 GMT</pubDate>
</item>
<item>
<title>DRY, KISS, YAGNI и другие инженерные принципы</title>
<link>https://vikulin-va.ru/design-patterns/principles/</link>
<description>Простыми словами: что такое DRY, KISS, YAGNI, Separation of Concerns, Law of Demeter, Fail Fast, принцип наименьшего удивления и бритва Оккама — и где у каждого границы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/principles/</guid>
<pubDate>Sat, 6 Jun 2026 15:55:00 GMT</pubDate>
</item>
<item>
<title>SOLID: пять принципов проектирования на Python</title>
<link>https://vikulin-va.ru/design-patterns/python/solid/</link>
<description>Простыми словами: что такое SOLID, зачем эти принципы нужны и как SRP, OCP, LSP, ISP, DIP проявляются в обычном Python-коде — разбор на понятных примерах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/python/solid/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Паттерны GoF: все 23 простыми словами на Python</title>
<link>https://vikulin-va.ru/design-patterns/python/gof/</link>
<description>Все 23 паттерна GoF простыми словами: суть каждого, где он встречается в реальных Python-фреймворках и нужен ли вам в своём коде. С примерами на Python.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/python/gof/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>GRASP: назначение ответственностей на Python</title>
<link>https://vikulin-va.ru/design-patterns/python/grasp/</link>
<description>Простыми словами: девять принципов GRASP из книги Лармана — какому классу отдать метод, почему логика живёт рядом с данными и как это выглядит в Python-коде.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/python/grasp/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>DRY, KISS, YAGNI и другие инженерные принципы на Python</title>
<link>https://vikulin-va.ru/design-patterns/python/principles/</link>
<description>Простыми словами: что такое DRY, KISS, YAGNI, Separation of Concerns, Law of Demeter, Fail Fast, принцип наименьшего удивления и бритва Оккама — и как они выглядят в Python.</description>
<guid isPermaLink="true">https://vikulin-va.ru/design-patterns/python/principles/</guid>
<pubDate>Thu, 9 Jul 2026 18:37:54 GMT</pubDate>
</item>
<item>
<title>Elasticsearch: как устроен поисковый движок</title>
<link>https://vikulin-va.ru/elasticsearch/fundamentals/</link>
<description>Простыми словами: зачем нужен Elasticsearch, как работает инвертированный индекс, почему записанный документ виден не сразу, что такое шарды и реплики, как устроены маппинг и анализаторы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/elasticsearch/fundamentals/</guid>
<pubDate>Mon, 18 May 2026 18:27:54 GMT</pubDate>
</item>
<item>
<title>Как работают запросы в Elasticsearch и почему документы сортируются именно так</title>
<link>https://vikulin-va.ru/elasticsearch/queries-and-relevance/</link>
<description>Простыми словами: что такое Query DSL, чем отличается полнотекстовый поиск от точного фильтра, как Elasticsearch решает, какой документ показать первым, и как собрать фасеты для каталога.</description>
<guid isPermaLink="true">https://vikulin-va.ru/elasticsearch/queries-and-relevance/</guid>
<pubDate>Mon, 18 May 2026 18:27:54 GMT</pubDate>
</item>
<item>
<title>Spring Data Elasticsearch: как подключить и использовать поиск в Java-приложении</title>
<link>https://vikulin-va.ru/elasticsearch/spring-data-elasticsearch/</link>
<description>Как подключить Spring Data Elasticsearch к Spring Boot, описывать индексы через @Document, делать запросы через ElasticsearchRepository и ElasticsearchOperations, массово индексировать данные, синхронизировать их из PostgreSQL — и какие ловушки поджидают по дороге.</description>
<guid isPermaLink="true">https://vikulin-va.ru/elasticsearch/spring-data-elasticsearch/</guid>
<pubDate>Mon, 18 May 2026 18:27:54 GMT</pubDate>
</item>
<item>
<title>Как работает Elasticsearch в production: ILM, snapshots, sizing, мониторинг</title>
<link>https://vikulin-va.ru/elasticsearch/operations/</link>
<description>Простыми словами: как управлять жизненным циклом индексов через ILM, делать резервные копии через SLM и S3, выбрать правильный размер кластера и наблюдать за его здоровьем.</description>
<guid isPermaLink="true">https://vikulin-va.ru/elasticsearch/operations/</guid>
<pubDate>Mon, 18 May 2026 18:27:54 GMT</pubDate>
</item>
<item>
<title>Что такое object storage: bucket, объект, ключ, классы хранения и presigned URL</title>
<link>https://vikulin-va.ru/object-storage/fundamentals/</link>
<description>Разбираемся с object storage с нуля: чем он отличается от файловой системы, как устроены bucket, объект и ключ в S3, зачем нужны классы хранения, версионирование и presigned URL, как работает multipart для больших файлов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/object-storage/fundamentals/</guid>
<pubDate>Mon, 18 May 2026 18:50:26 GMT</pubDate>
</item>
<item>
<title>Spring + AWS SDK v2 для S3: интеграция, паттерны, MinIO</title>
<link>https://vikulin-va.ru/object-storage/spring-and-aws-sdk/</link>
<description>Как подключить AWS SDK v2 к Spring, настроить S3Client для AWS, MinIO и Yandex Object Storage, загружать и скачивать файлы, генерировать presigned URLs и тестировать всё это без реального S3 через Testcontainers.</description>
<guid isPermaLink="true">https://vikulin-va.ru/object-storage/spring-and-aws-sdk/</guid>
<pubDate>Mon, 18 May 2026 18:50:26 GMT</pubDate>
</item>
<item>
<title>S3 в production: резервные копии, репликация, стоимость и мониторинг</title>
<link>https://vikulin-va.ru/object-storage/operations/</link>
<description>Как грамотно эксплуатировать объектное хранилище: стратегии резервного копирования, защита от потери данных через версионирование и кросс-региональную репликацию, из чего складывается счёт S3 и как его контролировать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/object-storage/operations/</guid>
<pubDate>Mon, 18 May 2026 18:50:26 GMT</pubDate>
</item>
<item>
<title>Как устроен ClickHouse: колоночное хранение, MergeTree и OLAP</title>
<link>https://vikulin-va.ru/clickhouse/fundamentals/</link>
<description>Простыми словами: почему ClickHouse агрегирует миллиарды строк за секунды, как работает MergeTree, зачем важен ORDER BY и чем ClickHouse отличается от PostgreSQL.</description>
<guid isPermaLink="true">https://vikulin-va.ru/clickhouse/fundamentals/</guid>
<pubDate>Sat, 6 Jun 2026 16:23:44 GMT</pubDate>
</item>
<item>
<title>ClickHouse: моделирование схемы, запросы, materialized views</title>
<link>https://vikulin-va.ru/clickhouse/modeling-and-queries/</link>
<description>Как проектировать таблицы в ClickHouse от запросов, а не от сущностей: ORDER BY по кардинальности, типы данных, условные агрегаты, materialized views с AggregatingMergeTree, дедупликация через ReplacingMergeTree и словари вместо JOIN.</description>
<guid isPermaLink="true">https://vikulin-va.ru/clickhouse/modeling-and-queries/</guid>
<pubDate>Sat, 6 Jun 2026 16:23:44 GMT</pubDate>
</item>
<item>
<title>ClickHouse из Java и Spring Boot: подключение, запись и чтение</title>
<link>https://vikulin-va.ru/clickhouse/java-spring-integration/</link>
<description>Как подключить ClickHouse к Spring Boot, настроить второй DataSource, писать данные пакетами через Kafka, читать аналитику через JdbcClient и тестировать с Testcontainers.</description>
<guid isPermaLink="true">https://vikulin-va.ru/clickhouse/java-spring-integration/</guid>
<pubDate>Sat, 6 Jun 2026 16:23:44 GMT</pubDate>
</item>
<item>
<title>ClickHouse в проде: репликация, TTL, бэкапы и мониторинг</title>
<link>https://vikulin-va.ru/clickhouse/operations/</link>
<description>Как эксплуатировать ClickHouse: репликация через ReplicatedMergeTree и Keeper, когда нужен шардинг, TTL для экономии диска, бэкапы в S3, диагностика через system-таблицы и разбор типичных инцидентов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/clickhouse/operations/</guid>
<pubDate>Sat, 6 Jun 2026 16:23:44 GMT</pubDate>
</item>
<item>
<title>Alias и Action-эндпоинты в Go — me, latest и доменные команды</title>
<link>https://vikulin-va.ru/rest-api/go/alias-and-actions/</link>
<description>Что такое alias-сегменты в REST API на Go: когда нужен me и когда достаточно /profile, как работают логические и временные alias (latest, default), и почему доменные команды оформляют через POST-эндпоинты а не PATCH.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/alias-and-actions/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Batch, async, локализация — partial success, 202 polling, Accept-Language (Go)</title>
<link>https://vikulin-va.ru/rest-api/go/batch-async-localization/</link>
<description>Batch-операции в Go (chi): partial success поэлементно, POST /resources/batch, ответ 200 + results + summary. Async через polling: 202 Accepted + Location + taskId/statusUrl…</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/batch-async-localization/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Ошибки REST API в Go — RFC 9457, ProblemDetails, валидация</title>
<link>https://vikulin-va.ru/rest-api/go/errors/</link>
<description>Как правильно возвращать ошибки в Go REST API: формат RFC 9457, структура ProblemDetails, application/problem+json, валидационные ошибки с violations, единый обработчик httperr.Write и защита от утечки внутренностей сервера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/errors/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Заголовки — Idempotency-Key, traceparent, кастомные в Go</title>
<link>https://vikulin-va.ru/rest-api/go/headers/</link>
<description>HTTP-заголовки в Go REST API: стандартные по назначению Content-Type/Authorization/Location. Кастомные с доменным префиксом без X- (RFC 6648).</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/headers/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>JSON и формат ответов — структуры, omitempty, коллекции в Go</title>
<link>https://vikulin-va.ru/rest-api/go/json-and-responses/</link>
<description>JSON-ответы Go REST API: camelCase через json-теги, omitempty на необязательных полях — nil/null не появляется в 2xx. Коллекция — content+page+size+total.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/json-and-responses/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>OpenAPI-метаданные и сводка антипаттернов — Go</title>
<link>https://vikulin-va.ru/rest-api/go/openapi-and-antipatterns/</link>
<description>OpenAPI Go chi: operationId camelCase, теги ресурса, {orderId} в спеке. Сводная таблица X-кодов: null в 2xx, 422, about:blank, comma-separated, GET с side-effect.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/openapi-and-antipatterns/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Query-параметры — фильтрация, пагинация, сортировка в Go</title>
<link>https://vikulin-va.ru/rest-api/go/query-params/</link>
<description>Query-параметры в Go REST API: camelCase-имена, page 1-based (min=1), cursor непрозрачный токен, массивы через повтор параметра r.Form[key] — не через запятую.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/query-params/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Rate limiting, файлы, deprecation в Go</title>
<link>https://vikulin-va.ru/rest-api/go/rate-limiting-files-deprecation/</link>
<description>Rate limiting, загрузка файлов и deprecation в Go REST API: 429 с Retry-After и RateLimit-* через golang.org/x/time/rate или gateway.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/rate-limiting-files-deprecation/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>URL и ресурсы в Go REST API — kebab-case, вложенность, chi</title>
<link>https://vikulin-va.ru/rest-api/go/url-and-resources/</link>
<description>Как правильно строить URL в Go REST API с chi: kebab-case, множественное число для коллекций, максимум два уровня вложенности, чтение path-параметров через chi.URLParam.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/url-and-resources/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Версионирование REST API в Go: /api/v1 и breaking changes</title>
<link>https://vikulin-va.ru/rest-api/go/versioning/</link>
<description>Как версионировать Go REST API: версия в URL /api/v1, что считается breaking change, как поддерживать v1 и v2 параллельно через chi, и как клиент не должен ломаться при добавлении полей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/go/versioning/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Alias и Action-эндпоинты в NestJS — me, latest, default и доменные команды</title>
<link>https://vikulin-va.ru/rest-api/node/alias-and-actions/</link>
<description>Как строить alias-маршруты в NestJS: me, latest, default и другие сокращения. Когда писать action-эндпоинт вместо PATCH, как правильно объявлять порядок маршрутов и почему @Post с @HttpCode(200) — правильный выбор для доменных команд.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/alias-and-actions/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Групповые операции, долгие задачи и локализация в NestJS</title>
<link>https://vikulin-va.ru/rest-api/node/batch-async-localization/</link>
<description>Как в NestJS обрабатывать несколько элементов за один запрос, запускать долгие операции через 202 Accepted с опросом статуса, и возвращать сообщения об ошибках на языке пользователя через Accept-Language.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/batch-async-localization/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Ошибки RFC 9457 — Problem Details на NestJS</title>
<link>https://vikulin-va.ru/rest-api/node/errors/</link>
<description>Что такое RFC 9457 Problem Details и как правильно возвращать ошибки из NestJS: глобальный Exception Filter, поле code для клиентской логики, violations при валидации, маппинг доменных исключений.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/errors/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Заголовки HTTP в NestJS: стандартные, кастомные и трассировка</title>
<link>https://vikulin-va.ru/rest-api/node/headers/</link>
<description>Как работать с заголовками HTTP в NestJS: читать входящие через @Headers(), выставлять Location и ETag, называть собственные заголовки без X-, реализовать идемпотентность через Idempotency-Key и подключить трассировку с traceparent.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/headers/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>JSON и формат ответов в NestJS</title>
<link>https://vikulin-va.ru/rest-api/node/json-and-responses/</link>
<description>Как правильно отдавать JSON из NestJS: camelCase без настройки, ISO 8601 для дат, enum строками, undefined вместо null в ответах, плоский объект без обёрток и пагинация через content.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/json-and-responses/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>OpenAPI в NestJS и частые ошибки при проектировании API</title>
<link>https://vikulin-va.ru/rest-api/node/openapi-and-antipatterns/</link>
<description>Как подключить SwaggerModule в NestJS, задать operationId, теги и summary, описать схемы через DTO-декораторы, и каких ошибок в URL, ответах и ошибках стоит избегать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/openapi-and-antipatterns/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Query-параметры в NestJS: фильтрация, пагинация и поиск</title>
<link>https://vikulin-va.ru/rest-api/node/query-params/</link>
<description>Как принимать query-параметры в NestJS: DTO-класс с ValidationPipe, camelCase-имена, page 1-based, массивы через повтор параметра, cursor-пагинация и POST /search для сложных запросов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/query-params/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Rate limiting, загрузка файлов и deprecation в NestJS</title>
<link>https://vikulin-va.ru/rest-api/node/rate-limiting-files-deprecation/</link>
<description>Как защитить NestJS-API от перегрузки через rate limiting с заголовками RateLimit-*, принимать и отдавать файлы через multipart и StreamableFile, и плавно снимать устаревшие эндпоинты через Sunset и 410 Gone.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/rate-limiting-files-deprecation/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>URL и ресурсы в NestJS: как называть пути и выбирать HTTP-методы</title>
<link>https://vikulin-va.ru/rest-api/node/url-and-resources/</link>
<description>Простым языком: как называть пути в NestJS — kebab-case, множественное число, без глаголов; как устроена версия /api/v1; какой HTTP-метод выбрать и когда нужен @HttpCode.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/url-and-resources/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Версионирование REST API в NestJS — v1/v2 в URL</title>
<link>https://vikulin-va.ru/rest-api/node/versioning/</link>
<description>Как настроить версионирование REST API в NestJS через URI-стратегию, какие изменения требуют новой версии, а какие нет, и как поддерживать v1 и v2 параллельно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/node/versioning/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>URL и ресурсы REST: как называть пути и выбирать HTTP-методы</title>
<link>https://vikulin-va.ru/rest-api/java/url-and-resources/</link>
<description>Как строить URL в REST API: kebab-case, множественное число для коллекций, максимум два уровня вложенности, правильная семантика GET/POST/PUT/PATCH/DELETE. Разбор частых ошибок с примерами на Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/url-and-resources/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Alias-сегменты и action-эндпоинты в REST API</title>
<link>https://vikulin-va.ru/rest-api/java/alias-and-actions/</link>
<description>Что такое alias-сегменты в REST (me, latest, default), зачем они нужны, когда применять каждый вид. Как проектировать action-эндпоинты для доменных команд (confirm, cancel, ship) — почему всегда POST и глагол в инфинитиве, и чем action лучше PATCH для изменения статуса.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/alias-and-actions/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Версионирование REST API — как менять API без поломки клиентов</title>
<link>https://vikulin-va.ru/rest-api/java/versioning/</link>
<description>Как версионировать REST API: версия в URL-пути (/api/v1/orders), когда нужна новая версия (только при breaking change), что считается breaking и что non-breaking изменением, почему клиент должен игнорировать неизвестные поля, и как поддерживать v1 и v2 параллельно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/versioning/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Query-параметры и пагинация в REST API</title>
<link>https://vikulin-va.ru/rest-api/java/query-params/</link>
<description>Как передавать фильтры, диапазоны и порядок сортировки через query-строку. Два вида пагинации — offset и cursor — когда какой выбрать. Как передавать несколько значений одного фильтра и когда GET не хватает и нужен POST /search.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/query-params/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>JSON и формат ответов в REST API</title>
<link>https://vikulin-va.ru/rest-api/java/json-and-responses/</link>
<description>Как правильно называть поля JSON, форматировать даты, enum и идентификаторы, и как выглядит ответ API для разных операций: создание, обновление, удаление, коллекция. Почему null в ответе — плохо и как это исправить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/json-and-responses/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>HTTP-заголовки в REST API: Content-Type, Authorization, Idempotency-Key и трассировка</title>
<link>https://vikulin-va.ru/rest-api/java/headers/</link>
<description>Что такое HTTP-заголовки и зачем они нужны в REST API: стандартные заголовки Content-Type, Accept, Authorization, Location, ETag — каждый по назначению. Как именовать собственные заголовки с доменным префиксом вместо устаревшего X-. Idempotency-Key для безопасного повторного запроса. traceparent (W3C Trace Context) для сквозной трассировки между сервисами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/headers/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Ошибки в REST API — формат Problem Details</title>
<link>https://vikulin-va.ru/rest-api/java/errors/</link>
<description>Что такое Problem Details (RFC 9457) и зачем он нужен: единая структура тела ошибки с полями type, status, title, detail, code и violations. Как правильно выбирать HTTP-коды, возвращать ошибки валидации и не раскрывать внутренности сервера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/errors/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Rate limiting, загрузка файлов и deprecation в REST API</title>
<link>https://vikulin-va.ru/rest-api/java/rate-limiting-files-deprecation/</link>
<description>Как правильно ограничивать число запросов к API (429 + Retry-After), как загружать и отдавать файлы через multipart/form-data, и как выводить устаревшие эндпоинты из эксплуатации с помощью Sunset-заголовка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/rate-limiting-files-deprecation/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Массовые операции, асинхронность и локализация в REST API</title>
<link>https://vikulin-va.ru/rest-api/java/batch-async-localization/</link>
<description>Как правильно делать массовые операции в REST: частичный успех, ответ 200 с результатами по каждому элементу. Как обрабатывать длительные задачи через 202 Accepted и опрос статуса. Как локализовать сообщения об ошибках через Accept-Language и что локализовать нельзя.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/batch-async-localization/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>API-first и contract-first: проектируем контракт раньше кода</title>
<link>https://vikulin-va.ru/rest-api/java/api-first/</link>
<description>Что такое API-first простыми словами: сначала контракт (OpenAPI), потом код. Зачем это нужно, чем contract-first отличается от code-first, как генерировать сервер и клиент из спецификации и работать над фронтом и бэкендом параллельно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/api-first/</guid>
<pubDate>Tue, 30 Jun 2026 06:04:12 GMT</pubDate>
</item>
<item>
<title>OpenAPI: метаданные и типичные ошибки в REST</title>
<link>https://vikulin-va.ru/rest-api/java/openapi-and-antipatterns/</link>
<description>Что такое OpenAPI и зачем он нужен: operationId, tags, summary, параметры пути. Разбираем типичные ошибки в REST-дизайне: глаголы в URL, неверное версионирование, проблемы с ошибками и заголовками — и как их избежать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/java/openapi-and-antipatterns/</guid>
<pubDate>Tue, 26 May 2026 11:01:22 GMT</pubDate>
</item>
<item>
<title>Alias и Action-эндпоинты в FastAPI — me, latest, default и доменные команды</title>
<link>https://vikulin-va.ru/rest-api/python/alias-and-actions/</link>
<description>Как использовать alias-сегменты me, latest, default в FastAPI и когда добавлять action-эндпоинты для доменных команд вроде confirm и cancel: правила порядка маршрутов, выбор между action и PATCH, типичные ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/alias-and-actions/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Массовые операции, долгие задачи и локализация в FastAPI</title>
<link>https://vikulin-va.ru/rest-api/python/batch-async-localization/</link>
<description>Как устроены массовые операции (partial success), асинхронная обработка через polling 202 Accepted и локализация ответов через Accept-Language в FastAPI с Pydantic.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/batch-async-localization/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Ошибки в REST API на FastAPI — формат RFC 9457 Problem Details</title>
<link>https://vikulin-va.ru/rest-api/python/errors/</link>
<description>Как правильно возвращать ошибки из FastAPI: формат RFC 9457 Problem Details с полями type, status, title, detail и code, почему нужно менять дефолтный обработчик валидации с 422 на 400, как возвращать список всех нарушений в одном ответе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/errors/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>HTTP-заголовки в FastAPI — как их читать, отправлять и зачем нужен Idempotency-Key</title>
<link>https://vikulin-va.ru/rest-api/python/headers/</link>
<description>Что такое HTTP-заголовки, как FastAPI их читает через Header(), зачем нужен Idempotency-Key при повторных запросах и как traceparent связывает вызовы между сервисами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/headers/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>JSON и формат ответов в FastAPI: camelCase, даты, enum и пагинация</title>
<link>https://vikulin-va.ru/rest-api/python/json-and-responses/</link>
<description>Как FastAPI и Pydantic формируют JSON-ответы: camelCase через alias_generator, даты в ISO 8601, enum как строки, исключение null-полей и плоская структура без лишних обёрток.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/json-and-responses/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>OpenAPI в FastAPI и частые ошибки при проектировании REST</title>
<link>https://vikulin-va.ru/rest-api/python/openapi-and-antipatterns/</link>
<description>Как FastAPI генерирует OpenAPI из кода: operation_id, tags, summary, Pydantic-модели. Разбираем частые ошибки в URL, ответах, ошибках и метаданных — и как их исправить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/openapi-and-antipatterns/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Query-параметры и пагинация в FastAPI</title>
<link>https://vikulin-va.ru/rest-api/python/query-params/</link>
<description>Как объявлять query-параметры в FastAPI через Query(alias=...), задавать фильтры и диапазоны, реализовывать offset- и cursor-пагинацию, сортировку и сложный поиск через POST.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/query-params/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Rate limiting, загрузка файлов и deprecation в FastAPI</title>
<link>https://vikulin-va.ru/rest-api/python/rate-limiting-files-deprecation/</link>
<description>Как защитить FastAPI-сервис от перегрузки через rate limiting с заголовками RateLimit-*, принимать и отдавать файлы через multipart и StreamingResponse, и плавно снимать устаревшие эндпоинты через Sunset и 410 Gone.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/rate-limiting-files-deprecation/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>URL и ресурсы в REST API на FastAPI</title>
<link>https://vikulin-va.ru/rest-api/python/url-and-resources/</link>
<description>Как правильно строить URL в REST API на FastAPI: kebab-case, множественное число для коллекций, выбор HTTP-метода, вложенность ресурсов и частые ошибки новичков.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/url-and-resources/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Версионирование REST API на FastAPI: v1, v2 и breaking changes</title>
<link>https://vikulin-va.ru/rest-api/python/versioning/</link>
<description>Как версионировать REST API на FastAPI: версия в URL-пути через APIRouter, что такое breaking и non-breaking изменения, как держать v1 и v2 одновременно и когда обновлять версию.</description>
<guid isPermaLink="true">https://vikulin-va.ru/rest-api/python/versioning/</guid>
<pubDate>Fri, 19 Jun 2026 05:31:11 GMT</pubDate>
</item>
<item>
<title>Бюджеты shutdown и наблюдаемость в Go</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/budgets-and-observability/</link>
<description>Как устроен 60-секундный бюджет graceful shutdown в Go-приложении, как измерить время каждой фазы метрикой app_shutdown_duration_seconds и почему нормальное завершение нужно логировать как Info, а не Error.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/budgets-and-observability/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>БД и persistence при graceful shutdown Go-сервиса</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/db-and-persistence/</link>
<description>Как правильно закрыть pgxpool.Pool при остановке Go-сервиса: почему пул закрывается последним, как дожимать активные транзакции через context.Background() и зачем ждать WaitGroup перед pool.Close().</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/db-and-persistence/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>HTTP drain в Go — как правильно остановить HTTP-сервер</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/http-drain/</link>
<description>Что происходит с запросами при остановке Go-сервиса в Kubernetes: как Server.Shutdown дожидается in-flight запросов, зачем нужен preStop sleep и что делать с долгими операциями.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/http-drain/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Идемпотентность незавершённых операций в Go</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/idempotency-in-flight/</link>
<description>Что такое идемпотентность и зачем она нужна при остановке Go-сервиса: Idempotency-Key для исходящих HTTP-вызовов, дедупликация Kafka-сообщений через processed_event в pgx-транзакции, двухфазный outbox-relay — понятно с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/idempotency-in-flight/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Go: конфигурация сервера и readiness при graceful shutdown</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/jvm-spring-config/</link>
<description>Как правильно остановить Go-сервер: http.Server.Shutdown vs Close, зачем нужен atomic.Bool для readiness, как поймать SIGTERM и почему /health/live и /health/ready должны быть разными эндпоинтами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/jvm-spring-config/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kafka shutdown в Go: останавливаем потребитель и продюсер без потери сообщений</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/kafka-shutdown/</link>
<description>Как правильно завершить работу Kafka-потребителя и продюсера в Go: отмена context, явный CommitMessages после каждого сообщения, writer.Close() для сброса пачки на broker.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/kafka-shutdown/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kubernetes и graceful shutdown в Go: terminationGracePeriodSeconds, probes, rolling update</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/kubernetes/</link>
<description>Как настроить Kubernetes для корректного завершения Go-сервиса: terminationGracePeriodSeconds, preStop sleep, раздельные /health/live и /health/ready, maxSurge и maxUnavailable для деплоя без простоя.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/kubernetes/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Фоновые горутины и outbox-relay при graceful shutdown в Go</title>
<link>https://vikulin-va.ru/graceful-shutdown/go/scheduled-async-outbox/</link>
<description>Как правильно останавливать фоновые горутины в Go: context.Context как сигнал завершения, sync.WaitGroup для ожидания текущей итерации, и безопасная остановка outbox-relay с FOR UPDATE SKIP LOCKED.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/go/scheduled-async-outbox/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Бюджеты завершения и наблюдаемость в NestJS</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/budgets-and-observability/</link>
<description>Как правильно распределить 60 секунд бюджета завершения в NestJS: preStop, HTTP drain, Kafka, фоновые задачи — и как измерить длительность shutdown через prom-client метрику.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/budgets-and-observability/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Как закрыть соединения с базой данных при остановке Node.js-сервиса</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/db-and-persistence/</link>
<description>Разбираем порядок закрытия пула соединений pg и TypeORM при graceful shutdown NestJS-сервиса: в какой момент вызывать pool.end(), как дожидаться активных транзакций из HTTP-хендлеров, планировщика и BullMQ-воркеров.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/db-and-persistence/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>HTTP drain в NestJS: как не терять запросы при перезапуске</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/http-drain/</link>
<description>Объясняем, почему при деплое появляются 502-ошибки и как правильно настроить NestJS, чтобы сервис дождался завершения текущих запросов перед остановкой: server.close(), closeIdleConnections() и preStop sleep в Kubernetes.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/http-drain/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Идемпотентность in-flight операций в NestJS</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/idempotency-in-flight/</link>
<description>Как сделать HTTP POST, Kafka-обработчик и outbox-relay безопасными к повторному запуску в NestJS: Idempotency-Key, processed_event в той же транзакции, двухфазный статус outbox.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/idempotency-in-flight/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Как настроить graceful shutdown в NestJS: enableShutdownHooks и состояние дрейна</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/jvm-spring-config/</link>
<description>Разбираем по шагам: почему без enableShutdownHooks SIGTERM убивает процесс мгновенно, как ShutdownStateService сообщает Kubernetes о начале остановки и зачем нужен принудительный таймаут поверх server.close().</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/jvm-spring-config/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kafka shutdown в NestJS: как правильно останавливать consumer и producer</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/kafka-shutdown/</link>
<description>Как корректно остановить kafkajs consumer и producer при завершении NestJS-приложения: когда коммитить offset, зачем нужен таймаут disconnect, и почему тяжёлую работу надо выносить в outbox.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/kafka-shutdown/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Graceful shutdown NestJS в Kubernetes: preStop, probes, rolling deploy</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/kubernetes/</link>
<description>Как настроить Kubernetes для корректного завершения NestJS-сервиса: почему дефолтный terminationGracePeriodSeconds не подходит, зачем нужен preStop, чем readinessProbe отличается от livenessProbe и как сделать обновление без потери запросов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/kubernetes/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Остановка фоновых задач в NestJS: scheduler, BullMQ, outbox</title>
<link>https://vikulin-va.ru/graceful-shutdown/node/scheduled-async-outbox/</link>
<description>Как правильно останавливать фоновые задачи при SIGTERM в NestJS: scheduler дожимает итерацию, BullMQ ждёт активные джобы, outbox завершает текущий пакет через SKIP LOCKED и проверяет флаг draining.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/node/scheduled-async-outbox/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Graceful shutdown в Spring Boot: server.shutdown, таймауты и health-пробы</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/jvm-spring-config/</link>
<description>Как настроить корректное завершение Spring Boot приложения: server.shutdown=graceful, timeout-per-shutdown-phase, ApplicationAvailability и отдельные health-пробы liveness/readiness — что каждая настройка делает и почему важна в Kubernetes.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/jvm-spring-config/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>HTTP drain — preStop sleep и долгие endpoints</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/http-drain/</link>
<description>Как Spring Boot и Kubernetes вместе обеспечивают плавное завершение HTTP-трафика: in-flight запросы дожимаются до ответа, preStop sleep гасит окно kube-proxy, а долгие операции переводятся в асинхронный режим с 202 Accepted.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/http-drain/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kafka shutdown — как правильно останавливать потребитель и продюсер</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/kafka-shutdown/</link>
<description>Разбираем, как Spring останавливает Kafka-потребитель без потери сообщений: что делает ConcurrentMessageListenerContainer при shutdown, зачем нужен shutdown-timeout, почему enable.auto.commit опасен и как правильно сбрасывать буфер продюсера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/kafka-shutdown/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>БД и persistence при завершении Spring Boot</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/db-and-persistence/</link>
<description>Как Spring Boot закрывает соединения с базой данных при завершении: почему HikariCP закрывается в самом конце, что происходит с активными транзакциями при SIGTERM, и какие типичные ошибки разрушают согласованность данных.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/db-and-persistence/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Scheduled, @Async и outbox: как правильно останавливать фоновые задачи</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/scheduled-async-outbox/</link>
<description>Как Spring Boot останавливает фоновые задачи при завершении: @Scheduled-методы дают доработать текущую итерацию через TaskScheduler с await-termination, @Async требует явной настройки ThreadPoolTaskExecutor, outbox-relay безопасно завершает текущий пакет событий благодаря FOR UPDATE SKIP LOCKED.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/scheduled-async-outbox/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kubernetes и graceful shutdown: terminationGracePeriodSeconds, probes, maxSurge</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/kubernetes/</link>
<description>Как настроить Kubernetes, чтобы приложение завершалось чисто: зачем нужен preStop sleep, чем отличается readinessProbe от livenessProbe и почему дефолтный terminationGracePeriodSeconds=30 всегда приводит к ошибкам на деплое.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/kubernetes/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Идемпотентность при остановке сервиса</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/idempotency-in-flight/</link>
<description>Что такое идемпотентность и зачем она нужна при остановке сервиса. Как защитить HTTP POST, Kafka-обработчик и outbox-relay от дублей при SIGTERM — простые объяснения с примерами на Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/idempotency-in-flight/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Бюджеты завершения и наблюдаемость graceful shutdown</title>
<link>https://vikulin-va.ru/graceful-shutdown/java/budgets-and-observability/</link>
<description>Как рассчитать бюджет времени на graceful shutdown: 60 секунд складываются из preStop, HTTP drain, планировщика и Kafka, но фазы частично идут параллельно — реальный wall clock 30-40s. Почему не нужно увеличивать бюджет до 90s, как добавить метрику app_shutdown_duration_seconds и зачем правильно выставить уровень логов для обычных событий завершения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/java/budgets-and-observability/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Бюджеты завершения и наблюдаемость в FastAPI</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/budgets-and-observability/</link>
<description>Как распределить 60 секунд бюджета завершения между preStop, uvicorn drain и lifespan-задачами в FastAPI, и зачем измерять длительность shutdown метрикой app_shutdown_duration_seconds.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/budgets-and-observability/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>SQLAlchemy и база данных при завершении FastAPI-приложения</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/db-and-persistence/</link>
<description>Как правильно закрыть пул соединений SQLAlchemy при завершении FastAPI-приложения: почему engine.dispose() вызывается последним, что происходит с активными транзакциями при SIGTERM и причём здесь Alembic.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/db-and-persistence/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>HTTP drain в FastAPI: как не терять запросы при перезапуске</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/http-drain/</link>
<description>Объясняем, почему при деплое FastAPI-сервиса клиенты иногда видят 502, как preStop sleep и uvicorn graceful shutdown защищают in-flight запросы, и что делать с долгими endpoints — 202 Accepted и asyncio.Task.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/http-drain/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Идемпотентность in-flight операций при завершении Python-сервиса</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/idempotency-in-flight/</link>
<description>Что такое идемпотентность и зачем она нужна при graceful shutdown: Idempotency-Key для HTTP POST в FastAPI, защита Kafka-listener через processed_event, двух-фазный outbox PENDING→PUBLISHING→PUBLISHED.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/idempotency-in-flight/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Конфигурация uvicorn/lifespan — graceful shutdown и readiness в FastAPI</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/jvm-spring-config/</link>
<description>Как правильно настроить uvicorn и lifespan в FastAPI, чтобы сервис корректно завершал работу: --timeout-graceful-shutdown, readiness-флаг, health-эндпоинты и правильный порядок остановки ресурсов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/jvm-spring-config/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kafka shutdown — aiokafka consumer stop и producer flush</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/kafka-shutdown/</link>
<description>Как правильно останавливать aiokafka consumer и producer в FastAPI: ручной commit offset, flush pending сообщений и правильный порядок в lifespan. Без потери данных и дублей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/kafka-shutdown/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>Kubernetes и FastAPI: как настроить корректное завершение сервиса</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/kubernetes/</link>
<description>Как правильно настроить Kubernetes для FastAPI/uvicorn: terminationGracePeriodSeconds, preStop, readiness и liveness пробы, rolling deploy без потери запросов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/kubernetes/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>asyncio-задачи и outbox-relay при остановке FastAPI-приложения</title>
<link>https://vikulin-va.ru/graceful-shutdown/python/scheduled-async-outbox/</link>
<description>Разбираем с нуля: почему фоновые asyncio-задачи опасны при SIGTERM, как правильно их останавливать через task.cancel() с дожатием, как безопасно остановить APScheduler и зачем outbox-relay нужен readiness-флаг.</description>
<guid isPermaLink="true">https://vikulin-va.ru/graceful-shutdown/python/scheduled-async-outbox/</guid>
<pubDate>Sun, 28 Jun 2026 08:06:15 GMT</pubDate>
</item>
<item>
<title>ABAC и владение ресурсом в Go</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/abac-resource-ownership/</link>
<description>Что такое ABAC и как реализовать проверку владения ресурсом в Go: AccessPolicy в core-слое, ForbiddenError как ошибка-значение, admin-override с обязательным аудитом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/abac-resource-ownership/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Журнал действий администратора в Go</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/audit-admin/</link>
<description>Как и зачем логировать каждое действие администратора в отдельную таблицу аудита: порт audit.Logger, схема таблицы, атомарность с бизнес-операцией и append-only гарантия на уровне БД.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/audit-admin/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Хранение токенов на клиенте — HttpOnly cookie и refresh rotation (Go)</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/client-token-storage/</link>
<description>Почему нельзя хранить токены в localStorage, как правильно выдавать HttpOnly cookie в Go-приложении и как работает refresh token rotation для защиты от кражи токена.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/client-token-storage/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>JWT validation в Go: golang-jwt и JWKS</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/jwt-validation/</link>
<description>Как проверять JWT-токены в Go-сервисе: готовые библиотеки golang-jwt и keyfunc, автоматический кеш ключей из IdP, middleware для chi и правильные коды ответа 401 vs 403.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/jwt-validation/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>PII и секреты в Go — что нельзя в slog, error и Kafka</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/pii-and-secrets/</link>
<description>Что такое PII и почему email, телефон и ФИО нельзя писать в логи, строки ошибок и Kafka-события. Как маскировать данные в slog, держать секреты вне git и безопасно отдавать ошибки клиенту.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/pii-and-secrets/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>RBAC в Go: роли из JWT и проверка в chi-middleware</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/rbac-roles/</link>
<description>Разбираем, как работает ролевая авторизация в Go: извлечение ролей из JWT-токена, каталог стандартных ролей и как установить middleware RequireRoles на группу роутов в chi.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/rbac-roles/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Service-to-service аутентификация на Go — mTLS и Client Credentials</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/service-to-service/</link>
<description>Как сервисы на Go доказывают свою личность друг другу: два подхода — mTLS через Service Mesh и Client Credentials Flow с oauth2.TokenSource, подводные камни и типичные ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/service-to-service/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Где какая проверка — Gateway, BFF и Domain Service (Go)</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/go/where-the-check-goes/</link>
<description>Простым языком: как разнести аутентификацию, ролевую и ресурсную авторизацию по трём слоям Go-приложения с chi — и почему путать их слои опасно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/go/where-the-check-goes/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>ABAC и владение ресурсом в NestJS</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/abac-resource-ownership/</link>
<description>Что такое ABAC и почему RBAC-одного не хватает. Как проверить владение ресурсом в NestJS через AccessPolicy или внутри Handler, зачем admin-действия пишутся в audit log.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/abac-resource-ownership/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Audit log admin-команд в NestJS</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/audit-admin/</link>
<description>Что такое audit log, зачем он нужен при admin-действиях, как реализовать запись через NestInterceptor или Handler, почему важна одна транзакция с бизнес-операцией и что означает append-only.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/audit-admin/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Хранение токенов в браузере — HttpOnly cookie и refresh rotation (NestJS)</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/client-token-storage/</link>
<description>Почему localStorage опасен для JWT и как правильно хранить токены в браузере: HttpOnly cookie, атрибуты Secure и SameSite, refresh token rotation и защита от CSRF в NestJS.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/client-token-storage/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>JWT-валидация в NestJS: passport-jwt и jwks-rsa</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/jwt-validation/</link>
<description>Как NestJS проверяет JWT-токены: JwtStrategy через passport-jwt и jwks-rsa, зачем нужен JWKS-кеш, как работают Guards, и почему 401 и 403 — это разные ситуации.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/jwt-validation/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>PII и секреты в NestJS: как не допустить утечки</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/pii-and-secrets/</link>
<description>Что такое PII, почему персональные данные нельзя писать в логи, в текст ошибок и в Kafka-сообщения, и как правильно хранить секреты в NestJS-приложении.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/pii-and-secrets/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>RBAC в NestJS: роли, guards и JWT</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/rbac-roles/</link>
<description>Что такое RBAC и зачем он нужен в NestJS: как извлекать роли из JWT через JwtStrategy, писать RolesGuard и декоратор @Roles, чем RBAC отличается от ABAC и когда новая роль — это признак ошибки в дизайне.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/rbac-roles/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Аутентификация между сервисами в NestJS: mTLS и Client Credentials</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/service-to-service/</link>
<description>Как NestJS-сервисы доказывают друг другу свою личность: два подхода — mTLS через Istio (прозрачен для кода) и Client Credentials Flow (axios получает и кеширует токен IdP, добавляет Bearer). Почему анонимный внутренний трафик опасен и как это исправить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/service-to-service/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Где делать auth-проверку в NestJS: Gateway, контроллер и обработчик</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/node/where-the-check-goes/</link>
<description>Разбираемся, какие auth-проверки уместны на каждом уровне NestJS: JWT на Gateway, роли на endpoint через RolesGuard, а доступ к конкретному ресурсу — только в обработчике, где есть доменная модель.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/node/where-the-check-goes/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Где какая проверка — Gateway, BFF и Domain Service</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/java/where-the-check-goes/</link>
<description>Простыми словами: как разложить аутентификацию и авторизацию по слоям. Gateway проверяет JWT, слой приложения — роль, доменный слой — владение конкретным объектом. Один запрос маркетплейса прослежен по всем трём уровням: почему ABAC нельзя поднять на Gateway.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/java/where-the-check-goes/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>ABAC и проверка владения ресурсом в Spring</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/java/abac-resource-ownership/</link>
<description>Что такое ABAC и чем он отличается от RBAC. Почему одной роли недостаточно для защиты ресурсов. Два способа реализовать проверку владения в Spring: через @PreAuthorize с access-бином или внутри обработчика команды. Как правильно пустить администратора в обход проверки и при этом оставить след в журнале.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/java/abac-resource-ownership/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Service-to-service аутентификация: mTLS и Client Credentials</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/java/service-to-service/</link>
<description>Как сервисы внутри кластера удостоверяют личность друг друга: mTLS через Service Mesh или Client Credentials Flow с токеном от провайдера идентичности. Все внутренние вызовы маркетплейса с их scope и ответ на вопрос, пробрасывать ли токен пользователя дальше.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/java/service-to-service/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Аудит действий администратора</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/java/audit-admin/</link>
<description>Зачем нужен журнал действий администратора, как устроена таблица audit log в PostgreSQL, два способа записи — Spring AOP аспект и явный вызов, почему аудит должен быть в одной транзакции с бизнес-операцией и что означает append-only.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/java/audit-admin/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>PII и секреты — как не утечь в логи, ответы и сообщения</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/java/pii-and-secrets/</link>
<description>Что такое PII, почему персональные данные нельзя писать в логи и исключения, как правильно обрабатывать ошибки без утечки данных, как безопасно хранить секреты и почему нельзя класть пароли в git.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/java/pii-and-secrets/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>ABAC — проверка владения ресурсом в FastAPI (Python)</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/abac-resource-ownership/</link>
<description>Что такое ABAC и зачем он нужен поверх ролей: как FastAPI проверяет, что пользователь обращается только к своим ресурсам — через AccessPolicy или Handler-check, с обходом для admin и записью в audit log.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/abac-resource-ownership/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Журнал действий администратора в FastAPI</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/audit-admin/</link>
<description>Как записывать каждое действие администратора в базу: таблица audit_log, декоратор для FastAPI-хэндлеров и одна транзакция с бизнес-операцией — чтобы всегда можно было восстановить кто, когда и что изменил.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/audit-admin/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Хранение токенов на клиенте — HttpOnly cookie и refresh rotation (Python/FastAPI)</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/client-token-storage/</link>
<description>Почему хранить JWT в localStorage опасно, как правильно выдавать HttpOnly cookie через FastAPI, что такое refresh token rotation и зачем нужен паттерн BFF.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/client-token-storage/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>JWT validation в FastAPI: PyJWT, JWKS и коды ответов</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/jwt-validation/</link>
<description>Как правильно проверять JWT в FastAPI через PyJWT и PyJWKClient с кешем JWKS: единая зависимость Depends(principal), ротация ключей и разница между 401 и 403.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/jwt-validation/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>PII и секреты в Python-сервисе: что нельзя писать в логи, ответы и очередь</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/pii-and-secrets/</link>
<description>Что такое PII, почему его нельзя писать в логи, HTTPException.detail и Kafka-события, как правильно хранить секреты через pydantic-settings и как избежать утечки данных в FastAPI-сервисе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/pii-and-secrets/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>RBAC в FastAPI: роли, маппинг и защита эндпоинтов</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/rbac-roles/</link>
<description>Что такое RBAC и как он работает в FastAPI: как роли попадают из JWT в объект Principal, как ограничить доступ к эндпоинту через require_roles, и чем RBAC отличается от проверки владения ресурсом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/rbac-roles/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Межсервисная аутентификация в FastAPI: mTLS и Client Credentials</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/service-to-service/</link>
<description>Как аутентифицировать вызовы между сервисами в FastAPI: mTLS через Service Mesh или Client Credentials Flow с authlib. Объясняем оба способа с примерами кода — от конфигурации до получения токена.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/service-to-service/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>Где делать auth-проверку в FastAPI: Gateway, BFF или Handler</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/python/where-the-check-goes/</link>
<description>Простыми словами: почему в FastAPI аутентификацию делают на Gateway, RBAC — через Depends на роутере, а ABAC — внутри Handler. Как не смешать три разные проверки в одно место.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/python/where-the-check-goes/</guid>
<pubDate>Sun, 28 Jun 2026 11:27:22 GMT</pubDate>
</item>
<item>
<title>PCI DSS для разработчика</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/pci-dss/</link>
<description>Что такое PCI DSS простыми словами: когда он вас касается, что такое CDE и как сузить его; таблица способов приёма карт и SAQ, токенизация и что требования значат для кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/pci-dss/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>GDPR для разработчика</title>
<link>https://vikulin-va.ru/patterns/auth-patterns/gdpr/</link>
<description>GDPR простыми словами для разработчика: что такое персональные данные, права субъекта, минимизация и срок хранения, право на удаление и псевдонимизация — что значит для кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/auth-patterns/gdpr/</guid>
<pubDate>Fri, 14 Aug 2026 04:53:06 GMT</pubDate>
</item>
<item>
<title>Конфигурация observability в Go: management-порт, логи и метрики</title>
<link>https://vikulin-va.ru/observability/go/configuration/</link>
<description>Как настроить observability в Go-сервисе с нуля: отдельный management-порт для /metrics и /health, формат логов через APP_ENV, histogram buckets под SLO и динамическая смена уровня логов без перезапуска.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/configuration/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Context propagation в Go — context.Context, middleware и горутины</title>
<link>https://vikulin-va.ru/observability/go/context-propagation/</link>
<description>В Go нет thread-local: context.Context передаётся явно через все вызовы. Разбираем, как работает request_id, откуда берётся trace_id, зачем горутины получают ctx аргументом и почему context.Background() в горутине — это ошибка.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/context-propagation/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Health checks в Go: liveness, readiness и /info</title>
<link>https://vikulin-va.ru/observability/go/health-checks/</link>
<description>Простыми словами: зачем Go-сервису два отдельных health endpoint, чем liveness отличается от readiness, как написать TTL-кеш проверки и почему health — это про процесс, а не про бизнес.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/health-checks/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Логирование в Go: slog, JSON и context.Context</title>
<link>https://vikulin-va.ru/observability/go/logging/</link>
<description>Как настроить структурированное логирование в Go с помощью slog: JSONHandler в продакшне, TextHandler локально, передача requestId через context.Context и защита от попадания персональных данных в логи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/logging/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Метрики в Go: prometheus/client_golang, RED, USE и бизнес-счётчики</title>
<link>https://vikulin-va.ru/observability/go/metrics/</link>
<description>Как подключить Prometheus-метрики в Go-сервисе с нуля: отдельный management-порт, RED-middleware для chi, GoCollector для runtime, бизнес-счётчики рядом с хендлерами и правило низкой cardinality.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/metrics/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>SLO и алерты в Go: error budget и multi-window burn rate</title>
<link>https://vikulin-va.ru/observability/go/slo-and-alerts/</link>
<description>Что такое SLO, error budget и multi-window burn rate в Go-сервисах: как считать бюджет ошибок через Prometheus, настраивать быстрые и медленные алерты и не пропустить реальный инцидент.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/slo-and-alerts/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Distributed tracing в Go: OpenTelemetry с нуля</title>
<link>https://vikulin-va.ru/observability/go/tracing/</link>
<description>Как подключить distributed tracing в Go-сервисе через OpenTelemetry: настройка TracerProvider, автоинструментация chi-роутера и pgx, ручные spans с defer, sampling в продакшене и trace_id в slog-логах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/go/tracing/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Observability в NestJS: management-порт, метрики и логи</title>
<link>https://vikulin-va.ru/observability/node/configuration/</link>
<description>Как настроить observability в NestJS с нуля: отдельный management-порт на :9090, Prometheus-метрики через prom-client, structured JSON-логи через pino и NODE_ENV-aware конфигурация.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/configuration/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Context propagation в NestJS: AsyncLocalStorage, middleware и очереди</title>
<link>https://vikulin-va.ru/observability/node/context-propagation/</link>
<description>Как сделать так, чтобы requestId и trace_id автоматически появлялись в каждом логе — через AsyncLocalStorage в NestJS, и что делать, когда контекст рвётся в фоновых очередях BullMQ.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/context-propagation/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Health checks в NestJS: liveness, readiness и /info</title>
<link>https://vikulin-va.ru/observability/node/health-checks/</link>
<description>Как настроить health checks в NestJS через @nestjs/terminus: зачем разделять liveness и readiness, как написать HealthIndicator с кешем и почему бизнес-метрики не место в probe.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/health-checks/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Структурированные логи в NestJS: pino, контекст запроса и защита персональных данных</title>
<link>https://vikulin-va.ru/observability/node/logging/</link>
<description>Как настроить structured logging в NestJS через nestjs-pino: JSON в продакшне, DI-логгер вместо console.log, requestId и trace_id в каждой записи, защита персональных данных через redact.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/logging/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Метрики в NestJS: prom-client, RED и USE методы</title>
<link>https://vikulin-va.ru/observability/node/metrics/</link>
<description>Как подключить prom-client в NestJS, настроить стандартные labels, собрать RED-метрики через interceptor, отслеживать ресурсы через collectDefaultMetrics и добавить бизнес-метрики с правильной cardinality.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/metrics/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>SLO и алерты в Node.js: error budget, burn rate и как не пропустить инцидент</title>
<link>https://vikulin-va.ru/observability/node/slo-and-alerts/</link>
<description>Что такое SLO и error budget, как считать burn rate через prom-client в NestJS, настраивать multi-window алерты в Prometheus и не утонуть в шуме.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/slo-and-alerts/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Distributed tracing в NestJS: OpenTelemetry с нуля</title>
<link>https://vikulin-va.ru/observability/node/tracing/</link>
<description>Что такое distributed tracing и зачем он нужен. Как подключить OpenTelemetry в NestJS, что такое span и traceparent, как добавить бизнес-контекст в трассировку, настроить sampling и связать логи с trace.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/node/tracing/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Логирование в Java и Spring Boot: JSON, MDC и уровни логов</title>
<link>https://vikulin-va.ru/observability/java/logging/</link>
<description>Как правильно логировать в Java и Spring Boot: structured JSON в продакшне через logstash-logback-encoder, @Slf4j с параметрами через {}, смысл уровней ERROR/WARN/INFO/DEBUG, MDC поля traceId и requestId в каждом JSON-событии, личные данные в логах и частые ошибки начинающих.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/logging/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Метрики в Spring Boot: Micrometer и Prometheus</title>
<link>https://vikulin-va.ru/observability/java/metrics/</link>
<description>Как подключить метрики в Spring Boot через Micrometer и Prometheus, зачем нужны RED и USE методы, как писать свои бизнес-метрики и почему нельзя класть user_id в теги.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/metrics/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Distributed tracing в Java: OpenTelemetry, spans и как связать логи с трассировкой</title>
<link>https://vikulin-va.ru/observability/java/tracing/</link>
<description>Что такое distributed tracing и зачем он нужен. Как подключить OpenTelemetry в Spring Boot, что такое span и traceparent, как добавить бизнес-контекст в трассировку, настроить sampling и связать логи с trace.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/tracing/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Health checks в Spring Boot: liveness, readiness и custom HealthIndicator</title>
<link>https://vikulin-va.ru/observability/java/health-checks/</link>
<description>Как Spring Boot Actuator реализует health checks: зачем разделять liveness и readiness, как написать свой HealthIndicator с TTL-кешем и чем опасно смешивать техническое здоровье с бизнес-метриками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/health-checks/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Конфигурация observability в Spring Boot</title>
<link>https://vikulin-va.ru/observability/java/configuration/</link>
<description>Как настроить observability в Spring Boot: отдельный порт для Actuator, явный список открытых endpoints, гистограммы с SLO buckets для метрик задержки, и два профиля логирования — текстовый для разработки и JSON для продакшена.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/configuration/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Context propagation и MDC в Spring Boot</title>
<link>https://vikulin-va.ru/observability/java/context-propagation/</link>
<description>Что такое MDC и зачем он нужен в Spring Boot: как requestId и userId автоматически попадают в каждый лог через MdcFilter, почему MDC.clear() в finally обязателен, как сохранить контекст при асинхронных задачах через TaskDecorator, и когда traceId проставляется автоматически через OpenTelemetry.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/context-propagation/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>SLO и алерты в Java/Spring Boot</title>
<link>https://vikulin-va.ru/observability/java/slo-and-alerts/</link>
<description>SLO (Service Level Objective) простыми словами: что такое error budget, как считать SLI в Prometheus, multi-window burn rate по Google SRE Workbook — fast burn за 1 час и slow burn за 6 часов. Как не утонуть в ложных срабатываниях и зачем каждому алерту нужен runbook.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/slo-and-alerts/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Профилирование и утечки памяти: когда метрик уже мало</title>
<link>https://vikulin-va.ru/observability/java/profiling-and-leaks/</link>
<description>Метрики показывают, что память растёт, но не говорят, кто её держит. Как снять дамп и запись профилировщика на работающем сервисе, что искать в них, какие утечки встречаются чаще всего и как не уронить сервис самой диагностикой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/profiling-and-leaks/</guid>
<pubDate>Tue, 1 Sep 2026 06:34:38 GMT</pubDate>
</item>
<item>
<title>От алерта до строки лога: как связать три сигнала</title>
<link>https://vikulin-va.ru/observability/java/from-alert-to-log/</link>
<description>Метрики, трассировка и логи по отдельности уже настроены, а расследование всё равно идёт по вкладкам наугад. Как связать их одним идентификатором, что такое exemplars и в каком порядке действует дежурный.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/java/from-alert-to-log/</guid>
<pubDate>Tue, 1 Sep 2026 06:34:38 GMT</pubDate>
</item>
<item>
<title>Конфигурация observability в Python: management-порт, логи и метрики</title>
<link>https://vikulin-va.ru/observability/python/configuration/</link>
<description>Как настроить observability в FastAPI с нуля: отдельный порт для /metrics и /health, structlog с JSON в проде и читаемым текстом локально, правильные buckets гистограммы латентности и стандартные labels.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/configuration/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Context propagation в FastAPI: request_id, trace_id и user_id в каждом логе</title>
<link>https://vikulin-va.ru/observability/python/context-propagation/</link>
<description>Как прокинуть request_id, user_id и trace_id во все логи FastAPI-приложения через contextvars и structlog — без передачи аргументами вручную. Что ломается на run_in_executor и Kafka, и как это починить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/context-propagation/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Health checks в FastAPI: liveness, readiness и /info</title>
<link>https://vikulin-va.ru/observability/python/health-checks/</link>
<description>Как правильно сделать health checks в FastAPI: раздельные /health/live и /health/ready, TTL-кеш на внешние системы, /info с git-коммитом. Почему liveness не должна зависеть от базы данных и чем это опасно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/health-checks/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Логирование в Python: structlog, уровни, contextvars и защита персональных данных</title>
<link>https://vikulin-va.ru/observability/python/logging/</link>
<description>Как настроить структурированные логи в Python и FastAPI: structlog с JSON в продакшне, contextvars для сквозных полей, kwargs вместо f-string, защита персональных данных в логах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/logging/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Метрики в Python — prometheus-client, RED, USE и бизнес-показатели</title>
<link>https://vikulin-va.ru/observability/python/metrics/</link>
<description>Как подключить prometheus-client и prometheus-fastapi-instrumentator в FastAPI, собрать RED/USE метрики, добавить бизнес-счётчики и вынести /metrics на отдельный порт.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/metrics/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>SLO и алерты в Python</title>
<link>https://vikulin-va.ru/observability/python/slo-and-alerts/</link>
<description>Что такое SLO, error budget и multi-window burn rate — и как настроить грамотные алерты в Python/FastAPI через prometheus-client, чтобы будили только когда это важно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/slo-and-alerts/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Distributed tracing в Python: OpenTelemetry с нуля</title>
<link>https://vikulin-va.ru/observability/python/tracing/</link>
<description>Что такое distributed tracing и зачем он нужен. Как подключить OpenTelemetry в FastAPI, что такое span и traceparent, как добавить бизнес-контекст в трассировку, настроить sampling и связать логи с trace.</description>
<guid isPermaLink="true">https://vikulin-va.ru/observability/python/tracing/</guid>
<pubDate>Sun, 28 Jun 2026 13:17:56 GMT</pubDate>
</item>
<item>
<title>Command side в CQRS на Go</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/command-side/</link>
<description>Как устроен command side в CQRS на Go: struct-команда с маркером, handler с транзакцией pgx через UnitOfWork, доменный метод агрегата, запись событий в outbox — всё в одной транзакции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/command-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Query side в CQRS на Go: как читать данные правильно</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/query-side/</link>
<description>Что такое query side в CQRS и зачем он нужен: как устроены Query-struct, read-only транзакция pgx, ViewRepository через sqlc и денормализованный read-DTO в Go-проекте.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/query-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Read-model в CQRS (Go): где хранить и как обновлять проекцию</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/read-model/</link>
<description>Что такое read-model в CQRS и зачем она нужна. Как выбрать хранилище под задачу: PG-таблица, materialized view, Redis или ElasticSearch. Как обновлять проекцию через события и почему нельзя делать это синхронно. Как восстановить read-model с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/read-model/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Синхронизация read-model через события в Go</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/sync-via-events/</link>
<description>Как связать write и read стороны в CQRS: outbox-паттерн в одной транзакции с агрегатом, relay-горутина с kafka-go, idempotent consumer и read-your-writes на практике в Go.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/sync-via-events/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Уровень и эволюция CQRS в Go</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/tier-and-evolution/</link>
<description>CQRS — это шкала, а не кнопка «вкл/выкл». Разбираем четыре ступени: от простого сервиса без разделения до отдельных хранилищ с синхронизацией через Kafka. Для каждой — код на Go, объяснение зачем переходить и чего это стоит.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/tier-and-evolution/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Когда применять CQRS в Go-сервисе</title>
<link>https://vikulin-va.ru/patterns/cqrs/go/when-cqrs-is-justified/</link>
<description>Разбираем три уровня CQRS в Go: от бесплатных маркеров Command/Query до отдельных хранилищ. Когда хватает read-only транзакции pgx, когда нужна денормализованная таблица, а когда — ElasticSearch.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/go/when-cqrs-is-justified/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Command side в CQRS — как писать команды в NestJS</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/command-side/</link>
<description>Простым языком: что такое command в CQRS, как устроен command-handler в NestJS, почему команда меняет только один агрегат и что возвращать из handler-а.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/command-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Query side в CQRS на NestJS — как устроено чтение данных</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/query-side/</link>
<description>Разбираем query side в CQRS на NestJS: как работает Query-класс, зачем отдельный ViewRepository с raw SQL, почему handler не должен вызывать доменные методы и что такое read-DTO.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/query-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Read-model в CQRS — денормализованная проекция на NestJS / TypeScript</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/read-model/</link>
<description>Что такое read-model в CQRS, зачем нужна денормализованная проекция и как выбрать хранилище: PG-таблица, materialized view, Redis или ElasticSearch. Как обновлять read-model через события и почему она всегда восстановима из write-стороны.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/read-model/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Синхронизация read-model через события в NestJS</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/sync-via-events/</link>
<description>Как удерживать read-model в актуальном состоянии в CQRS-приложении на NestJS: outbox-паттерн, Kafka, защита от дублей и что делать при потере read-store.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/sync-via-events/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Уровень и эволюция CQRS в NestJS</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/tier-and-evolution/</link>
<description>Как CQRS в NestJS растёт от простого сервиса до event-driven read-model: четыре ступени, когда переходить на следующую и что появляется на каждой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/tier-and-evolution/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Когда применять CQRS в NestJS</title>
<link>https://vikulin-va.ru/patterns/cqrs/node/when-cqrs-is-justified/</link>
<description>Разбираемся, когда CQRS реально помогает, а когда добавляет сложность без выгоды: три уровня разделения команд и запросов в NestJS с примерами на TypeScript.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/node/when-cqrs-is-justified/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Когда применять CQRS: от простых маркеров до разных баз данных</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/when-cqrs-is-justified/</link>
<description>Разбираем три уровня CQRS: маркеры UseCaseCommand/UseCaseQuery, денормализованная read-таблица в той же базе и полное разделение хранилищ. Объясняем, когда каждый уровень оправдан, а когда усложняет без пользы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/when-cqrs-is-justified/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Command side в CQRS — как работает запись</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/command-side/</link>
<description>Простыми словами: что такое команда в CQRS, как устроен command-handler, почему одна команда меняет только один агрегат, зачем нужен pessimistic lock при загрузке и как инварианты проверяются внутри агрегата, а не в обработчике.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/command-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Query side в CQRS: как читать данные без write-инструментов</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/query-side/</link>
<description>Что такое query side в CQRS: почему чтение выделяют в отдельный стек, как устроен query-handler с readOnly-транзакцией, что такое ViewRepository и read-DTO, и какие ошибки чаще всего встречаются при реализации.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/query-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Read-model в CQRS — денормализованная проекция для быстрого чтения</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/read-model/</link>
<description>Что такое read-model в CQRS, зачем нужна денормализованная проекция и как выбрать хранилище: PG-таблица, materialized view, Redis или ElasticSearch. Как обновлять read-model через события и почему она всегда восстановима из write-стороны.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/read-model/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Синхронизация read-model через события: outbox, Kafka и idempotent consumer</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/sync-via-events/</link>
<description>Как read-model в CQRS всегда отражает актуальное состояние: атомарный outbox рядом с агрегатом, relay публикует в Kafka, consumer обновляет проекцию. Разбираем idempotent consumer, bootstrap-rebuild и read-your-writes — простым языком с примерами кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/sync-via-events/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Уровень и эволюция CQRS — от простого разделения к event-driven read-model</title>
<link>https://vikulin-va.ru/patterns/cqrs/java/tier-and-evolution/</link>
<description>CQRS — не «есть или нет», а шкала зрелости. Разбираем четыре уровня: без CQRS, lightweight-маркеры, отдельный ViewRepository и event-driven read-model с outbox и Kafka. Каждый переход обоснован метриками, а не модой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/java/tier-and-evolution/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Command side в CQRS на Python: как писать команды и обработчики</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/command-side/</link>
<description>Как устроен write-путь в CQRS на Python: frozen dataclass как команда, handler с UnitOfWork и SQLAlchemy, доменный метод агрегата, возврат id вместо DTO. Разбираем с нуля на примере ConfirmOrder.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/command-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Query side в CQRS на Python — как читать данные правильно</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/query-side/</link>
<description>Как устроена читающая сторона CQRS в Python: frozen dataclass для запросов, отдельный ViewRepository, read-only AsyncSession через SQLAlchemy, денормализованные Pydantic-DTO под API.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/query-side/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Read-model в CQRS — денормализованная проекция на FastAPI / SQLAlchemy</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/read-model/</link>
<description>Что такое read-model в CQRS, зачем нужна денормализованная проекция и как выбрать хранилище: PG-таблица, materialized view, Redis или ElasticSearch. Как обновлять read-model через события и почему она всегда восстановима из write-стороны.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/read-model/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Как read-model синхронизируется с write-side в CQRS на Python</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/sync-via-events/</link>
<description>Разбираемся, как связать write и read стороны в CQRS на Python: outbox-паттерн в одной SQLAlchemy-транзакции, Kafka-relay, idempotent consumer и восстановление проекции после сбоя.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/sync-via-events/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Уровень и эволюция CQRS — Python (FastAPI + SQLAlchemy)</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/tier-and-evolution/</link>
<description>Простыми словами: шкала зрелости CQRS в Python — от плоского FastAPI-сервиса до event-driven read-model с outbox и Kafka. Как понять, какой уровень нужен прямо сейчас.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/tier-and-evolution/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Когда применять CQRS в Python-сервисе</title>
<link>https://vikulin-va.ru/patterns/cqrs/python/when-cqrs-is-justified/</link>
<description>Простыми словами: что такое CQRS, три уровня от маркеров до раздельных хранилищ, когда переходить между ними и какие ошибки чаще всего делают при знакомстве с паттерном.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/cqrs/python/when-cqrs-is-justified/</guid>
<pubDate>Sun, 28 Jun 2026 07:31:47 GMT</pubDate>
</item>
<item>
<title>Входные адаптеры в гексагональной архитектуре на Go</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/adapters-in/</link>
<description>Что такое in-adapter на Go, зачем разделять пакеты по типу входа, как chi-handler передаёт команду в UseCase через маппер и почему handler не должен знать про репозиторий.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/adapters-in/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Out-адаптеры в Hexagonal Architecture на Go</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/adapters-out/</link>
<description>Как устроен out-адаптер в гексагональной архитектуре на Go: отдельный пакет на каждую внешнюю систему, реализация port-interface, mapper между доменом и внешним форматом, обработка ошибок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/adapters-out/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Архитектурные тесты Hexagonal в Go</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/architecture-tests/</link>
<description>Как автоматически защитить границы гексагональной архитектуры в Go: packages.Load проверяет импорты core/, in-adapter и out-adapter; required CI check блокирует PR при нарушении.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/architecture-tests/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Bootstrap и Composition Root в гексагональной архитектуре (Go)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/bootstrap-composition-root/</link>
<description>Что такое Composition Root и зачем он нужен: как собрать Go-сервис из адаптеров и обработчиков в одном месте, настроить конфигурацию через envconfig и правильно завершить работу сервера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/bootstrap-composition-root/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Core слой в Go: Hexagonal Architecture</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/core-layer/</link>
<description>Что такое core слой в Go-сервисе с гексагональной архитектурой: агрегаты, port-интерфейсы, use case handler'ы, ошибки как значения. Почему core не знает о базе данных и HTTP-роутере.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/core-layer/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Структура пакетов Hexagonal Architecture на Go</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/module-structure/</link>
<description>Как организовать папки в Go-сервисе по принципу Hexagonal: core/ отдельно от адаптеров, каждая внешняя система в своём пакете, bootstrap как единственное место сборки. С примерами кода и архитектурным тестом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/module-structure/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Ports в Hexagonal Architecture — как ядро общается с внешним миром (Go)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/ports/</link>
<description>Что такое port в Hexagonal Architecture на Go: зачем нужны интерфейсы в core/, как описывать контракт с базой данных и внешними системами через domain-типы, как обрабатывать ошибки и почему inbound port — это просто UseCase Handler.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/ports/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Когда применять Hexagonal Architecture в Go-сервисе</title>
<link>https://vikulin-va.ru/patterns/hexagonal/go/when-to-use-hexagonal/</link>
<description>Разбираемся, при каких условиях Hexagonal Architecture оправдана в Go-проекте: 2+ внешних системы, богатая бизнес-логика, несколько точек входа — и когда она только добавляет лишнюю работу.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/go/when-to-use-hexagonal/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Adapters In в Hexagonal-архитектуре на NestJS</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/adapters-in/</link>
<description>Что такое входящий адаптер в гексагональной архитектуре, зачем делать отдельные папки для HTTP и Kafka, как контроллер маппит DTO в команду и почему никакой бизнес-логики в нём нет.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/adapters-in/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Out-адаптеры в Hexagonal на NestJS/TypeScript</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/adapters-out/</link>
<description>Out-адаптер в NestJS/TypeScript — это «выход» сервиса во внешний мир: базу данных, платёжный шлюз, Kafka. Разбираем, как устроить папки, почему нужен Symbol-токен, как писать маппер и не тащить бизнес-логику в адаптер.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/adapters-out/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Архитектурные тесты в Hexagonal-проекте (NestJS)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/architecture-tests/</link>
<description>Как держать границы Hexagonal-архитектуры под контролем в NestJS: dependency-cruiser, eslint-plugin-boundaries, типичные нарушения и обязательная проверка в CI.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/architecture-tests/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Bootstrap / Composition Root в Hexagonal (NestJS)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/bootstrap-composition-root/</link>
<description>Что такое Composition Root в NestJS-приложении, что живёт в папке app/, как работает wiring портов через Symbol-токены и почему graceful shutdown важен при деплое.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/bootstrap-composition-root/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Core слой в Hexagonal Architecture: Node/NestJS</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/core-layer/</link>
<description>Что такое core/ в NestJS-приложении: агрегаты, port-интерфейсы с Symbol-токенами, plain-классы хендлеров, rich domain вместо анемичной модели. Без @Injectable и без фреймворков.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/core-layer/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Структура папок в Hexagonal-проекте на NestJS</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/module-structure/</link>
<description>Как устроить папки NestJS-проекта по Hexagonal Architecture: core/, adapters/in, adapters/out, app/ — и почему без dependency-cruiser граница между слоями существует только на словах.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/module-structure/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Ports в Hexagonal Architecture — как изолировать ядро от внешнего мира</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/ports/</link>
<description>Что такое port в гексагональной архитектуре: зачем нужен интерфейс + Symbol-токен в core/, почему методы порта принимают domain-типы, как устроены ошибки и что играет роль inbound port в NestJS/TypeScript.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/ports/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Когда применять Hexagonal Architecture в Node/NestJS</title>
<link>https://vikulin-va.ru/patterns/hexagonal/node/when-to-use-hexagonal/</link>
<description>Простыми словами: что такое Hexagonal Architecture, когда она реально помогает в NestJS-проекте и когда добавляет только лишнюю сложность. Признаки «пора» и «рано» с примерами кода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/node/when-to-use-hexagonal/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Когда применять Hexagonal Architecture</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/when-to-use-hexagonal/</link>
<description>Простым языком: что такое Hexagonal Architecture, когда она реально помогает (много интеграций, сложная бизнес-логика, большая команда), а когда только добавляет сложность. Признаки «пора» и «рано», ловушка cargo-cult и частичного применения.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/when-to-use-hexagonal/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Структура модулей в Hexagonal Architecture</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/module-structure/</link>
<description>Как организовать многомодульный Gradle-проект для Hexagonal Architecture: почему core/ живёт без Spring, как разбить адаптеры по назначению и внешним системам, и что делает bootstrap/ — последний, кто всё собирает вместе.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/module-structure/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Core слой в Hexagonal Architecture</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/core-layer/</link>
<description>Что такое core/ в Hexagonal Architecture и что туда входит: агрегаты, port-интерфейсы, use cases, application-DTO. Почему core/ не знает о Spring, базе данных и HTTP. Как выглядит rich domain и чем он отличается от анемичной модели.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/core-layer/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Ports в Hexagonal Architecture — interfaces в core/</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/ports/</link>
<description>Что такое port в гексагональной архитектуре, где он живёт, как называется и почему всегда является интерфейсом. Разбираем outbound port, именование, domain-типы в сигнатурах, иерархию исключений и inbound-вход через UseCase.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/ports/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Входные адаптеры в гексагональной архитектуре — REST, Kafka, CLI</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/adapters-in/</link>
<description>Что такое входной адаптер в гексагональной архитектуре, как он принимает запрос и передаёт его в ядро, почему контроллер должен быть тонким, и как не смешивать бизнес-логику с транспортным слоем.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/adapters-in/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Out-адаптеры в Hexagonal Architecture — как сервис разговаривает с внешним миром</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/adapters-out/</link>
<description>Что такое out-адаптер в Hexagonal Architecture: зачем нужен отдельный модуль на каждую внешнюю систему, как адаптер реализует port-интерфейс из ядра, почему маппер живёт в адаптере, а не в ядре, и какие ошибки ломают изоляцию.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/adapters-out/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Bootstrap / Composition Root в Hexagonal</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/bootstrap-composition-root/</link>
<description>Что такое bootstrap-модуль в гексагональной архитектуре: зачем он нужен, что в него входит, почему он зависит от всех остальных модулей и никто не зависит от него. Частые ошибки — логика в bootstrap и @SpringBootApplication не на своём месте.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/bootstrap-composition-root/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Архитектурные тесты в Hexagonal-проекте через ArchUnit</title>
<link>https://vikulin-va.ru/patterns/hexagonal/java/architecture-tests/</link>
<description>Как с помощью ArchUnit написать тесты, которые автоматически проверяют границы гексагональной архитектуры: core без Spring и JOOQ, port как интерфейс, адаптеры не зависят друг от друга. Что это даёт в CI и почему только code review не достаточно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/java/architecture-tests/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Входные адаптеры в Hexagonal-архитектуре на Python</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/adapters-in/</link>
<description>Как устроен in-adapter на Python с FastAPI: отдельные пакеты на каждый тип входа, тонкий роутер, маппер Pydantic DTO → команда, Dispatcher — и почему бизнес-логика в роутере это проблема.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/adapters-in/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Out-адаптеры в Hexagonal Python: как сервис общается с внешним миром</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/adapters-out/</link>
<description>Что такое out-адаптер в гексагональной архитектуре, как разбивать внешние системы по отдельным пакетам, зачем нужен маппер и почему бизнес-логика не должна жить в адаптере. Примеры на Python с httpx и SQLAlchemy.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/adapters-out/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Архитектурные тесты в Python: как не дать слоям перемешаться</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/architecture-tests/</link>
<description>Как import-linter автоматически проверяет границы слоёв Hexagonal-архитектуры в Python: три вида контрактов, настройка в pyproject.toml и обязательная проверка в CI.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/architecture-tests/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Bootstrap / Composition Root в Hexagonal (Python)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/bootstrap-composition-root/</link>
<description>Как собрать Python-сервис с гексагональной архитектурой: что живёт в app/, как работает фабрика create_app, зачем lifespan, как dependency-injector связывает core и адаптеры.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/bootstrap-composition-root/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Core слой в Hexagonal Architecture на Python</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/core-layer/</link>
<description>Что такое core слой в Hexagonal на Python, почему он не зависит от FastAPI и SQLAlchemy, как объявить агрегаты, Protocol-порты и use cases, и зачем нужен import-linter.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/core-layer/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Структура пакетов в Hexagonal Architecture (Python)</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/module-structure/</link>
<description>Как разложить Python-проект по папкам в Hexagonal Architecture: что идёт в core/, что в adapters/, зачем нужен import-linter и как работает composition root в app/.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/module-structure/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Ports в Hexagonal Architecture на Python — как ядро говорит с внешним миром</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/ports/</link>
<description>Что такое port в гексагональной архитектуре, зачем он нужен и как его правильно объявлять через Protocol в Python: именование, domain-типы в сигнатурах, иерархия исключений, inbound-вход через Dispatcher.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/ports/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Когда применять Hexagonal Architecture в Python</title>
<link>https://vikulin-va.ru/patterns/hexagonal/python/when-to-use-hexagonal/</link>
<description>Разбираемся, когда Hexagonal Architecture в Python реально помогает, а когда только усложняет: конкретные признаки, примеры кода и типичные ошибки при внедрении.</description>
<guid isPermaLink="true">https://vikulin-va.ru/patterns/hexagonal/python/when-to-use-hexagonal/</guid>
<pubDate>Sun, 28 Jun 2026 10:17:11 GMT</pubDate>
</item>
<item>
<title>Надёжность, масштабируемость, сопровождаемость — простыми словами</title>
<link>https://vikulin-va.ru/system-design/reliability-scalability-maintainability/</link>
<description>Три качества, вокруг которых крутится системный дизайн, для начинающих: чем сбой отличается от отказа, как описать нагрузку числами, почему среднее время ответа врёт и зачем смотреть на p99, и что делает систему простой в сопровождении.</description>
<guid isPermaLink="true">https://vikulin-va.ru/system-design/reliability-scalability-maintainability/</guid>
<pubDate>Sun, 12 Jul 2026 16:08:41 GMT</pubDate>
</item>
<item>
<title>Метод системного дизайна: от требований к архитектуре</title>
<link>https://vikulin-va.ru/system-design/method/</link>
<description>Как проектировать систему по шагам: от функциональных требований и грубых оценок нагрузки — через контракты и модель данных — к схеме компонентов, горячим точкам и поведению при отказах. Пошаговый метод с объяснением, зачем каждый шаг нужен именно в таком порядке.</description>
<guid isPermaLink="true">https://vikulin-va.ru/system-design/method/</guid>
<pubDate>Sat, 6 Jun 2026 18:30:47 GMT</pubDate>
</item>
<item>
<title>Строительные блоки системного дизайна</title>
<link>https://vikulin-va.ru/system-design/building-blocks/</link>
<description>Что такое строительные блоки системного дизайна и зачем они нужны: балансировка, кеш, репликация, шардинг, очереди, поиск, аналитика, CDN, rate limiting — простым языком с примерами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/system-design/building-blocks/</guid>
<pubDate>Sat, 6 Jun 2026 18:30:47 GMT</pubDate>
</item>
<item>
<title>Как устроена система уведомлений: архитектура с нуля</title>
<link>https://vikulin-va.ru/system-design/example-notifications/</link>
<description>Разбираем архитектуру системы уведомлений для 10 млн пользователей: очереди, per-channel изоляция, дедупликация, счётчик непрочитанных в Redis, деградация при отказах провайдера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/system-design/example-notifications/</guid>
<pubDate>Sat, 6 Jun 2026 18:30:47 GMT</pubDate>
</item>
<item>
<title>Как оформить и защитить дизайн системы: design doc, C4, ревью</title>
<link>https://vikulin-va.ru/system-design/design-docs/</link>
<description>Что такое design doc и зачем он нужен, как строить диаграммы по модели C4, что такое ADR и как проводить ревью дизайна — от структуры документа до типичных ошибок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/system-design/design-docs/</guid>
<pubDate>Sat, 6 Jun 2026 18:30:47 GMT</pubDate>
</item>
<item>
<title>B-деревья и LSM-деревья простыми словами: как база данных хранит данные</title>
<link>https://vikulin-va.ru/data-foundations/storage-engines/</link>
<description>Для начинающих: что происходит на диске, когда база сохраняет строку — от журнала и хеш-индекса к SSTable, MemTable и compaction, устройство B-дерева и WAL, и почему одни базы быстрее пишут, а другие читают.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/storage-engines/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>OLTP и OLAP простыми словами: два разных мира работы с данными</title>
<link>https://vikulin-va.ru/data-foundations/oltp-vs-olap/</link>
<description>Для начинающих: чем нагрузка приложения (OLTP) отличается от аналитической (OLAP), зачем нужен склад данных и ETL, что такое схема «звезда» с таблицей фактов и почему столбцовое хранение делает аналитику быстрой.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/oltp-vs-olap/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Эволюция схем простыми словами: менять формат данных, ничего не ломая</title>
<link>https://vikulin-va.ru/data-foundations/schema-evolution/</link>
<description>Для начинающих: почему при выкате новой версии старый и новый код работают одновременно и данным нужна совместимость в обе стороны — обратная и прямая; ловушки в базе, API и событиях; правила эволюции схем и чем форматы со схемой лучше JSON.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/schema-evolution/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Модели репликации простыми словами: почему реплика отстаёт, multi-leader и кворумы</title>
<link>https://vikulin-va.ru/data-foundations/replication-models/</link>
<description>Разбираем для начинающих, что ломается, когда реплика отстаёт от мастера: три аномалии и гарантии против них, ловушки при отказе мастера, репликация с несколькими ведущими и конфликты записи, кворумы w+r&gt;n — с примерами и без жаргона.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/replication-models/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Секционирование (шардинг) простыми словами: как разрезать данные по узлам без горячей точки</title>
<link>https://vikulin-va.ru/data-foundations/partitioning/</link>
<description>Для начинающих: зачем данные режут на секции (шарды), в чём разница разбиения по диапазону и по хешу, что такое горячая точка, как устроены вторичные индексы (локальные vs глобальные), как двигать данные при добавлении узлов и как клиент находит нужную секцию.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/partitioning/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Система записи и производные данные простыми словами: почему кеш, индекс и read-модель — одно и то же</title>
<link>https://vikulin-va.ru/data-foundations/derived-data/</link>
<description>Для начинающих: одна простая рамка на кеши, индексы, материализованные представления и read-модели — что такое источник правды, чем производные данные отличаются (их можно спокойно выбросить и пересобрать) и три способа их получать: online, batch, stream.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/derived-data/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Потоковая обработка простыми словами: перехват изменений (CDC) и время в потоках</title>
<link>https://vikulin-va.ru/data-foundations/stream-processing/</link>
<description>Для начинающих: как производные данные держат свежими почти в реальном времени — CDC (change data capture) вместо двойной записи, ловушка «время события против времени обработки» и типы окон: падающее, прыгающее, скользящее, сессионное.</description>
<guid isPermaLink="true">https://vikulin-va.ru/data-foundations/stream-processing/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Проблемы распределённых систем простыми словами: частичные отказы, ненадёжные часы, истина по кворуму</title>
<link>https://vikulin-va.ru/distributed-systems/distributed-systems-trouble/</link>
<description>Для начинающих: почему группу серверов нельзя программировать как один компьютер — что такое частичный отказ и зачем нужны тайм-ауты, чему нельзя доверять (сеть, часы, паузы процессов), что такое fencing token и почему истину определяет большинство узлов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/distributed-systems/distributed-systems-trouble/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Согласованность и консенсус простыми словами: линеаризуемость, CAP и одна общая задача</title>
<link>https://vikulin-va.ru/distributed-systems/consistency-and-consensus/</link>
<description>Для начинающих: что такое линеаризуемость (иллюзия единственной копии), теорема CAP без мифа про «2 из 3», причинный порядок против полного и главный вывод — выбор ведущего, уникальность и атомарная фиксация оказываются одной задачей: консенсусом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/distributed-systems/consistency-and-consensus/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Корректность в распределённой системе простыми словами: сквозной аргумент, exactly-once, целостность против своевременности</title>
<link>https://vikulin-va.ru/distributed-systems/correctness-in-distributed-systems/</link>
<description>Для начинающих: почему сериализуемой транзакции и дедупа TCP недостаточно — сквозной аргумент и exactly-once через request_id, чем целостность отличается от своевременности и почему целостность важнее, и принцип «доверяй, но проверяй».</description>
<guid isPermaLink="true">https://vikulin-va.ru/distributed-systems/correctness-in-distributed-systems/</guid>
<pubDate>Tue, 25 Aug 2026 12:23:02 GMT</pubDate>
</item>
<item>
<title>Выбор начальной архитектуры: монолит, модульный монолит, микросервисы</title>
<link>https://vikulin-va.ru/architecture-choice/monolith-vs-microservices/</link>
<description>Простыми словами: чем отличается слойный монолит от модульного и микросервисов, когда что брать, какие риски у каждого варианта и как не выбрать микросервисы там, где хватит монолита.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/monolith-vs-microservices/</guid>
<pubDate>Mon, 18 May 2026 07:48:58 GMT</pubDate>
</item>
<item>
<title>PostgreSQL или MongoDB: как выбрать базу данных</title>
<link>https://vikulin-va.ru/architecture-choice/pg-vs-mongo/</link>
<description>Простыми словами: чем отличаются PostgreSQL и MongoDB, когда какая база подходит, и как не ошибиться с выбором. Разбираем природу данных, транзакции, шардинг и типичные ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/pg-vs-mongo/</guid>
<pubDate>Mon, 18 May 2026 07:48:58 GMT</pubDate>
</item>
<item>
<title>Oracle или PostgreSQL: отличия и миграция</title>
<link>https://vikulin-va.ru/architecture-choice/oracle-vs-postgresql/</link>
<description>Чем Oracle отличается от PostgreSQL и как переезжают с одного на другой: лицензии, PL/SQL против PL/pgSQL, типы и последовательности, грабли миграции и когда Oracle оправдан.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/oracle-vs-postgresql/</guid>
<pubDate>Fri, 14 Aug 2026 04:53:06 GMT</pubDate>
</item>
<item>
<title>Cassandra, PostgreSQL или MongoDB: когда брать колоночную NoSQL</title>
<link>https://vikulin-va.ru/architecture-choice/cassandra-vs-sql-vs-mongo/</link>
<description>Простыми словами: что такое Apache Cassandra, чем колоночная распределённая NoSQL отличается от реляционной PostgreSQL и документной MongoDB, как устроены модель данных и согласованность и когда какая база уместна.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/cassandra-vs-sql-vs-mongo/</guid>
<pubDate>Sun, 19 Jul 2026 19:18:43 GMT</pubDate>
</item>
<item>
<title>Графовые данные простыми словами: рекурсивный SQL или графовая СУБД</title>
<link>https://vikulin-va.ru/architecture-choice/sql-vs-graph-db/</link>
<description>Для начинающих: как понять, что ваши данные — это граф, как обходить иерархии в PostgreSQL через WITH RECURSIVE, где рекурсивный SQL упирается в предел и когда честнее взять графовую СУБД вроде Neo4j.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/sql-vs-graph-db/</guid>
<pubDate>Mon, 13 Jul 2026 09:22:14 GMT</pubDate>
</item>
<item>
<title>Neo4j: где применяют графовую СУБД — от рекомендаций до GraphRAG</title>
<link>https://vikulin-va.ru/architecture-choice/neo4j/</link>
<description>Простыми словами: где применяют графовую СУБД Neo4j — рекомендации, антифрод, социальные графы, граф знаний — и почему её сейчас активно берут под GraphRAG для языковых моделей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/neo4j/</guid>
<pubDate>Mon, 17 Aug 2026 04:39:37 GMT</pubDate>
</item>
<item>
<title>PostgreSQL или ClickHouse: когда добавлять вторую базу</title>
<link>https://vikulin-va.ru/architecture-choice/pg-vs-clickhouse/</link>
<description>Простыми словами: чем ClickHouse отличается от PostgreSQL, зачем держать две базы одновременно и как понять, что пора переносить аналитику — критерии выбора, типичные ошибки и пошаговый чек-лист.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/pg-vs-clickhouse/</guid>
<pubDate>Sat, 6 Jun 2026 16:38:02 GMT</pubDate>
</item>
<item>
<title>Поиск: PostgreSQL FTS или Elasticsearch</title>
<link>https://vikulin-va.ru/architecture-choice/pg-fts-vs-elasticsearch/</link>
<description>Объясняем, как работает полнотекстовый поиск в PostgreSQL через tsvector и GIN-индекс, чем он отличается от Elasticsearch и по каким критериям выбрать правильный инструмент для вашего проекта.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/pg-fts-vs-elasticsearch/</guid>
<pubDate>Sat, 6 Jun 2026 16:38:02 GMT</pubDate>
</item>
<item>
<title>Файлы: в базе данных или в object storage</title>
<link>https://vikulin-va.ru/architecture-choice/db-vs-s3/</link>
<description>Простыми словами: чем хранение файлов в базе данных отличается от object storage, когда bytea в PostgreSQL разумен, а когда пора переходить на S3, как устроен двухфазный протокол загрузки и какие ошибки встречаются чаще всего.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/db-vs-s3/</guid>
<pubDate>Sat, 6 Jun 2026 16:38:02 GMT</pubDate>
</item>
<item>
<title>Между сервисами: синхронный вызов или события</title>
<link>https://vikulin-va.ru/architecture-choice/sync-vs-async/</link>
<description>Простыми словами: когда два сервиса общаются через REST, а когда через очередь сообщений, чем отличается один подход от другого, и как выбрать нужный для конкретного случая.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/sync-vs-async/</guid>
<pubDate>Sat, 6 Jun 2026 16:38:02 GMT</pubDate>
</item>
<item>
<title>Spring MVC, WebFlux и виртуальные потоки: что выбрать</title>
<link>https://vikulin-va.ru/architecture-choice/mvc-vs-webflux/</link>
<description>Простым языком: в чём разница между Spring MVC, WebFlux и виртуальными потоками Java 21, почему большинству сервисов подходит MVC с виртуальными потоками, и в каких случаях WebFlux всё ещё нужен.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/mvc-vs-webflux/</guid>
<pubDate>Sat, 6 Jun 2026 16:38:02 GMT</pubDate>
</item>
<item>
<title>ADR: как фиксировать архитектурные решения</title>
<link>https://vikulin-va.ru/architecture-choice/adr/</link>
<description>Что такое Architecture Decision Record, зачем он нужен, как выглядит минимальный формат с контекстом и альтернативами, как работают статусы proposed/accepted/superseded и где хранить ADR рядом с кодом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/adr/</guid>
<pubDate>Sat, 6 Jun 2026 16:43:55 GMT</pubDate>
</item>
<item>
<title>Роль архитектора в команде разработки</title>
<link>https://vikulin-va.ru/architecture-choice/architect-role/</link>
<description>Что на самом деле делает архитектор в продуктовой команде: карта системы, архитектурные решения, границы сервисов, оценка последствий изменений и технические стандарты — с нуля и простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/architect-role/</guid>
<pubDate>Sat, 6 Jun 2026 16:43:55 GMT</pubDate>
</item>
<item>
<title>Spring Cloud или Kubernetes</title>
<link>https://vikulin-va.ru/architecture-choice/spring-cloud-vs-kubernetes/</link>
<description>Что осталось от Spring Cloud в мире Kubernetes: конфигурация, service discovery, gateway, устойчивость — какие задачи забрала платформа, какие остались библиотекам и как выглядит современный стек.</description>
<guid isPermaLink="true">https://vikulin-va.ru/architecture-choice/spring-cloud-vs-kubernetes/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Как принять команду: первые 90 дней тимлида</title>
<link>https://vikulin-va.ru/teamlead/taking-over-team/</link>
<description>Что делать новому тимлиду в первые 90 дней: как читать ситуацию, выстраивать контракты с командой и продакт-овнером, управлять потоком задач и возвращать доверие стейкхолдеров.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/taking-over-team/</guid>
<pubDate>Sat, 6 Jun 2026 18:02:08 GMT</pubDate>
</item>
<item>
<title>Технический долг: как его называть, считать и защищать</title>
<link>https://vikulin-va.ru/teamlead/technical-debt/</link>
<description>Что такое технический долг и чем он отличается от плохого кода, как измерить его в понятных бизнесу величинах, когда платить и когда терпеть, и как встроить выплату в обычный поток работы.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/technical-debt/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Почему оценки не сбываются и что с этим делать</title>
<link>https://vikulin-va.ru/teamlead/estimates-and-deadlines/</link>
<description>Откуда берётся систематическая ошибка в оценке задач: конус неопределённости, забытая работа, оценка против обязательства. Как декомпозиция снижает ошибку и как считать по фактической пропускной способности.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/estimates-and-deadlines/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Код-ревью в команде: нормы, скорость и споры</title>
<link>https://vikulin-va.ru/teamlead/code-review-culture/</link>
<description>Как сделать код-ревью быстрым и полезным: размер изменения, срок ответа, кто ревьюит, что блокирует слияние, как гасить споры о вкусах и что делать, когда ревью стало узким местом.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/code-review-culture/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Постмортем и дежурства: разбор аварий без поиска виноватых</title>
<link>https://vikulin-va.ru/teamlead/postmortems/</link>
<description>Как устроен разбор аварии: постмортем как документ, почему он безобвинительный, как искать причину в системе, а не в человеке, что делать с планом действий и как организовать дежурства.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/postmortems/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Найм инженеров и ввод в работу: как выбрать и включить человека</title>
<link>https://vikulin-va.ru/teamlead/hiring-and-onboarding/</link>
<description>Как нанимающей стороне устроить отбор: что проверять и в каком порядке, почему задачи должны быть похожи на работу, как читать сигналы и что делает новый человек в первые 30 дней.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/hiring-and-onboarding/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Делегирование, встречи один на один и рост инженеров</title>
<link>https://vikulin-va.ru/teamlead/delegation-and-growth/</link>
<description>Почему лид упирается в собственную пропускную способность, как передавать задачи вместе с правом решать, как устроены встречи один на один, как давать обратную связь и строить рост инженера.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/delegation-and-growth/</guid>
<pubDate>Tue, 1 Sep 2026 04:00:12 GMT</pubDate>
</item>
<item>
<title>Из инженера в лида: что меняется в работе</title>
<link>https://vikulin-va.ru/teamlead/from-engineer-to-lead/</link>
<description>Почему повышение сильного разработчика ломает привычный способ работать: результат теперь чужими руками, обратная связь приходит с задержкой в недели, а старые критерии хорошего дня перестают работать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/from-engineer-to-lead/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Структура команды и владение системами</title>
<link>https://vikulin-va.ru/teamlead/team-structure-and-ownership/</link>
<description>Кто за какие сервисы отвечает и почему «отвечают все» значит «не отвечает никто». Как назначать владельцев, что делать с ничейными системами и чем команда вокруг продукта лучше команды вокруг слоя.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/team-structure-and-ownership/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Стейкхолдеры: как управлять ожиданиями</title>
<link>https://vikulin-va.ru/teamlead/stakeholders-and-expectations/</link>
<description>Кто такие стейкхолдеры и чего каждый хочет на самом деле, как сделать видимым поток чужих запросов, как говорить «нет» так, чтобы это принимали, и как восстанавливать подорванное доверие.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/stakeholders-and-expectations/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Метрики команды: что измерять и что бесполезно</title>
<link>https://vikulin-va.ru/teamlead/team-metrics/</link>
<description>Четыре показателя доставки, которые говорят о здоровье процесса, почему число задач и строк кода вредны, что происходит с любой метрикой, ставшей целью, и чем измерение процесса отличается от оценки людей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/team-metrics/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Трудные разговоры: не тянет, конфликт, расставание</title>
<link>https://vikulin-va.ru/teamlead/difficult-conversations/</link>
<description>Как готовиться и вести разговоры, которые хочется отложить: человек не справляется, двое в постоянном конфликте, пора расставаться. Структура разговора и почему откладывание всегда дороже.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/difficult-conversations/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Почему уходят инженеры и что видно заранее</title>
<link>https://vikulin-va.ru/teamlead/motivation-and-retention/</link>
<description>Настоящие причины ухода почти никогда не звучат в заявлении. Что стоит за «предложили больше», какие признаки видны за месяцы до, что реально удерживает людей и как узнать правду при увольнении.</description>
<guid isPermaLink="true">https://vikulin-va.ru/teamlead/motivation-and-retention/</guid>
<pubDate>Tue, 1 Sep 2026 04:54:28 GMT</pubDate>
</item>
<item>
<title>Потоки и процессы в Java</title>
<link>https://vikulin-va.ru/concurrency/threads-basics/</link>
<description>Что такое поток и процесс, зачем нужна многопоточность, как запустить поток в Java и чем поток отличается от задачи — разбор с нуля.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/threads-basics/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Модель памяти Java (JMM): видимость и happens-before</title>
<link>https://vikulin-va.ru/concurrency/memory-model/</link>
<description>Почему два потока видят разные значения одной переменной и как Java Memory Model гарантирует видимость: happens-before, volatile, final-поля простыми словами.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/memory-model/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Гонки в многопоточных программах: race condition и data race</title>
<link>https://vikulin-va.ru/concurrency/race-conditions/</link>
<description>Разбираем два вида гонок — состояние гонки и гонку данных — на примере счётчика, выясняем почему ++ не атомарен и какие три свойства нужно контролировать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/race-conditions/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>synchronized и мониторы: взаимное исключение в Java</title>
<link>https://vikulin-va.ru/concurrency/synchronized/</link>
<description>Простыми словами: что такое критическая секция и монитор, как synchronized защищает разделяемые данные, на каком объекте синхронизироваться и как работает happens-before.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/synchronized/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Явные блокировки: Lock и ReentrantLock</title>
<link>https://vikulin-va.ru/concurrency/locks/</link>
<description>Когда synchronized не хватает: Lock, ReentrantLock, tryLock, fairness, ReadWriteLock — как устроены явные блокировки в Java и когда их применять.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/locks/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Атомарные переменные и CAS в Java</title>
<link>https://vikulin-va.ru/concurrency/atomics/</link>
<description>Как AtomicInteger, AtomicReference и CAS позволяют менять данные без блокировок, и когда LongAdder справляется лучше, чем AtomicLong.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/atomics/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Потокобезопасные коллекции в Java</title>
<link>https://vikulin-va.ru/concurrency/concurrent-collections/</link>
<description>Как устроены потокобезопасные коллекции внутри: полосовая блокировка и CAS в ConcurrentHashMap, копирование при записи, два лока в очередях и очередь без блокировок.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/concurrent-collections/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Пулы потоков: ExecutorService</title>
<link>https://vikulin-va.ru/concurrency/executors/</link>
<description>Зачем нужен пул потоков, как устроен ExecutorService, ThreadPoolExecutor и как правильно завершать работу пула — разбор с примерами на Java 21.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/executors/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>CompletableFuture: асинхронные задачи в Java</title>
<link>https://vikulin-va.ru/concurrency/completable-future/</link>
<description>Разбираем CompletableFuture: как запускать задачи асинхронно, выстраивать цепочки, комбинировать результаты и грамотно обрабатывать ошибки.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/completable-future/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Виртуальные потоки в Java 21</title>
<link>https://vikulin-va.ru/concurrency/virtual-threads/</link>
<description>Что такое виртуальные потоки, чем они отличаются от платформенных и как модель «поток на задачу» снова становится дешёвой в Java 21.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/virtual-threads/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Структурированная конкурентность: StructuredTaskScope</title>
<link>https://vikulin-va.ru/concurrency/structured-concurrency/</link>
<description>Почему параллельные подзадачи теряются и «утекают», и как StructuredTaskScope делает fan-out управляемым: Joiner-политики, отмена проигравших и дедлайны — на API Java 25.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/structured-concurrency/</guid>
<pubDate>Sat, 11 Jul 2026 10:31:03 GMT</pubDate>
</item>
<item>
<title>Deadlock, livelock и starvation: когда потоки мешают друг другу</title>
<link>https://vikulin-va.ru/concurrency/concurrency-bugs/</link>
<description>Разбираем три классических сбоя многопоточного кода: дедлок, лайвлок и голодание — что это, почему происходит и как от них защититься.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/concurrency-bugs/</guid>
<pubDate>Mon, 29 Jun 2026 06:15:20 GMT</pubDate>
</item>
<item>
<title>Многопоточность на практике: Spring</title>
<link>https://vikulin-va.ru/concurrency/spring-in-practice/</link>
<description>Где многопоточность реально кусает в Spring-приложении: синглтоны-бины и общее состояние, пул потоков Tomcat, @Async и его пул, исчерпание пула на блокирующих вызовах, почему @Transactional не переходит в другой поток и виртуальные потоки в Spring Boot.</description>
<guid isPermaLink="true">https://vikulin-va.ru/concurrency/spring-in-practice/</guid>
<pubDate>Mon, 20 Jul 2026 16:17:55 GMT</pubDate>
</item>
<item>
<title>Что такое Docker и контейнеры</title>
<link>https://vikulin-va.ru/docker/what-is-docker/</link>
<description>Разбираем, что такое контейнер и образ, чем Docker отличается от виртуальной машины и зачем это нужно каждому бэкендеру</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/what-is-docker/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Образы, слои и Dockerfile: как Docker упаковывает приложение</title>
<link>https://vikulin-va.ru/docker/images-and-dockerfile/</link>
<description>Разбираем, что такое образ Docker, из каких слоёв он состоит и как писать Dockerfile — на примере Spring Boot приложения с объяснением каждой инструкции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/images-and-dockerfile/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Dockerfile для Spring Boot: правильная сборка образа</title>
<link>https://vikulin-va.ru/docker/dockerizing-spring-boot/</link>
<description>Как написать Dockerfile для Spring Boot приложения: базовый JRE-образ, кэш зависимостей, передача профилей, layered jars и типичные ошибки при контейнеризации.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/dockerizing-spring-boot/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Multi-stage сборка и кэш слоёв Docker</title>
<link>https://vikulin-va.ru/docker/multi-stage-and-layers/</link>
<description>Как уменьшить образ Spring Boot-приложения с помощью multi-stage сборки, порядка инструкций и кэша слоёв — меньше размер, быстрее CI.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/multi-stage-and-layers/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Запуск контейнеров: docker run и жизненный цикл</title>
<link>https://vikulin-va.ru/docker/running-containers/</link>
<description>Как запустить контейнер, пробросить порты и переменные окружения, посмотреть логи и зайти внутрь — разбираем docker run и основные команды управления.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/running-containers/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Тома и данные в Docker: как не потерять базу при перезапуске контейнера</title>
<link>https://vikulin-va.ru/docker/volumes-and-data/</link>
<description>Разбираем, почему данные в контейнере исчезают при его удалении, и как использовать тома и bind mounts, чтобы сохранять их между перезапусками.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/volumes-and-data/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Сети Docker: как контейнеры общаются между собой</title>
<link>https://vikulin-va.ru/docker/networking/</link>
<description>Разбираем, как Docker изолирует сетевое окружение контейнеров, как связать несколько контейнеров и почему localhost здесь не работает.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/networking/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Docker Compose: поднять всё окружение одной командой</title>
<link>https://vikulin-va.ru/docker/docker-compose/</link>
<description>Разбираем Docker Compose с нуля: структура docker-compose.yml, связь сервисов по именам, healthcheck, зависимости и пример со Spring Boot и Postgres.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/docker-compose/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>JVM в контейнере: память и ядра</title>
<link>https://vikulin-va.ru/docker/jvm-in-containers/</link>
<description>Почему JVM раньше «не видела» лимиты контейнера, как исправить настройку памяти и ядер, что такое OOMKilled и как его избежать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/jvm-in-containers/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Маленькие и безопасные образы Docker</title>
<link>https://vikulin-va.ru/docker/image-best-practices/</link>
<description>Как уменьшить размер образа, не положить секреты в слои, запустить приложение от непривилегированного пользователя и проверить образ на уязвимости.</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/image-best-practices/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Реестры образов и сборка в CI</title>
<link>https://vikulin-va.ru/docker/registries-and-ci/</link>
<description>Что такое реестр образов, как публиковать и скачивать образы, выбирать теги и автоматизировать сборку в CI — от docker push до готового конвейера</description>
<guid isPermaLink="true">https://vikulin-va.ru/docker/registries-and-ci/</guid>
<pubDate>Mon, 29 Jun 2026 06:34:56 GMT</pubDate>
</item>
<item>
<title>Что такое ORM и Hibernate: от JDBC к объектно-реляционному маппингу</title>
<link>https://vikulin-va.ru/hibernate/orm-and-hibernate/</link>
<description>Простыми словами: что такое ORM, зачем он нужен, чем JPA отличается от Hibernate, когда ORM помогает, а когда мешает, и как это всё вписывается в Spring Boot.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/orm-and-hibernate/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Маппинг сущностей в Hibernate и JPA</title>
<link>https://vikulin-va.ru/hibernate/entity-mapping/</link>
<description>Как Hibernate связывает Java-классы с таблицами: @Entity, @Column, генерация ID, @Enumerated, @Embedded и @Transient — с разбором типичных ловушек.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/entity-mapping/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Связи между сущностями в Hibernate: @OneToMany, @ManyToOne, @ManyToMany</title>
<link>https://vikulin-va.ru/hibernate/associations/</link>
<description>Разбираем @ManyToOne, @OneToMany, @ManyToMany, владеющую сторону, mappedBy и синхронизацию двунаправленных связей в Hibernate/JPA.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/associations/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Persistence context и состояния сущности в Hibernate</title>
<link>https://vikulin-va.ru/hibernate/persistence-context/</link>
<description>Что такое persistence context, как Hibernate отслеживает изменения автоматически и через какие состояния проходит сущность — от создания до удаления.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/persistence-context/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Ленивая и жадная загрузка в Hibernate</title>
<link>https://vikulin-va.ru/hibernate/lazy-vs-eager/</link>
<description>Что такое FetchType.LAZY и EAGER, как работают прокси и ленивые коллекции, почему возникает LazyInitializationException и как правильно от неё избавиться.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/lazy-vs-eager/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Проблема N+1 запросов в Hibernate</title>
<link>https://vikulin-va.ru/hibernate/n-plus-one/</link>
<description>Что такое проблема N+1, как обнаружить лишние запросы и устранить их: JOIN FETCH, @EntityGraph, пакетная загрузка, DTO-проекции.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/n-plus-one/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>JPQL, Criteria API и нативные запросы в Hibernate</title>
<link>https://vikulin-va.ru/hibernate/jpql-and-criteria/</link>
<description>Разбираем три способа писать запросы в JPA: JPQL — по сущностям, Criteria API — для динамических фильтров, Native SQL — когда ORM не справляется.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/jpql-and-criteria/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Кэширование в Hibernate: первый уровень, второй уровень и кэш запросов</title>
<link>https://vikulin-va.ru/hibernate/caching/</link>
<description>Как Hibernate кэширует данные на уровне сессии и между сессиями, зачем нужен второй уровень, когда он вреден и как работает кэш запросов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/caching/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Транзакции, flush и блокировки в Hibernate</title>
<link>https://vikulin-va.ru/hibernate/transactions-and-locking/</link>
<description>Как Hibernate управляет границами транзакций, когда происходит flush, и чем оптимистичная блокировка через @Version отличается от пессимистичной SELECT FOR UPDATE.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/transactions-and-locking/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Наследование сущностей в Hibernate: SINGLE_TABLE, JOINED, TABLE_PER_CLASS</title>
<link>https://vikulin-va.ru/hibernate/inheritance-mapping/</link>
<description>Как Hibernate маппит иерархию классов на таблицы: три стратегии, @MappedSuperclass и практические советы по выбору подхода.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/inheritance-mapping/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Типичные ошибки с Hibernate: что идёт не так и как это исправить</title>
<link>https://vikulin-va.ru/hibernate/common-pitfalls/</link>
<description>Разбор частых граблей с Hibernate: неверный equals/hashCode, Open Session in View, возврат сущностей из контроллера, опасный CascadeType.ALL, массовые операции по одному и merge vs save.</description>
<guid isPermaLink="true">https://vikulin-va.ru/hibernate/common-pitfalls/</guid>
<pubDate>Mon, 29 Jun 2026 07:04:34 GMT</pubDate>
</item>
<item>
<title>Что такое Redis: in-memory хранилище для backend-разработчика</title>
<link>https://vikulin-va.ru/redis/fundamentals/</link>
<description>Redis — быстрое in-memory хранилище ключ-значение. Разбираем, почему оно работает мгновенно, когда его использовать и как подключить из Java.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/fundamentals/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Структуры данных Redis: String, Hash, List, Set, Sorted Set и другие</title>
<link>https://vikulin-va.ru/redis/data-structures/</link>
<description>Какие структуры данных есть в Redis, чем они отличаются и когда использовать каждую — от счётчиков до рейтингов и очередей.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/data-structures/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Паттерны кэширования в Redis</title>
<link>https://vikulin-va.ru/redis/caching-patterns/</link>
<description>Cache-aside, write-through, write-behind, протухание и инвалидация: как правильно строить кэш на Redis, чтобы не ловить устаревшие данные и cache stampede.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/caching-patterns/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Redis не только для кэша: блокировки, ограничение запросов, очереди и Pub/Sub</title>
<link>https://vikulin-va.ru/redis/beyond-caching/</link>
<description>Как использовать Redis для распределённых блокировок, rate limiting, очередей и событийного обмена — с примерами команд и Java/Spring.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/beyond-caching/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Redis в Spring Boot: RedisTemplate, @Cacheable и Spring Session</title>
<link>https://vikulin-va.ru/redis/spring-integration/</link>
<description>Как подключить Redis к Spring Boot через Spring Data Redis: RedisTemplate, сериализация, кэш через @Cacheable и сессии через Spring Session.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/spring-integration/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Эксплуатация Redis: персистентность, память, репликация</title>
<link>https://vikulin-va.ru/redis/operations/</link>
<description>Как Redis хранит данные на диске, управляет памятью и остаётся доступным при сбоях — RDB, AOF, Sentinel, Cluster и мониторинг.</description>
<guid isPermaLink="true">https://vikulin-va.ru/redis/operations/</guid>
<pubDate>Mon, 29 Jun 2026 11:19:30 GMT</pubDate>
</item>
<item>
<title>Где валидировать данные</title>
<link>https://vikulin-va.ru/validation/where-to-validate/</link>
<description>Граница или домен — разбираемся, где ставить @Valid, где держать бизнес-инварианты и почему дублировать проверки во всех слоях вредно.</description>
<guid isPermaLink="true">https://vikulin-va.ru/validation/where-to-validate/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Bean Validation в Spring: @NotNull, @Valid и MethodArgumentNotValidException</title>
<link>https://vikulin-va.ru/validation/bean-validation/</link>
<description>Как Jakarta Bean Validation работает в Spring Boot: аннотации @NotNull, @Size, @Email на полях DTO, @Valid в контроллере, каскад для вложенных объектов и что происходит при ошибке.</description>
<guid isPermaLink="true">https://vikulin-va.ru/validation/bean-validation/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Свои ограничения и сообщения об ошибках</title>
<link>https://vikulin-va.ru/validation/custom-and-messages/</link>
<description>Как написать кастомный constraint через @Constraint и ConstraintValidator, проверить несколько полей сразу и настроить тексты ошибок через messages.properties.</description>
<guid isPermaLink="true">https://vikulin-va.ru/validation/custom-and-messages/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Модель ошибок приложения</title>
<link>https://vikulin-va.ru/error-handling/error-model/</link>
<description>Доменные ошибки и технические сбои — в чём разница, почему нужны типизированные исключения и как они добираются до клиента в Spring Boot.</description>
<guid isPermaLink="true">https://vikulin-va.ru/error-handling/error-model/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Единый обработчик ошибок</title>
<link>https://vikulin-va.ru/error-handling/global-handling/</link>
<description>Как @RestControllerAdvice и @ExceptionHandler превращают исключения в HTTP-ответы из одного места — без try/catch в каждом контроллере. Маппинг доменных исключений и логирование.</description>
<guid isPermaLink="true">https://vikulin-va.ru/error-handling/global-handling/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Типичные ошибки в обработке исключений</title>
<link>https://vikulin-va.ru/error-handling/exceptions-pitfalls/</link>
<description>Проглоченный catch, потеря стектрейса, исключение как управление потоком, проглоченный InterruptedException, дублирование логов — как не допустить и что делать вместо.</description>
<guid isPermaLink="true">https://vikulin-va.ru/error-handling/exceptions-pitfalls/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Пирамида тестов: что и где</title>
<link>https://vikulin-va.ru/testing/test-pyramid/</link>
<description>Unit, integration и e2e — три уровня тестирования. Пирамида показывает, каких тестов должно быть много, каких мало и почему это важно для скорости обратной связи.</description>
<guid isPermaLink="true">https://vikulin-va.ru/testing/test-pyramid/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Интеграционные тесты с Testcontainers</title>
<link>https://vikulin-va.ru/testing/integration-testing/</link>
<description>Зачем поднимать реальный PostgreSQL в тестах вместо H2 и моков, как работают @SpringBootTest и срезы, и как @ServiceConnection упрощает Testcontainers в Spring Boot 3.1+.</description>
<guid isPermaLink="true">https://vikulin-va.ru/testing/integration-testing/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Моки и внешние системы в тестах</title>
<link>https://vikulin-va.ru/testing/mocks-and-external/</link>
<description>Когда использовать Mockito, а когда WireMock — разбираем заглушки для внешних HTTP-сервисов, изоляцию данных и детерминированность тестов.</description>
<guid isPermaLink="true">https://vikulin-va.ru/testing/mocks-and-external/</guid>
<pubDate>Tue, 30 Jun 2026 06:19:18 GMT</pubDate>
</item>
<item>
<title>Нагрузочное тестирование: k6, Gatling, JMeter</title>
<link>https://vikulin-va.ru/testing/load-testing/</link>
<description>Нагрузочное тестирование с нуля: виды нагрузки, метрики — RPS, перцентили латентности, ошибки; сравнение JMeter, Gatling и k6, методика от SLA до анализа и типичные ошибки, обесценивающие результат.</description>
<guid isPermaLink="true">https://vikulin-va.ru/testing/load-testing/</guid>
<pubDate>Sat, 1 Aug 2026 16:31:48 GMT</pubDate>
</item>
<item>
<title>Публичная оферта на оказание услуг по обучению</title>
<link>https://vikulin-va.ru/legal/offer/</link>
<description>Условия подписки на полный доступ к курсу за 4 000 ₽ в месяц: предмет договора, продление и закрытие доступа, оплата, момент оказания услуги, порядок возврата и реквизиты ИП.</description>
<guid isPermaLink="true">https://vikulin-va.ru/legal/offer/</guid>
<pubDate>Sun, 6 Sep 2026 11:40:27 GMT</pubDate>
</item>
<item>
<title>Политика обработки персональных данных</title>
<link>https://vikulin-va.ru/legal/privacy/</link>
<description>Какие данные собирает сайт при входе в кабинет, обучении и оплате, зачем и на каком основании, кому передаются, сколько хранятся и как их удалить.</description>
<guid isPermaLink="true">https://vikulin-va.ru/legal/privacy/</guid>
<pubDate>Sun, 6 Sep 2026 11:40:27 GMT</pubDate>
</item>
<item>
<title>Правила применения рекомендательных технологий</title>
<link>https://vikulin-va.ru/legal/recommendation-rules/</link>
<description>Где на сайте работают рекомендательные технологии, какие сведения о предпочтениях используются, откуда они берутся и как отказаться от подбора.</description>
<guid isPermaLink="true">https://vikulin-va.ru/legal/recommendation-rules/</guid>
<pubDate>Sun, 6 Sep 2026 20:35:50 GMT</pubDate>
</item>
<item>
<title>Согласие на обработку персональных данных</title>
<link>https://vikulin-va.ru/legal/consent/</link>
<description>Отдельный документ согласия: кому, какие данные, для каких целей и на какой срок передаются при входе в личный кабинет и как это согласие отозвать.</description>
<guid isPermaLink="true">https://vikulin-va.ru/legal/consent/</guid>
<pubDate>Sun, 6 Sep 2026 11:40:27 GMT</pubDate>
</item>
</channel></rss>
