Привет, Хабр! Меня зовут Дима, я бизнес‑аналитик в команде внедрения Naumen. Большая часть моей работы — это коммуникация: с клиентами, разработчиками и коллегами внутри команды. Почти вся она происходит онлайн.
В какой‑то момент я заметил, что много рабочего времени уходит не на сами задачи, а на ожидание ответов, уточнения и постоянные переключения между чатами.
Со временем я собрал несколько правил, которые помогают сделать онлайн‑коммуникацию быстрее и не растягивать обычный рабочий вопрос на полдня.
В статье расскажу, когда лучше писать, а когда созваниваться, как составлять сообщения без лишних уточнений и что помогает меньше отвлекаться на чаты.
Читать далее«Мой номер заказа... сейчас, секунду...» — и бодрое «Да, я вас понял, минуточку!» прямо в середину фразы.
Все, кто звонил в поддержку за последние пару лет, это слышали. Выглядит как мелкая недоработка, а на деле это одна из самых неприятных задач в голосовом стеке, и решается она заметно хуже, чем кажется со стороны.
Формулируется она так: понять, что человек в трубке закончил говорить, а не взял паузу. Ниже — про то, почему готовые VAD эту задачу не решают в принципе, что мы перебрали, прежде чем взяться за свое, и где у нас до сих пор не получается.
Дисклеймер: работаю в аутсорсинговом контакт-центре, мы несколько лет делаем свой голосовой стек — телефония, распознавание, ассистенты на LLM. Продукт не называю и ссылок не будет, статья про задачу.
Читать далееПривычные термины становятся все более запутанными. Если раннее (до 2003 года) система ГОСТ еще была фундаментальна и системно выстроена (причем это были не переводы западных стандартов), то потом система государственной стандартизации стала резко деградировать.
Читать далееМы полгода собираем ответы нейросетей в базу и однажды заметили: два ответа ChatGPT на один и тот же вопрос, снятые в один день разными способами, ссылались на совершенно разные сайты. Полез разбираться в сыром потоке, который ChatGPT отдаёт браузеру, и нашёл там служебные карточки источников с пометкой о происхождении. Разобрал почти 1,9 миллиона таких карточек: у ChatGPT есть собственный поисковый робот, который даёт 97% всех источников, и про каждую страницу он хранит один замороженный кусок текста длиной 200 символов. В статье: как устроен этот робот, чем он отличается от покупной поисковой выдачи, что именно он вырезает с сайтов (спойлер: часто это код фильтра или текст рекламного блока), и что с этим делать владельцу сайта.
Читать далееШесть лет занимаюсь складскими системами на платформе 1С: обследования, внедрения, миграции. Склады — от 5 000 до 40 000 м².
Вопрос из заголовка я слышу чаще любого другого, и задают его совершенно справедливо: в 1С:ERP (а также в УТ и КА) адресное хранение действительно есть, работает и закрывает заметную часть складских задач. Продавцы WMS на этот вопрос отвечают предсказуемо. Мне проще: бывают склады, которым я отвечаю «незачем».
Разбираю, что именно умеет адресное хранение в ERP, что к этому добавляет WMS и по каким признакам понять, по какую сторону границы находится конкретный склад.
Читать далееЕсть удивительная вещь. Человек может двадцать лет получать зарплату и каждый месяц тратить почти всё, что заработал. И это почему-то не кажется ему рискованным.
В следующем месяце будет следующая зарплата. Потом ещё одна. А если зарплата станет больше — можно будет больше тратить. Так проходят годы, иногда десятилетия. При этом предложение регулярно откладывать небольшую часть дохода и постепенно превращать её в капитал почему-то воспринимается совсем иначе:
— Что откладывать, если и так мало денег.
— Биржа - это казино, управляемое жуликами!
— Скоро всё изменится, и акции будут стоить ноль!
— Рынок вот-вот рухнет!
Да, рынок упадёт.
Обязательно.
Недвижимость тоже когда-нибудь подешевеет. Золото может годами стоить дешевле, чем хотелось бы его владельцу. Валюта может обесцениться. Банк может обанкротиться, а государство может поднять налоги. И вообще, будущее имеет неприятную привычку не спрашивать нашего мнения.
Именно поэтому я инвестирую. Не потому, что знаю, что будет. А потому, что не знаю.
Читать далееПара new в горячем методе может вообще не попасть в кучу — а после безобидного if внезапно вернуть аллокации обратно. Разбираемся, как C2 принимает такие решения, где ломается скалярная замена и как проверить всё это через JMH и диагностические флаги JVM.
Разобраться в JVMREADME редко ломается в один момент.
Обычно он просто постепенно перестаёт соответствовать проекту: переименовали команду, перенесли файл, удалили .env.example, сменили package manager — а инструкция осталась прежней.
В итоге новый пользователь копирует команду из README и получает ошибку. Разработчик же часто узнаёт об устаревшей документации только после issue, сообщения коллеги или неудачного деплоя.
Мне стало интересно: можно ли автоматически находить хотя бы часть таких расхождений, не выполняя команды из README и не отправляя исходный код в LLM?
Так появился RealityLint — open‑source CLI, который статически сверяет проверяемые утверждения из README с реальным состоянием репозитория.
Читать далееУченики начальной школы могут заучивать таблицу умножения однозначных чисел, но простого запоминания будет недостаточно, когда учитель задаст задачу на умножение трёхзначных чисел. Здесь требуется алгоритм: учеников учат выстраивать числа друг над другом и умножать каждую цифру нижнего числа на каждую цифру верхнего. На протяжении тысячелетий математики считали это самым быстрым способом умножения, пока в 1960 году 23-летний молодой человек не сделал шокирующее открытие, которое привело к загадке, остающейся неразгаданной до сих пор.
Эта загадка имеет решающее значение для всех, кто имеет отношение к цифровому миру, поскольку умножение является основополагающей операцией для компьютеров. Шифрование, робототехника, искусственный интеллект, обработка звука и практически всё остальное, чем мы заставляем заниматься кремниевые чипы, связано с умножением, причём иногда огромных чисел, умножаемых многократно. В таких масштабах даже простая операция становится «узким местом», и любое дополнительное повышение эффективности имеет глобальные экономические последствия.
Чтобы понять суть этого «узкого места», обратите внимание на то, как «школьный» алгоритм справляется с увеличением размера чисел. При умножении двух двузначных чисел выполняется четыре однозначных умножения. Если перейти к паре трёхзначных чисел, то потребуется девять однозначных умножений. Нагрузка растёт пропорционально квадрату количества разрядов (n², где n — количество разрядов в умножаемых числах). При анализе подобного алгоритма компьютерные учёные не измеряют скорость в секундах, поскольку она зависит от аппаратного обеспечения. Вместо этого они подсчитывают количество вычислительных шагов. Они также игнорируют второстепенные детали, такие как время, необходимое для переноса единицы при умножении. Когда числа становятся достаточно большими, эти низкоуровневые операции перестают иметь значение, поскольку их полностью затмевают более ресурсоёмкие операции. Информатики обозначают количество шагов с помощью так называемой нотации «большого O»: например, алгоритм, который учат в начальной школе, требует O(n²) шагов, что читается как «порядка n в квадрате». В общих чертах, если числа в два раза длиннее, для выполнения алгоритма требуется в четыре раза больше вычислительной работы. Если числа в тысячу раз длиннее, требуется в миллион (1 000 в квадрате) раз больше работы.
Читать далееИмя пакета в реестре часто оказывается первым сигналом того, что компоненту можно доверять. Разработчик видит название вроде google-cloud-storage, opentelemetry-sdk или apache-airflow-providers-slack раньше, чем открывает исходный код, и ожидает, что знакомый префикс указывает на известный проект. В PyPI это ожидание пока ничем не подтверждено: реестр формально не связывает общее начало имени с его владельцем, поэтому любой свободный вариант может зарегистрировать посторонний пользователь.
В конце июня 2026 года в Python‑сообществе приняли PEP 752 (мы писали об этом здесь). Он предлагает закреплять за организацией не отдельные имена, а префикс и все будущие проекты, которые ему соответствуют. Если PyPI реализует этот механизм, то пакет с именем вроде «google‑cloud‑new‑service» сможет опубликовать только та организация, которой принадлежит право на этот префикс или которой разрешили пользоваться этим правом. На первый взгляд, решение очевидное. Однако общий префикс не всегда означает, что все пакеты принадлежат одному издателю. Иногда он обозначает семейство официальных библиотек, а иногда экосистему сторонних дополнений.
Меня зовут Артем Максимов, я отвечаю за аналитику продуктов в CodeScoring. Вместе с дата‑инженером Артемом Ивановым в этой статье мы разбираемся, какую проблему решает PEP 752, где проходит его граница и что нам показывает база данных CodeScoring.
Читать далееГотовое решение в статье — как реализовать вход в Telegram через РФ сервисы: VK ID, Яндекс ID и MAX.
Мы оставили Telegram как удобную точку входа и канал доставки, а идентификацию вынесли в отдельные ID-сервисы. Идея простая: разделить «кто пользователь» (identity) и «куда ему слать уведомления» (channel identity). Пользователь авторизуется через VK ID, Яндекс ID или MAX, а telegram_id позже привязывается к его аккаунту исключительно для отправки ленты — не для входа.
Читать далееМеня зовут Василий Миловидов, я системный архитектор в крупной компании. Мы строим обмен между сервисами на событиях: сервис меняет агрегат в PostgreSQL, в той же транзакции кладёт задачу в outbox на River, воркер публикует событие в Kafka с ключом aggregate_id.
Разбирая соседнюю задачу, я обнаружил, что эта схема не даёт гарантии, которую мы в неё заложили. Строгого порядка событий одного агрегата в ней нет, и Kafka тут ни при чём: порядок теряется раньше, на своих же воркерах.
Статья написана для моей команды, чтобы у всех была одна картина проблемы и один язык для её обсуждения. Если она пригодится кому‑то ещё, тем лучше. Отдельно я старался, чтобы текст был понятен человеку, который только начинает работать с распределёнными системами: каждый механизм я объясняю с точки зрения того, что он делает и от чего защищает.
Всё, что касается поведения River, Kafka и PostgreSQL, проверено по документации, ссылки собраны в конце. Там, где утверждение является моим выводом, а не документированным поведением, я это отмечаю отдельно.
Читать далееПривет, Хабр! В целом, про миграцию и импортозамещение высказался уже практически каждый утюг нашей необъятной родины. Почему мы вообще снова хотим подсветить эту тему? Потому что прошло уже достаточно времени, чтобы осознать: миграция — это не просто оперативное решение проблемы, а новый подход к созданию и поддержанию ИТ-инфраструктуры. Мы в компании работаем в такой парадигме довольно давно, начали задолго до 2022 и роста популярности подобных решений, так что успели накопить достаточно опыта.
Статья носит обзщепознавательный характер и будет полезна тем, кому в целом интересны механизмы миграции ИТ-систем — и их ключевые отличия у разных вендоров в разных странах. В следующих статьях цикла мы разберем типы миграции, их алгоритмы и посмотрим на результаты тестирования, чтобы оценить их работу в реальных условиях. А пока…
Читать далееМеня зовут Роман, я работаю продактом в Альфа-Банке. В первые дни работы ко мне перешла команда разработки, которая сформировалась буквально за 2 месяца до меня. Прошлый продакт работал на 3 команды, времени на всех не хватало, поэтому команда встретила меня холодно. Как я это понял? По ретро — несмотря на то, что мы не закрывали планируемые задачи на спринт, у всех «все было хорошо» и «обсуждать нечего», а ребята больше работали как одиночки, чем как команда.
Это было что-то новое для меня, так как на прошлом месте работы команда разработки работала вместе не один год и решала многие проблемы самостоятельно. А для продакта, который взаимодействует с командой разработки кучу своего времени, а также отвечает за сроки релизов, чрезвычайно важно выстроить хорошие отношения и атмосферу доверия внутри команды.
Я начал искать как можно быстрее сплотить команду и в какой-то момент осознал, что могу скучные и вымученные ретро добавить эмоций. И решил попробовать.
Читать далееМеня зовут ZolAnd, я - независимый инженер-разработчик embedded-систем в основном для дома и сельской усадьбы. В какой-то момент мне захотелось собрать под одной крышей разношёрстный парк ZigBee-устройств от разных производителей, работать с ним локально, без обязательной привязки к облаку, и при этом иметь возможность не только интегрировать чужие устройства, но и проектировать свои. Так появился проект ZBFun. Эта статья — про то, с какими вызовами я столкнулся, какие решения уже существуют и почему они мне не подошли, и про архитектуру, к которой я в итоге пришёл.
С чего всё началось
Задача звучала просто: хочу python-библиотеку для ZigBee на ESP32-C6. Готовой не нашлось — есть отличный esp-zigbee-lib от Espressif на C, но ничего сопоставимого на Python или MicroPython для этой платформы не было. Значит, писать самому. И тут выяснилась вторая, более фундаментальная проблема. Чтобы написать библиотеку, нужно понимать, что такое ZigBee Cluster Library (ZCL) — стандарт, который описывает, из чего вообще состоит ZigBee-устройство: кластеры, атрибуты, команды, типы данных, зависимости между ними. Официальный документ Alliance — 1213 страниц PDF, написанный для инженеров, имплементирующих стек с нуля, без какой-либо машиночитаемой версии. Ни JSON, ни XML — только текст, рассчитанный на то, что человек прочитает и перепечатает нужное руками. Дальше — хуже. Когда я стал сверять этот текст с реальными SDK и реальными устройствами, обнаружились расхождения. Причём не косметические, а такие, из-за которых устройство просто не будет работать правильно.
Читать далееВ прошлой статье я рассказывал о случайно попавшем ко мне образце ChainVeil - вредоносном ПО из источника, который на тот момент не был зафиксирован в публичных исследованиях.
На этот раз первым сигналом стал мой собственный supply chain‑мониторинг. Он сообщил о новом npm‑пакете plugin-react-vite. На первый взгляд это выглядело как очередной тайпсквоттинг - ничего особенно необычного.
Но я решил пойти дальше: сначала проверить метаданные пакета, затем код, затем инфраструктуру, а уже после этого попытаться понять, кто стоит за образцом и связан ли он с чем‑то уже известным.
В результате расследование ушло далеко за пределы одного package.json: от подозрительной зависимости я пришел к второму этапу размером около 30 тысяч строк, а затем - к нескольким месяцам активности, связанным пакетам, нескольким npm‑аккаунтам и уже известному кластеру.
Именно этот путь я и хочу разобрать.
Погрузиться в расследованиеВ этом месяце Alibaba выпустила две модели, и та, о которой все писали, оказалась не той, что мы ждали. Qwen3.8-Max — это API с 2,4 триллионами параметров, и пару недель назад я с большим энтузиазмом написал о ней обзор. Но релиз, которого я действительно ждал, вышел 14 августа: Qwen3.8-27B, Apache 2.0, веса на Hugging Face, модель достаточно компактна, чтобы работать на ноутбуке.
Я должен кое в чем признаться. Я не провел полный тест этой модели. Я попробовал, на своем MacBook Air M4 получал около восьми токенов в секунду и потерял терпение где-то на втором запросе. По большей части этот пост посвящен именно моей неудаче, потому что я подозреваю, что у многих из вас вечер сложится так же, как у меня.
Что представляет собой Qwen3.8-27B на самом деле
27,78 миллиарда параметров, плотная модель, включающая в себя визуальный энкодер, о котором никто не объявлял заранее. Принимает на вход текст, изображения и видео. Собственный контекст — 262 144 токена, с помощью YaRN можно увеличить его примерно до миллиона, если запускать модель на сервере.
Архитектура — это по-настоящему интересная часть, и это не обычный трансформер. На протяжении 64 слоёв Qwen чередует 48 слоёв Gated DeltaNet (линейное внимание) с 16 полными слоями Gated Attention в соотношении 3:1. Только эти 16 слоёв с полным вниманием имеют KV-кэш. Таким образом, на каждый токен приходится около 64 КБ, что составляет примерно четверть от объёма памяти, необходимого для обычной 64-слойной модели с плотным кодированием.
Если вы запомните только одно число из этого поста, пусть это будет именно оно. Всё, что касается того, поместится ли эта модель на вашем компьютере, зависит от объёма KV-кэша.
Читать далееCanva научилась превращать текстовый запрос и готовый HTML в редактируемый сайт. Спустя месяц после релиза уже видно, где это экономит часы, а где работа быстро возвращается к ручной сборке.
15 июля Canva выпустила Code 2.0. Анонс успел отлежаться, первые восторги немного выветрились, а независимые авторы добрались до кнопок, которые обычно остаются за краем презентации.
Главное новшество звучит скромнее привычного обещания собрать сайт одной фразой. Получившийся проект теперь можно редактировать как обычный дизайн Canva: менять текст, цвета, изображения, обсуждать правки с командой и публиковать всё из одного окна. Ещё сервис принимает готовый HTML и превращает его в редактируемый макет.
Для небольшого бизнеса это интереснее очередной гонки генераторов. Сайт редко заканчивается на первой красивой картинке. Телефон меняется, акция заканчивается, юрист просит переписать половину подвала, а владелец внезапно вспоминает про форму заявки. Вот здесь и начинается настоящая жизнь страницы.
Читать далееCлучилось то, что я обычно советую не делать: я не выбрал из существующих 14 форматов, а сделал 15-й.
Читать далееЯ автор aiochlite — асинхронного клиента ClickHouse на aiohttp. Раньше мой декодер RowBinary читал каждое числовое поле отдельно. Если брать 200 тысяч строк с десятью числовыми колонками, получалось два миллиона таких чтений, хотя все данные уже были в памяти.
Сначала я думал использовать Cython, C или Rust. Но потом решил попробовать оптимизировать сам процесс: объединить соседние поля с фиксированной длиной в один struct, а полностью фиксированные строки разбирать с помощью Struct.iter_unpack. На числовых данных это ускорило работу примерно в 8.3 раза.
Со смешанной схемой данных получилось интереснее: простая склейка почти не помогла. Главной проблемой осталась проверка типов внутри основного цикла. В итоге я начал генерировать и компилировать Python-функцию под конкретную схему ответа — это дало ускорение еще примерно в 1.7 раза.
В статье я подробно рассказываю, как это работает, как я проводил замеры, сколько времени занимает генерация кода и в каких случаях такие оптимизации уже не нужны. Весь код и скрипты для тестов можно найти в репозитории.
Читать далее