Обновить
1024K+

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

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

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

MCP для агентной коммерции: что может пойти не так

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

Представьте диалог c вашим любимым ИИ‑инструментом:

— Найди поездку в Казань на выходные, до 20 тысяч рублей и с нормальным отелем.

— Секунду, подбираю…

«Подбираю» в этом диалоге — это некоторый чёрный ящик. Под ним могут скрываться воспоминания модели из обучения, попытки воспользоваться веб‑браузером, поиском в интернете. Такие обращения могут содержать различного рода погрешности.

А вот чтобы это «подбираю» означало поиск по реальным ценам и наличию агент должен уметь обращаться к базе данных с билетами. Именно для этого мы вместе с командой Туту выпустили MCP‑сервер.

Читать далее

Как мы тестируем Kubernetes‑операторы в MWS Cloud Platform

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

Сегодня Kubernetes стал де-факто стандартом для развёртывания SaaS-приложений и сервисов. Практически каждый разработчик работает с ним ежедневно, но большая часть этой работы связана с установкой уже готовых компонентов и манифестов. Если базового функционала начинает не хватать, возникает потребность в расширении. И вот тут начинается путешествие в уникальный мир k8s-операторов.

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

Меня зовут Антон Железнов, я разработчик в команде Managed Kubernetes облака MWS Cloud Platform. И в этой статье я хочу рассказать о тестировании операторов не на абстрактных примерах, а на устройстве нашего решения. Итак, поехали! 

Читать далее

Как я посадил WireMock.Net на gRPC стероиды

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

WireMock.Net умеет мокать gRPC. Но для этого он заставляет разработчика таскать .proto файлы и поддерживать лишнюю конфигурацию. Я контрибьютил в проект несколько месяцев, разобрался в кишках и написал своё расширение WireMock.Grpc.Protobuf

Пакет предлагает gRPC моки через типизированные контракты Google.Protobuf. Получилось короче, надёжнее и заметно удобнее. В статье покажу, почему мой способ удобнее стандартного, как всё устроено под капотом и зачем вашему проекту пакет WireMock.Grpc.Protobuf

Кстати, подобные инженерные разборы, open-source и внутренности .NET я регулярно публикую в Telegram-канале StepOne. Если статья зайдёт — заглядывайте.

dotnet add package WireMock.Grpc.Protobuf

Пошаговая инструкция по внедрению скелетон-загрузки в ваше приложение

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

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

Расскажу, как мы анализировали его для оптимизации трудозатрат, пошагово внедряли скелетон-загрузку и как это позволило нам получить хорошие отзывы от юзеров и визуально ускорить загрузку приложения. Также в статье расскажу о том, как мы поддерживаем и развиваем это решение.

Читать далее

416 тестов и кнопка «снести все»: где ломаются агентные проекты

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

С февраля у меня на ноутбуке крутится автономный агент Сурок: Claude Code, флаг --dangerously-skip-permissions и ральф-луп поверх. Работает — сидишь, кофе пьешь, смотришь, как горят токены. Потом я прогнал Сурка и еще пять своих проектов через свод инженерных практик, и у идиллии появилось имя: «Level 5 автономии при Level 1 границах». Внутри — диагностика из десяти вопросов, чужой боевой опенсорс на десятки тысяч звезд и методология PDLC Сбера, где эти грабли уже каталогизированы.

Читать далее

Как и зачем мы в PVS‑Studio делаем новые форматы общения с IT‑сообществом

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

Каждый, кто работает в IT, знает: технологии развиваются стремительно, а времени на то, чтобы за ними поспевать, не всегда хватает. Чтобы оставаться востребованным специалистом, нужно постоянно изучать что‑то новое. Но где искать качественную информацию, которая действительно применима на практике?

Наша команда всегда старается делать разнообразный и интересный контент. Если он вам нравится, и вы думаете: «Контент классный, я тоже так могу», — давайте делать это вместе! Ведь у нас не только можно попробовать продукт или записаться на демо. Мы открыты к коллаборациям и предлагаем множество вариантов взаимодействия. Обо всём по порядку.

Читать далее

Модель исполнения JavaScript по спецификации ECMAScript: call stack, контексты, окружения и замыкания

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

Я довольно долго был уверен, что понимаю, как работает call stack.

Ну а что там понимать? Положил кадр, снял кадр, LIFO.

Потом открыл спецификацию. Оказалось, за «стеком вызовов» стоит каркас из пяти сущностей, а половина привычных объяснений просто не совпадает с текстом стандарта.

Замыкание — не фича языка, а побочный эффект того, что окружение живёт отдельно от кадра. «Область видимости» — вообще не сущность: такого термина там нет. А слов event loop, microtask и task queue в ECMA-262 ровно ноль. Проверяется грепом за минуту.

