Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

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

Запись в Kubernetes: как контроллеры учились не перезаписывать друг друга

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

Привет. В прошлой статье мы в основном говорили про чтение — кэш в controller-runtime, informer’ы, Reflector, DeltaFIFO, почему r.Get в реконсайле не ходит в apiserver. Сегодня поговорим больше про запись.

Kubernetes по своей природе спроектирован так, что одним и тем же объектом могут управлять разные контроллеры — и это нормально. На один Deployment смотрят и deployment-controller (правит status), и HPA (правит spec.replicas), и admission-мутаторы (расставляют labels), и cert-manager (дописывает свои аннотации), и пользователь с kubectl apply. Каждый из них отвечает за свои поля и не лезет в чужие. И всё это работает.

Сегодня будем разбираться, какие механизмы в Kubernetes позволяют разным компонентам делить ответственность за части одного и того же объекта, не превращая запись в гонку — и как ими правильно пользоваться, когда оператор пишете вы сами. Добро пожаловать под кат.

Читать далее

AI обнулил benchmark и пытался шантажировать инженера. И почему это решаемо

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

Топовые AI-модели с 95% на SWE-bench показывают 0% и 3% на ProgramBench бенчмарке, где задачи специально не пересекаются с обучающей выборкой. Не «упали на десять пунктов» - обнулились.

Параллельно: в мае 2025 Anthropic опубликовали safety-эксперимент, где Claude Opus 4 в 84-96% случаев пытался шантажировать инженера приватной перепиской, чтобы избежать отключения. В мае 2026 они же выпустили разбор причин и инженерное решение - production-модели на этом тесте теперь 0%.

Две истории, одна структура: модель предсказуема в обучающем распределении и непредсказуема за его пределами. Это не «AI плох» - это инженерная задача со своими правилами, и у нее есть решение.

Глава 4 серии «Путь разработчика», вторая часть про границы AI в проде. Что я переделал в Lexis после двух разборов - внутри.

Читать разбор

Красивый скриншот вашего кода. Большое обновление

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

Привет, хабражители!

Я уже писал тут о своём открытом сервисе для скриншотов кода (и простого текста), который позволяет красиво отобразить фрагмент вашего кода в статьях, презентациях, примерах до-после и т.п., насколько хватит вашей фантазии.

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

Наконец, я могу сделать почти то, что хотел когда-то:

Узнать, как сделать красоту без LLM

За пределами LLM, часть 2: якорная таблица Кэли, которая не является ни полем, ни моноидом

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

В первой статье я высказал простую идею: если вычисление можно свести к конечной таблице операции, его можно проверять, а не угадывать. То есть его можно свести не к "модель выдала вероятность 0,67", а просто открыть таблицу и сказать: вот ячейка, вот результат, rc=0.

Эта статья — прямое продолжение первой статьи (сейчас у меня на руках значительно отличающаяся рабочая модель ИИ-движка). Но сразу честно: я не собираюсь раскрывать здесь внутреннюю кухню "GALO AI". Ни устройство нейрона, ни приватные маршруты мышления. Покажу только основополагающую математику, вернее, маленькую конечную структуру, которую можно взять руками, прогнать скриптом и попытаться сломать контрпримером.

Ключевая идея проста до невозможности: я взял обычное сложение по модулю и изменил в его таблице ровно одну строку.

Этого хватило, чтобы структура перестала быть полем, кольцом и моноидом.

Читать далее

WHERE превращает ваш LEFT JOIN в INNER JOIN. И никто вам об этом не скажет

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

LEFT JOIN считается одной из самых безопасных конструкций в SQL — пока один фильтр в WHERE тихо не превращает его в INNER JOIN. Ошибка коварная: запрос выглядит абсолютно нормальным, результаты приходят, база не ругается, а часть строк уже исчезла.

В статье разбираем, почему это происходит, как NULL ломает ожидания и чем на самом деле отличаются условия в ON и WHERE.

Читать далее

Я стала тимлидом команды джунов, работали быстро и по ночам. А потом закончились токены

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

На одной из встреч с агентством-подрядчиком мы обсуждали Telegram-бота для транскрибации видео. Отправляешь файл, бот обрабатывает его, возвращает подробную расшифровку и саммари. Я попросила добавить поддержку аудио: чтобы можно было отправлять не только видео, но и аудиозапись. В ответ услышала: две недели и 300 тыс. рублей.

На уровне здравого смысла у меня возник вопрос: если из видео все равно извлекается аудиодорожка, почему аудиофайл на входе превращает задачу почти в отдельный проект? Но дальше здравый смысл заканчивался. Я не понимала, как устроен пайплайн, где там реальная сложность, а где оценка с запасом. Аргументов для спора не было.

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

