Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Гадкий NULL

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.6K

Если вы пишете SQL‑запросы, то наверняка сталкивались с ситуацией, когда данные исчезают, отчеты не сходятся, а бизнес теряет деньги. И виновник этого — маленькое, но очень коварное слово NULL. В 1974 году Эдгар Кодд, создатель реляционной модели данных, ввел это понятие, чтобы обозначить отсутствие информации. Он хотел, как лучше, но спустя пятьдесят лет NULL продолжает «терроризировать» разработчиков по всему миру. Важно усвоить раз и навсегда: NULL — это не значение. Это состояние неизвестности.

Поэтому:

· NULL ≠ 0 (ноль — это число);
· NULL ≠ '' (пустая строка — это строка);
· NULL ≠ ' ' (пробел — это символ).

Но всегда есть нюансы и исключения. Например, в Oracle INSERT INTO table (col) VALUES ('') запишет NULL. Это поведение отличается от других СУБД и часто становится сюрпризом при миграции.

Читать далее

Обзор релиз-команды Kubernetes v1.37: что устареет, сломается и перейдёт в GA

Время на прочтение5 мин
Охват и читатели7.6K

Команда VK Cloud подготовила перевод обзора релиз-команды Kubernetes (Arsh Sharma, Christopher Tineo, Kirti Goyal, Sophia Ugochukwu, Swathi Rao, Troy Connor) из блога kubernetes.io. О том, что устареет, сломается и перейдёт в GA в Kubernetes v1.37, релиз которого запланирован на 26 августа 2026 года. Будет полезен тем, кто эксплуатирует кластеры Kubernetes в проде: DevOps- и SRE-инженерам, платформенным командам, которые планируют обновление.

По мере приближения даты релиза Kubernetes v1.37 проект развивается и взрослеет, поэтому отдельные функции признают устаревшими, удаляют или заменяют более удачными ради общего здоровья проекта. В этом блоге собраны некоторые из запланированных изменений релиза Kubernetes v1.37, о которых, по мнению релиз-команды, вам стоит знать, чтобы продолжать поддерживать вашу среду Kubernetes и оставаться в курсе последних изменений. Информация ниже отражает текущий статус релиза v1.37 и может измениться до фактической даты выхода.

Читать далее

Hermes c локальными LLM vs GigaCode: сравниваем агентов на реальных PHP/Symfony-задачах

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели8K

На YouTube очень часто мне попадаются видео, где сравнивают разные LLM для вайбкодеров: сделай 3D-аквариум с рыбками, напиши игру, слепи лендинг. Но по ним совсем непонятно, как эти модели поведут себя на существующем проекте с большой кодовой базой и можно ли их применять для ежедневных задач веб-разработчика.

Уже давно пользуюсь Claude Code, и он, в принципе, закрывает все потребности. Но при активной разработке лимиты кончаются довольно быстро... Кроме того, есть риск блокировок, поэтому я всё чаще посматривал в сторону локальных LLM. Было интересно, когда же настанет момент, что их реально можно будет использовать в повседневной разработке.

К сожалению, все модели, которые получалось запустить на своих 16 ГБ VRAM, не внушали оптимизма. Да, их можно использовать для суммаризации текста или написания короткого фрагмента кода, но до агентского кодинга им было очень далеко. И вот мне выдалась возможность поэкспериментировать с DGX Spark, который имеет 128 ГБ унифицированной памяти. Результатами этого эксперимента и хочу поделиться.

В качестве агента для локальных моделей выбрал Hermes — его имя постоянно мелькало в обсуждениях, и многие его хвалили, так что решил попробовать именно его. Модели крутились через vLLM на DGX Spark: весь процесс — чтение кода, поиск нужных мест, внесение правок, запуск тестов и статического анализа — выполнялся самим агентом, без участия человека (но иногда нужно было написать «продолжай», когда работа прерывалась по каким-то причинам).

Тестировал всё на реальных задачах из своего проекта на Symfony. Результатами первых прогонов поделился с коллегами, и им стало интересно, могут ли локальные модели конкурировать с детищем Сбера — тем более что GigaChat недавно обзавёлся агентным режимом. Так в сравнение добавился GigaCode (использовал его внутри GigaIDE) — облачный агент, который на момент написания статьи бесплатен.

Читать далее

HLS Lazy Muxing 2.0 Как срезать 80% CPU и не остановить запись архива

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.5K

