Обновить

Разработка

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

О дивный новый код

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

Продолжение моей статьи Мечтают ли архитекторы об электроовцах?, в которой я обещал привести практический пример.

Читать далее

От MNIST к Transformer. Часть 2. Основы работы с памятью

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

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

Это вторая статья из цикла От MNIST к Transformer, цель которого пошагово пройти путь от простого CUDA ядра до создания архитектуры Transformer - фундамента современных LLM моделей. Мы не будем использовать готовые высокоуровневые библиотеки. Мы будем разбирать, как все устроено под капотом, и пересобирать их ключевые механизмы своими руками на самом низком уровне. Только так можно по настоящему понять как работают LLM и что за этим стоит. В этой статье разберем основы работы с памятью и две простые математические операции с точки зрения математики, но не такие простые с точки зрения CUDA ядер.

Приготовьтесь, будет много кода на C++ и CUDA, работы с памятью и погружения в архитектуру GPU. И конечно же математика что за этим стоит. Поехали!

Читать далее

Самый простой способ пощупать OpenClaw с помощью VirtualBox и понять, из чего состоит его «душа»

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

После бума люди побежали устанавливать OpenClaw на сервер, Mac mini, на всё что угодно.

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

Разберём, какие есть плюсы:

Читать далее

Ceylon и NULL: как сделать null нормальным

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

В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения.

В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО.

Читать далее

Незаконченный полёт

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

Ровно полгода назад, 18 августа 2025 года, я опубликовал здесь свою первую статью о портировании прошивки AM32 на отечественный микроконтроллер К1946ВК035.

Ссылка на статью - https://habr.com/ru/articles/938128/

Те, кто читал ту статью (а таких людей, уверен, немного), помнят: не весь функционал удалось портировать с сохранением исходной производительности из-за некоторых ограничений в работе периферийных модулей отечественного микроконтроллера.
Напомню суть проблемы: микроконтроллер слишком часто уходит в прерывания для обработки входящих сигналов DSHOT, которые мы пытались обрабатывать сугубо софтварно, без применения DMA (но с небольшими хитростями). Отсюда и проблемы со своевременной обработкой сигналов других частей программы.

Читать далее

План аварийного восстановления (Disaster Recovery Plan, DRP) DWH — зачем он нужен и как работает

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

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

Читать далее

Не самый сильный разработчик в комнате: как из QA я стала тимлидом разработки

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

Всем привет! Меня зовут Юлия Новикова, и в мае 2025 года я стала Team Lead группы фронтенд-разработки в Ozon. В моей команде сейчас 5 разработчиков и 2 тестировщика, и мы создаём фронтенд для админок, которые управляют работой складов, РЦ (распределительный центр) и дарксторов. Но путь мой сюда был не самым тривиальным — до этого я была QA Lead, а не разработчиком.

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

Читать далее

Театр продуктивности и страшный вопрос «Зачем?». «Виноваты зумеры — убийцы бизнеса»

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

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

Читать далее

Создатели Gentoo уходят с GitHub из-за ИИ. Разбираем причины и нюансы

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

Gentoo — один из самых старых дистрибутивов Linux. Он появился в 2002 году и до сих пор работает по тем же принципам: сборка пакетов из исходных текстов, тщательная настройка под любое железо и полное отсутствие компромиссов. В феврале 2026-го появилась новость о начале переноса зеркал репозиториев с GitHub на Codeberg. И это не просто технический маневр, а принципиальный выбор сообщества. 

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

Читать далее

Почему HTTP-загрузка в Apache Doris такая быстрая: разбор Stream Load по исходникам

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

Загружал пару лет переписки из Telegram в Apache Doris на ноутбуке. Первый запуск 2 часа. После оптимизации 206 400 сообщений за 5 секунд.

Полез в исходники разобраться, почему Stream Load (HTTP-загрузка данных) в Doris работает так быстро. В статье разбор C++ кода: от HTTP PUT до Segment-файла на диске.

Что внутри:
— 14 шагов одного HTTP-запроса (с диаграммой и кодом)
— StreamLoadPipe: буфер 4 MB с backpressure
— Иерархия записи: LoadChannel → DeltaWriter → MemTable → async flush
— 6 практических выводов: что крутить, что мерить, где смотреть compaction score

Читать далее

Управляем поведением LLM: краткосрочные профили и их ограничения

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

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

Зато в коротких запросах происходит совсем другое. Один свежий промпт — и поведение реально сдвигается: модель становится заметно осторожнее, резче, параноидальнее или, наоборот, более рискованной. Это уже не «роль» в привычном смысле, а краткосрочный поведенческий профиль — временная настройка внутренних параметров решения.

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

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

Читать далее

За чистую main

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

О том, как сделать функцию main приложения на Go чистой, понятной, открытой для расширения.
Театр начинается с вешалки, а любая программа на Go - с функции main. Собственно, что может быть сложного и плохочитаемого в main, казалось бы? Но нет. На написание этой статьи меня сподвиг реальный кейс.

Читать далее

Шестибитный процессор без единой картинки

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

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

Итак, встречайте: ядро микроконтроллера с шестибитными байтами. Глава первая: описание «на словах».

