16151
По всем вопросам- @haarrp @itchannels_telegram - 🔥 best it channels РКН: clck.ru/3FmxJF
🌟 SonicBoom: движок инференса без Python
HardenedVault, которая специализируется на безопасности Linux и компиляторов, выложила среду исполнения SonicBoom, написанной с нуля на C++ и CUDA. Python ей не нужен ни для работы, ни для сборки.
Цель проекта – локальный запуск языковых моделей на потребительских видеокартах.
libsonicboom.so, которую можно подключить из любого языка через стандартный интерфейс C, основным языком для работы с ней авторы выбрали Scheme в реализации GNU Guile.llama.cpp.llama.cpp на одних и тех же моделях.llama.cpp.llama.cpp, 73,6 токена в секунду против 78, но его получили на сборке, ещё не настроенной под эту видеокарту.Пока проверены только две модели, Gemma 4 E4B-it и Qwen2.5-0.5B-Instruct, и только видеокарты серии RTX 30.
🧠 TIL: SQLite превращает числа в текст сразу по две цифры
Обычно integer → string делают циклом:/ 10 → берём цифру % 10 → остаток
и повторяем снова.
SQLite идёт хитрее.
В исходниках есть строка на 200 символов, содержащая все пары от 00 до 99:000102030405...979899
При преобразовании числа SQLite обрабатывает его по две цифры за раз и просто берёт нужную пару символов по индексу.
То есть вместо множества операций /10 и %10:
делим на 100 → получаем две цифры → копируем готовую пару.
Маленькая оптимизация, но именно из таких деталей и состоит быстрый системный код.
Исходник: sqlite/src/util.c
🛋 C++ реалистично симулирует взрослую жизнь: решил сэкономить на переезде, а всё равно заплатил за копию.
const Sofa mySofa;
Sofa newApartment = std::move(mySofa);
const Sofa&&, а конструктору перемещения Sofa(Sofa&&) нужна ссылка без const.Sofa(const Sofa&) подходит.
🎲 Генератор случайных чисел всего в три строки
В 2003 году George Marsaglia предложил семейство генераторов Xorshift — один из самых простых и быстрых PRNG.
Для xorshift32 достаточно буквально трёх операций:state ^= state << 13; state ^= state >> 17; state ^= state << 5;
Новое значение state становится следующим псевдослучайным числом.
Почему это интересно:
- почти нет вычислительных затрат;
- используются только битовые сдвиги и XOR;
- период для ненулевого state — до 2³² − 1;
- отлично подходит для игр, симуляций и других задач, где важна скорость.
Но есть важный нюанс: Xorshift не криптографически стойкий. Для токенов, паролей и security-задач его использовать нельзя.
Красивый пример того, как всего несколько битовых операций превращаются в полноценный генератор псевдослучайных чисел.
🖥 C++: объект уничтожен, а 16 МиБ всё ещё занятыstd::weak_ptr может удерживать память даже при expired() == true.
Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации.
В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr:
* деструктор объекта вызывается;
* expired() возвращает true;
* общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr.
После сброса последней слабой ссылки блок можно освободить.
Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()).
Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора.
[Разбор от Microsoft](https://devblogs.microsoft.com/oldnewthing/20230815-00/?p=108602)
UTF-8-декодер на C: таблица и несколько строк кода
Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA). Он обрабатывает байты по одному, собирает кодовую точку Unicode и проверяет корректность последовательности.
Таблица utf8d выполняет две задачи:
* определяет класс очередного байта;
* выбирает следующее состояние автомата.
`ACCEPT` означает, что кодовая точка полностью прочитана. `REJECT` - обнаружена ошибка. Остальные состояния означают, что нужны дополнительные байты.
Подход удобен для потоковой обработки: если символ разорван между двумя сетевыми пакетами, достаточно сохранить состояние и накопленное значение.
Нюанс: после последнего байта тоже нужно проверить состояние. Если оно не ACCEPT, строка некорректна - например, оборвалась посреди символа.
Яндекс выложил в опенсорс YTsaurus Flow
YTsaurus Flow - фреймворк потоковой обработки данных с сохранением состояния между событиями, альтернатива зарубежным Spark Structured Streaming и Kafka Streams. Технологию совместно разработали команды Yandex Infrastructure и Яндекс Рекламы для работы с большими потоками данных.
Flow изначально создавался для высоконагруженных real-time систем, прежде всего рекомендательных. Позволяет обрабатывать большие потоки событий с сохранением состояния, гарантией exactly-once и автоматическим распределением нагрузки. Это важно для сервисов, где задержка или потеря данных напрямую влияют на качество рекомендаций, антифрода и других ML-систем: свежие события быстрее доходят до моделей, а инфраструктура продолжает работать при сбоях и изменении нагрузки.
https://github.com/ytsaurus/ytsaurus/tree/main/yt/yt/flow
Бьярн Страуструп о своём же C++: «на C легко выстрелить себе в ногу»
Создатель C++ однажды описал свой язык так:
«На C легко выстрелить себе в ногу. На C++ это сделать сложнее, но если уж получится, оторвёт всю ногу целиком».
✔️ В C/C++ есть любопытный трюк с AVX-512: `_mm512_maskz_loadu_epi8`.
Инструкция может выборочно загрузить до 64 байт по маске. Каждый бит маски отвечает за один байт:
- 1 - байт загружается
- 0 - вместо него ставится ноль
Самое интересное начинается, когда маска полностью нулевая:
#include <x86intrin.h>
void f(const char *p) {
_mm512_maskz_loadu_epi8(0, p);
}
Minimum-Cost Maximum-Flow всего в ~110 строках C++
Хороший компактный пример одного из самых полезных алгоритмов на графах.
Задача MCMF: провести через сеть максимально возможный поток и одновременно сделать его стоимость минимальной.
В этой реализации:
- residual graph хранит оставшиеся возможности для потока
- SPFA каждый раз ищет самый дешёвый увеличивающий путь
- после поиска определяется bottleneck - сколько потока реально можно протолкнуть по найденному пути
- поток отправляется по пути
- процесс повторяется, пока путь из источника в сток больше найти нельзя
Особенно красивый трюк - обратные рёбра.
Прямое и обратное ребро добавляются подряд, поэтому получить индекс пары можно через:
id ^ 1
`🤖 В SourceCraft появилась команда цифровых разработчиков
Агентам можно назначать задачи прямо в GitLab. Они работают под собственными учётными записями, выполняют поручения и возвращают результат разработчику.
Если по ходу работы чего-то не хватает, агент сам запрашивает данные или согласование у команды — то есть не останавливается на первом незаполненном месте.
Ещё можно подключить собственного агента, в том числе созданного в Yandex AI Studio.
Физически корректный ray tracer всего в 99 строках C++
smallpt от Kevin Beason - один из самых известных примеров того, насколько компактным может быть настоящий path tracer.
В этих 99 строках есть:
* отражения
* преломления
* мягкие тени
* color bleeding
* зеркальные и стеклянные поверхности
Основа при этом минимальная: векторы, лучи, сферы и одна рекурсивная функция radiance().
Если дать рендеру тысячи samples per pixel, он собирает полноценный Cornell Box с зеркальной и стеклянной сферами.
Проект появился ещё в 2008 году и до сих пор отлично показывает базовую механику path tracing.
Лицо C++-разработчика, когда он написал 6000 строк кода, чтобы обогнать твои 4 строки на Python на 0,000438 секунды.
Читать полностью…
Разработчики 3D-графики, все сюда
Если вы пишете рендер на C++ с отдельным RenderThread, то знаете эту боль: данные грузятся в фоне, а GPU-ресурсы всё равно создаются в потоке отрисовки. И пока RenderThread в длинном цикле создаёт буферы и текстуры, он не рисует — он стоит, пока не обработает список загруженных ресурсов.
Мы это исправили! В новой статье на Хабре рассказываем, как пришли к новому подходу:
1. как вынесли создание буферов и текстур на потоки загрузки,
2. что сделали для Metal, а что для Vulkan,
3. и какие ограничения графических API пришлось учесть.
Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD
🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++.
Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis.
Ключевой трюк:deltaDist = abs(1 / rayDir)
После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение.
Дальше всё почти классически:
* рассчитывается высота стены на экране;
* выбирается текстура;
* вычисляется точка попадания;
* рисуется вертикальная полоса пикселей.
Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков.
Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики.
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: /channel/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: /channel/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: /channel/addlist/2Ls-snqEeytkMDgy
Папка Frontend: /channel/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: /channel/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: /channel/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
Для работы с ИИ полезно иметь несколько моделей под рукой. Но держать ради этого несколько подписок удобно не всем.
Особенно когда сегодня нужен Claude для кода, завтра GPT для другой задачи, а команде ещё нужны общий баланс и понятные расходы.
Для такого сценария есть RouterAI, российская альтернатива OpenRouter. ChatGPT, Claude, Gemini, Grok и сотни других моделей доступны через один веб-чат и OpenAI-совместимый API. Сервис работает без VPN, есть Telegram-бот.
Для разработки предусмотрены инструкции по подключению Claude Code, Codex, Cline и Cursor. Если провайдер модели недоступен, запрос автоматически направляется резервному.
Оплата за использование, без обязательной подписки. Пополнить баланс можно в рублях российской картой или через СБП. Для бизнеса есть оплата по счёту, договор и закрывающие документы. Командам доступны роли, лимиты и статистика расходов.
По данным RouterAI, платформой пользуются десятки тысяч пользователей, включая разработчиков и компании. На сторонних площадках сотни положительных отзывов с оценками около 4,9–5 из 5: например, на Startpack сейчас 372 отзыва и рейтинг 4,9.
Практичный способ попробовать разные модели на своих задачах и платить за фактическую работу.
https://routerai.ru/l/c
#реклама
О рекламодателе
erid: 2W5zFJoafmB
🔥Приглашаем на бесплатный открытый вебинар курса «Электроника и электротехника»:
«Беспроводные STM32. Разрабатываем плату для микроконтроллеров с радиоинтерфейсом»
📆Когда: 21 октября 2026, 20:00 (мск)
Многие разработчики сталкиваются с ситуацией: плата с Bluetooth «работает, но не летает» — дальность связи в разы меньше заявленной в даташите.
Что будет на вебинаре:
• Почему плата с Bluetooth работает на 5 метров, хотя в даташите обещают 50?
• Что такое согласование антенны и почему без него теряется половина мощности?
• Можно ли соединять вывод RF микроконтроллера напрямую с антенной или нужна обвязка?
• Практические рекомендации по трассировке радиочастотных трактов.
• Как адаптировать референс-дизайн под свой стек печатной платы.
Зарегистрируйтесь https://otus.pw/5jPS/?erid=2W5zFGxaSRP
Бесплатное занятие приурочено к курсу «Электроника и электротехника»
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🦀 Что удивляет в C, если первым языком был Rust?
Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пошёл в обратную сторону и собрал нюансы, которые легко пропустить.
Например, такая функция выглядит как принимающая массив из трёх элементов:
void inspect(char data[3]) {
printf("%zu\n", sizeof(data));
}
\0, а strlen() ищет этот байт, проходя по памяти.long обычно занимает 64 бита в 64-битных Unix-системах и 32 бита в Windows.malloc() может вернуть NULL, а язык не заставит проверить результат.
🖥 Создатель C++ раскритиковал программирование через промпты
Бьярне Страуструп считает естественный язык слишком неоднозначным для точного описания программ. В интервью Райану Петерману он заявил, что ИИ часто создаёт раздутый код с ошибками и уязвимостями, который сложно проверять.
По его словам, изменение промпта может существенно менять реализацию, заставляя опытных разработчиков заново разбираться в результате. Страуструп рассказал, что знает специалистов, которые предпочитают уйти на пенсию, чем заниматься такой проверкой.
Особенно скептически он оценивает ИИ в системах, где критичны безопасность и производительность. При этом признаёт: большая часть мирового кода не относится к этой категории.
🎮 Строка из Quake III, которая выглядит как колдовство
i = 0x5f3759df - (i >> 1); // what the fuck?
float внутри есть показатель степени и дробная часть. Если прочитать биты положительного нормализованного числа как целое, получится величина, которая примерно соответствует его логарифму с масштабом и смещением.log₂(1/√x) = −½ × log₂(x)>> 1 делит целое число на два. Вычитание из подобранной константы меняет знак и компенсирует смещение. Полученные биты снова читаются как float: это уже приближение к ответу.1.0 / sqrt(x).
Полноценный Lisp можно уместить всего в 99 строк C.
Внутри при этом:
- 21 примитив
- REPL
- сборщик мусора Cheney GC
- числа с плавающей точкой
- указатели
- типы значений
И всё это без `struct`-тегов, без внешних библиотек и без обычных динамических аллокаций для представления объектов.
Главный трюк - NaN boxing.
IEEE 754 оставляет много битов внутри специальных NaN-значений. Их можно использовать как скрытое хранилище:
- часть битов кодирует тип
- до 48 бит можно использовать под указатель
- обычные double при этом остаются обычными числами
В итоге одно 64-битное значение может представлять и число, и указатель, и другие типы данных.
Очень красивый пример того, как устройство IEEE 754 можно использовать для построения компактного рантайма языка.
C23 сделал enum в C заметно удобнее для низкоуровневого кода.
Раньше базовый тип перечисления обычно выбирал компилятор, и enum часто занимал размер обычного int:
enum status {
OK = 0,
ERROR = -1
};
enum status8 : int8_t {
OK8 = 0,
ERR8 = -1
};
enum status64 : uint64_t {
OK64 = 0,
ERR64 = UINT64_C(0xFFFFFFFFFFFFFFFF)
};
🐧 Linux Cheat Sheet - шпаргалка по командам Linux
Самая удобная шпаргалка по Linux и Bash на русском: теория простым языком (как устроены файлы, процессы, права, память, загрузка и сеть), команды терминала, права доступа, процессы, сеть, SSH, systemd, grep/sed/awk, Vim и готовые однострочники - с примерами.
А для тех, кто идёт дальше, - продвинутый уровень: Bash для профи, LVM и RAID, трассировка и производительность, ядро, безопасность, контейнеры, восстановление системы и вопросы с собеседований.
https://github.com/justxor/Linux-/
😂 Собеседование на C++ прошло успешно
HR: у вас есть опыт с C++?
Я: конечно, отлично знаю оператор `goes to`.
int x = 10;
while (x --> 0) {
std::cout << x << '\n';
}
x-- > 0
9
8
7
6
5
4
3
2
1
0
⚡️ Как спроектировать ИИ-агента над корпоративными данными
6 октября в 17:00 мск пройдёт новая встреча Архитектурного клуба Яндекс 360 — открытого сообщества для архитекторов и инженеров высоконагруженных систем.
Даниил Смирнов, руководитель службы бэкенд-разработки Антиспама Яндекс 360 , разберёт архитектуру корпоративного агента: оркестратор, инструменты, память, EVAL и наблюдаемость.
На эфире обсудят:
- как сочетать полнотекстовый и векторный поиск, метаданные, фильтры и переранжирование;
- как наследовать права исходных систем и изолировать данные разных пользователей и организаций;
- как не выдавать из индекса и кеша данные тем, у кого нет доступа;
- как ограничивать автономность агента;
- как отдельно оценивать качество поиска, выбора инструментов и итогового ответа.
📅 6 октября, 17:00 мск
💻 Онлайн, участие бесплатное
→ Зарегистрироваться на встречу
Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти
Для этого существует HyperLogLog - вероятностный алгоритм оценки количества уникальных элементов.
Вместо хранения каждого значения он:
— хеширует элементы
— распределяет их по buckets
— отслеживает необычно длинные последовательности нулей в хэшах
— по этой статистике оценивает cardinality
Например, с 16384 регистрами можно оценивать даже огромные множества, занимая порядка десятков килобайт памяти.
При этом ошибка может оставаться около 1%.
Именно поэтому HyperLogLog любят в аналитике и больших данных: посчитать COUNT(DISTINCT ...) для миллиардов объектов можно без хранения миллиардов ID.
Магия тут не в точности до последнего элемента, а в очень хорошем компромиссе между памятью и результатом.
⚙️ useful_abstractions - вычисления на этапе компиляции в C++23
Библиотека упрощает работу с constexpr и consteval. Один заголовочный файл, без зависимостей за пределами стандартной библиотеки.
Что можно делать при компиляции:
* Передавать строки в параметры шаблонов и собирать их из частей.
* Вычислять хеши.
* Получать имена типов без RTTI.
* Экранировать строки для JSON, URL и HTML.
* Проверять UTF-8 и преобразовывать его в UTF-16/UTF-32.
* Останавливать сборку с понятным сообщением при ошибке в данных.
Например, некорректный строковый литерал или недопустимое значение можно обнаружить ещё до запуска программы.
Требуется C++23: GCC 14+, Clang 19+ или свежий AppleClang.
Документация — https://constexprcore.github.io/useful_abstractions/
«Я про бэкенд»: как устроены AI-системы под капотом бигтеха
🗓 3 октября, Москва и онлайн
О чём: как разработчики высоконагруженных рекомендательных и генеративных систем справляются с нетривиальными вызовами. Доклады в 6 направлениях — от архитектуры систем с AI/ML до MLOps и работы на стыке бэкенда с железом.
Часть спикеров:
🎤 Михаил Цветков (Алиса AI и Умные устройства) — как устроен инференс генеративных ответов Алисы в Поиске
🎤 Алина Шестакова (Positive Technologies, Cloud SIEM) — вердикт за минуту: ML-фильтр и LLM на потоке более 40 тысяч событий в секунду
🎤 Андрей Аксёнов (Авито) — база векторных баз
🎤 Егор Хайруллин (Рекламные технологии Яндекса) — как распределённо обрабатывать более 100 ГБ/с в реальном времени без потерь и дублей с помощью YTsaurus Flow
🎤 Владислав Тюльбашев (Яндекс) — как надежно раздавать конфиги на 200к хостов при отказе [n-1] ДЦ
🎤 Алексей Логинов (Алиса AI и Умные устройства) — как сделать агентную платформу надёжной
Кроме того, зрителей ждет традиционный лайв, где бэкенд-инженеры Яндекса спроектируют архитектуру сложного сервиса в реальном времени. В этот раз задачу для эфира можете задать вы: участвуйте в проекте «2718», отправляйте свои кейсы, а организаторы выберут среди них самый сложный для открытого разбора.
Полная программа и регистрация