Обновить

Как стать автором

Как я написал PID 1 для контейнеров на чистом ассемблере: x86-64 и ARM64

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

Не потому, что контейнерному миру срочно нужен ещё один init. Есть Tini, есть docker run --init, и для большинства production-сценариев я бы по-прежнему начал именно с них.

Мне скорее хотелось разобрать задачу до самого нижнего уровня: без libc, без runtime, напрямую через Linux syscalls. Заодно проверить, насколько сильно будет отличаться одна и та же реализация на x86-64 и ARM64.

В итоге из небольшого эксперимента получился mini-init-asm: PID 1, который запускает приложение в отдельной process group, передаёт сигналы всей группе, собирает zombie-процессы и умеет корректно завершать контейнер с exit code приложения.

Позже туда добавились subreaper mode и простой restart-on-crash. А сам проект в итоге доехал сначала до Debian unstable, а затем и до testing.

Но началось всё с вопроса: что вообще должен уметь нормальный PID 1 внутри контейнера?

Читать далее
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

Как я CRM в шаверму продал или… Автоматизация для новичков на примере малых предприятий

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

«Паша! Я конечно не МГИМО финишед, но можешь хотя бы по‑русски, а?» — попросил Азиз когда я выпалил ему питч, заготовленый для грядущего ивента в 71 блоке на one North. Тогда я понял, что…
Потенциальный клиент для внедренца not!= специалист.
И я сделал то, что планирую сделать в этой серии статей — рассказал про интеграцию автоматизированного учёта в малом бизнесе простыми словами.

Взять шаверму...
Всего голосов 6: ↑4 и ↓2+6
Комментарии0

Я прогнал 60 тысяч составов продуктов через свой алгоритм. Вот что в еде на самом деле

Время на прочтение5 мин

Сразу скажу, как считается балл, чтобы не было магии. Никакого ИИ в самой оценке. Обычная арифметика: сахар на 100 грамм, соль, насыщенные жиры, трансжиры, позиция сахара в списке ингредиентов и наличие добавок из «списка внимания». Складываю штрафные баллы, порог — и на выходе зелёный, жёлтый или красный. Формула открытая, каждый может пересчитать руками. ИИ у меня отвечает только за короткую фразу-объяснение поверх уже готового вердикта, придумать он ничего не может.

Теперь сами цифры.

Из шестидесяти тысяч товаров зелёных вышло примерно 43 процента, жёлтых — 38, красных — около 18. То есть «всё плохо» — это неправда. Больше сорока процентов полки — нормальная еда без подвохов: крупы, простые молочные продукты, вода, чай, овощи. Это, кстати, был первый сюрприз лично для меня: я начинал проект с ощущением, что сейчас всё окажется красным, а оказалось наоборот.

Красная зона — вот где интересно. Я полез разбирать, из-за чего именно товар туда попадает, и картинка развалилась на три почти равные кучки. Примерно 40 процентов красных — чисто из-за питания: сахар, соль, жир, без всяких добавок. Ещё около 36 — наоборот, состав по нутриентам нормальный, а красный он из-за добавки. И ещё треть — пограничные, где всё держится на одном показателе: чуть сдвинь порог, и половина из них уедет в жёлтый. Красная зона, короче, не монолит. «Красное» по разным причинам красное.

Дальше — добавки, те самые «ешки», которых все боятся. Я прогнал частотку по всем составам: сколько всего разных Е-кодов реально встречается. Получилось чуть больше четырёхсот уникальных. И вот тут главное, ради чего всё затевалось: из этих четырёхсот с лишним под настоящим вниманием токсикологов находится буквально горстка. Нитриты в колбасе, часть синтетических красителей, диоксид титана — и то претензии обычно не к самому факту наличия, а к дозе. Всё остальное — это витамины, кислоты, загустители, эмульгаторы, которые получили код Е просто потому, что регистривались по той же процедуре. Аскорбиновая кислота — это витамин С и одновременно Е300. Лимонная кислота — Е330. Пектин, лецитин, сода. Буква Е на упаковке говорит не «химия», а «есть регламент».

Читать далее
Всего голосов 5: ↑3 и ↓2+3
Комментарии3

Как я первый в Казахстане измерил ИИ видимость банков (и что из этого вышло)

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

