Открытый проект ffmpeg webCLI (веб-версия) для работы с видео позволяет выполнять больше 20 различных манипуляций за один клик с любыми роликами: менять размер, вырезать аудио, сжимать, конвертировать в gif или другие форматы, ускорять, миксовать, стираем вотермарки, добавлять блюр, зацикливать.
RoutineOps upd. 17.08.2026 С момента последней статьи сделали много. Так как я условился, что теперь буду выпускать информацию об апдейтах в виде коротких постов, то вот: - Отполирован macOs агент и функционал с FileVault блоком. - Логирование действий под временной админкой. - EN локализация. - Процесс установки/удаления/преустановки агентов отполирован. - Самое главное: удаленное подключение к устройству пользователя прям из WebUI.
Подробнее о проекте и функционале в доках репозитория на гитхабе и в постах: Пост про сам проект, первые шаги и финальный функционал первого Public Release! Пост про разработку enterprise версии. В скором времени подготовлю статью про процесс разработки удаленного подключения, какие были архитектурные решения, сам процесс и финальный результат! Если вам интересно подробнее узнать про какую то функцию или архитектурное решение, то пишите, рад буду пообщаться на тему проекта.
Совет по Joomla: Как сделать ссылки на списки сущностей Joomla с фильтрацией?
Стандартная форма фильтрации в админке Joomlа
В Joomla в любом списке сущностей есть параметры поиска, которыми мы привыкли пользоваться руками в админке. Но что если вам нужно сделать ссылку на список в админке с заранее заданными параметрами фильтрации?
Например:
разработчик хочет дать ссылку на плагин для быстрого перехода к настройкам;
разработчик хочет в документации для контент-менеджера дать ссылку на нужные модули, плагины, о которых идёт речь;
Админка Joomla поддерживает фильтры в URL-адресе, а названия GET-параметров для фильтрации можно посмотреть в названиях полей фильтров админки.
Например, в списке плагинов поле фильтра:
выбор состояния - filter[enabled]=1 или 0
выбор типа (группа плагинов) - filter[folder]={название группы плагина, например content или system}
element плагина (уникальное систеное имя) - filter[element]={element}
уровень доступа, с которым работает плагин - filter[access]={числовой-код-уровня-доступа}
Аналогичным образом работает список модулей, контактов, материалов и т.д. Найти имена параметров можно либо в HTML-коде страницы, либо в XML-форме опций фильтра нужного компонента. Для списка плагинов используется компонент com_plugins, а форма фильтра лежит в administrator/components/com_plugins/forms/filter_plugins.xml. Для списка материалов Joomla - в administrator/components/com_content/forms/filter_articles.xml. Другие компоненты - ищем по анналогии.
Чат русскоязычного Joomla-сообщества в Telegram и в Max.
DeepSeek запустил агентскую среду Harness. Ключевая фича: плагином может быть всё. Модели, сессии, скиллы, песочницы, циклы и даже просто интерфейс. В Harness всё выдаётся в качестве готового к работе агента:
у среды своя архитектура на Cordis, которая позволяет менять компоненты в любое время;
схема простая: любая модель + любой компонент = готовый агент;
работает вообще с любыми компонентами;
по факту, это новый способ создания ИИ‑агентов, простой и максимально эффективный.
В сообществе разработчиков также представили 6000 готовых скиллов для DeepSeek Harness.
Telemax: когда не хочешь держать MAX на телефоне, но есть Telegram
Ситуация, знакомая многим: MAX ставить не хочется, а приходится. Работа, знакомые, школьные чаты — и вот у тебя на телефоне живёт приложение, которому ты не доверяешь, и которое работает в фоне тогда, когда ему захочется.
Стандартные советы — «пользуйся веб-версией» или «поставь на отдельную звонилку». Веб-версия не шлёт пуши и не принимает звонки в фоне. Отдельный телефон ради одного мессенджера — так себе решение.
Мне хотелось третьего варианта: чтобы MAX вообще не было ни на моём телефоне, ни в моём браузере — а переписка при этом приходила туда, где я и так сижу. В Telegram.
Так появился Telemax — мост между MAX и Telegram.
Что понадобится
Сервер — любая VPS на Ubuntu/Debian. Требования скромные, хватит самой дешёвой.
Свой Telegram-бот — создаётся за минуту в @BotFather, токен вставляется при настройке. Бот твой, живёт на твоём сервере, никакого общего чужого бота — данные идут только через твою инфраструктуру.
Telegram-группа с включёнными темами, куда ты добавишь этого бота админом. Она и станет твоим «окном» в MAX.
Номер MAX, на который мост авторизуется (в том числе если на аккаунте стоит пароль-2FA).
Про безопасность и доступ — два уровня:
Снаружи бот глухой. На любое сообщение или команду из другого чата (личка боту, чужая группа, куда его попытались добавить) он просто молчит. Работает только внутри твоей группы.
Внутри группы — разграничение. Обычные участники могут читать и писать (можно спокойно добавить людей в группу, чтобы вести общее обсуждение). А вот команды боту — только для админа.
Честная оговорка: тот, кого ты добавил в Telegram-группу, видит там все MAX-чаты, а не один. Так что доступ к самой группе — вещь чувствитвительная.
В ТГ это выглядит так:
Что уже работает в обе стороны:
текст, фото, файлы, голосовые, видео и видео-кружки;
стикеры — и статичные, и анимированные;
геолокация и контакты;
опросы — создание и голосование;
удаление сообщений;
реакции;
пересылка (обычным forward в Telegram — прилетает в MAX с пометкой источника);
уведомления о звонках (входящий / пропущенный / завершённый — текстом, без передачи звука: для аудио нужен WebRTC, это вне рамок).
Плюс мелочи для удобства: веб-панель со статусом и метриками (приватный доступ), самообновление по кнопке прямо из Telegram, авторизация (включая аккаунты с паролем-2FA) без танцев с бубном.
Из интересного: анимированные стикеры ТГ по умолчанию МАХ не принимает, поэтому они конвертируются в короткие видео - можно завалить максчатланинов своими стикерпаками )
Дальше скрипт сам поставит Docker, склонирует проект, сгенерирует ключи и по шагам проведёт настройку: попросит токен Telegram-бота (создаётся в @BotFather), сам определит id твоей группы, а в конце прямо в консоли спросит номер MAX и код из SMS. Переключаться в браузер для первого запуска не нужно.
Всё, что дальше (сменить номер, посмотреть логи) — через веб-панель по HTTPS.
Честно про ограничения, чтобы никто не питал иллюзий:
Это не end-to-end. Переписка идёт через серверы MAX и Telegram — как и в любом обычном мессенджере. Мост ничего в этом плане не «шифрует поверх», он просто переносит сообщения. Если тебе нужен E2E — это не сюда.
Переписка оседает на твоём сервере — в логах и в истории Telegram-группы. Безопасность этого сервера (доступ, шифрование диска) — на тебе.
Это неофициально. Проект не связан с MAX, работает поверх твоего собственного аккаунта на твой страх и риск, в том числе в части их правил.
Сыровато. Один разработчик, живой проект. Но у меня самого крутится и работает.
Открытый код и зову тестить
Специально открытый исходник — чтобы можно было посмотреть, что внутри, и гонять на своём сервере, а не на чьей-то инфраструктуре:
«Это написал Клод» — комментарий из-за рубежа, и почему идее хранилища больше двадцати лет (даже если так было бы, то клод выпивая тонные кофе это всё родил ...)
Под англоязычной версией статьи про SQLite-провайдер на dev.to появился комментарий в духе «даже без "load-bearing" и тире через всё предложение видно, что это писал Клод». Не первый раз слышу что-то подобное, так что решил ответить не в комментариях, а отдельным постом — заодно расскажу то, что давно собирался: откуда вообще взялась идея хранилища, на котором всё это стоит.
Сначала честно про долю ИИ
Не скрываю и не буду: текст статей — да, пишу в паре с Клодом, я не копирайтер и не техрайтер по профессии. Но код библиотек — другая история. Скелет и инженерные решения — мои, всегда были моими. Клод дописывает рутину поверх уже заданного паттерна, полирует, ловит ошибки, пишет тесты и комментарии. Изобретать архитектуру и решать неочевидные компромиссы — не его работа, это разные навыки, и Клод хорош ровно в первом, не во втором.
Показательный пример — сам релиз 3.6.0: баги, которые в него вошли, нашёл не Клод, а реальная эксплуатация. Модель не может споткнуться о краевой случай, который проявляется только под живой нагрузкой с непредсказуемым вводом — такое не ловится по аналогии с соседним кодом.
А теперь — откуда это всё вообще взялось
Основная идея хранилища — не изобретение последних месяцев. Первая версия появилась в 2004 году, когда я писал на Delphi — за двадцать с лишним лет до того, как Клод вообще начал существовать.
Задача была — дать объекту динамические поля на ходу, не фиксируя их жёстким классом заранее. Delphi для этого уже нёс нужный кусок — RTTI (Run-Time Type Information): каждый класс несёт метаданные о своих полях и свойствах, доступные в рантайме, не только на этапе компиляции. Поверх этого — интерфейс IDispatch из COM: GetIDsOfNames резолвит имя поля в DISPID, Invoke вызывает по этому DISPID, передавая значение через VARIANT. Вместе это давало то, чего не даёт обычный жёсткий класс: объект мог обзавестись полем, которого не существовало на момент компиляции, а вызывающая сторона — спросить о нём по имени и получить настоящий типизированный ответ.
Система прожила у меня внутри собственных проектов много лет, никуда не публикуясь. За это время она полностью пережила Delphi и COM — переехала на .NET, механизм сменился до неузнаваемости (никакого VARIANT, никакого DISPID — сейчас это типизированные колонки в Postgres/MSSQL/SQLite, которые я уже разбирал построчно в статье про 13 таблиц), а вопрос остался ровно тем же: как дать объекту гибкий набор полей, не потеряв возможность спросить "а какого оно вообще типа".
Отсюда, кстати, и название — RTTI-based storage, не маркетинговый термин, а прямое родство с тем самым механизмом Delphi. И не EAV — там никогда не было обезличенной колонки "значение", RTTI всегда знало настоящий тип.
Клод помогал полировать это перед тем, как это увидело свет публично. Сама идея и её первое воплощение — старше Клода на десятилетия.
Всё лежит в публичных репозиториях — redbase-app. Предлагаю не гадать по стилю прозы, а склонировать к себе и прогнать нейронкой — глубоко, очень глубоко. И приглашаю на дискуссию: если найдёте что-то, что выглядит как архитектурное решение именно от модели, а не от человека, который держит всю систему в голове годами — с удовольствием обсужу предметно.
Уже давно заметил, что если навигироваться в Obsidian через зажатие стрелок, то через какое-то время появляется жесточайший лаг.
Решил сделать профилирование. Получилось довольно продуктивно. По пути кинул баг-репорты Fakelink и Excalidraw, чтобы они улучшили производительность в конкретных местах. На удивление проблемы решились в тот же день. Видимо, мало кому из разработчиков нравится, когда их плагин тормозит :)
Но главное узкое место оказалось в обработке зажатых клавиш редактором CodeMirror, который работает под капотом самого Obsidian. Апдейты начинают накапливаться, не успевают обрабатываться, и в итоге лаг линейно растёт со временем вплоть до зависания.
В итоге сделал плагин, который это исправляет, а заодно решил превратить его в контейнер для других мелких фиксов и изменений UI.
Сейчас в плагине есть следующие микропатчи:
Исправляет лаг при зажатии стрелок
Держит курсор примерно в центре для удобства чтения
Скрывает светофор на macOS
По умолчанию открывает поиск в Bases
Убирает анимации в интерфейсе
Если у вас есть идеи, какие ещё можно сделать микропатчи, то буду рад их рассмотреть.
В команде VideoLan (разработчики открытого проекта VLC Media Player) предупредили пользователей о регрессии, проявляющейся в ОС Windows 11. Симптомы проблемы: 30-секундное зависание перед началом воспроизведения некоторых видов файлов, включая MP3. Регрессия объясняется ошибкой, допущенной в приложении Microsoft Defender и проявляющейся после установки последнего обновления Windows 11. Из‑за ошибки каталог с кэшем плагинов VLC был помещён Microsoft Defender в карантин. Для ошибки рекомендуется переустановить VLC, очистить или перегенерировать кэш плагинов командой «vlc ‑-reset‑plugins‑cache». Также проблема может быть решена через добавление vlc.exe в список исключений Microsoft Defender.
Червь Shai-Hulud вернулся в npm и получил настоящую подпись
4 августа в npm вышла новая версия keyv, небольшой библиотеки для работы с хранилищами. Внутри был вредоносный код, и через час он появился в cacheable, flat-cache, cache-manager и остальных пакетах того же автора, а оттуда пошел дальше по чужим учетным записям. Сутки спустя специалисты Aikido насчитали 444 зараженных пакета.
Опознать волну было несложно. Червь складывал краденое в публичные репозитории с описанием «Shai-Hulud: Here We Go Again». Wiz относит образец к тому же семейству, что и прошлогодние.
Атакующий получил доступ к учетной записи мейнтейнера и выпустил зараженные версии от его имени. В них он добавил загрузчик setup.mjs, файл с замаскированным вредоносным кодом и настройку preinstall в package.json. Она заставляла npm запускать загрузчик еще во время обычной установки пакета.
setup.mjs определял, на какой системе работает машина. Если на ней не было Bun (среды для выполнения JavaScript), то он скачивал ее легитимную версию 1.3.13 из официального списка релизов. Затем через Bun запускался Math_Symbol.js. Этот файл собирал токены, ключи и другие секреты, доступные на машине разработчика или сервере сборки. Используя токены публикации червь выпускал зараженные версии пакетов, которыми мог распоряжаться их владелец. Таким образом червь шел не только по дереву зависимостей, но и по полномочиям мейнтейнеров. Очередной зараженный пакет попадал в следующую среду сборки, получал доступ уже к ее секретам и повторял тот же сценарий.
Интересно то, что зараженные версии попали в реестр с настоящей подписью. Год назад экосистема ответила на первую волну Shai-Hulud внедрением доверенных публикаций, при котором пакет собирается в общем сборочном конвейере, а вместе с ним публикуются сведения о происхождении сборки. На августовских версиях эта проверка проходила, и подмены после сборки действительно не было. Вредоносный код лежал в самом репозитории, поэтому конвейер честно собрал и заверил то, что там было.
Второе наблюдение этой волны — это попытка закрепиться там, куда пакетный менеджер уже не смотрит. Получив доступ к репозиториям, червь дописывал в них служебные настройки редактора и ИИ-агента так, что код запускался при обычной работе с проектом, например при его открытии. Запрет скриптов установки, который npm включил по умолчанию этим летом, обрубает главный путь заражения, но эту ветку он не видит. Она живет в конфигурации инструментов, куда дерево зависимостей не заглядывает.
Заражённые версии из реестра уже убрали, а теги последних релизов откатили. Но для машины, куда пакет успел встать 4 августа, это мало что меняет. Секреты уехали в тот же день и работают, пока их не отозвали.
Как в таком случае защитить цепочку поставки?
Новые версии внешних пакетов лучше вовсе не пускать в сборки в день публикации. Период охлаждения хотя бы на 14 дней дает время заметить подозрительный релиз. Доступ к публичным реестрам стоит пропускать через внутренний репозиторий или прокси, чтобы известная вредоносная версия не попала к разработчикам и в сборочные системы. Подробнее о таких рубежах контроля мы писали в статье «Атаки на цепочку поставки ПО: виды угроз и как с ними бороться».
Когда запись об уязвимости уже появилась в базах данных, композиционный анализ помогает найти проекты, сборки и контейнерные образы, где могла оказаться конкретная версия, если не применялся период охлаждения. Дальше важно очистить внутренний кэш, проверить изменения в CI, редакторах и ИИ-агентах, а также отозвать секреты, к которым имел доступ раннер. Удаление пакета из реестра этого уже не сделает.
Начал значительно чаще пользоваться ChatGPT, так как на GPT-5.6 Sol High качество ответов стало меня устраивать. Вдобавок, он по умолчанию работает примерно в том же стиле, что и Perplexity Computer. Только нет никаких дурацких кредитов.
Единственное, что меня серьёзно напрягало – это то, как выглядел чат. Чёрный фон, полная депрессия. Поэтому сделал свою тему. Естественно, частично наследовал Base16 Dark и поставил любимое семейство IBM шрифтов.
Читаемость повысилась. С чатом стало приятнее работать. Кстати, предыдущую тему для Habr я тоже переработал.
Тема бесплатная, устанавливается через Stylus (Firefox / Chrome).
Представлен открытый проект torlink, который умеет искать и работать с торрентами из проверенных источников. Запускается командой npx torlnk. Одновременно проверяет FitGirl, YTS, The Pirate Bay, 1337x, Nyaa и другие источники, а результаты показывает вместе с размером и числом сидов. Выбранный файл скачивается в фоне, а после завершения автоматически встаёт на раздачу.
«Найти торрент в наши дни — сплошная головная боль. Один сайт — это минное поле из поддельных кнопок загрузки. Другой скрывает настоящую ссылку под всплывающим окном, которое открывает ещё две вкладки. И после всего этого половина результатов — это неработающие сайты с нулевым количеством раздающих. Torlink — это программа для поиска торрентов, которая работает в вашем терминале, не требует никакой настройки и конфигурации. Один поиск проверяет короткий, тщательно отобранный список надёжных источников, и всё, что вы выберете, загрузится прямо на ваш компьютер. Файлы ваши, сохранены в папке загрузок», — пояснил автор проекта.
Представлен открытый проект Memora, который сохраняет работу Codex и Claude Code между сессиями. Внутри решения находится локальная база SQLite или синхронизация через S3, R2 и Cloudflare D1. Есть также семантический поиск, TODO, документы и связи между воспоминаниями. ИИ-агент запрашивает тему и получает готовый комплект данных: важный контекст, незакрытые задачи, связанные факты и ссылки на источники. Причём всю память можно открыть как интерактивный граф и изучать через встроенный RAG-чат.
Nvidia представила открытый проект Nemotron VoiceChat. Это голосовой ИИ‑агент, способный открывать любые инструменты по команде пользователя в реальном времени:
Nemotron говорит с вами без пауз и умеет в эмоции;
разрешает вам перебивать себя с задержкой всего 480 мс;
умеет вызывать инструменты посреди диалога — поиск в сети, календарь и так далее;
поддерживает сложные сценарии использования;
обучен на 550 тысячах часов речь;
умеет слушать, говорить, прерывать ответы и вызывать инструменты в рамках одного диалога.
Для MacBook вышло открытое приложение Himekuri, которое позволяет переворачивать календарь на рабочем столе. Бумага на календаре мнётся, рвётся и улетает вниз экрана. Причём вернуть ее обратно уже нельзя. Закрепить проект можно на рабочем столе, поверх всех окон или использовать как обычное приложение.
Представлен первый релиз эмулятора терминала под необычным названием Shitty. Автор проекта считает его «серьёзным эмулятором терминала с глупым названием». Код решения написан с помощью ИИ-ассистента на C++23 (сbundled libstd, требующей -std=c++26) и распространяется под двойной лицензией MIT и GPL-3.0. Поддерживаются macOS и Linux.
Проект делает ставку на обеспечение низких задержек, быстрого запуска и предсказуемого потребления ресурсов: состояние терминала обрабатывается на CPU, а отрисовка выполняется через бэкенды на базе Vulkan в Linux и Metal в macOS, без использования стороннего графического тулкита. При тестировании производительности вывод 100 МБ ASCII через терминал Shitty показывает ~118 МБ/с, обгоняя alacritty (0.81 с против 0.96 секунд), kitty и ghostty. На «случайных байтах» с некорректным UTF-8 отрыв от alacritty ещё заметнее (~51 МБ/с против ~31 МБ/с). Корректность работы Shitty обеспечивается более чем 5000 тестами, собранными из десятка с лишним внешних наборов — kitty, esctest, vttests из xterm, vttest, tack, libvterm, libtsm, alacritty, ghostty, contour, konsole, mosh. Тесты выполняются с проверкой работы на реальном PTY.
Представлен открытый проект pdf-inspector на Rust от команды Firecrawl. Это PDF-парсер, который умеет быстро обрабатывать страницы документов. Проект преобразует содержимое в Markdown, но при этом сохраняет структуру документа и таблицы. Решение работает без ограничений, код опубликован под лицензией MIT.
Разработал плагин, который делает шрифты частью Obsidian-хранилища. Шрифты переезжают вместе с заметками и работают локально на компьютере и телефоне без отдельной установки.
Работает просто. Кидаете шрифты в папку fonts в корне хранилища:
PyPI готовится закреплять префиксы имен пакетов за организациями
29 июня 2026 года был принят PEP 752. Он описывает механизм, с помощью которого пакетные репозитории смогут закреплять префиксы имен за определенными организациями. Например, новые пакеты с префиксом google-cloud- смогут публиковать только организации, получившие соответствующее право.
Сейчас пространство имен PyPI остается плоским. Если название свободно, пользователь может зарегистрировать пакет, который выглядит частью известного проекта, например, google-cloud-something, opentelemetry-something или apache-airflow-providers-something. Знакомый префикс повышает доверие к названию, хотя реального отношения к организации у пакета может не быть.
PEP 752 предлагает закреплять за владельцем как сам префикс, так и новые названия, которые включают префикс и дефис после него. Попытка опубликовать такой пакет без разрешения будет завершаться ошибкой. При этом уже существующие проекты можно не блокировать. Репозиторий вправе разрешить их владельцам выпускать новые версии и после появления защищенного префикса.
Синтаксис имен не изменится, поэтому дорабатывать pip, uv и другие менеджеры пакетов ради обычной установки не потребуется. Вместе с тем в API репозитория появятся сведения о связи проекта с защищенным префиксом. В дальнейшем менеджеры пакетов и прокси смогут учитывать их в собственных политиках.
Принятый PEP пока описывает стандарт, а не уже работающую функцию PyPI. Правила подачи и рассмотрения заявок вынесены в PEP 755, который остается черновиком. Срок запуска механизма также пока не объявлен.
PEP 752 переносит часть проверки на самый ранний этап, когда в репозитории только появляется новое имя. Для семейств пакетов вроде google-cloud-* или apache-airflow-providers-* это позволяет остановить постороннего издателя до того, как правдоподобно названная подделка станет доступна пользователям.
У такой защиты есть довольно четкие ограничения. Право на префикс подтверждает, что издатель может использовать такое имя в конкретном репозитории, но ничего не говорит о безопасности содержимого. Если учетную запись доверенного издателя скомпрометируют или он сам выпустит вредоносную версию, резервирование не поможет. На другой репозиторий выданное право тоже не распространяется.
Когда механизм заработает, новые метаданные можно будет использовать не только на страницах PyPI. Менеджеры пакетов и корпоративные прокси смогут пропускать пакеты с защищенным префиксом, только если издатель имеет на него право. Это точечная защита от одного семейства атак на имена; остальные сценарии неймсквоттинга мы разбирали в статье «Атаки на цепочку поставки ПО: виды угроз и как с ними бороться».
Проект nosubscription.org содержит библиотеку с 1000+ альтернативами платным программам, включая открытые и бесплатные проекты. Есть удобный поиск и разбивка по категориям.