Привет, Хабр! Меня зовут Виктория Мохирева, я консультант SAP MM. Сегодня расскажу о том, как мы с командой решили колоссальную задачу инвентаризации — пересортицу товаров — с помощью интеграции SAP с большой языковой моделью (ИИ).
Вот как бывает в обыденности магазина: пришёл товар, на учете кружка, а на полке по факту тарелка. Начинается танец с бубном из таблиц, сверка номенклатур и постоянные акты. Чтобы автоматизировать подбор правильных групп для пересортицы, мы написали инструмент, который позволяет общаться с ИИ напрямую из SAP GUI. Решение получилось достаточно компактным и элегантным. А под капотом у нас — архитектура, ключевые куски кода и логика, которые помогли нам превратить «регулярный ручной труд» в интеллектуальный диалог с машиной, и теперь у нас не разрозненная масса товаров, а сформированные по определенным параметрам логичные группы.
Читать далееВ сообществе часто пишут о том что KV-cache hit rate - один из главных приоритетов при оптимизации стоимости. Manus в той-самой статье про context engineering и своего агента, TikTok в кейсе про оптимизацию AI-агента для тестирования, AiSDR в статье про перестройку шаблонов генерации писем.
Стало интересно стало: а как это считается у MaaS-провайдеров? Я знаком со скидкой за кэш токены, но никогда не садился детально разбирать экономику кэша у OpenAI, Anthropic, Gemini, DeepSeek - с цифрами, сценариями, сравнением.
Сел считать. Первый же результат удивил: два запроса к одной и той же модели с одним и тем же объёмом токенов - разница в цене в 3 раза. Зависит только от того, попали ли токены в кэш.
Про то как KV-кэш устроен внутри - уже хорошо написано на Хабре, ссылки в конце. Здесь только про деньги и токены: как считать реальную стоимость и почему прайс-лист для этого не подходит только прайс-лист.
Читать далееВозможно вам знакома ситуация, когда отчеты по SLA 99,9%, заявки закрываются в срок, но при этом пользователи жалуются, что работать невозможно. Показатели в системе и реальность расходятся — это как мерить среднюю температуру по больнице.
Меня зовут Авдей Мартынович, более 20 лет занимаюсь поддержкой ИТ-инфраструктуры. В статье расскажу, почему классического SLA недостаточно, как мы в ALP ITSM пришли к XLA и что из этого реально работает.
Читать далееПривет! Меня зовут Владимир и я специалист по тестированию на проникновение. Зимние праздники и часть февраля я провёл за сдачей CPTS. Что это? Как это? сильно ли изменился экзамен после мая 2025? Разберёмся в этой статье.
Читать далееХранение данных в S3 часто воспринимается как нечто простое: загрузили объект, при необходимости обновили или удалили. Но на практике это хранилище обычно используется в сценариях, в которых цена ошибки слишком высока. Вы же хотите случайно удалить или перезаписать бэкапы, логи, артефакты сборки или данные, подпадающие под регуляторные требования. Чтобы защититься от подобных ситуаций, в S3 есть механизм Object Lock.
Всем привет! Меня зовут Клюев Алексей, я старший разработчик S3-совместимого объектного хранилища в Selectel. В этой статье мы разберем, как работает Object Lock, какие способы блокировки объектов он поддерживает, чем отличаются режимы удержания и какие ограничения важно учитывать при работе с ними. В качестве примеров будем использовать язык Go и aws-sdk-go v2.
Читать далееJava-разработчики годами жили по принципу «Everything is an object». И всё бы хорошо, если бы за это нам не приходилось платить «налогом на объект»: каждый раз, когда вы создаёте простой класс из двух полей int, JVM бережно дописывает к нему тяжёлый заголовок, упаковывает в ссылку и разбрасывает по куче, заставляя процессор страдать от постоянных промахов кеша.
Мы привыкли к этому компромиссу. Мы научились использовать примитивные коллекции и костыли, чтобы выжать производительность там, где объектная модель Java начинает буксовать. Project Valhalla призван изменить сами правила игры.
Читать далееИстория фронтенда хорошо показывает, что инструменты редко исчезают мгновенно. Чаще они проходят понятный цикл: сначала решают конкретную проблему и быстро набирают популярность, потом становятся привычной частью стека, а со временем уступают место следующему подходу. Примерно так развивается и CSS-in-JS. Когда он появился, это выглядело логичным шагом: стили рядом с компонентами, темы, токены и удобная интеграция с React. Со временем стало ясно, что у этой модели есть и ограничения — стили генерируются в рантайме, усложняется SSR, а в больших приложениях начинают накапливаться накладные расходы. Появились попытки сделать CSS-in-JS легче и быстрее. Одной из них стал Stitches: он сохранил удобный DX и заметно сократил рантайм. Но развитие проекта остановилось, а требования к фронтенду продолжают расти. Поэтому всё чаще обсуждают другой подход — перенос генерации стилей на этап сборки. В этой логике и появился StyleX.
Читать далееМногие мои читатели называли меня циничным, когда я делал заявления наподобие «вам всегда нужно угождать своему менеджеру» или «большие технологические компании имеют право решать, над какими проектами вы работаете». Алекс Веннерберг привёл веские доводы того, что я циник, в своём посте Software Engineers Are Not Politicians («Разработчики — это не политики»). Вот некоторые выдержки из него:
Я не сомневаюсь, что советы [автора статьи] довольно эффективны для лавирования на верхних уровнях в организации, занимающейся разработкой крупного программного продукта с долгой историей. Но при этом теряется какая бы то ни было концепция пользы. Разве слишком наивно заявлять, что разработчики — это не «просто инструменты в политической игре», а специалисты, цель которых заключается в использовании своего опыта для решения важных задач?
Ирония заключается в том, что подобное мышление уничтожает саму способность компании зарабатывать деньги… идея о том, что разработчики должны уяснить свою обязанность выполнять приказы менеджера, на мой взгляд, довольно уныла. Возможно, это хороший способ беспроблемной работы в бюрократической организации, и, разумеется, нам часто приходится идти на компромиссы и получать указания, но это это вряд ли поможет выполнять свою работу качественно.
Я понимаю, почему люди так думают. Но мне нравится работать в больших технологических компаниях! И я вижу в себе профессионала, решающего важные задачи. А ещё я считаю, что лавирование в компании с целью реализации для пользователей новых фич или улучшений — это превосходный (если не лучший) способ выполнять свою работу качественно.
Но тогда почему же я публикую так много циничных постов? Мне кажется, что небольшая доля цинизма необходима, чтобы чётко представлять функционирование организации и не попадать в ловушку излишне циничного мышления. Я думаю, что в общем случае хорошие разработчики должны быть слегка циничными.
Читать далееПроект PhotoMentor создавался как ИИ-ментор для фотографов. Механика простая: пользователь загружает снимок, а под капотом Gemini выступает в роли арт-директора — анализирует композицию, работу со светом, цветовую гармонию и выдает детальный фидбек с оценкой.
С главной проблемой Vision-моделей я столкнулся в первый же день закрытых тестов. Я скормил Gemini свой тестовый снимок: крупный портрет собаки, положившей морду на лапы.
Модель уверенно выдала:
Читать далееВ поддержке было 148 инцидентов по одной проблеме, а в бэклоге разработки — всего 3 дефекта
Для разработки проблема выглядела редкой. Для поддержки — массовой
Разбираем, почему инциденты не доходят до продукта и как выстроить процесс от обращения пользователя до релиза исправления
Читать статьюПредставьте: менеджер по продажам уходит из компании. Уходит со скандалом, забрав часть клиентской базы. Через три месяца он всё ещё состоит в рабочем Telegram-чате отдела, читает обсуждения новых сделок, видит, кто из клиентов недоволен. Использует эту информацию или просто злорадствует — неважно. Важно то, что компания об этом не знает.
Читать далееЕсли в первой части было много теоретизирования на уровне мотивирующих книжиц, то сейчас будет рассказ про то, как научится творить везде.
Первое, к чему стоит привыкнуть: творить каждый день. Хоть по пять минут, хоть по часу, но творить. Ждать вдохновения не следует. Вдохновение - это для мажоров с большим количеством свободного времени. Придётся выдавливать из себя, по-чеховски, раба по капле. Для этого своё хобби придётся носить с собой в сумке/рюкзаке/клатче/редикюле (нужное подчеркнуть).
Читать далееПлатные модели embedding не гарантируют качество на малоресурсных языках. На задаче кроссязыкового сопоставления EPG-заголовков (EN/RU/HY) бесплатная LaBSE набирает R@1 = 0,83, а OpenAI text-embedding-3-large -- 0,21. Протестировано 19 моделей, код и данные открыты.
Читать далееПредставьте, что у вас в руках легендарный, но безнадёжно устаревший актив.
К концу XIX века Сандуновские бани выглядели как классический спагетти-код. Ветхая застройка, никакой документации плюс «кусочная» система управления: разные зоны отданы разным арендаторам, каждый живёт своей логикой и оптимизирует только свой кусок.
Перед новыми владельцами встал выбор: поддерживать умирающий проект или всё остановить и переписать систему с нуля. Риск был колоссальным: любая ошибка в расчётах превратила бы главное наследие семьи не в дворец, а в долговую яму.
Но они выбрали второй вариант.
Дальше вскрылась проблема нагрузки. Новые бани требовали 20000 вёдер воды в час, а городской водопровод падал по тайм-ауту и блокировал других пользователей. Чтобы уйти от зависимости от внешнего вендора, пришлось строить собственную инфраструктуру — прокладывать водовод от Бабьегорской плотины и бурить скважины. Внедрили тройное резервирование: городская вода + своя труба + скважины. Внутри здания реализовали переход на мазут и установку гигантского теплоаккумулятора (12 тонн чугуна). Топка ночью обеспечивала отдачу тепла днём.
Наконец, пришлось искать новую модель экономики, так как бани окупаются долго.
Сами бани давали лишь 60% выручки, допмонетизация шла через сервисы аренды жилья, ресторанов и медицины. Главным вызовом стала балансировка продукта: нужно было сделать так, чтобы «бесплатные пользователи» (отделения за пять копеек) не распугали «премиум-подписчиков» (нумерные бани) и при этом инфраструктура выдержала общую нагрузку.
Оправдан ли был такой риск? История показала, что да.
Читать далееВ статье даны формальные определения понятиям задача, способ, случай, действие и его свобода, причина, измерение, предположение и его верность, игра, поведение и ум, а также еще около 80. Предлагается основанный на исконно русских словах новый язык теории вероятностей, теории игр, теории алгоритмов, математической статистики, философии. Указаны недостатки существующей терминологии.
Читать далееВы открываете горячую функцию в профилировщике, видите миллионы вызовов, добавляете #[inline(always)]. Бинарник распухает, время сборки подскакивает, а производительность не меняется. Или ваще падает. Проблема не в атрибуте. Проблема в том, что #[inline] делает совсем не то, что подсказывает интуиция.
Читать далееРаньше наш способ собрать данные из всех микросервисов в одно место (в витрину) напоминал копролит (только не древний, а наш собственный ИТ-артефакт). Он был сложный, медленный, постоянно ломался и требовал много ручной работы. Данные размазывались по куче баз данных. Чтобы сделать отчёт или отправить данные во внешнюю систему, надо было собирать их вместе.
Высока вероятность, что у вас такой же или похожий. Если нет — приходите рассказать «а я же говорил» в комментариях.
Мы тратили время на латание дыр, а не на разработку. В какой-то момент решили, что пора выкинуть этот велосипед и внедрить нормальный, промышленный подход к работе с данными — Data Lakehouse с медальонной архитектурой.
В чём были наши ошибки:
— Спроектировали сложную доменную модель для витрины, которая не соответствовала ни моделям в исходных сервисах, ни требованиям пользователей. Одна таблица из микросервиса могла раскладываться на 5 таблиц в витрине.
— Превращали данные из сервисов в эту модель — это был ад.
— Схема данных на фронте, в сервисе, в витрине и у потребителя была везде разная. Это постоянные баги из-за того, что кто-то ждёт ID, а ему приходит business_number.
— Чтобы отдать данные потребителю, приходилось делать кучу JOIN-ов. Это ломало SLA по производительности.
— Любое изменение в схеме БД микросервиса (добавил колонку) требовало сложной доработки витрины. Всё тесно связано и хрупко.
— Сервисы писали изменения в свои локальные outbox-таблицы, а отдельный обработчик забирал их и складывал в витрину. Данные из разных сервисов приходили в разное время. Запрос к витрине мог пытаться сджойнить данные о клиенте и его заказе, но данные по заказу ещё не приехали. В итоге потребителю уходило неполное или вообще никакое сообщение.
— Разработчики сервисов вместо одного события «Заказ сохранён» генерировали 20 событий на каждое изменение поля в UI. Это забивало очередь и создавало дикую нагрузку.
— Тестирование — тоже ад.
Для таких ситуаций есть понятный шаблон — трёхслойная архитектура с понятным дата-пайплайном.
Читать далееВ Wordle принято начинать с «хороших» слов – с частыми гласными и согласными. Однако анализ показывает, что менее очевидные варианты иногда дают больше информации. Возникает простой, но неудобный вопрос, можно ли доказать, что одно стартовое слово лучше другого. Краткий ответ – да. Я рассмотрел Wordle как задачу теории информации и количественно оценил каждый ход, используя Excel и официальный словарь игры. Эту статью я публикую в блоге ЛАНИТ, чтобы обсудить полученные результаты с техническим сообществом.
Читать далееПривет, Хабр! Меня зовут Андрей Шукшов. Я пишу YNMT в Яндекс R&D — это движок инференса, на котором работают почти все наши большие языковые модели (LLM). Бо́льшую часть времени я пытаюсь понять, почему некоторые вещи работают медленно и как сделать так, чтобы у них это получалось чуточку быстрее.
Если вы запускали локальную LLM, то, возможно, тоже удивлялись: почему железо, способное рендерить фотореалистичные миры в реальном времени, работает в темпе печатной машинки? В своей статье я попробую хотя бы отчасти ответить на этот вопрос. Под микроскопом посмотрим на механизм Attention в режиме генерации (декодирования) и, вооружившись лучшими современными практиками ускорения на GPU, объединим всю математику в один эффективный kernel, который выжмет максимум производительности из имеющегося у нас железа.
Читать далееКаждый раз, когда вы соединяете ноды в Blueprint и нажимаете Play, Unreal Engine запускает маленький процессор. У него свои инструкции, свой стек, своя защита от бесконечных циклов. Он написан в ~4000 строках C++ и живёт в одном файле. Через него проходит каждый Event Tick, каждый Event BeginPlay, каждый вызов Blueprint-функции.
Этот процессор - Blueprint VM (Virtual Machine). И сегодня мы разберём его по винтикам.
Читать далее