Поэтому я полезла в n8n и Claude Code, чтобы говорить с подрядчиками на одном языке. Через несколько месяцев у меня появились скрипты, боты и агенты для рассылок, мониторинга, медиадайджестов и аналитики.

Читать далее

OCR для Data Lakehouse: от Apache Tika к собственному решению на базе Docling

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

Привет, Хабр!

Это Андрей Ловлин, руководитель команды «Фабрика данных. Платформа» компании Диасофт. В предыдущей статье мы рассказывали про S3 Архипелаг – слой хранения для нашей «Фабрики данных» (Digital Q.DataFactory). Сегодня речь пойдет о другой задаче: построение конвейера интеллектуального распознавания документов, загружаемых в нашу «Фабрику данных».

PDF-файлы, сканы, фотографии договоров – все это накапливается в организациях годами. Для построения RAG-систем и работы с LLM эти данные необходимо извлечь из неструктурированных документов и преобразовать в структурированный формат. Задача, на первый взгляд, тривиальная. На практике – не совсем.

Читать далее

Jira — тьюринг-полная

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

В фольклоре разработчиков встречаются утверждения о том, что Jira (система управления проектами, разработанная Atlassian) полна по Тьюрингу. Однако в таких заявлениях нет конкретики, лишь смутные упоминания фич автоматизации. В этой статье будет приведено доказательство с инструкциями по реализации и трассировкой исполнения.

Читать далее

Ты уже используешь агента. Просто не заметил

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

"Эксперты" говорят, что ближайшие несколько лет у каждого появится персональный ИИ-агент. Он будет писать код, помогать выбрать кофемашину, считать калории на ужин. Звучит как что-то из будущего... но оно уже наступило. Просто мы этого не заметили.

Читать далее

ИИ в работе программиста: как повысить эффективность и не отстать от времени

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

Если вы сейчас откроете hh.ru или «Хабр Карьера» и введёте в поиск что-то типа PyCharm, PhpStorm либо IDEA, то вы обнаружите, что упоминание этих профессиональных инструментов близко к нулю. По умолчанию работодатели считают, что любой адекватный специалист знает эти инструменты и может ими пользоваться. То есть навык владения профессиональной средой разработки стал таким же базовым и очевидным навыком, как владение Microsoft Word или Microsoft Excel, ибо без умения работать с этими программами ты просто не можешь выполнять свою работу.

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

Я сразу же скажу, что я не считаю, что компания может уволить людей, настроить пачку агентов и вайбить по ночам продакшен-код, попивая сок у себя в офисе. Но я считаю, что практически любой программист с ИИ становится более продуктивным, чем без него.

Читать далее

Забытый мультиколор (часть 1)

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

Полное руководство по аппаратному мультиколору для тех, кто не знает, что это такое и зачем он нужен.

История, порты, включение режима

Читать далее

Контекстные менеджеры в Python за пределами with open(): пишем свои и упрощаем код

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

with open() знают все. Но контекстные менеджеры в Python — это не только про файлы. Они помогают безопасно управлять соединениями с БД, транзакциями, async‑ресурсами, временными настройками и cleanup‑логикой без бесконечных try/finally.

В статье разбираем, как работают контекстные менеджеры, как писать свои через contextlib и где они реально упрощают продакшен‑код.

Читать далее

AGENTS.md создавали, чтобы помогать агентам. Я использую его, чтобы их вычислять

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

Вместе с растущей AI-индустрией приходят и её побочки. Я мейнтейнер библиотеки react-native-tdlib и довольно быстро заметил: все больше PR выглядят как чистый вывод агента. Сначала я честно реагировал — писал в каждый такой PR вопросы: тестировали ли вы это, что именно меняет ваш код, зачем вот эта строчка. В какой-то момент понял, что трачу время на переписку с людьми, которые сами не знают, что написали.

Первая мысль была — написать большой README или CONTRIBUTING и прямым текстом сказать: «сгенерированный код не принимаю». Но тут же упёрся в вопрос: а как доказать, что код сгенерирован? Аргумент «чую, тут пахнет Claude Code» — так себе позиция для публичного спора в комментариях к PR.

Решение оказалось довольно простым — AGENTS.md. Он конечно не доказывает, что PR сгенерирован, но отлично ловит самые очевидные автоматические PR, где автор, кажется, вообще не участвовал в процессе.

Читать далее

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

В С неопределённое поведение повсюду

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

Если бы Кардинал Ришелье был программистом, он бы сказал: «Дайте мне шесть строк кода, написанных рукой самого профессионального C-программиста в мире, и я найду в них лазейку для вызова неопределённого поведения.

