Посетило в раз очередной, нереальной кайфости идея, сделать для людей инет такой, чтобы был он общий и без денег, ну совсем без денег так никак, а как можно будет это сделать, повествую ниже смысл для всех, тех кто немного шарит в кодах devах. С mesh сетями кто чуток знаком, там мештастик типа и мешкоры, про меш вайфай полюбэ слышал полюбому что-то тоже. Но идея этого вайфая, как по мне реально нераскрыта. Надо сделать тема чтоб была такая, что к примеру в доме все вайфаи меж собою, через роутера с прошивкою спецальной в сетку общую объединялись, е когда участник той сети чего качает, то запрос в инет меж всеми гейтвеями распределялся и общим потоком с этих разных выходов закачивался, но при этом чтоб хозяин этой точки, мог в процентах выставлять канал для общей сетки, тобишь скажем 10-ть я % от канала интернета своего даю на общий интернетный наш канал. И при том чтоб всё вот это по вайфаю... Смысл такой примерно, тем кто шарит в теме можно обсудить идею...
Рассказываю об одном весьма необычном инструменте, способном удивить даже очень изысканную публику. Поскольку с его помощью можно быстро и безболезненно.. сменить пол любимой программе для Linux. Добро пожаловать, снова.
Вдумчивое чтение содержимого этих терминалов может привести в дурку, я предупредил.
The Witchcraft Compiler Collection
Сей замечательный проект — отличное доказательство существования черной магии и колдовства тому, как мало на самом деле мы знаем об устройстве собственных программ.
По крайней мере лично автор весьма смутно представляет, как эта адская штука вообще работает, несмотря на весь свой опыт и многолетнюю практику:
WCC is a collection of compilation tools to perform binary black magic on the GNU/Linux and other POSIX platforms.
Да да, "черная магия" тут дословная цитата из описания проекта, а не выдумки или особенности перевода.
Если вкратце, WCC это такой набор очень специфичных утилит для препари.. исследования чужих программ.
Информации об этой штуке в сети крайне мало, фактически помимо проекта на Github, существует лишь одна интересная презентация, показанная на конференции Defcon, слайды из которой также использовались в статье.
Так что материал получился весьма редким.
Сборка и инвольтация эгрегора
К сожалению проект успел немного устареть, хотя и присутствует в виде готовых пакетов во многих дистрибутивах Linux. Однако в Mageia, которую автор использовал ради колдовской ступы на логотипе в качестве тестовой среды, WCC почему-то не оказалось, так что пришлось собирать руками.
Согласно описанию, необходимо установить следующие пакеты:
capstone, glibc, libbfd, libdl, zlib, libelf, libreadline, libgsl, make
Однако libbfd ныне стал частью пакета binutils и отдельно более не поставляется, а binutils скорее всего уже установлен по-умолчанию.
для завершения сборки необходимо изменить паметры, передаваемые линковщику.
Что я и проделал в файле src/wcc/Makefile:
После исправления, сборка заканчивается успешно и в каталоге bin появляются готовые к использованию "колдунские" приложения:
Колдовской набор.
Теперь можно начинать плести заклинания.
Колдунство первое: превращаем приложение в библиотеку
Нет это не шутка и не прикол, это та самая "черная магия" от системной разработки, которой не научат на курсах по вайбкодингу.
Согласно описанию, все достаточно просто, хоть и необычно - примерно как обнаружить у девушки из Тайланда кадык:
Transforming an ELF executable binary into an ELF shared library.
Последовательность заклинаний шагов выглядит так:
Превращение утилиты cat в разделяемую библиотеку.
После вызова этих нечистивых команд, то что было рождено программой для Linux, внезапно становится разделяемой библиотекой. А узревший такое в живую быдлокодер уезжает в дурку, отсыпаться и отдыхать.
Теперь рассказываю как это колдунство работает, внимание на экран:
Из презентации WCC для Defcon.
На скриншоте выше видно, что по факту в файле изменился лишь один байт, точнее поле заголовка ELF64:
Из заголовочных файлов формата ELF.
Хотя назначение этого поля не является секретом и присутствует даже в Википедии, помимо официального руководства, до столь затейливого его применения никто на моей памяти не доходил. Кроме авторов WCC.
При вызове, первым шагом происходит откат работы линковщика:
The primary use of wcc is to "unlink" (undo the work of a linker) ELF binaries, either executables or shared libraries, back into relocatable shared objects. The following command line attempts to unlink the binary /bin/ls (from GNU binutils) into a relocatable file named /tmp/ls.o
Пример вызова:
wcc -c /bin/ls -o /tmp/ls.o
По идее уже на этой стадии должен быть получен «relocable file», с которым может работать обычный gcc. Например должна отрабатывать команда:
И в результате действительно получается разделяемая библиотека, которую можно спокойно линковать с вашим приложением:
file /tmp/ls.so /tmp/ls.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=68d93a1d888eb560b8842 55a59c37cd6be0adddd, not stripped
Пример использования такой библиотеки, созданной с помощью темного ритуала из чужой программы показан на этом слайде:
Вставляет покруче Некрономикона.
Но едем дальше.
Получение имени пользователя радикальным способом - через рефлексию в плеере VLC (!)
Колдунство второе: рефлексия для.. чистого С
Следующий уровень безудержного колдовского веселья показан на скриншоте выше, но разумеется нуждается в пояснениях:
The witchcraft shell accepts ELF shared libraries, ELF ET_DYN executables and Witchcraft Shell Scripts written in Punk-C as an input. It loads all the executables in its own address space and makes their API available for programming in its embedded interpreter.
Вообще этот абзац - один сплошной "майндфак" для всех, кто хоть немного знаком с языком С, в лучших традициях Лавкрафта погружающий разум несчастных быдлокодеров во мрак ультрахардкора.
Хотя авторы WCC на голубом глазу заявляют:
This provides for binaries functionalities similar to those provided via reflection on languages like Java.
до рефлексии уровня Java/.NET тут все же очень далеко и вызывать столь интересным образом методы в чужих библиотеках получается далеко не всегда.
Теперь рассказываю, как можно попробовать сие темное колдунство в действии. Интерпретатору wsh из состава WCC скармливается разделяемая библиотека или ELF-приложение:
wsh /usr/sbin/apache2
К сожалению стабильность работы вызывает вопросы, поэтому тут 50/50 — колдунство может сработать, а может выпасть segmentation fault. Если был передан бинарник — автоматически произойдет его «библификация», описанная выше.
Если сработало, появится сообщение зелеными буквами на черном фоне:
loading of libified binary succeeded
И можно будет пытаться вызывать:
a = ap_get_server_banner() print(a)
Код выше — отдельный язык, такая своеобразная помесь С и Lua, с весьма поэтическим названием:
The resulting API, a powerful combination of lua and C API is called Punk-C
Авторы решили не заморачиваться с типами данных, поэтому и родилась на свет эта дикая помесь ужа с ежом С и Lua.
Так выглядит более сложный пример использования:
#!/usr/bin/wsh
-- Computing a MD5 sum using cryptographic functions from foreign binaries -- (eg: sshd/OpenSSL)
Для демонстрации работы необходимо вначале загрузить одну из библиотек, реализующих функции MD5-хеширования, что и было немедленно проделано:
Считаем MD5-хеш с помощью метода, вызванного через рефлексию из бинарника sshd.
Как видите все работает и действительно отображается MD5-хеш для введенной строки, вычисленный с помощью вызова функции из бинарника sshd.
Без исходников и без линковки.
Но это далеко не все колдовские приколы, которые позволяет творить WCC.
Колдунство третье: восстановление флагов сборки
Хотя авторы WCC опять несколько преувеличивают, рассказывая про возможность восстановления абсолютно всех флагов сборки:
When compiling C code, it is often required to pass extra arguments to the compiler to signify which shared libraries should be explicitly linked against the compile code. Figuring out those compilation parameters can be cumbersome. The wldd commands displays the shared libraries compilation flags given at compile time for any given ELF binary.
На практике же речь идет только о библиотеках:
Ключи сборки mplayer.
Так что речь больше про удобство использования, чем про уникальный функционал.
Колдунство четвертое: генератор заголовков
Последнее в этой статье, но далеко не последнее по важности и применимости:
The wcch command takes an ELF binary path as a command line, and outputs a minimal C header file declaring all the exported global variables and functions from the input binary. This automates prototypes declaration when writing C code and linking with a binary for which C header files are not available.
Вот тут действительно респект и жертвоприношение уважение, поскольку столь мощное колдунство может сильно помочь в разработке:
Генерация заголовочного .h файла из бинарника sshd. Без исходного кода.
Но все же стоит помнить про ограничения технологии и не ждать 100% корректности получаемых заголовков.
В качестве иллюстрации, так выглядит небольшая часть заголовков методов, полученных этим генератором:
придется долго вычищать вручную, чтобы полученный заголовочный файл можно было использовать.
Резюмируя
WCC это по истине необычный и редкий проект, к сожалению (или к счастью) неизвестный широкой программерской публике.
Хотя его использование требует серьезной подготовки и определенных навыков, а работа утилит часто нестабильна - эффект в виде зарева полыхающих пердаков быдлокодеров простых разработчиков выходит эпический.
Если вы занимаетесь серьезной разработкой на C/C++ под Linux и ненавидите человескую расу, думаю стоит ознакомиться с этой штукой поближе, чтобы включить WCC в свои темные планы и нечестивые эксперименты.
Half-Life 3, регулярно фигурирующая в файлах Valve под кодовым именем HLX, продолжает находиться в активной разработке. Несмотря на прогнозы инсайдеров о возможном анонсе в 2025 году, официальных новостей не последовало.
По словам Тайлера Маквикера, Valve намеренно откладывает презентацию: компания крайне требовательна к качеству и не хочет повторять ошибки прошлых лет, выпуская «сырой» продукт. Проект дорабатывается до идеала, чтобы соответствовать статусу легендарной франшизы.
Косвенные признаки прогресса подтверждаются регулярными находками датамайнеров в движке Source 2. В файлах Dota 2, Counter-Strike 2 и Deadlock энтузиасты постоянно обнаруживают новые технологии: продвинутую физику объектов, разрушаемость окружения, современные системы частиц и улучшенное сглаживание. Изначально ходили слухи о привязке игры к «железу» Valve, но теперь, судя по всему, проект стал кроссплатформенным. Сейчас студия хранит полное молчание, предпочитая качественный результат спешке ради хайпа.
Был серьёзный перерыв, потеря мотивации и всё такое, с момента последнего поста углубился в работу с консолью, поставил две виртуалки дебиан, одну кде, другую hyprland, обе снёс из за того что надоел весь этот сахар, сегодня более или мненее разобрался с psutils, написал что то типа мини утилиты для бекапа системы, не на что не претендую, писал не для использования а для освежения навыков и изучения библиотеки, вот код и вывод:
Привет, Пикабу! Я отвечаю за ИТ и цифровую трансформацию (CDTO/CIO) на крупном промышленном предприятии. Если вы работаете в энтерпрайзе, то наверняка знаете эту боль: бизнес приходит и говорит «Хотим свой ChatGPT, чтобы он читал наши чертежи и оптимизировал производство!». А следом приходит служба информационной безопасности (ИБ) и молча кладет на стол регламенты.
В нашей реальности облачные LLM (будь то зарубежные или отечественные по API) мертвы по определению. Коммерческая тайна, строгая регуляторика, жестко изолированный контур (air-gapped сети) и гетерогенный парк на базе Astra Linux диктуют свои правила. Нам нужен локальный, полностью суверенный ИИ.
Важная оговорка: всё, о чем пойдет речь ниже — это результаты моего независимого исследования. Я собрал локальный стенд на собственном оборудовании, сфокусировавшись на типовых проблемах промышленности, но без использования служебных данных и корпоративной инфраструктуры. В этой статье я расскажу, как уйти от игрушечного «промт-инжиниринга» к распределенным мультиагентным системам, как математически обосновать закупку GPU-кластера и как заставить локальные модели работать быстро, не выжигая железо. Будет много технического мяса.
1. Иллюзия монолитных запросов и переход к мультиагентности
Если попытаться развернуть большую локальную модель (70B+) и «скормить» ей в контекст гигабайты нормативки, результат предсказуем: модель либо захлебывается (out of memory), либо начинает галлюцинировать, придумывая несуществующие пункты регламентов. Монолитные LLM хороши для генерации писем, но для сложных промышленных задач они непригодны.
Я спроектировал архитектуру на основе мультиагентных систем (MAS). Вместо одного «всезнающего» ИИ работает рой небольших специализированных моделей (14B-32B).
Как заставить их договариваться?
Чтобы агенты (например, «Агент-Технолог», «Агент-Нормоконтролер» и «Агент-Планировщик») не спорили бесконечно, их координация формализуется как децентрализованный частично наблюдаемый марковский процесс принятия решений (Dec-POMDP). Каждый агент видит только свою часть производственной задачи, но максимизирует общую функцию полезности.
Для согласования ответов экспертных агентов я применил математический аппарат нелинейной динамики Хегсельмана-Краузе (Hegselmann-Krause). В классической модели Х-К мнения агентов сходятся, если они находятся в пределах «радиуса доверия». Для LLM это выглядит так: если эмбеддинги ответов агентов находятся близко в векторном пространстве, они сливаются в единое решение (консенсус); если мнения полярны — запускается арбитражный агент, который вызывает внешние инструменты проверки.
Пример из практики: мы используем открытые веса эффективных моделей семейства Qwen (например, Qwen 2.5 на 14B-32B параметров). При проверке легальности, нормативного соответствия или подборе сложных кодов (технологических или таможенных) один Агент-Эксперт генерирует гипотезу, а другой, Агент-Нормоконтролер, жестко сверяет ее по RAG-базе локальных ГОСТов. Динамика Х-К позволяет им достичь консенсуса, исключая галлюцинации: если первый придумывает несуществующий пункт, второй не принимает этот токен (их мнения полярны), и арбитр запрашивает перегенерацию с прямой выдержкой из PDF.
Безопасность и верификация графа
В промышленности цена ошибки ИИ — это остановка линии или брак партии. Поэтому необходим жесткий контроль пайплайнов с помощью раскрашенных сетей Петри (Colored Petri Nets, CPN).
CPN позволяет статически верифицировать граф исполнения агентов до его запуска. «Фишки» (токены) в сети несут в себе типизированные данные (json-объекты с контекстом), и мы математически гарантируем, что агент не сможет передать секретный чертеж агенту, у которого нет нужного уровня допуска (аналог мандатного доступа Astra Linux), а также то, что процесс не уйдет в бесконечный цикл (deadlock).
2. Выживание на одной RTX 3090: как впихнуть невпихуемое
Давайте без иллюзий. Когда мы говорим «ИИ для энтерпрайза», многие представляют себе стойки с H100. Но в реальности тестирование гипотез, RAG-конвейеров и парсинга нормативки (для моих pet-проектов) происходило у меня дома, на одной-единственной десктопной RTX 3090 с 24 ГБ VRAM.
В 24 ГБ VRAM физически не влезает неквантованная модель на 32B, не говоря уже про контекст в 100k-200k токенов (а приказы и ГОСТы, которые я загружал в прототипы, легко съедают этот объем). Оптимизация инференса здесь — вопрос выживания, а не красивых графиков.
Я профилировал работу моделей через двухфазную модель Roofline:
Prefill-фаза (когда модель «проглатывает» промт с кучей документации): мы упираемся в вычислительную мощность (compute-bound).
Decode-фаза (когда модель отвечает): мы упираемся в пропускную способность памяти (memory bandwidth-bound).
Самой большой болью стал KV-кэш. При потоковой обработке документов в `vLLM` с окном контекста в 128k–262k токенов кэш мгновенно выедал всю оставшуюся видеопамять (OOM).
Мой стек оптимизации для RTX 3090:
Квантование: Я перешел с тяжелых весов на GGUF и AWQ (FP8). Это позволило уместить веса хорошей модели семейства Qwen в ~12-14 ГБ VRAM, оставив место под контекст.
Heavy Hitter Oracle (H2O): Для сжатия KV-кэша. В механизме внимания не все токены одинаково полезны. H2O динамически оценивает «важность» токенов в кэше и безжалостно отбрасывает (evict) лишние, оставляя только Heavy Hitters (токены, на которые опирается смысл) и небольшое окно свежих токенов.
Разделение нагрузок: В проектах я вынес генерацию векторов (эмбеддингов) и задачи OCR в ONNX-рантайм (только CPU/RAM), чтобы полностью отдать дефицитную видеопамять под `vLLM` сервер.
Именно эти суровые "домашние" ограничения научили меня делать по-настоящему эффективные локальные архитектуры, которые на заводах смогут работать не на суперкомпьютерах, а на обычных серверах с бытовыми или полупрофессиональными GPU.
3. FinOps: Как защитить бюджет на GPU-кластер
Финдиректору плевать на H2O и сети Петри. Ему нужны цифры. Инвестиции в локальные GPU — это тяжелый CapEx.
Чтобы обосновать размер кластера, я предлагаю использовать теорию массового обслуживания (СМО). Локальный API моделируется как система типа M/M/c, где:
пуассоновский входной поток заявок (λ) — это запросы от ИТР (инженерно-технических работников);
экспоненциальное время обслуживания (μ) — это время инференса;
c — количество параллельно работающих GPU/инстансов моделей.
Построив график вероятности ожидания в очереди P(W>0) в зависимости от количества видеокарт, можно найти точку экстремума, где добавление новых GPU уже не дает существенного прироста утилизации (закон убывающей отдачи). Это дает точное понимание, сколько железа брать в первую очередь, не переплачивая за простаивающие мощности.
Далее это упаковывается в финансовую модель:
Считается ROI (Return on Investment) и NPV (Net Present Value) проекта на горизонте 3 лет.
В графу доходов закладывается не мифическая «инновационность», а конкретные FTE (Full-Time Equivalent): сколько человеко-часов высокооплачиваемых инженеров высвобождается от рутинного поиска по документации и формирования отчетов.
Учитывается стоимость рисков: штрафы за утечку коммерческой тайны (если бы мы пошли в публичное облако) и экономия на штрафах от надзорных органов благодаря снижению ошибок в проектной документации.
При грамотном расчете NPV выходит положительным, и проект окупается.
4. Практика: что ИИ реально может делать на заводе?
На базе моих тестов и прототипов можно выделить следующие сценарии применения в air-gapped контуре:
Парсинг и аудит техзаданий по ГОСТ 34 и ГОСТ 19
Инженеры загружают в систему сырые требования заказчика. Агенты автоматически разбивают их на атомарные пункты, проверяют на противоречия (через динамику Хегсельмана-Краузе) и генерируют драфты ТЗ, спецификаций и программ испытаний, строго форматированные по ГОСТам. То, на что уходили недели рутины, может делаться за часы.
Анализ нормативной документации (RAG-система)
Сборка локальной базы векторного поиска по внутренним СТО, регламентам и инструкциям. Технолог спрашивает: «Какой допуск по шероховатости для детали Х при обработке на станке Y согласно регламенту от 2023 года?». Модель выдает точный ответ с прямой ссылкой на абзац в PDF.
Анализ исторических логов АСУ ТП и журналов дефектов. ИИ (в связке с классическим ML) может анализировать текстовые записи операторов и телеметрию, выявляя скрытые паттерны, предшествующие поломке оборудования.
Оперативное планирование
Планировщик в цехе общается с ИИ-агентом на естественном языке, чтобы перестроить маршрутные карты при внезапной поломке станка. ИИ опрашивает ERP-систему (через API по строгому графу CPN), анализирует свободные мощности и предлагает варианты перестроения плана.
Заключение
Проектирование локального ИИ для сурового энтерпрайза — это не про то, как написать красивый промт. Это про математику, инженерию (сжатие кэшей, расчет СМО), информационную безопасность на уровне мандатного доступа и архитектуру агентов, которые не имеют права на галлюцинации.
Облака — это здорово и удобно. Но когда речь заходит о ядре промышленности, суверенитет и безопасность данных не имеют цены. И, как показывают мои исследования, архитектура локальных ИИ-кластеров сегодня уже способна решать тяжелые производственные задачи, математически обосновывая свою окупаемость.
А как вы решаете проблему ИИ в закрытых контурах? Пытаетесь пробить файрвол к облакам или собираете свои локальные кластеры? Делитесь в комментариях!
Недавно разбирал старые вещи и наткнулся на флешку, которой не пользовался уже много лет. Решил проверить, что там осталось. Оказалось — куча старых скриншотов, программ, игр и даже браузеров, которыми когда-то пользовались почти все.
Особенно удивили старые интерфейсы сайтов и приложений. Раньше всё выглядело намного проще: минимум анимации, простые кнопки и лёгкая навигация. Сейчас цифровые платформы стали намного быстрее и визуально сложнее.
Интересно наблюдать, как за несколько лет изменилась графика, мобильные интерфейсы и адаптивный дизайн. Даже простые приложения теперь используют плавные переходы и современную анимацию.
У кого-нибудь тоже сохранились старые архивы или программы с прошлого десятилетия?
Наконец видно результат работы моей системы синхронизации чатов:
Версия окна чатов
Пока концентрируюсь на работе персональных чатов (это чаты между двумя собеседниками). У такого чата отображается имя собеседника, последнее сообщение, временная метка и аватарка.
Особую сложность вызывала система кэширования медиа. Начал разрабатывать систему кэширования медиафайлов, а потом узнал что существуют готовые решения 😆
Частично реализовал работу групповых чатов. Но не полностью, с ними еще много работы. Сейчас отображается имя чата, имя собеседника, который отправил последнее сообщение, само осообщение, временная метка.
Сегодня переделывал систему отображения онлайн-статуса пользователя. Сейчас онлайн-статус пользователя вроде работает и обновляется 😅 То есть можно будет видеть кто в сети, а кто не в сети.
Сразу же добавил возможность скрывать свой статус, полезная функция для тех, кто не хочет чтобы их видели 😎
Все же пришел к тому, что нужно делать веб-версию приложения 😅 Зачем? Времена сложные, приложения могут выкидывать из магазинов (например из AppStore выкинули банковские приложения, Avito), блокировать. Размещение приложения на личном сайте поможет хоть как-то защититься от этого. Во всяком случае с сайта можно будет скачать приложение для Android или настольных компьютеров (Windows/Linux/IOS).
--
Кому интересно, можете подписаться куда-нибудь на меня, попробуете мессенджер в числе первых. Постепенно буду продолжать делиться успехами разработки :)