Это обычный «школьный процессор», на котором студентам показывают базовые принципы работы железа. Fetch, Sum, Jump… В принципе, это роднит его как с древнейшими процами, имевшими 8-16 команд, так и с современными, разной степени эзотеричности (вплоть до Single Instruction Set Computer, имеющий всего одну команду типа «инверсия указанного бита и затем безусловный переход на указанный адрес»). Но я решил вдруг, ХЗ с какого перепугу, придать ему практический смысл в нашем странном веке, когда даже в одноразовые вейпы лепят грошовые 32-битники, которые потом летят в помойку.

Дело в том, что проц, имеющий сложность уровня «за пригоршню КМОП-транзисторов», обладает одним свойством, которым эти девайсы обладать не могут ни с каким развитием технологий, потому что технологии уводят их всё дальше и дальше от обладания этим свойством: его можно реализовать зацело с устройством, которым он управляет. Да-да, на одном кристалле. Минус корпус, минус пайка, минус разводка и… минус питание.

Да я всё равно и на нём Doom запущу!

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

Звук в SPICE: аудио, микрофон и real-time ограничения

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

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

Со звуком всё иначе.

150 миллисекунд задержки — и собеседник начинает перебивать. 200 — и вы оба замолкаете, ждёте, потом говорите одновременно. 300 — созвон превращается в пытку. Это не абстрактные цифры из RFC, это реальность, которую каждый испытывал на плохом Zoom-звонке. (Кстати, порог в 150 мс — это ITU-T G.114, одна из самых цитируемых рекомендаций в телеком-индустрии. Не потому что магическое число, а потому что дальше начинаются перебивания.)

А теперь представьте: вы построили VDI, развернули 500 рабочих мест, люди довольны. И тут приходит запрос от call-центра: «Мы хотим работать через VDI тоже». Или от отдела продаж: «Нам нужен софтфон в виртуалке».

Вот тут начинается отдельная история.

Читать далее

Агентская амнезия: как я решил эту проблему на Go

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

Недавно наткнулся на статью про Echovault на Хабре — инструмент для памяти AI-агентов, написанный на Python. Автор описывал ровно ту же боль, что и я испытывал месяцами. Идея хорошая, реализация — рабочая. Но Python. Я ничего не имею против языка, просто не мой выбор для инструментов, которыми пользуюсь каждый день. Люблю скомпилированные бинарники: кинул файл — и работает, без virtualenv, без pip, без «а какая у тебя версия питона». Поэтому я взял идею и переписал её с нуля на Go. Получился Pantry.

Расскажу, зачем это вообще нужно и что внутри.

Читать далее

Linux Landlock — песочница для приложений без root

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

Landlock — редкий для Linux случай, когда «песочницу» можно включить руками самого приложения: без root, без километров политик и с понятной логикой «по умолчанию запрещено всё». В этой статье разбираем, что это за LSM, какие три системных вызова нужны, как выбрать минимальный набор прав и почему открытые до ограничений файловые дескрипторы способны тихо обнулить всю задумку.

Открыть разбор

Как писать юнит-тесты, которые не ломаются

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

Привет, Хабр! Меня зовут Владимир, я Python-разработчик в команде IMV в Авито. Мы разрабатываем продукт, который помогает оценивать рыночную стоимость товара, будь то автомобиль, квартира или холодильник. Мы часто пишем тесты, и в этой статье я расскажу, как разные подходы к юнит-тестированию влияют на качество тестов, когда они помогают проекту, а когда — мешают, и почему само по себе наличие тестов ещё не гарантирует пользы. Статья будет полезна разработчикам, тимлидам и всем, кто пишет юнит-тесты и поддерживает код в долгоживущих проектах.

Читать далее

Скам в криптовалютах: самая опасная схема мошенничества на основе социальной инженерии и «дыры» в безопасности Google

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

В крипте полно скама – это неоспоримый факт и уже практически аксиома. Обман на каждом шагу: тебя пытаются «нагреть» в настолько неожиданных местах, что диву даёшься. Когда мы только начинали свой путь в нише крипты, было ощущение, будто идем не по какой-нибудь инвестиционной дорожке, где основные риски уходят корнями в скилл рационального управления капиталом, а по минному полю. Минному полю с людьми, живущими по правилу «Налюби ближнего своего, иначе придет третий и налюбит вас обоих».

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

Соскамили настолько красиво, что не могу об этом не рассказать :-) 

Итак...

Читать далее

Массовые рассылки vs таргетированная лидогенерация в Telegram: технический разбор

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

Meta Description: Сравнение подходов к лидогенерации в Telegram: массовые рассылки и AI-таргетирование. Данные, конверсии, риски бана, архитектура фильтрации.

Читать далее

На что кодинг-агенты тратят наши токены

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

На прошлой неделе я попросил Claude устранить однострочный баг. Ему понадобилось 23 тысячи токенов. Потом тот же баг я попросил устранить Gemini. Он потратил 350 тысяч токенов. Да уж, на такое невозможно закрывать глаза.

Поэтому я написал Context Lens — трассировщик контекста, перехватывающий вызовы LLM API, чтобы показать, что же на самом деле находится в окне контекста с разбивкой по этапам. Я подключил его к четырём инструментам кодинга и дал им одну и ту же задачу. Результаты оказались настолько разными, что я решил написать об этом статью.

Вопрос

При работе с этими моделями мы платим за токены. Токены — это довольно сложная тема. По сути, это блоки информации; 1 токен приблизительно равен 4 символам английского текста. Чем больше токенов передаётся в модель, тем больше мы платим.

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

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

Читать далее