Никто не может написать безошибочный код на С или C++. И я говоря об этом как человек, который пишет на этих языках почти каждый день около 30 лет. Я слушаю подкасты по C++. Я смотрю выступления про C++ на конференциях. Мне нравится читать и писать на этом языке.

C++ послужил нам сполна, но на дворе 2026 год, и современная рабочая среда явно отличается от среды 1985 (C++) или 1972 (С).

И я далеко не первый, кто об этом заговорил. Помню ещё с десять лет назад читал статью какого-то известного человека, в которой он утверждал, что использование C++ вполне обоснованно можно подвести под нарушение закона Сарбейнза-Оксли (SOX). И хотя с остальной его критикой я не был согласен (как и с тем, что он путал «its» и «it’s»), конкретно с этим пунктом я никогда не спорил.

Мало того, со временем я всё больше убеждался в его истинности. На деле в С для возникновения неопределённого поведения (undefined behaviour, UB) есть гораздо больше возможных причин, чем вы могли предполагать.

Все знают, что двойное освобождение памяти, её использование после освобождения, выход за границы объекта (например, массива) и чтение неинициализированной памяти — это UB. Как ни крути, но в контексте работы с памятью C и C++ безопасными не назовёшь. Тем не менее даже эти ошибки продолжают совершаться повсеместно раз за разом.

Читать далее

MCP-агрегатор: объединяем инструменты для LLM в один сервер

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

При работе с локальными LLM через Claude Desktop, Kilo Code, Cursor или другие MCP-клиенты часто возникает одна и та же ситуация: Нужен filesystem для работы с файлами,web-search для поиска в интернете,memory для хранения контекста между сессиями, sequential-thinking для сложных рассуждений. И ещё десяток серверов…

Каждый MCP-сервер — это отдельный процесс, отдельная конфигурация, отдельная точка отказа. Файл конфигурации MCP обрастает десятками записей, а управление этой кучей серверов превращается в еще одну проблему. Где лежит файл конфигурации MCP для конкретного агентского приложения - лучше было бы выбирать самому, например, держать его прямо в папке проекта. Кроме того, имя mcp-сервера, в принципе не так важно для LLM как имена и описание инструментов в нем, так что одного, но полного списка инструментов (функций) было бы достаточно. Что если бы можно было запустить один сервер, который автоматически подтягивал бы все остальные?

Читать далее

Не цитируй мне нейросеть

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

Если твой ответ начинается с «Вот что сказал Claude:» или ты вываливаешь восемьсот слов нередактированной ChatGPT-простыни — поздравляю, ты только что доказал, что твой мозг — просто прокладка. Дарвин бы гордился. Пожалуйста, не размножайся.

Читать далее

Соль и перец в безопасности паролей

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

Безопасность данных сегодня стала главным приоритетом для любого веб-ресурса. Базовым стандартом защиты учетных записей является хеширование паролей. Этот процесс превращает конфиденциальные символы в необратимый код. Без него утечка базы данных мгновенно скомпрометирует пользователей.

Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа.

В новом переводе от команды Spring АйО попробуем разобраться в эволюции методов криптографической защиты. Вы узнаете, как правильно комбинировать эти инструменты для надежной аутентификации.

Читать далее

CodeGraph: граф кода для Claude Code вместо grep по файлам. Разбираю архитектуру и проверяю бенчмарки

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

Если вы работаете с Claude Code на больших проектах, знаете картину: задаёшь вопрос “как устроена авторизация” — и агент рекурсивно бегает по файлам через grep, жжёт токены и время. Я уже разбирал SocratiCode, который решает это через векторный поиск. CodeGraph идёт другим путём — строит граф символов через tree-sitter и хранит в SQLite. Разобрал архитектуру, проверил бенчмарки (92% меньше вызовов — правда, но с нюансами) и сравнил с альтернативами. Заодно поправил телеграм-маркетинг про выдуманного “агента Hermes”.

Читать далее

Очень много букв… Или кейс по специфической настройке рабочего окружения

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

Сотни строк кода, страницы документации, корпоративные чаты — и всё это каждый день. Когнитивная нагрузка не снижается. Внутри — система инструментов, которая помогает мне не тонуть: конфиги clang и специфичные настройки VSCode, приложения визуализации и др. С объяснением зачем каждый из них.

Читать далее

Segmentation Fault: как оно устроено?

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

Segmentation fault - одна из тех ошибок, с которой сталкивался каждый, но мало кто разбирался что за ней стоит. В этой статье копаем глубже обычного: смотрим как ядро Linux понимает что произошло, какие типы ошибки бывают - с реальными примерами и исходниками ядра Linux.

Сегфолтнуться