Разбираю модель исполнения по первоисточнику: агент, контекст, окружения, джобы. Каждое утверждение сверено с текстом стандарта, номера параграфов проставлены — можно перепроверять за мной.

Разобрать по спецификации

Click to Pray: один if — и ты ошибся

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

Интернет приписывает Джейсону Стейтему фразу «Одна ошибка — и ты ошибся!». В случае этой истории она почему‑то сама собой переиначилась в вариант из заголовка. Уж очень всё оказалось из серии «никогда так не делай».

24 июля исследователь BobDaHacker опубликовал разбор Click to Pray — официального приложения Всемирной сети молитвы Папы Римского.

В сервисе на тот момент было 719 517 зарегистрированных аккаунтов. У пользователей были последовательные числовые ID, а API позволяло запросить профиль по ID: GET https://api.clicktopray.org/user/users/12345 (поняли уже? но это не всё!)

а что ещё?

Конвейеры на Channels: как не получить тихую утечку памяти и вечно висящий воркер

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

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

В статье разберём, как строить конвейеры на System.Threading.Channels: настраивать обратное давление, корректно завершать обработку, не терять исключения и безопасно использовать каналы в ASP.NET Core.

Читать далее

Английский вместо кода

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

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

Думаю вы узнали COBOL, который по сей день ежедневно эксплуатируется и по разным оценкам стоит за 80% обычных (магазинных) банковских транзакций, а его кодовая база тянет на пару сотен миллиардов строк и до сих пор кормит десятки, если не сотни тысяч разработчиков. Правда, если копнуть эти красивые цифры, почти все они восходят к одному опросу конца девяностых, который потом бесконечно переэкстраполировали на весь мир, так что честнее считать их порядком величины, а не точными данными.

SQL породил особую касту DBA (Database Administrators) и Data Engineers и сегодня человек, который пишет "простые запросы", может легко зарабатывать на уровне мидла, а сам язык стал настолько сложным, что современные диалекты (PostgreSQL, Oracle) - это полноценные языки программирования с процедурной логикой, где можно написать всё что угодно, от генератора фракталов до игрового движка.

Семейство 4GL оказалось "золотой клеткой" и прекрасно работали, пока нужно было сделать типичную форму "ввод-вывод", но как только требовалась нестандартная бизнес-логика или интеграция с внешним сервисом, инструмент упирался в свои границы и программистам приходилось дописывать "костыли" на низкоуровневых языках, что превращало разработку в адский коктейль из визуального дизайна и грязных хаков. И вместо исчезновения программистов, 4GL создали "архитекторов корпоративных систем", которые (например, SAP ABAP), стали невероятно дорогими специалистами, и тоже не устранил программирование, а просто переместил его из зоны "универсальных языков" в зону "дорогих и капризных инструментов", привязывающих компанию к конкретному вендору.

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

Читать далее

Атомарность в реактивных системах

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

Ранее мы говорили о чрезвычайных ситуациях при вычислении инвариантов. Однако они также могут возникать и во время одновременных изменений нескольких исходных состояний. Давайте посмотрим, какие тут есть варианты поведения..

Читать транзакцию

Django ORM ломается не там, где вы смотрели: шесть ошибок

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

Django ORM умеет долго скрывать проблемы: лишние запросы, гонки при save(), затянувшиеся транзакции и выборки, которые незаметно съедают память.

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

Читать далее

Доверьтесь компилятору: C++23 против трюков из 90-х

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

Как часто вы слышали: «Не доверяй компилятору, пиши вручную»? Похоже, эту идеологию пора сдавать в архив.

Автор специально собрал примеры, в которых «умный» код современного C++ либо проигрывает наивному, либо не даёт выигрыша, но при этом ухудшает читаемость и мешает оптимизатору. Тут и легендарный Q_rsqrt, и бит-хаки для подсчёта единичек, и вездесущие const&, и даже опасные фокусы с фильтрацией диапазонов. Всё с воспроизводимыми бенчмарками на Clang 21 и Ryzen 9. Если вы готовы пересмотреть багаж старых привычек – просим под кат.

Читать далее

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

Что нового в PhpStorm 2026.2

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

Несмотря на то, что PhpStorm уже несколько лет официально недоступен в России, он по‑прежнему остаётся одним из главных инструментов для PHP‑разработчиков. Недавно вышла новая версия PhpStorm 2026.2.

В релиз вошли новые инструменты для ИИ‑агентов, встроенная интеграция с GitHub Copilot, поддержка собственных моделей для автодополнения и новый атрибут #[FileReference]. Разработчики также добавили отдельное окно для Laravel, поддержку TypeScript 7 и улучшили работу с Git, терминалом, базами данных и Docker.

В статье разберём основные изменения PhpStorm 2026.2, а также расскажем, какие возможности для PHP‑разработки уже доступны в OpenIDE и чего ожидать от её перехода на платформу 2026.2.

