Что такое эмбеддинг: как текст становится вектором
Как эмбеддинги превращают текст в векторы и почему косинусное сходство не решает за вас
Чем TCP отличается от UDP и что из этого следует
TCP обеспечивает надёжную передачу данных с подтверждениями, а UDP отправляет пакеты без гарантий доставки и порядка
Почему 0.1 + 0.2 не равно 0.3 и как считать деньги
Как работают дробные числа в программировании и почему точные расчёты требуют особого подхода
Почему нейросеть отвечает по-разному на один вопрос
Почему нейросеть даёт разные ответы на одинаковый вопрос и как сделать их стабильнее
Токены в нейросети: в чём модель считает текст
Токены — это не слова или символы, а элементы словаря модели, от которых зависят пределы контекста и стоимость запроса
Логи, метрики и трейсы: что отвечает на какой вопрос
Чем отличаются логи, метрики и трейсы и какой инструмент когда использовать
Чем HTTPS отличается от HTTP и что он защищает
HTTPS шифрует данные между браузером и сайтом, защищая от перехвата и подмены
NULL в SQL: почему условие возвращает не все строки
Как избежать потери данных при фильтрации и сравнениях из-за особенностей обработки NULL в SQL
Контейнер убили по памяти, а куча чистая
Как найти настоящую причину убийства контейнера по памяти, если куча чистая, а метрики врут
Аутентификация и авторизация: где проходит граница
Как работают проверка личности и прав доступа и почему системы возвращают разные ошибки
Подпись вебхука: как понять, что вызов настоящий
Как правильно проверять подписи вебхуков и почему секретный URL не защищает от атак
CI/CD: что происходит между коммитом и выкаткой
Как работают CI/CD на практике, почему это не инструменты, а процессы, и как строить надёжные конвейеры
Цикл событий в JavaScript простыми словами
Как избежать ошибок при работе с асинхронным кодом и оптимизировать выполнение задач в JavaScript
Домен не открывается: как проверить DNS по шагам
Как настроить DNS-записи и избежать ошибок при смене серверов или домена
GraphQL или REST: что выбрать для своего API
Чем отличаются подходы REST и GraphQL и какие компромиссы ждут при выборе каждого из них
Нормализация: до какой степени и когда отступать
Как избежать дублирования данных и упростить обновление информации в базе с помощью нормализации
ORM или запросы руками: где проходит граница
Как избежать типичных ошибок ORM и когда лучше отказаться от неё в пользу SQL
CSRF: как чужой сайт действует от вашего имени
Как распознать уязвимость и защитить свой сайт от атак через браузер пользователя
XSS: как чужой скрипт оказывается на вашей странице
Как правильно защищать приложения от XSS-уязвимостей в разных контекстах и почему фильтрация не решает проблему
Задачи по расписанию тихо перестают выполняться
Как обеспечить надёжность задач по расписанию и избежать тихих сбоев в работе
Инвалидация кеша: почему это трудно и что делать
Как выбрать стратегию инвалидации кеша и избежать типичных ошибок при балансе скорости и актуальности данных
Уровни изоляции: что выбрать и чем за это платят
Как уровни изоляции транзакций защищают данные и почему выбор между скоростью и корректностью критичен для приложений
Почему модель выдумывает и что с этим делать
Как распознать и снизить риск выдуманных ответов нейросети при работе с фактами
SQL-инъекция: как она работает и чем закрывается
Как защитить приложения от SQL-инъекций и почему классические методы не работают
Postgres или документная база: как выбрать и не переехать дважды
Как выбрать между гибкостью схемы в коде и надёжностью реляционной модели для ваших данных
Domain-driven design: что он даёт инженеру и что — руководителю
Как писать код, который проще поддерживать и адаптировать под изменения бизнеса
С каких метрик начинать: четыре сигнала и их пределы
Как использовать четыре ключевые метрики для быстрого обнаружения проблем в работе сервисов до жалоб пользователей
dev и stage в большой команде: что показывает замер
Как крупные команды выбирают схемы ветвления и почему классические подходы часто не справляются
JWT: что это на самом деле и где он не подходит
Как реализовать мгновенный отзыв JWT без потери производительности и безопасности в распределённых системах
Когда dev, stage и master разошлись: как выкатывать фичи
Как выбрать между ветками и фичами, чтобы избежать конфликтов и упростить релизы
CORS: почему браузер блокирует запрос и что менять на сервере
Как браузер проверяет безопасность запросов и почему сервер должен правильно настраивать CORS
Уровни логирования: что писать, а что выключить
Как правильно выбирать уровни логирования и что писать в логах, чтобы быстро находить причины сбоев
Протокол вместо фреймворка: что изменилось в сборке агентов
Где проходит граница между вашим кодом и чужими системами и что протокол не решает
JSON как контракт: где он подводит
Формат, который читается без описания, обычно и передают без описания. Что записать отдельно от кода, чтобы обмен пережил расхождение версий.
Соединения таблиц: почему строк больше, чем ожидали
Число строк результата определяется кратностью связи, а не таблицами. Одна проверка до запроса ловит почти все завышенные суммы в отчётах.
Слой трансформаций: движок в процессе против конвейера
Почему вычисление переезжает внутрь процесса и где эта схема ломается
Обратный прокси: что он решает и что ломает
Что он действительно снимает с приложения и что ломает молча
Асинхронность: что она ускоряет, а что нет
Асинхронность не ускоряет вычисления — она позволяет не простаивать в ожидании. Как понять, поможет ли она, до того как переписывать код.
Что растёт и что сдувается в экосистемах
Наш замер реестров: что команды сейчас кладут в сборки, а что перестали
Где чаще всего остаются без ответа
Наш замер: без ответа остаётся то, что нельзя воспроизвести у себя
Токен в браузере: где его хранить
Вопрос о месте хранения решается моделью угрозы, а не удобством. Две популярные ответа защищают от разных вещей, и одно хранилище не даёт обоих свойств.
Конфликт слияния: почему он ваш и что с ним делать
Конфликт означает не «код сломан», а «два намерения пересеклись». Почему выбор стороны — это потеря, и как разрешать, ничего не теряя.
Состояние в React: когда нужна библиотека, а когда нет
Состояние бывает четырёх видов, и библиотека нужна только для одного. Как понять, для какого именно, и когда решение вообще пора принимать.
Java никуда не делась: где она осталась и почему
Решение о языке принимает не мода, а тот, кто платит за содержание системы десять лет. Что стоит считать, прежде чем спорить о синтаксисе.
Python тормозит: что действительно ускоряет
Под «медленно» прячутся три разные ситуации, и лечатся они по-разному. Как понять, в какой вы, прежде чем переписывать код на другом языке.
Новые инструменты живут без вопросов
У инструмента, о котором все говорят, может не быть ни одного публичного ответа о себе. Разрыв между массовыми и новыми темами — в четыре порядка.
Куда делись вопросы разработчиков
Публичный архив ответов по программированию перестал пополняться: по пяти крупнейшим темам поток вопросов упал в двадцать раз. Что это меняет в оценке задач.
Что современный CSS убрал из вашего JS
Почему JavaScript-наблюдатели за внешним видом опаздывают на кадр, какие механизмы CSS решают эти задачи внутри конвейера рендеринга и где скрипты остаются обязательными
Дообучение или поиск по документам: как выбрать
Почему дообучение и поиск по документам лечат разные отказы, и как понять, какой именно мешает вашей модели
Бюджет времени в многошаговом агенте
Почему лимит шагов и таймаут страхуют агентный цикл от разных отказов и как выбирать бюджеты, которые ограничивают именно то, что вы думаете
Агенты в продакшене: что отказывает на второй неделе
Сбои многошаговых агентов почти никогда не начинаются с модели. Они выводятся из арифметики шагов — и поэтому предсказуемы до запуска.
Lakehouse без хайпа: что реально поменялось
Разбираем, чем плоха связка озера и склада, почему внешние таблицы не спасают, как лейкхаус даёт транзакции поверх открытых файлов и во что это обходится
Схема поехала: пять способов узнать об этом первым
Почему дрейф схемы первым замечает потребитель, почему процессные договорённости и красные джобы его пропускают и как устроены пять автоматических проверок на пути данных
Серверные компоненты: год в продакшене
Вы узнаете, как серверные компоненты пересылают дерево по проводам, почему проп через границу становится частью сетевого контракта и какие поломки модели предсказуемы заранее
WebAssembly: где он уже окупается
Откуда у WebAssembly берётся скорость, какой ценой она достаётся и почему переписать самую тяжёлую функцию — не решение, а тупик
Golden path вместо документации
Почему документация гниёт, почему её нельзя спасти процессами и ревью, и как golden path делает стандартные операции исполняемыми
Почему Go стал платформенным дефолтом
Почему горутины, планировщик и статическая линковка делают Go дефолтом для микросервисных платформ — и где те же свойства начинают вредить
Rust в сервисах: где окупается, а где нет
Спор давно идёт не о скорости. Решающими оказываются два фактора, и ни один из них не технический.
Повторы, которые удваивают счёт
Разбираемся, почему счёт за API языковых моделей растёт при неизменном продукте, как повторные попытки превращаются в умножение затрат и что чинить на самом деле
OpenTelemetry: что стало стандартом, а что ещё нет
Разберёмся, какие слои OpenTelemetry действительно стали стандартами, а какие остаются удобным клеем, и почему граница проходит именно между ними
Трассировка шагов вместо логов
Как заменить ленту логов на дерево шагов, чтобы видеть не только где упало, но и почему агент решил именно так
Секреты в CI: пять типовых утечек
Разберём, почему хранение секретов в хранилище и маскирование логов не спасают от утечки, и покажем пять мест, где конвейер CI теряет ключи