FFmpeg Assembly Language Lessons
FFmpeg/asm-lessons — репозиторий с уроками по ассемблеру для FFmpeg.
Цель: научиться писать высокопроизводительные рутины на x86-64, ARM и других архитектурах, ориентированные на мультимедиа-задачи.
Содержание (кратко):
- Уроки: от базовых инструкций до векторных расширений (SSE/AVX, NEON).
- Примеры: реализация IDCT, фильтров, цветового преобразования.
- Тесты: юнит-тесты и бенчмарки для сравнения C vs asm.
- CI: автоматическая проверка на x86-64 и ARM через GitHub Actions.
Как начать:
- Клонируйте репо.
- Установите
nasm
,yasm
илиllvm-mingw
. - Соберите пример:
make lesson01
.
Полезные ссылки:
Комментарии (18)
- Участники восхищаются масштабом и экономией вычислений, которую даёт даже небольшое улучшение в FFMPEG.
- Обсуждают, как находят узкие места в сгенерированном компилятором коде, и возможность писать оптимизации вручную на LLVM IR вместо ассемблера.
- Интересуются, как обеспечивают переносимость ассемблерных инструкций: оказывается, для каждой архитектуры пишут отдельную ручную версию, а есть и обобщённая C-заглушка.
- Отмечают «серьёзное злоупотребление» макропроцессором NASM и сомневаются в необходимости от него отказываться.
- Сожалеют, что у FFMPEG нет «нормального» API, а вместо него приходится изучать почти собственный язык командной строки.
When you're asking AI chatbots for answers, they're data-mining you
- Security: киберпреступность, патчи, исследования, CSO
- Off-Prem: edge + IoT, канал, PaaS/IaaS, SaaS
- On-Prem: системы, хранение, сети, HPC, персональные технологии, CxO, госсектор
- Software: ИИ + ML, приложения, БД, DevOps, ОС, виртуализация
- Offbeat: дебаты, колонки, наука, юмор, юр. новости, блоги
- Спецпроекты: месяц облачной инфраструктуры, сети ЦОД, хранение, европейские суперкомпьютеры, ИИ-инфраструктура, RSAC, разработка ИИ, аварийное восстановление, GTC Nvidia, ransomware, будущее ЦОД, кибербезопасность, VMware Explore
- Vendor Voice: Siemens + AWS, Mendix + AWS, финансовые потоки, BigQuery, AWS Global Partner Security, GE Vernova
- Ресурсы: whitepapers, вебинары, рассылки
Комментарии (42)
- Любые данные, отправленные в облачные ИИ-сервисы, навсегда уходят из-под вашего контроля и могут быть использованы против вас, в том числе в суде.
- Пользователи осознают эту «плату» в виде конфиденциальности, но считают удобство сервисов оправданным.
- Компании обещают «не использовать» личные данные, но формулировки оставляют лазейки, а данные всё равно сохраняются.
- Выход — локальные модели (LM Studio, Oobabooga, Qwen и др.), которые запускаются на домашнем железе и не отправляют наружу ни запросов, ни контекста.
Комментарии (60)
- RRT-манифест: не использовать LLM в критичных местах, жёстко ограничивать права и отслеживать входы/выходы.
- Основная боль: даже опытные разработчики пропускают AI-генерированные уязвимости из-за спешки и усталости ревьюеров.
- Локальные модели и отсутствие .env-секретов снижают риск утечки, но не решают проблему полностью.
- Разделение «системных» и «пользовательских» инструкций пока ненадёжно, поэтому prompt-injection остаётся.
- Сторонники сравнивают LLM с автопилотом: ошибки будут, но, возможно, меньше человеческих; критики считают это оправданием поспешного внедрения.
Website is served from nine Neovim buffers on my old ThinkPad
Кратко: плагин nvim-web-server
на чистом Lua отдаёт HTTP-запросы прямо из открытых буферов Neovim, без внешних зависимостей, с нативной поддержкой Djot и быстрее Nginx.
Почему так быстро?
- Однозадачность: только статика.
- libuv + асинхронный I/O Neovim.
- LuaJIT: NaN-тегинг, отсутствие boxing чисел, allocation sinking.
- aiohttp тормозит из-за парсера на чистом Python и boxing в CPython.
Бенчмарк, RPS (среднее):
сервер | 1 | 50 | 100 | 200 | 400 |
---|---|---|---|---|---|
nvim-web-server | 3981 | 15284 | 15124 | 14476 | 14446 |
Nginx | 4451 | 11306 | 11576 | 10011 | 10461 |
aiohttp | 6391 | 8477 | 8448 | 7696 | 7132 |
Развёртывание: живёт на старом ThinkPad, 9 буферов — весь сайт.
Безопасность: да, но мелочи мы игнорируем.
Комментарии (17)
- Пользователи в восторге от статьи: называют её «одной из любимейших» и приводят цитату «они были так заняты тем, могут ли, что не спросили себя, стоит ли».
- Кто-то отмечает, что сайт резолвится на IP Linode, но не объясняется, зачем нужен промежуточный сервер.
- Обсуждают безопасность: пример показывает, что «никогда не бывает так, чтобы код точно не запустили по сети».
- Некоторые шутят, что Neovim теперь можно считать кроссплатформенным рантаймом «ужаса», но признают крутость эксперимента.
- Предполагают, что высокая скорость может быть из-за хранения файлов в RAM, а не на диске, и что всё равно всё закешируется.
MCP doesn't need tools, it needs code
CLI-инструменты часто зависят от платформы/версии, плохо документированы и ломаются при не-ASCII вводе. Агенты путаются в управлении состоянием (например, tmux-сессиями) и теряют контекст после мелкой ошибки. Каждый вызов ещё тормозит из-за предварительной проверки безопасности.
Композиция в CLI работает через bash: цепочки tmux send-keys
, sleep
, base64
и т.д. MCP сегодня так не умеет.
Выход — MCP-сервер с одним «убер-инструментом»: Python-интерпретатор, сохраняющий состояние между вызовами. Пример — pexpect-mcp
: виртуальное окружение + pexpect
, позволяющее скриптами управлять интерактивными CLI-программами. Вместо 30 отдельных MCP-функций достаточно одной, принимающей код.
Комментарии (79)
- Участники критикуют MCP как «ограничитель» вместо «суперсилы»: набор фиксированных инструментов сужает возможности LLM.
- Предлагаются альтернативы: прямое обращение к HTTP/CLI/WebSocket-эндпоинтам, eval() в песочнице, либо отказ от MCP в пользу обычных API.
- Основные жалобы — низкая безопасность (потенциальный RCE), плохая масштабируемость (30+ инструментов путают модель) и отсутствие формального стандарта.
- Часть комментаторов считает MCP лишь «хорошо структурированным промптом» и предлагает использовать суб-агентов или динамически подгружаемые наборы инструментов.
Electromechanical reshaping, an alternative to laser eye surgery
Безлазерная альтернатива LASIK: имплантация линзы EVO/ICL
- Что это: вместо выпаривания роговицы лазером в глаз вводится тонкая факичная линза EVO/ICL, которая работает вместе с собственной хрусталиком пациента.
- Преимущества:
– подходит при тонкой роговице и высокой близорукости;
– сохраняется возможность «отката» (линзу можно извлечь);
– быстрая реабилитация (чёткое зрение уже на следующий день). - Риски: повышенное внутриглазное давление, катаракта, световые ореолы; требуется регулярное наблюдение.
- Стоимость: 2500–4000 $ за глаз, страховки не покрывают.
- Кому не подходит: при астигматизме > 6 дптр, глаукоме, возраст < 21 года.
Комментарии (59)
- Участники обсуждают новый метод «молекулярной хирургии» глаза, который обещает менее травматичную альтернативу LASIK/PRK/SMILE.
- Основная надежда — избежать разрезания нервов роговицы и связанных с этим сухости, ореолов и бликов.
- Многие интересуются, подойдёт ли метод при астигматизме, тонкой роговице или пресбиопии; пока ответов нет.
- Возможность обратимости и индивидуальное изготовление «платиновой линзы» вызывают вопросы.
- Участники сравнивают процедуру с ортокератологией и брекетами для зубов, но ждут менее пугающего названия.
Web apps in a single, portable, self-updating, vanilla HTML file 🔥 Горячее 💬 Длинная дискуссия
Hyperclay — однофайловые HTML-приложения
Работайте как с глиной: открыли файл, изменили — изменения сохранились. Без сборки, деплоя и фреймворков.
- Прямое редактирование в браузере: меняете DOM — файл перезаписывает себя через
/save
. - Полная переносимость: скачали HTML — запустили где угодно, офлайн.
- Версии: каждое сохранение фиксируется, откат в один клик.
Примеры: dev-log, writer, kanban, landing.
Почему это важно
Статические сайты удобны, но изменения исчезают после перезагрузки. Чтобы сделать цифровой объект «физическим» — нужен сервер, БД, API, аккаунты. Hyperclay убирает всё лишнее: UI, логика и данные — в одном самомодифицирующемся HTML-документе.
Комментарии (151)
- Hyperclay — это NodeJS-сервер + JS-библиотека, которая позволяет странице «сохранять себя»: после изменений DOM сериализуется и перезаписывает исходный .html-файл.
- Идея вызывает ассоциации с TiddlyWiki, Webstrates и даже HTA-архивами Windows 98, но Hyperclay ориентирован на многопользовательскую работу и серверную персистентность.
- Участники обсуждают проблемы: CORS при открытии файла по file://, необходимость сервера, закрытость кода, отсутствие цен и 404-ошибки на сайте.
- Появились самодельные однофайловые решения: игры, шифровальщики, твиттер-клон, которые сохраняют состояние прямо в HTML и отдают его на скачивание.
- Общий запрос — сделать такие «живые» HTML-приложения полностью автономными: двойной клик и работает без сервера, но пока мешают ограничения браузеров и безопасность.
SystemD Service Hardening
systemd-харднинг: кратко и по делу
sudo systemd-analyze security
показывает «красную» таблицу рисков.
sudo systemd-analyze security имя.service
— детально по конкретному юниту.
Колонка Exposure — главный ориентир: чем выше значение, тем больше прав можно отнять.
Как править
sudo systemctl edit имя.service
создаст override-файл.- Параметры пишутся в секции
[Service]
(или[Container]
для quadlet). - Сервис не стартует — значит убрал нужное, возвращай.
Часто используемые директивы
Директива | Что делает |
---|---|
NoNewPrivileges=true |
запрет setuid/setgid |
PrivateTmp=true |
изолированный /tmp |
ProtectSystem=strict |
корень только read-only |
ProtectHome=true |
/home , /root недоступны |
ReadWritePaths=/var/lib/app |
белый список для записи |
CapabilityBoundingSet=CAP_NET_BIND_SERVICE |
только нужные capability |
SystemCallFilter=@system-service |
разрешённый набор сисколлов |
RestrictAddressFamilies=AF_INET AF_INET6 |
только нужные семейства сокетов |
MemoryDenyWriteExecute=true |
блок W^X |
LockPersonality=true |
запрет смены personality() |
RestrictRealtime=true |
нельзя захватывать realtime-приоритеты |
UMask=0077 |
файлы создаются 600 |
RemoveIPC=true |
чистит SysV IPC при выходе |
Пример override
[Service]
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/myapp
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
SystemCallFilter=@system-service
RestrictAddressFamilies=AF_INET AF_INET6
MemoryDenyWriteExecute=true
LockPersonality=true
RestrictRealtime=true
UMask=0077
RemoveIPC=true
Проверь: sudo systemctl daemon-reload && sudo systemctl restart имя.service
.
Это не серебряная пуля; подгоняй под каждый сервис и смотри логи.
Комментарии (62)
- Участники хвалят статью за конкретные советы по харднингу systemd и ссылаются на утилиту shh, которая автоматически подбирает параметры защиты через strace-профилирование.
- Предложено создать репозиторий с готовыми «жёсткими» unit-файлами для популярных сервисов, но подчёркивают, что придётся часто ослаблять ограничения из-за «крайних» кейсов.
- Несколько человек отмечают полезность systemd-analyze security и встроенного механизма credentials, который безопаснее переменных окружения.
- Спор о том, кто должен писать защищённые unit-файлы: разработчики, мейнтейнеры или пользователи; упоминается опыт Fedora и Ubuntu.
- Популярный офтоп: правильное написание «systemd» (строчными), а не «SystemD».
Google admits anti-competitive conduct involving Google Search in Australia 🔥 Горячее 💬 Длинная дискуссия
Google признал антиконкурентное поведение в Австралии:
- компания согласилась, что ограничивала выбор поисковой системы на Android-устройствах;
- подписала обязательство перед ACCC изменить практику и уведомлять пользователей о доступных альтернативах Google Search;
- обязательство действует 5 лет и подлежит судебному контролю;
- ACCC считает признание важным шагом к восстановлению конкуренции.
Комментарии (165)
- Google заплатила Telstra, Optus и TPG, чтобы быть единственным предустановленным поиском на Android-смартфонах в Австралии с декабря 2019 по март 2021.
- Участники сделки получили долю от рекламной выручки Google; регулятор назвал это антиконкурентным и оштрафовал Google на 55 млн AUD.
- Комментаторы считают штраф «карманными деньгами» и требуют наказывать процентом от глобального дохода или привлекать к уголовной ответственности.
- Многие отмечают, что Telstra, Optus и TPG тоже должны быть оштрафованы как сознательные участники схемы.
- Некоторые пользователи уже перешли на DuckDuckGo, Kagi и другие поисковики, но большинство остаётся «запертым» в экосистеме Google.
Non-Uniform Memory Access (NUMA) is reshaping microservice placement
Codemia
Подготовка к систем-дизайн-интервью через практику:
Начать | Блог | Системный дизайн
Юридика
Условия | Конфиденциальность | Контакт
Комментарии (24)
- Обсуждение подтверждает: для HPC, высоконагруженных и чувствительных к задержкам систем NUMA-распределение критично, и ручное pinning процессов/потоков к нужным узлам остаётся основным способом добиться стабильной производительности.
- В публичных облаках (AWS, GCP) NUMA-топология скрыта, VM часто выглядят как однонодовые UMA; полезны
lscpu
,lstopo
,cpu-latency
, но настроек управления NUMA почти нет. - Сообщество делится инструментами:
mpibind
,sched_ext
, DAMON, fake NUMA, идеями эмуляции NUMA даже на Raspberry Pi 5. - Kubernetes уже умеет NUMA-affinity, но вручную выбирать 64-ядерный инстанс вместо 96-ядерного (чтобы не пересекать сокеты) всё равно приходится самим.
- Крайняя альтернатива — односокетные серверы с NPS=1: «равномерно медленно», но без головной боли.
Mangle – a language for deductive database programming
Mangle — проект Google на GitHub.
Язык: Go.
Лицензия: Apache-2.0.
Описание
Mangle — это компилятор/интерпретатор логического языка, ориентированного на:
- анализ и трансформацию графов;
- декларативные запросы к данным;
- поддержку Datalog-подобного синтаксиса.
Ключевые особенности
- Компилирует логические правила в Go-код или исполняет напрямую.
- Поддерживает рекурсивные запросы и агрегации.
- Работает с in-memory и persistent-хранилищами.
Установка
go install github.com/google/mangle/cmd/mangle@latest
Быстрый старт
- Создай файл
example.mgl
:edge("a", "b"). edge("b", "c"). path(X, Y) :- edge(X, Y). path(X, Z) :- edge(X, Y), path(Y, Z).
- Запусти:
mangle example.mgl --query="path(\"a\", Z)"
Документация
Комментарии (14)
- Участники спорят, связан ли новый язык Google с «Deductive Database» из видео 3b1b: одни считают, что это очередной внутренний эксперимент, другие — просто «люди, которые веселятся под крылом Google».
- Поднимается вопрос, почему почти все инструменты расширяют «ванильный» Datalog: его ограничения делают расширения неизбежными.
- В треде упоминаются альтернативные языки запросов — PreQL/Trilogy, Malloy, PRQL, PathQuery — и обсуждается, как они соотносятся с SQL и реляционной алгеброй.
Clojure Async Flow Guide
Быстрый старт
Библиотека flow отделяет бизнес-логику от развёртывания: топологии, исполнения, обмена сообщениями, жизненного цикла, мониторинга и обработки ошибок.
step-fn и процессы
Логика описывается функциями step-fn, которые flow заворачивает в процессы, крутящиеся в цикле. step-fn не работают с каналами напрямую и не хранят состояние, поэтому легко тестируются и переиспользуются.
step-fn имеет четыре арности:
describe (step-fn) → descriptor
Возвращает статическое описание :params
, :ins
, :outs
— карты имя → документация. Имена входов и выходов не должны пересекаться.
{:params {:size "Максимальный размер"}
:ins {:in "Входной канал"}
:outs {:out "Выходной канал"}}
init (step-fn arg-map) → init-state
Один раз вызывается при старте процесса; превращает параметры из flow-def в начальное состояние.
transition (step-fn state transition) → state'
Вызывается при переходах жизненного цикла (::flow/start
, ::flow/stop
, ::flow/pause
, ::flow/resume
). Используется для управления внешними ресурсами.
transform (step-fn state input msg) → [state' {out-id [msgs]}]
Вызывается для каждого входящего сообщения. Возвращает новое состояние и карту выходных сообщений. Выход может быть пустым, но каждое сообщение — не nil
. Исключения логируются в :error-chan
.
Состояние процесса
Карта с любыми ключами. Дополнительно:
::flow/pid
— идентификатор процесса::flow/in-ports
,::flow/out-ports
— карты cid → внешний канал (создаётся вinit
)::flow/input-filter
— предикат cid для фильтрации входных каналов
Хелперы
lift*->step
— изf(x) → coll
делает step-fn с одним входом и выходомlift1->step
— то же, ноf(x) → single-value
map->step
— из карты с ключами:describe
,:init
,:transition
,:transform
строит step-fn
Запуск процесса
Функция process
принимает step-fn и опции:
::workload
—:mixed
,:io
,:compute
:compute-timeout-ms
— таймаут для:compute
(по умолчанию 5000 мс)
Комментарии (74)
- Участники обсуждают, жив ли Clojure: сообщество стабильно, но менее хайповое; NuBank расширяет core-команду и нанимает Developer Advocate.
- core.async.flow предлагает декларативный, фиксированный граф каналов для «структурированной конкурентности»; ошибки и паузы можно отслеживать, но изменять топологию на лету пока нельзя.
- Сравнивают с GenStage (Elixir), Manifold, Trio и missionary/electric; можно использовать как OS-, так и green-потоки.
- JVM-тулчейн вызывает у новичков страх, но Leiningen/deps.edn упрощают работу, а отладка всё же возможна.
- Clojure-окосистема активно развивается: Babashka, XTDB, Dyna3 и другие проекты; язык недавно получил мажорный релиз и готовится к виртуальным потокам JVM.