Читать далее

Green Tea GC: что на самом деле поменялось в сборщике мусора Go 1.26

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

С весны на собесах стабильно спрашивают про Green Tea. И ответ, который я слышу в девяти случаях из десяти, звучит так: «ну, он на 40% быстрее». Дальше начинаешь уточнять — быстрее что? — и человек плывёт. Проценты там действительно есть.

Просто относятся они не к тому, о чём все думают.

Читать далее

Виды связываний (external, internal, no linkage) для самых маленьких

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

Если вы когда-нибудь собирали проекты на C++, то практически наверняка получали ошибку от линковщика формата:

/usr/bin/ld: /tmp/ccYa2eaO.o: в функции «foo()»: foo.cpp:(.text+0x0): повторное определение «foo()»; /tmp/ccKEs5I7.o:main.cpp:(.text+0x0): здесь первое определение collect2: error: ld returned 1 exit status

Опытным C++ разработчикам эта проблема известна как ODR (One Definition Rule). Но корень этой ошибки выходит далеко за рамки «используй inline в .hpp» и «не определяй ничего в .hpp».

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

Читать далее

Как я получил перманентный бан за публикацию статьи про инди‑геймдев на IXBT

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

Что же за статья такая была? Неужели там была какая‑то информация, нарушающая нормы законодательства? Ведь не дают перманентный бан просто так! Значит, была веская причина.

Оказывается — это всё неважно, и перманентный бан могут дать просто так! Для этого даже нарушать ничего не надо.

Вот об этом я и хочу рассказать в новой статье.

Читать далее

От хаоса к порядку: как управлять техдолгом

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

Сталкивались с проектами, где накопленный технический долг замедляет работу команды и усложняет развитие продукта?

В этой статье Ирина – тимлид компании «Совкомбанк Технологии» – подробно расскажет, как ей вместо с командой удалось выстроить работу с техническим долгом на проекте с 8-летней историей: с чего начать, как приоритизировать задачи, какие инструменты и процессы внедрить.

Материал будет особенно полезен тем, кто работает в проектах с долгой историей и вынужден совмещать поддержку старого кода с внедрением новых решений.

Читать далее

Разбор утечки памяти в StackExchange.Utils: как 4 КБ конфигурации съели 2 ГБ RAM

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

Привет, Хабр! Я Антон Пронькин, разработчик в команде развития сервисов продаж для юридических лиц в Т-Банке.

Расскажу, как мы переносили конфигурационные данные в файлы и наткнулись на OOM-крэш, вызванный всего одним методом расширения. Добавление YAML-файла на 4 КБ съедало больше 2 ГБ RAM. При этом локально все работало, а падало только при прогоне тестов на пайплайне.

В статье — расследование с профайлингом, экспоненциальный рост памяти, фикс в одну строку и разбор особенности работы библиотеки StackExchange.Utils.

Читать далее

Практика программирования в эпоху ИИ (разбор реальной задачи на С++ с помощью ИИ агента)

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

Мне кажется когда мы начинаем обсуждать с ИИ какое-то более менее конкретное техническое решение, которое, очевидно, должно существовать, мы обычно ожидаем чтобы он фактически дал подтверждение и недостающие детали. Но мне при общении с ИИ-агентом, в первую очередь интересно, сможет ли агент в ответ на некоторый сложный вопрос заставить меня (спрашивающего) изменить точку зрения то есть фактически опровергнуть исходную посылку-гипотезу на которую, технический вопрос, так или иначе всегда опирается! По моему это основной признак интеллекта — свобода не только отстаивать свою точку зрения, но и пытаться «заразить» этим собеседника.

Так получилось, что у меня сложились практически идеальные обстоятельства для такого эксперимента. Я в принципе знал идеальное решение с самого начала, но в повседневной рутине оно было скрыто множественными наложениями от текущей работы. По той же причине занятости текущей работой я не мог в полной мере сосредоточиться (а главное не старался) чтобы достать и отряхнуть от наложений идеальное решение, а начал сессию с ИИ агентом чтобы в том числе посмотреть насколько эффективной является его помощь в сложных вопросах, по которым невозможно сформулировать какой-то простенький промт, но которые требуют итеративной сессии вопросов-ответов уточняющих вопросов, разъясняющих вопросов-исправляющих вопросов, …

Первую часть общения я описал как смог в предыдущей статье.

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

Это отличный, глубокий вопрос, который бьет прямо в особенности того, как устроены большие языковые модели (LLM) и как у нас замыливается «цифровой глаз». ...

Дисклеймер: редактора, корректоров у меня нет, вычитать, нормально, столько текста я вряд ли в состоянии.

Но начать я хочу с более детальной формулировки задачи.

Читать далее