Доступна децентрализованная система отслеживания ошибок git-bug 0.11 Проект git-bug использует обычный репозиторий Git для хранения описаний проблем, базы пользователей и комментариев в версионированном виде. Децентрализованная архитектура Git позволяет работать в offline-режиме с периодической синхронизацией изменений. Из возможностей выделяется поддержка работы с сообщениями об ошибках через командную строку, консольный интерфейс или web-интерфейс, и очень быстрое выполнение операций поиска и навигации по сообщениям об ошибках. Предоставляются прослойки для синхронизации с сервисами отслеживания ошибок GitHub, GitLab, Jira и Launchpad.
Основные новшества:
В web-интерфейс встроена система навигации по коду, позволяющая управлять файлами, просматривать код с подсветкой синтаксиса, отображать документы в формате markdown, отслеживать историю коммитов и оценивать изменения. В дальнейшем планируется реализовать возможности для рецензирования кода и открытия публичного доступа для просмотра содержимого для участников без учётной записи.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66330
opennet rss
Дистрибутив Peppermint OS переходит с X.Org Server на XLibre В обозримом будущем Peppermint OS планирует оставаться на стеке X11 так как в среде рабочего стола Xfce намерены продолжать полноценную поддержку X11. По мнению разработчиков Peppermint OS, проект XLibre отлично подходит для пользователей, предпочитающих использовать X11 вместо Wayland, так как в нём продолжена работа по исправлению ошибок, сопровождению, чистке и модернизации оригинальной кодовой базы X.Org Server.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66329
Выпуск музыкального проигрывателя Fooyin 0.13 Поддерживается воспроизведение файлов в формате FLAC, MP3, MP4, Vorbis, Opus, WavPack, WAV, AIFF, Musepack, Monkey's Audio, VGM и различных трековых форматов. Среди возможностей Fooyin: извлечение сведений о порядке и длительности звуковых треков из CUE-файлов, воспроизведение без пауз (gapless), создание, импорт и экспорт списков воспроизведения в форматах M3U/M3U8, фильтрация содержимого музыкальной библиотеки по любым полям, древовидное представление коллекции, редактирование тегов, визуализации при помощи спектрограмм, навигация на уровне каталогов в файловой системе с возможностью прямого воспроизведения выбранных файлов. Для внешнего управления проигрывателем может использоваться D-Bus-интерфейс MPRIS (Media Player Remote Interfacing Specification).
Наиболее заметные улучшения:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66320
Диапазон, который можно прочитать лишь однажды, читается без буферизации, поля собираются по мере поступления символов. Сколько символов придётся удержать, шаблон задаёт при компиляции; там, где такого числа нет, чтение отклоняется при компиляции.
Замеры проведены на Ryzen 9 9950X, clang 22.1.8 с libc++, -O3 -march=native,LTO. Тридцать две записи за проход, медиана семи проходов.
Типу сообщается, к какой из его групп относится очередной символ, и вычисление выполняется на месте: ни одна итерация цикла не сохраняется, ни одной подстроки не создаётся.
Любой объект вызывающей стороны - аллокатор, пул, арену, что угодно ещё - можно передать в тот вызов, который создаёт значение. Тип контекста при этом не теряется: состояние сканера и каждый его хук могут быть шаблонами по нему, так что в сканере не упомянут ни один тип вызывающей стороны.
Хук получает сам объект вызывающей стороны, а не копию, поэтому состояние
может хранить его адрес: контекст живёт столько же, сколько вызов, а всё чтение происходит внутри этого вызова.
Собирается в clang и GCC. Модули C++ не обязательны: доступны
заголовочные файлы (include/), которые генерирует из тех же модулей утилита
demodulizer - каждый push в main пересобирает, линкует и коммитит их обратно. Единственная зависимость, Boost.PFR, не нужна при включённых binding packs из C++26.
import scan;
// Совпадает ли вся строка. Каждая точка входа - ещё и адаптор диапазона.
scan::match‹"[a-z]+@[a-z.]+">(address);
address | scan::match‹"[a-z]+@[a-z.]+">;
// С группами.
const auto found = scan::match‹"([0-9]+)-([a-z]+)">("42-abc");
found.get‹1>().to_view(); // "42"
// Начало строки, занятое шаблоном, и первое совпадение где угодно.
scan::starts_with‹"[a-z]+">("abc123").whole().to_view(); // "abc"
scan::search‹"[0-9]+">("id=4210x").to_view(); // "4210"
// Все совпадения и куски между ними - ленивые представления.
for (const auto& one : text | scan::search_all‹"[a-z]+">) { ... }
const auto fields = "a,bb,,ccc" | scan::split‹","> | std::ranges::to‹std::vector>();
// Значения, а не текст.
struct row { int id; std::string_view name; };
const row one = scan::scan‹"{},{[a-z]+}">(line);
// Список, сумма типов, вложенная форма.
struct all { std::vector‹int> values; std::variant‹int, std::string_view> tail; };
const all got = scan::scan‹"{{}{*,?}} {{[0-9]+}|{[a-z]+}}">("1,2,3 abc");
// Начало ввода и то, что от него осталось.
const auto [value, rest] = scan::scan_prefix‹"{},{}">(line).take‹point>();
// По записи за раз, из чего угодно.
for (const row& one : scan::each‹"{},{[a-z]+}\\n">(text).of‹row>()) { ... }
std::istringstream source("set speed 42\\nset gain 7\\n");
source › std::noskipws;
struct command { scan::held‹16> name; int value; };
for (const command& one :
scan::each‹"set {[a-z]+} {[0-9]+}\\n">(std::views::istream‹char>(source))
.of‹command>()) { ... }
Производительность.
"([a-z]+),([a-z]+),([a-z]+),([a-z]+),([a-z]+)" "alpha,bravo,charlie,delta,echo"
scan::scan‹f>.sentinel() 477 нс
re2c 554 нс
scan::scan‹f> 659 нс
CTRE 717 нс
RE2 15986 нс
те же пять полей, по двести букв каждое
scan::scan‹f>.sentinel() 57.8 нс
re2c 637 нс
CTRE 692 нс
RE2 11751 нс
"first.last@subdomain.example.com" распознавание, ничего не извлекается
scan::match‹p>.sentinel().scalar() 436 нс
scan::match‹p>.scalar() 545 нс
re2c 1186 нс
RE2 2616 нс
CTRE 14339 нс
Свёртка групп по ходу разбора
struct tally { unsigned long value = 0; };
struct reading { tally number; std::string_view tail; };
template ‹>
struct scan::scanner‹tally> {
static constexpr std::string_view pattern() { return R"(\\(((_+)(X|Y)*)*\\))"; }
struct state_type { unsigned long total = 0; unsigned place = 0, marks = 0; };
static constexpr state_type begin_groups() { return {}; }
static constexpr void opened_group(state_type& one, scan::group_at‹0>) {
one.place = 0; one.marks = 0;
}
static constexpr void closed_group(state_type& one, scan::group_at‹0>) {
unsigned long weight = 1;
for (unsigned step = 1; step ‹ one.place; ++step) weight *= 10;
one.total += weight * one.marks;
}
static constexpr void push_group(state_type& one, scan::group_at‹1>, char) {
++one.place;
}
static constexpr void push_group(state_type& one, scan::group_at‹2>, char letter) {
one.marks += letter == 'Y' ? 2u : 1u;
}
static constexpr tally finish_groups(state_type one) { return {one.total}; }
};
const reading got =
scan::scan‹"value={}{[a-z]*}">("value=(__X_XX)abcdefgh").of‹reading>();
// got.number.value == 12, got.tail == "abcdefgh"
heap
scan::scan‹f>.scalar()написанное
вручную
scan::scan‹f>
10
141 ns
41.4 ns
42.5 ns
170 ns
100
439 ns
341 ns
392 ns
1176 ns
1000
3314 ns
3170 ns
3797 ns
11887 ns
Контексты и аллокаторы
struct arena {
std::pmr::memory_resource* where = nullptr;
std::pmr::memory_resource* resource() const { return where; }
};
struct numbers { std::pmr::vector‹int> values; };
struct both { numbers left; numbers right; };
template ‹>
struct scan::scanner‹numbers> {
static constexpr std::string_view pattern() { return "([0-9]+)(?:,([0-9]+))*"; }
template ‹class Told>
struct state { std::pmr::vector‹int> values; int running = 0; };
static state‹scan::default_context_t> begin_groups() { return {}; }
template ‹class Told>
requires requires(const Told& one) { one.resource(); }
static state‹Told> begin_groups(const Told& told) {
return {std::pmr::vector‹int>(told.resource()), 0};
}
template ‹class Told, std::size_t Which>
static void push_group(state‹Told>& one, scan::group_at‹Which>, char digit) {
one.running = one.running * 10 + (digit - '0');
}
template ‹class Told, std::size_t Which>
static void closed_group(state‹Told>& one, scan::group_at‹Which>) {
one.values.push_back(one.running);
one.running = 0;
}
template ‹class Told>
static numbers finish_groups(state‹Told> one) { return {std::move(one.values)}; }
};
std::pmr::monotonic_buffer_resource bytes;
const arena mine{&bytes};
scan::scan‹"{} {}">(text).of‹both>(mine); // один на оба места
scan::scan‹"{} {}">(text).of‹both>(mine, scan::default_context); // по одному на место
scan::scan‹"{} {}">(text).of‹both>({mine, scan::default_context}); // то же в скобках
const both got = scan::scan‹"{} {}">(text).with(mine);
// Контексту не обязательно быть своим типом: аллокатор доходит до того,
// что строит чтение.
struct two { std::pmr::string name; std::pmr::string tail; };
const two kept = scan::scan‹"{[a-z]+} {[a-z]+}">(text).of‹(
std::pmr::polymorphic_allocator‹>(&bytes));
Прочие особенности
FetchContent_Declare(scan
GIT_REPOSITORY https://github.com/j4niwzis/scan.git
GIT_TAG v0.1.0)
FetchContent_MakeAvailable(scan)
target_link_libraries(mine PRIVATE scan::scan)
Источник: https://www.opennet.ru/opennews/art.shtml?num=66327
Выпуск системного менеджера systemd 262 Среди изменений в новом выпуске:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66326
Релиз операционной системы NetBSD 10.2 Из не связанных с исправлением ошибок изменений отмечается поддержка новых версий компиляторов, повышение стабильности работы WiFi-драйвера iwm, решение проблем при работе на системах Olimex A64 и MIPS R5000SC, реализация возможности загрузки ядра для amd64 при вызове qemu с опцией "-kernel". Добавлена поддержка
устройств ASIX AX88179A USB Ethernet, Asus USB-N10 Nano B1 Wi-Fi, Realtek RTL8126 5Gbps Ethernet,
RTL8125D (rev 0x6890000), RIoTboard i.MX6S IOMUX, VMware PV SCSI. Устранены уязвимости в ipfilter, telnet, TCP-стеке ядра, OpenSSL, Unbound и X.Org. Обновлены версии openssl 3.0.21, tmux 3.6a и
xkbcomp 1.5.0.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66324
Выпуск операционной системы Solaris 11.4 SRU95 Среди изменений в новой версии:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66323
Выпуск медиаплеера VLC 3.0.24 с устранением 130 уязвимостей Среди изменений, не связанных с уязвимостями и исправлением ошибок:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66322
Компания Valve представила экспериментальный видеокодек Pyrowave Кодек поддерживает только раздельное кодирование каждого кадра (intra-only), независимо от соседних кадров (все кадры являются ключевыми, межкадровое сжатие не используется). Подобный подход позволяет добиться очень высокой точности передачи картинки и исключить появление артефактов при движении и резкой смене заднего плана. При кодировании изображений применяется дискретное вейвлет-преобразование с фильтром CDF 9/7 , по аналогии с форматом JPEG2000, и тривиальным энтропийным кодированием, позволяющим эффективно распараллеливать вычисления.
Кодек очень требователен к пропускной способности канала связи - по сравнению с другими потоковыми кодеками Pyrowave требует передачи в 5-10 раз больше трафика. Рекомендовано использование кодека для трансляции и доступа к играм в локальной сети с подключением к гигабитным портам Ethernet. По умолчанию битрейт выбирается автоматически в зависимости от контента, но при ограниченной пропускной способности сетей предоставляется настройка для задания верхней границы битрейта (допустимые значения от 100 до 500 Mbit/s).
Pyrowave оптимизирован для очень быстрого кодирования и декодирования с задействованием GPU и полностью реализован в форме вычислительных шейдеров. При наличии достаточной пропускной способности (битрейт на уровне ~200+ mbit/s) кодек демонстрирует минимальные задержки на уровне 0.1 мс при качестве 1080p и 0.2 м при качестве 4K. Для устойчивости к потере пакетов в Pyrowave применяется изолированное кодирование блоками 64x64.
Поддерживается HDR и цветовые пространства YCbCr 4:2:0 и 4:4:4. HDR включается автоматически при его поддержке на стороне хоста и клиента. Формат кодирования цвета 4:4:4 требует более ресурсоёмких вычислений и увеличивает трафик, поэтому отключён по умолчанию и рекомендован для активации при трансляции рабочего стола или необходимости повышения читаемости текста на видео.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66317
Проект Convey развивает форк почтового клиента Geary Среди изменений:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66315
Выпуск дистрибутива MX Linux 25.3 В новом выпуске:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66314
Выпуск утилиты для загрузки web-контента GNU Wget2 2.3.0 В новой версии основное внимание уделено исправлению ошибок, из изменений в функциональности выделяется расширение поддержки платформы OS/2, обеспечение конвертации ссылок в CSS при указании опции "--convert-links", поддержка атрибута srcdoc в элементе iframe, разбор HTML-тегов data-src и data-srcset, опция "--spider -S" для показа заголовков без загрузки содержимого и опция "--progress=dot" для визуализации прогресса выполнения загрузки.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66313
Представлены первые ноутбуки Googlebook, оснащённые Android Интерфейс пользователя основан на реализованном в Android десктоп-режиме для больших экранов, позволяющем одновременно работать с окнами нескольких приложений по аналогии с традиционной средой рабочего стола. Из Android также задействованы ядро Linux, GKI-модули (Generic Kernel Image), компоненты взаимодействия с оборудованием (HAL), Android Runtime, Android API, системные фоновые процессы и библиотеки.
Из Chrome OS перенесён интерфейс запуска приложений (Launcher), файловый менеджер, а также отдельные системные сервисы.
Поддерживается бесшовное взаимодействие со смартфонами на базе платформы Android и предоставляется возможность устанавливать созданные для Android приложения из каталога Google Play. Из интерфейса Googlebook также можно запускать приложения, установленные на связанном смартфоне, не доставая смартфон и не переустанавливая приложения на ноутбуке. В файловом менеджере предоставляется доступ к содержимому Android-смартфонов и имеется возможность переносить, просматривать и искать файлы на разных Android-устройствах пользователя.
В платформу встроен AI-ассистент Gemini, который активируется при помощи умного курсора - достаточно подёргать курсор из стороны в сторону, и курсор перейдёт в режим вывода контекстных подсказок, появляющихся при его наведении на любой интересующий контент на экране. Например, после наведения курсора на дату в письме AI-ассистент предложит назначить встречу, а при выборе курсором нескольких изображений можно сгенерировать новое изображение на их основе. Подобным образом можно сравнивать контент и задавать AI-ассистенту вопросы о содержимом. Gри помощи AI также осуществляется создание пользовательских виджетов - достаточно нажать кнопку создания виджета и естественным языком описать, что хочется получить.
В базовую поставку входят такие приложения, как Google Chrome, Google Docs, Gmail, Google Drive, Google Gemini, Google Calendar, Google Photos и YouTube. Помимо Android-приложени и игр из Google Play, предоставляется возможность установки Adobe Photoshop, Adobe Lightroom, CapCut, Microsoft 365. Для запуска игр, выпускаемых для ПК, можно использовать сервис GeForce NOW. Возможен просмотр видео с платформ Netflix и HBO Max. Для запуска Linux-программ поставляется изолированное окружение, для строгой изоляции памяти в котором применяется pKVM (Protected KVM).
Доступные для предзаказа устройства:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66312
Valve опубликовала инструментарий Lepton для запуска Android-игр в Linux Lepton формирует изолированный контейнер с системным образом платформы Android, включающий всё необходимое для запуска Android-игр. Начинка сформирована c использованием патчей и компонентов от проектов Waydroid, Anbox, Halium и Hybris. Наработки для сборки образа с Android, применяемого для исполнения игр в Linux, распространяются под лицензией GPLv3, а инструментарий для организации процесса запуска игр с использованием подготовленного образа - под лицензией MIT.
В Lepton также включены дополнительные возможности, помогающие разработчикам игр перенести свои Android-игры в Steam. В формируемое Android-окружение пробрасываются используемые в хостовой ОС библиотеки
Steam/Steamworks, графические драйверы (mesa, zink) и Vulkan-прослойки
для оптимизации рендеринга и снижения детализации по краям экрана. Поддерживается интеграция с различными отладчиками (strace, gdb, lldb, renderdoc) и профилировщиками (perfetto).
Отличия Lepton от существующих проектов, реализующих окружения для запуска Android-приложений в Linux:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66309
Опасные уязвимости в ядре Linux, KVM, Exim, Unbound, Ghostscript и Suricata
Источник: https://www.opennet.ru/opennews/art.shtml?num=66310
Новые версии Wine 11.18 и Wine-staging 11.18 Наиболее важные изменения:
Отдельно сформирован выпуск проекта Wine Staging 11.18, предоставляющего расширенные сборки Wine, включающие не полностью готовые или рискованные патчи, пока непригодные для принятия в основную ветку Wine. По сравнению с Wine в Wine Staging предоставляется 273 дополнительных патчей. В новом выпуске Wine Staging осуществлена синхронизация с кодовой базой Wine 11.18 и обновлён код vkd3d. В основной состав Wine перенесён патч, преобразующий заголовочный файл d3d10_1shader.h в файл в формате idl (Interface Definition Language).
Добавлены патчи для преобразования представления цвета YV12 в RGB в коде отрисовки и выполнения проверок исполняемых файлов для архитектуры WoW64 (64-bit Windows-on-Windows), позволяющей выполнять 32-разрядные Windows-приложения в 64-разрядных Unix-системах.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66307
Опубликована библиотека управления памятью jemalloc 5.3 В июне 2025 года автор проекта прекратил сопровождение и перевёл репозиторий jemalloc в архивный режим, но в марте этого года разработку возобновила компания Meta, применяющая jemalloc в своей инфраструктуре. Изначально библиотека была разработана для FreeBSD и используется в данной ОС по умолчанию с 2005 года. Код библиотеки написан на Си и распространяется под лицензией BSD.
Среди изменений:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66304
Стабильный выпуск СУБД MariaDB 13.0 Проектом MariaDB развивается ответвление от MySQL, сохраняющее обратную совместимость и отличающееся интеграцией дополнительных движков хранения и расширенных возможностей. Развитие MariaDB курирует независимая организация MariaDB Foundation в соответствии с открытым и прозрачным процессом разработки, не зависящим от отдельных производителей. MariaDB поставляется вместо MySQL во многих дистрибутивах Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) и внедрён в таких крупных проектах, как Wikipedia, Google Cloud SQL и Nimbuzz.
Среди изменений в ветке MariaDB 13.0:
CREATE /*!100000 OR REPLACE */ TABLE /*!!100000 IF NOT EXISTS */ t1 ...
Источник: https://www.opennet.ru/opennews/art.shtml?num=66303
Выпуск ESP-KVM 0.51.0, открытой прошивки IP-KVM , с записью экрана на microSD Запись включается кнопкой в веб-интерфейсе и сохраняется в каталог VIDEO в виде файлов .ts с видео H.264. Устройство пишет тот же поток, который отдаёт зрителям, поэтому повторное кодирование не требуется: на плате Espressif ESP32-P4 Function EV при воспроизведении видео на целевой машине частота кадров во время записи осталась на уровне 21-22 в секунду без потерь. Файл .ts воспроизводится в VLC и mpv, а прерванный извлечением карты или отключением питания открывается до момента обрыва. Длинная запись делится на файлы по 10 минут и останавливается через час; оба значения настраиваются. Отдельной кнопкой сохраняется снимок экрана в формате JPEG в папку SCREENSHOTS, в том числе при работе кодека H.264: для снимка задействуется простаивающий аппаратный кодировщик JPEG.
Нажатия клавиш и щелчки мышью можно записывать в файл субтитров .srt рядом с видео - в виде строк "Typed: root", "Ctrl+Alt+Delete", "Left click (812, 440)". По умолчанию набранный текст заменяется точками, при необходимости он сохраняется полностью. Раскладка берётся из настроек целевой клавиатуры.
Добавлен режим видеорегистратора, работающий по тому же принципу, что автомобильный: устройство постоянно держит последние минуты экрана и сохраняет их вместе с последующими секундами, когда что-то происходит - экран становится однотонным (характерно для экрана аварийной остановки), появляется отслеживаемая фраза, гаснет индикатор питания ATX или оператор нажимает кнопку. Полученный ролик преобразуется в MP4 с главами по каждому событию, а при включённых уведомлениях отправляется в Telegram как воспроизводимое в чате видео.
Хранить прошлое можно двумя способами: в оперативной памяти PSRAM, где оно ничего не занимает на карте до наступления события, или на самой карте короткими фрагментами с удалением устаревших - второй способ работает и на платах с ревизией чипа до 3.0, где после запуска кодировщика H.264 свободной PSRAM остаётся около 3 МБ против 11 МБ на новых ревизиях.
Появился режим таймлапса: сохраняется один кадр раз в заданное число секунд, воспроизведение идёт со скоростью 25 кадров в секунду, поэтому час работы при интервале 10 секунд укладывается в 14 секунд видео. Записи и снимки собраны в отдельной панели интерфейса, откуда их можно скачать, удалить и воспроизвести без предварительной загрузки файла целиком: MP4 открывается штатным плеером браузера, а .ts разбирается на кадры в самой консоли и декодируется тем же декодером H.264, что и живая картинка, с перемоткой и показом субтитров. Для перемотки на стороне устройства реализована поддержка диапазонов HTTP.
Реализован поиск по тексту на экране. Во время записи устройство раз в три секунды читает экран как набор символов и сохраняет прочитанное в файл рядом с видео; в панели записей поиск по фразе показывает, когда она была на экране, и воспроизводит запись с этого момента. Читаются только экраны, нарисованные знакогенератором - BIOS, меню загрузки, программа установки, консоль.
Запись, ускоренную съёмку и снимок экрана можно запускать из сценариев устройства ("record 300", "timelapse 60", "screenshot") и из Home Assistant, где для этого есть переключатель и кнопки. Часы устройства теперь синхронизируются по NTP, а часовой пояс выбирается из списка городов в настройках - раньше он хранился в разделе, который интерфейс не показывал.
Другие изменения в выпусках, вышедших после 0.45.0:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66301
Релиз децентрализованной видеовещательной платформы PeerTube 8.3 PeerTube даёт возможность запустить собственный сервер для распространения видео и подключить его к общей федеративной сети. Посетители участвуют в доставке контента и имеют возможность подписки на каналы и получения уведомлений о новых видео, независимо от того, какой именно сервер они используют. Федеративная сеть PeerTube образуется как содружество связанных между собой небольших серверов хостинга видео, на каждом из которых имеется свой администратор и приняты свои правила.
Для взаимодействия серверов в федеративной сети применяется протокол ActivityPub. Идентификатор пользователя формируются как "@имя_пользователя@домен_сервера". При просмотре видео данные по возможности загружаются через обращение к браузерам других посетителей, просматривающих тот же контент. Если запрошенное видео никто не просматривает, отдача организуется сервером, на который загружено видео (используется протокол WebSeed).
Помимо распределения трафика между пользователями, просматривающими видео, PeerTube позволяет серверам кэшировать видео других авторов. Таким образом формируется распределённая сеть не только из клиентов, но и из серверов, а также обеспечивается отказоустойчивость. Кроме распространения готового видео имеется поддержка потокового вещания (live streaming) с доставкой контента в режиме P2P. Для управления стримингом могут использоваться типовые программы, такие как OBS.
Для начала вещания через PeerTube пользователю необходимо загрузить на один из серверов видеоролик, описание и набор тегов. После этого ролик станет доступен во всей федеративной сети, а не только на сервере первичной загрузки. Для работы с PeerTube и участия в распространении контента достаточно обычного браузера. Распространять видео с использованием P2P-коммуникаций можно добавив на свой сайт специальный виджет со встроенным web-плеером, по аналогии с тем как на страницы встраиваются ролики с YouTube. Отслеживать появление видео можно через подписку на выбранные видеоканалы в федеративных социальных сетях (например, в Mastodon и Pleroma) или через RSS.
В настоящее время в федеративную сеть входит 1779 серверов, поддерживаемых добровольцами и организациями. Если пользователя не устраивают правила размещения видео на определённом сервере PeerTube, он может подключиться к другому серверу или запустить свой собственный сервер. Для быстрого развёртывания сервера предоставляется преднастроенный образ в формате Docker (chocobozzz/peertube).
Изначально платформа PeerTube основывалась на применении BitTorrent-клиента WebTorrent, запускаемого в браузере и использующего технологию WebRTC для организации прямого P2P-канала связи между браузерами. Позднее вместо WebTorrent был задействован протокол HLS (HTTP Live Streaming) в связке с WebRTC, позволяющий адаптивно управлять потоком в зависимости от полосы пропускания. Web-интерфейс построен с использованием фреймворка Angular.
Основные новшества PeerTube 8.3:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66300
Релиз языка программирования Mojo 1.1 Язык Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift. Синтаксис Mojo основан на языке Python, а система типов близка к C/C++. Проект преподносится как язык общего назначения, расширяющий возможности языка Python средствами системного программирования, подходящий для широкого круга задач и сочетающий простоту применения для исследовательских разработок и быстрого создания прототипов с пригодностью для формирования высокопроизводительных конечных продуктов.
Простота достигается благодаря использованию привычного синтаксиса языка Python, а разработке конечных продуктов способствуют возможность компиляции в машинный код, механизмы безопасной работы с памятью и задействование средств для аппаратного ускорения вычислений. Для достижения высокой производительности поддерживается распараллеливание вычислений с задействованием всех имеющихся в системе аппаратных ресурсов гетерогенных систем, таких как GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции (SIMD). При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++.
Язык поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). При этом в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.
Mojo может использоваться как в режиме интерпретации с использованием JIT, так и для компиляции в исполняемые файлы (AOT, ahead-of-time). В компилятор встроены современные технологии автоматической оптимизации, кэширования и распределённой компиляции. Исходный код на языке Mojo преобразуются в низкоуровневый промежуточный код MLIR (Multi-Level Intermediate Representation), развиваемый проектом LLVM. Компилятор позволяет применять для генерации машинного кода различные бэкенды, поддерживающие MLIR.
Среди изменений в Mojo 1.1:
Одновременно сформирован выпуск движка MAX Framework 26.6, предлагающего платформу для разработок в области машинного обучения. MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). В MAX Framework 26.6 добавлена поддержка генерации звука с использованием модели MiniMax-Music3, позволяющая создавать стерео музыку с частотой дискретизации 44.1 кГц на основе текстового описания. Существенно повышена производительность при работе на системах с GPU NVIDIA и AMD. Добавлена поддержка AI-моделей Inkling и GLM-5.3, а также расширена поддержка семейств моделей Kimi, Qwen и Gemma.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66299
Выпуск браузера Pale Moon 35.0 Проект придерживается классической организации интерфейса, без перехода к интегрированным в Firefox 29 и 57 интерфейсам Australis и Photon, и с предоставлением широких возможностей кастомизации. Из удалённых компонентов можно отметить DRM, Social API, WebRTC, PDF-просмотрщик, Сrash Reporter, код для сбора статистики, средства для родительского контроля и людей с ограниченными возможностями. По сравнению с Firefox, в браузер возвращена поддержка расширений, использующих XUL, и сохранена возможность применения как полноценных, так и легковесных тем оформления.
Основные изменения:
Источник: https://www.opennet.ru/opennews/art.shtml?num=66297
Выпуск miracle-wm 0.11, композитного менеджера на базе Wayland и Mir Целью miracle-wm является создание композитного сервера, применяющего мозаичное управление окнами, но более функционального и стильного, чем такие продукты, как Swayfx. При этом проект позволяет использовать и классические приёмы работы с плавающими окнами, например, можно размещать отдельные окна поверх мозаичной сетки или закреплять окна к определённому месту на рабочем столе. Поддерживается виртуальные рабочие столы с возможностью выставления для каждого рабочего стола своего режима работы с окнами по умолчанию (мозаичная компоновка или плавающие окна).
Предполагается, что miracle-wm может оказаться полезным пользователям, которые отдают предпочтение мозаичной компоновке, но желают получить визуальные эффекты и более яркое графическое оформление с плавными переходами и цветами. Конфигурация определяется в формате YAML. Для установки miracle-wm можно использовать команду "sudo snap install miracle-wm --classic".
Основные изменения:
<iframe src="https://www.youtube.com/embed/pT0FCLqUjUQ"></center>
<li class="l"> Добавлена возможность привлечь внимание пользователя к неактивному окну, не переключая при этом фокус ввода с активного окна. Например, при поступлении нового сообщения в почтовом клиенте, он может запросить переключение фокуса, после чего miracle выставит окну и виртуальному рабочему столу флаг <a href="https://wiki.miracle-wm.org/develop/ipc/get_tree/#reply">urgent</a>, который может подхватить панель задач для вывода соответствующего индикатора.
<li class="l"> В плагинах реализована возможность <a href="https://docs.miracle-wm.org/miracle_plugin/plugin/fn.publish_event">отправки IPC-событий</a> и <a href="https://docs.miracle-wm.org/miracle_plugin/plugin/trait.Plugin#method.handle_command">обработки IPC-команд</a>.
<li class="l"> Добавлена настройка <a href="https://wiki.miracle-wm.org/develop/configuration/background_color/">background_color</a> для задания цвета, применяемого для очистки содержимого.
<li class="l"> В IPC добавлена команда <a href="https://wiki.miracle-wm.org/develop/ipc/get_keybinds/">GET_KEYBINDS</a> для определения всех действий, привязанных к комбинациям клавиш.
<li class="l">Задействованы Wayland-протоколы:
<ul>
<li class="l"> <a href="https://wayland.app/protocols/ext-image-capture-source-v1">ext_image_copy_capture_manager_v1 и ext_output_image_capture_source_manager_v1</a> для организация захвата контента, выводимого на экран.
<li class="l"> <a href="https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/ext-foreign-toplevel-list">ext_foreign_toplevel_list_v1</a> для получение информации о поверхностях, размещённых на самом верхнем уровне (toplevel), которые позволяют организовать закрепление окон поверх другого содержимого, например, для подключения собственных панелей и переключателей окон.
<li class="l"> <a href="https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/ext-data-control?ref_type=heads">ext_data_control_manager_v1</a> для управления обработкой данных, например, для реализации менеджеров буфера обмена.
<li class="l"> <a href="https://github.com/canonical/mir/pull/4328">ext_input_trigger_action_manager_v1 и ext_input_trigger_registration_manager_v1</a> - для обработки глобальных горячих клавиш, кликов мышью и событий сенсорного экрана.
</li>
<li class="l"> Дисплейный сервер <a href="https://github.com/canonical/mir">Mir</a> обновлён до версии <a href="https://github.com/canonical/mir/releases/tag/v2.29.0">2.29</a>.
</li>
<center><a href="https://github.com/miracle-wm-org/miracle-wm/raw/develop/resources/screenshot1.png"><img src="https://www.opennet.ru/opennews/pics_base/CFD0C5CECEC5D4_1775709069.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:95%;" title="" border="0" /></a>
<br /><br>Источник: <b><a href="https://www.opennet.ru/opennews/art.shtml?num=66296">https://www.opennet.ru/opennews/art.shtml?num=66296</a></b></br></center></li></li></li></ul></li></li></li></li></li></li></ul></p></p>
NVIDIA представила CUDA Rust для разработки GPU-ядер на языке Rust Инструментарий CUDA Rust поддерживает две модели разработки параллельно исполняемых ядер - SIMT (Single Instruction, Multiple Threads) и Tale.
Модель SIMT позволяет на низком уровне определять логику одного потока, запускать тысячи таких потоков и управлять ими. Модель Tile предлагает более высокий уровень абстракции, в котором вместо явного управления отдельными потоками определяются алгоритмы действия с блоками данных (tile), а все манипуляции с потоками, синхронизацию доступа, управление памятью и распределение данных по тензорным ядрам берёт на себя компилятор Tile IR.
Для разработки на языке Rust с использованием модели SIMT развивается компилятор cuda-oxide, позволяющий компилировать код на языке Rust, использующий штатную систему типов и модель владения Rust, напрямую в инструкции для выполнения в виртуальной машине CUDA PTX (Parallel Thread Execution). Ядра для GPU создаются на обычном Rust, но выполняются в окружении no_std и могут использовать только функции из библиотеки libcore и специализированные Rust-абстракции, без доступа к стандартной библиотеке Rust (libstd).
В CUDA-ядрах на Rust допускается применение защиты через систему типов (safe), использование блоков unsafe и обращение к низкоуровневым аппаратным инструкциям. Для обеспечения безопасности предлагается тип DisjointSlice, гарантирующий, что каждый поток получает эксклюзивный доступ только к своим данным. Код cuda-oxide распространяется под лицензией Apache 2.0.
Для применения модели Tail предлагается библиотека cutile-rs, позволяющая использовать идеоматический язык Rust для создания кода, компилируемого напрямую в CUDA-ядра. Cutile-rs применяет предлагаемые в Rust строгие правила владения и заимствования к коду, выполняемому на GPU. Ядро оформляется как однопоточная программа, работающая с блоком данных, а компилятор сам разбивает вычисления на потоки и обеспечивает их синхронизацию. Потокам предоставляется совместный доступ к неизменяемым тензорам, а для безопасного доступа к изменяемым тензорам применяется их разделение на непересекающиеся блоки. Код cutile-rs распространяется под лицензией Apache 2.0.
Источник: https://www.opennet.ru/opennews/art.shtml?num=66295
Выпуск Java SE 27 и OpenJDK 27 Java SE 27 отнесён к категории выпусков с обычным сроком поддержки, обновления для которого будут выпускаться до следующего релиза. В качестве ветки с длительным сроком поддержки (LTS) следует использовать Java SE 25, Java SE 21 или Java SE 17, обновления для которых будут выпускаться до 2033, 2031 и 2029 годов соответственно (общедоступные - до сентября 2030, 2028 и 2026 годов). Расширенная поддержка LTS-ветки Java SE 8 продлится до 2030 года, а Java SE 11 - до 2032 года.
Среди изменений в Java SE 27 (1, 2, 3, 4):
Дополнительно можно отметить публикацию обновления платформы для создания приложений с графическим интерфейсом JavaFX 27. В ближайшие часы также ожидается выпуск универсальной виртуальной машины GraalVM 27, поддерживающей запуск приложений на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust).
class Application {
// Было:
// static final UserService USERS = new UserService();
// Теперь можно:
static final StableValue‹UserService› USERS = StableValue.of();
public static UserService users() {
return USERS.orElseSet(UserService::new);
}
}
switch (x.getStatus()) {
case 0 -› "okay";
case 1 -› "warning";
case 2 -› "error";
case int i -› "unknown status: " + i;
}
if (i instanceof byte b) {
... b ...
}
Источник: https://www.opennet.ru/opennews/art.shtml?num=66293