Если кто то, когда-либо занимался видеопотоками поверх интернета, т.е использовал классический медиасервер работающий по принципу RTSP to HLS (или ему подобные протоколы) тогда он знает какие проблемы возникают. Для примера возьмем двух гигантов, Flussonic и Wowza. В документации Flussonic`a есть четкие аппаратные характеристики при которых ЦП начнет долбиться в сотку: 250 камер с битрейтом 2 Мбит/c, на Xeon E3-1230v5 3.4 GHz + 32 GB RAM. У Wowza же четких примеров нет, но если немного «экстраполировать», то у нее на том же железе около 350-400 камер с битрейтом 2 Мбит/c, загружают процессор на сотку. Давайте внесу оговорку: я понимаю, что указанное железо довольно старое. Но 80% малого и среднего бизнеса на +/- таком работают, я имею ввиду тех, кто не пользуется облачной инфраструктурой или не арендует железо в ДЦ. Так вот, казалось бы, ну такая вот нагрузка, что с ней поделать? Проблема в том, что в моменте эти потоки никто не смотрит. Условный «охранник» залипает в телефоне, пьет кофе – а сервак 24/7 продолжает нарезать сырые кадры в HLS-сегменты и писать архив, грея серверную. Банальное расходование ресурсов в пустую, когда они не нужны. А в наш век стоимости на железо – стоит беспокоиться о таких вещах.

Решение на поверхности, и многие о нем знают – режим On Demand (по запросам). Нет зрителей – тушим камеру.  Есть зритель – отдаем HLS-поток. Казалось бы, все идеально, вопрос решен, расходимся. Но тут вылезает главная проблема классического On Demand - как только зрителей нет, соответственно камера потушена, запись архива не ведется. Для любой системы безопасности – это новомодный «ред флаг».

Читать далее

Как восстановить KRaft‑кворум после потери большинства контроллеров

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели7.6K

Представьте себе баг-репорт: все шесть подов в статусе 1/1 Running, Readiness зелёный, kafka-agent на брокерах отдаёт 204. А кластер мёртв: оператор бесконечно крутит реконсайл и валится в TimeoutException: Timed out waiting for a node assignment. Call: describeMetadataQuorum. Если зайти на том контроллера, можно увидеть, что __cluster_metadata-0/quorum-state: leaderId выставлен, а appliedOffset в 0. Ни одна запись метаданных не применена. JVM живые, raft-лог на диске растёт, и при этом ни один под не написал в stdout ни строки следующие восемь часов. Это не выдумка, а реальный баг-репорт Strimzi от 25 мая 2026, и к нему мы ещё вернёмся.

В Kafka 4.x больше нет привычного «запасного выходa» в виде ZooKeeper: метаданные переехали внутрь самой Kafka (KRaft), и если кворум контроллеров теряет большинство, чинить уже приходится сам кластер Kafka, а не внешний сервис. 

Раньше чтобы с этим справиться в Kafka существовал ZooKeeper, отдельная система со своими инструментами, ансамблем и культурой восстановления. В версии  4.x его нет, и в документации от процедуры остался только линк на 3.9. Метаданные переехали внутрь самой Kafka (KRaft), и если кворум контроллеров теряет большинство, чинить уже приходится сам кластер Kafka, а не внешний сервис.

В этой статье расскажем, что делать в такой ситуации и как восстанавливать этот кворум, чтобы не случилось ситуации, описанной выше.

Читать далее

Почему цена Bitcoin «сломалась»: разбор аномалий 2022–2026 с WhyTrend

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.6K

Увидел провал на графике → открыл Google или Twitter → полдня собираешь версии "почему". Знакомо? Детектор аномалий сам по себе даёт только точки на оси времени, а вопрос "почему" как был ручным, так и остаётся.

В этот раз я прогнал WhyTrend не на паре аккуратных точек из Google Trends, а на полном ряде BTC за 4.5 года — и заодно на двух разных LLM. Результат оказался неожиданным: модель меньшего размера дала в три раза больше настоящих объяснений, чем более крупная. Расскажу, что случилось и почему.

Читать далее

Стек отвечает «где упало», а вопрос был «что случилось»

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.2K

В моей старой системе учёта валютной позиции больше двадцати лет стоял коммерческий инструмент трассировки от конторы, которая делала SoftICE. Он работал исправно, о каждой ошибке присылал письмо со стеком вызовов — и не помог мне ни разу. Недавно я наконец понял, почему так вышло, и ответ оказался до обидного простым.

Читать далее

Symfony JSON-RPC API Bundle три года спустя: что боевая эксплуатация сделала с кодом

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.9K

В августе 2023-го я писал здесь про свой бандл для JSON-RPC API на Symfony. С тех пор он дорос с 1.x до 5.1 и работает в нескольких продакшенах - от финтех-инструментов до HRM-системы. Честный отчёт: 17 найденных отклонений от спецификации, приватные поля, утекавшие в ответы, CORS-заголовок через запятую - и что из этих уроков стало фичами бандла.

Читать далее

BLIS: недостающую среднюю ступеньку построили тридцать лет назад

Время на прочтение8 мин
Охват и читатели8.2K

В этой части мы начнём с тупика, в который приводит голый цикл FMOPA; затем покажем, какую часть GEMM BLIS уже построил за нас; после этого разберём пять циклов BLIS и место микроядра внутри них. Финал главы должен сделать дальнейший план конкретным: что именно нужно добавить для Apple SME, а что уже относится к готовой «мебели» фреймворка.

Читать далее

Три месяца спустя: стемы, которые убивали вкладку, и синхрон, который меня чуть не доконал

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.2K

Год назад я рассказал, как из боли «песни разбросаны по чатам» вырос сервис для команд прославления: PHP на дешёвом хостинге, React, деплой по FTP руками. В конце той статьи было три обещания одним абзацем — сделаю стемы, синхронизирую сцену, перееду с shared-хостинга. Все три оказались на порядок сложнее, чем звучали.

Эта статья — про то, что было дальше. Честно, с провалами. Про то, где я бился неделями, где всё падало и где приходилось заходить по пять-семь раз, прежде чем получилось.

Сразу оговорюсь: сами нейросети для разделения на дорожки и распознавания аккордов — не мои. Я использую API Moises. Всё остальное — доставка, движок, синхрон, продукт — моё, и об этом ниже.

Читать далее

RSS вырос до 3 ГБ, а tracemalloc показывает 180 МБ: как найти остальные 2,8

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели12K

RSS растёт к лимиту контейнера, tracemalloc показывает прежние 180 МБ, а gc.collect() ничего не меняет. Разберём, как в такой ситуации отделить утечку Python-объектов от нативных аллокаций и удержания памяти системным аллокатором — и понять, где именно искать причину до OOMKilled.

Разобраться с памятью

Пятнадцать месяцев финтеха агентами: кривая качества по всей истории проекта

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели16K

У меня 12 лет опыта в Go. И я больше не имею права назвать себя программистом: мой код не пройдёт ту планку качества, которую я выставил для своих агентов. Хотя честнее так: они сами её выставили, я лишь ставил цели.

Заявление громкое, но у меня есть график. Красная пунктирная линия на нём: уровень моего лучшего рукописного кода. Синяя кривая: код, который пишут агенты. В апреле 2026 кривая ушла под красную линию и продолжает падать.

Читать далее

VictoriaLogs: система логирования для больших объёмов данных

Время на прочтение6 мин
Охват и читатели11K

VictoriaLogs — система хранения и поиска логов от команды VictoriaMetrics. Её идея проста: не заставлять оператора заранее проектировать индексы и схему данных, а дать ему возможность принимать логи и искать по их полям сразу. При этом система должна оставаться относительно простой и на одном сервере, и в кластере.

В этой статье разбор того, за счёт чего VictoriaLogs пытается решить типичные проблемы систем логирования и в каких случаях на него стоит смотреть внимательнее.

Читать далее

Ближайшие события

Go-juggler и протокол Juggler

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели10K

ИИ-агентам нужно ходить по настоящему вебу. Но настоящий веб враждебен к автоматизации: Playwright блокируют, headless-версия Chrome палится по отпечаткам, а стелс-плагины просто становятся частью отпечатка. Если вы когда-нибудь писали скраперы или инструменты для агентов, вы знаете, как это бывает - всё работает локально, а потом продакшен разваливается за Cloudflare-челленджем.

Несколько проектов пытались решить эту проблему со стороны браузера. Проект https://camoufox.com патчит Firefox на уровне C++, так что navigator.hardwareConcurrency, WebGL-рендереры, AudioContext, геометрия экрана и WebRTC подменяются ещё до того, как JavaScript их увидит. Браузер https://github.com/jo-inc/camofox-browser оборачивает этот движок в REST API, заточенный под агентов: снимки доступности вместо раздутого HTML, стабильные ссылки на элементы для кликов и изоляция сессий.

Остаётся только одна дыра: инструментарий вокруг этой экосистемы завязан на JavaScript/Python. Если вы живёте в Go - а весь стек Go-агентов, взорвавшийся за последние пару лет, весомый аргумент в его пользу - вам оставалось писать сырые вызовы curl.

Пакет https://github.com/yvv4git/go-juggler исправляет это. Это Go-клиент для протокола автоматизации Juggler (того самого, который патчит и расширяет Camoufox) под лицензией MIT. Он управляет Firefox/Camoufox из Go с единственной зависимостью и чистым, слоистым API.

Читать далее

Топ-5 высокооплачиваемых направлений в IT в 2026 году

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели41K

По данным исследования Хабр Карьеры, медианная зарплата IT-специалиста в России в первом полугодии 2026 года — 191 тысяча рублей. Это на 4% больше, чем во втором полугодии 2025 года, когда рост составил 2%. В целом зарплаты айтишников на 44% выше средней зарплаты в стране. По данным Росстата, она составляет 106,9 тысяч рублей.

Самые высокооплачиваемые направления в IT — разработка, менеджмент, аналитика, администрирование и информационная безопасность. Причём активнее всего (на 5% за полугодие) выросли зарплаты в аналитике.

Читать далее

Пишем логи в journald с помощью Logback и FFM API

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.1K

Разворачивать бэкенды для личного использования с помощью systemd удобно, но stdout плохо интегрируется с journald, а устанавливать софт только для просмотра логов не хочется. В статье - простой пример, как можно писать логи из Java-приложения в journald так, чтобы их потом удобно просматривать

Читать далее

Ваш кэш в Redis неэффективен, что с этим делать?

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели8.9K

Однажды в проде контейнеры одного из сервисов начали падать по OutOfMemory. Контейнерам было выделено по 4 ГБ оперативной памяти, нагрузка была вполне обычной: десятки страниц в секунду.

Расследование показало, что проблема была в JSON-конфиге.

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

Из-за ошибки в обработке закэшированный JSON распухал до десятков мегабайт. В кэш писались не только нужные поля, но и вложенные коллекции, история изменений, сериализованные справочники.

Казалось бы, если мы запрашиваем один и тот же JSON, размер не должен так критично влиять.

Но всё оказалось интереснее…

Читать далее

Iron Core. Часть 6: Затянувшаяся революция

Время на прочтение16 мин
Охват и читатели9K

Перед вами шестая и заключительная часть (а вот первая, вторая, третья, четвёртая и пятая) серии статей, посвящённых информационным технологиям в авиаперевозках. Сегодня мы поговорим об изменениях, происходящих в этой сфере. Системы, построенные на базе стандарта NDC, вот уже 14 лет пытаются вытеснить традиционные GDS. Этого до сих пор, в полной мере, не произошло. У такого положения дел есть определённые политико-экономические причины. Здесь же автор расскажет о том, что он, благодаря инциденту с птицей, узнал о системах, которые вот уже много лет пытаются заменить.

Читать далее

С 14 августа Claude Code стартует в авторежиме: что лежит в его рулбуке

Время на прочтение2 мин
Охват и читатели8.9K

С 14 августа Claude Code будет запускать новые сессии на Pro, Max и Team в auto mode: вместо диалога «разрешить/запретить» каждую команду оценивает отдельный классификатор. Коротко о том, что печатает команда claude auto-mode defaults (60 149 символов правил, 65 запретов, тринадцать из двадцати полей окружения пустые), какие ваши правила прав продолжают работать поверх классификатора, что на самом деле стоит за цифрой 13,6% из пересказов и был ли у этой фичи откат в прошлых версиях.

Читать далее

От 12 часов к 30 минутам: как мы join’им миллиарды товарных движений в ClickHouse

Время на прочтение15 мин
Охват и читатели11K

Всем привет! Меня зовут Муса. Наша команда занимается витринами данных по товарному учёту.

Каждый день мы доставляем около 10 млрд записей в разных форматах. На этих данных строится различная аналитика, связанная с товарными запасами и движениями экземпляров. Перед нами встала задача: пять раз в день обогащать выгрузку из миллиардов экземплярных остатков дополнительными атрибутами для построения различного рода аналитики. История этих атрибутов уже измерялась десятками миллиардов записей.

Первое решение выглядело просто: положить данные в ClickHouse и сделать JOIN. Но одна выгрузка считалась около 12 часов, а нам нужно было укладываться в десятки минут.

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

Читать далее