Это моя первая публикация на Хабре, который я читаю уже лет 10... Так что, если честно, даже немного трясусь от волнения. Всё равно что смотреть футбол и выйти на поле в составе моего любимого Кайрата. Но постараюсь без лирики и перейду к делу.

Итак, в 2026 году уже всем как будто понятно, что потенциальные клиенты всё чаще выбирают банк не в поиске, а в диалоге с нейросетью (хотя многие с этим до сих пор почему‑то спорят). На выходе клиент получает короткий список из трёх‑четырёх названий.

Так как я занимаюсь аналитикой данных, мне стало интересно, по какому принципу этот список собирается, как эти данные обрабатываются, и кто вообще попадает в этот заветный шорт‑лист.

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

Читать далее
Всего голосов 2: ↑2 и ↓0+5
Комментарии2

Как я записал целую русскую повесть в Bitcoin: эксперимент с авторским правом и временем

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

Я целиком записал русскую повесть в одну Bitcoin-инскрипцию, а затем извлёк её из reveal-транзакции через собственную ноду и побайтово сверил с исходником. Получился эксперимент не по «регистрации авторского права», а по независимой фиксации редакции, времени и целостности текста. Разбираю, что такая запись действительно доказывает, чего не доказывает и почему книга останется доступной даже после исчезновения ordinals.com.

Разобраться
Всего голосов 3: ↑3 и ↓0+5
Комментарии4

Status Line для Claude Code CLI. Показывает кэш, git, контекст и лимиты в одном месте

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

Сделал Status Line для тех, кто пользуется Claude Code CLI

Если вы работаете с клодом в терминале, то в одном месте он показывает:

• Модель и Effort;
• Текущую рабочую папку и ветку;
• Незакоммиченные изменения в GIT в этой папке;
• Есть ли что в очереди на push и pull;
• Расхождение основных md файлов;
• Текущий размер контекстного окна;
• Кэш: hit rate & TTL;
• Ну и лимиты, конечно же.

Очень удобно это все видеть в одном месте. Рассказываю про него в статье.

Узнать про Status Line 🥵
Всего голосов 2: ↑2 и ↓0+4
Комментарии4

Ваш бэктест нейронки врёт на ±10 процентных пунктов

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

Недавно я решил проверить на себе классический сюжет: может ли нейронка зарабатывать на бирже. Не «взял стратегию с ютуба», а как положено инженеру: собрал данные Мосбиржи, построил честный walk‑forward пайплайн, зашил комиссии в каждую цифру и стал измерять.

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

Подозреваю, что этим страдает заметная часть статей вида «я обучил LSTM на котировках и получил X% годовых». Проверить легко: спросите автора, что будет, если поменять random seed.

Читать далее
Всего голосов 3: ↑3 и ↓0+7
Комментарии4

2 рубля за сказку с озвучкой: как я считал юнит‑экономику AI‑продукта на коленке

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

Идея была простая: сделать что‑то небольшое в свободное время, что может превратится в параллельный источник дохода, не требуя от меня много личных часов. Остановился на Telegram‑боте, который генерирует персонализированные сказки на ночь: родитель задаёт участников, обстановку, тему — бот пишет сказку, при желании озвучивает.

Читать далее
Всего голосов 4: ↑2 и ↓2+2
Комментарии7

Как я индексировал экосистему MCP: 9 источников, 80 000 серверов и куча нюансов

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

Полтора года назад MCP-серверов были десятки, сейчас десятки тысяч. Найти нужный стало отдельной задачей: официальный реестр хранит голые метаданные, awesome-списки устаревают за неделю, а у большинства каталогов нет главного, установки и проверки безопасности.

Я строю Unyly, агрегатор MCP-серверов. Сейчас в каталоге больше 80 тысяч записей из девяти источников. Расскажу, как это устроено технически: пайплайн агрегации, дедупликация, резолв установочных команд, security-сканы, health-чеки remote-серверов и шлюз, который отдаёт весь каталог агенту через одно подключение.

Читать далее
Всего голосов 1: ↑1 и ↓0+3
Комментарии5

Как я собрал браузерный хоррор на Three.js: GLB-контракт, аномалии и PS1-рендеринг для слабых устройств

Уровень сложностиПростой
Время на прочтение15 мин

Как я сделал браузерную 3D-игру на Three.js и Vue: система аномалий, GLB-сцена, PS1-рендеринг и оптимизация под слабые устройства.

Читать далее
Всего голосов 4: ↑4 и ↓0+6
Комментарии1

MoE на 5090 недобирает полтора раза, и дело не в маршрутизации

Уровень сложностиСложный
Время на прочтение12 мин

RTX 5090, одна и та же сборка llama.cpp, один драйвер, батч 1. Плотная Qwen3.5-9B выбирает 72% пропускной способности памяти карты. MoE Qwen3.5-35B-A3B на той же карте выбирает 41%.

Маршрутизация экспертов тут почти ни при чём, я её измерил: ядра top-k занимают 7% времени. CUDA-графы захватываются, дыр между запусками нет, занятость SM 97%. Карта работает почти всё время, просто делает работу медленнее, чем позволяет память.

Причина оказалась в том, сколько байт читает одно ядро за запуск. Я написал программу на ggml, которая гоняет тот же mul_mat_vec_q на холодных весах, и снял кривую: на 1 МБ ядро берёт 23% полосы, на 4.2 МБ уже 53%, на 33.6 МБ 91%. У MoE на одно ядро приходится 4.6 МБ, у плотной модели 22.2 МБ. Вот и весь разрыв.

В статье: разбивка всех 437 матвеков по трассе nsys, четыре способа померить это неправильно и посидеть в каждой ловушке по очереди, проверка модели на другой архитектуре с ошибкой 3.7% и на четырёх глубинах контекста, цена сэмплера и всей обвязки llama-server. Последнее оказалось крупнее всего остального: пользователь видит 225 токенов в секунду там, где бенчмарк показывает 317.

Читать далее
Всего голосов 2: ↑2 и ↓0+4
Комментарии4

Программный код летучий

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

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

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

Читать далее
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Кадры вместо видео: как индустрия обходит вес scroll‑scrub анимаций

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

Продуктовые сайты любят анимацию «крутишь колесо мыши — объект меняется на глазах». Первый инстинкт: сделать это видео с currentTime. Вот почему это почти всегда неправильный первый инстинкт, и что вместо этого используют на практике.

Читать далее
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Убежище книги

Время на прочтение5 мин

У меня дома зоопарк устройств: Android, iPhone, MacBook, Windows. На каждом стоит своя читалка: когда‑то на андроиде был CoolReader (отличная штука, я им вдохновлялся), на маке — платный BookReader, на айфоне — Eboox, на винде — десктопный CoolReader

Я решил написать веб‑читалку для домашнего сервера.

Читать далее
Всего голосов 8: ↑8 и ↓0+11
Комментарии16

Настоящее должно доказывать прошлое

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

Может ли блокчейн проверить своё текущее состояние, не воспроизводя всю историю исполнения от genesis?

Новой ноде можно передать полностью корректный snapshot блокчейна. Каждая запись будет корректно декодироваться. Все commitments будут соответствовать данным. По всем очевидным признакам данные будут внутренне согласованы.

Но это не отвечает на главный вопрос:

Почему это состояние следует принять как результат работы цепочки?

У Bitcoin ответ простой: самостоятельно восстановить состояние. Нода начинает с genesis, проверяет цепочку, исполняет каждую транзакцию и получает текущий набор UTXO.

Доказательство настоящего находится в прошлом.

Snapshots могут ускорить этот процесс. Checkpoints могут перенести его начальную точку. Специализированная инфраструктура может выполнить историческую работу в другом месте и передать результат.

Но ни один из этих подходов не меняет саму зависимость. Состояние перед вами по-прежнему не доказывает, что было получено из genesis через валидную последовательность переходов.

Именно это я решил изменить.

Вопрос был не просто в том, можно ли сжать историю блокчейна в рекурсивное доказательство. Он звучал иначе:

Что, если консенсус будет переносить вперёд саму валидность текущего состояния?

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

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

Читать далее
Всего голосов 2: ↑2 и ↓0+6
Комментарии0

«Тосок бессмысл»: как я не смог заставить Gemma 4 писать хорошие стихи

Уровень сложностиСредний
Время на прочтение14 мин

Дано: стихотворение. Тема — «тщетность накопления жизненного опыта», амфибрахий, четыре строки. Заканчивается словом «тосок». Такого слова в русском языке нет. Мой оценщик поставил этому тексту техничность 1.000 — идеал.

К этому моменту я месяц жёг GPU-часы на арендной L40S, пытаясь заставить Gemma 4 писать русские стихи. У меня был план из четырёх пунктов, свежая статья с рабочим рецептом, размеченный корпус на 13 тысяч пар и собственная метрика, проверенная на Пушкине. План развалился весь, но каждый раз не в том месте, где я ждал: главный подозреваемый до последнего выглядел очевидным, а виновным оказался совсем другой персонаж.

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

Настоящие цифры, реальный loss и плохие стихи прилагаются.

Читать далее
Всего голосов 7: ↑7 и ↓0+12
Комментарии4

Как я пытался сделать стратегию из котов в стиральных машинах — и почему правила оказалось сложнее написать, чем код

Время на прочтение6 мин

Я сделал браузерную стратегию про котов в стиральных машинах и обнаружил, что пересчитать поле гораздо легче, чем объяснить человеку, почему оно изменилось. Рассказываю про поэтапную инерцию, прерывание чужого хода, ИИ, мультиплеер и эксперимент с автоматическим поиском правил на 90 тысячах симулированных партий.

Читать далее
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Харнесс для мозга: почему Atomic Habits это книга по инженерии агентов

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

В 2026 все, кто плотно сидит в ИИ и разработке, пришли примерно к одному выводу: гнаться за моделью получше почти перестало иметь смысл. Работает то, что ты строишь вокруг модели. Агент это модель плюс харнесс. Модель предлагает следующее действие и вероятностна по природе; харнесс это весь код вокруг: реестр инструментов, управление контекстом, циклы исполнения, проверка схем, права доступа, логи, точки обязательной остановки. Модель ты не тренируешь, берёшь готовой, значит вся твоя реальная работа это обвязка.

Я говорю это не со стороны. У меня есть проект, связанный с финансами, анализом и прогнозами, и харнесс там не вспомогательный слой, а фундамент. Тридцать, иногда сорок процентов всех усилий уходит не на функциональность, а на обвязку вокруг неё: команды, проверки, аудиты, логи, места, где система обязана остановиться и показать себя. Первый год это ощущалось как накладные расходы. Сейчас я вижу иначе. Обвязка и есть проект. То, что я считал настоящей работой, без неё просто не воспроизводится дважды подряд.

Смысл харнесса не в том, чтобы сделать модель умнее. Он в том, чтобы уменьшить разброс. Каждый кусок обвязки переносит одно решение из вероятностной области в детерминированную. Тест на линтере не просит агента не ломать стиль, он не даёт коммиту пройти. Схема инструмента не напоминает про обязательное поле, она отклоняет вызов. Чеклист в файле инструкций не мотивирует, он задаёт следующий шаг тогда, когда контекст уже поплыл. Хороший харнесс превращает «обычно делает» в «делает всегда».

Читать далее
Всего голосов 3: ↑2 и ↓1+4
Комментарии2

Что такое ARP‑Spoofing и как от него защититься

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

«ARP‑Spoofing», или же «Отравление ARP‑кеша» — это тип кибератаки уровня L2, чья работоспособность до сих пор держится лишь на огромной дыре в безопасности Address Resolution Protocol. Основная суть данной атаки — испортить ARP‑кеш устройства путём рассылки пакетов с поддельными данными в своей подсети. В этой статье я по шагам покажу весь процесс этой атаки на своих домашних устройствах типа MITM (Man In The Middle), а также расскажу, как от неё защититься.

Читать далее
Всего голосов 6: ↑6 и ↓0+9
Комментарии2

Тест Qwen3.5 9b, Gemma 4 12b и Bonsai 27b на легенде пенсионного возраста GTX 1080 ti

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

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

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

Под рукой была GTX 1080 Ti на 11 ГБ. Карта 2017 года, архитектура Pascal, никаких Tensor Cores.

Так из прикладной задачи постепенно вырос небольшой домашний стенд. Я прогнал три модели в одинаковых условиях, отдельно проверил длинный контекст, затем сделал свой набор reasoning‑задач и сравнил режимы с размышлением и без него. Результаты получились не совсем такими, как я ожидал.

Читать далее
Всего голосов 2: ↑2 и ↓0+4
Комментарии17
1
23 ...
ТудаНазад