LINUX.ORG.RU

Избранные сообщения ox55ff

libzim 9.5.0

Новости — Open Source
Группа Open Source

Состоялся выпуск 9.5.0 библиотеки libzim, предназначенной для работы с файлами в формате ZIM (openzim.org). Разработка библиотеки ведётся и спонсируется проектом Kiwix.

ZIM — формат, предназначенный для офлайн-хранения информации, полученной из Интернета, в виде одного файла. В ZIM-файле в сжатом виде находятся логически связанные между собой HTML-страницы (а иногда и образы сайтов целиком) с работающими гиперссылками, изображениями, звуком и видео.

Проектом Kiwix разрабатывается набор консольных утилит zim-tools, десктопный и мобильные клиенты, и скрипты для создания файлов ZIM из дампов проектов Wikimedia или из HTML.

Также libzim используется в форке словаря GoldenDict – GoldenDict-NG.

Краткий список возможностей библиотеки:

  • создание файлов ZIM cо сжатием данных в формате Zstandard (ранее также поддерживались форматы ZIP, LZMA и Bzip2);
  • поиск по названиям статей;
  • опциональная поддержка Xapian для полнотекстового поиска. Множество файлов ZIM можно скачать здесь.

( читать дальше... )

>>> Подробности на GitHub

 , , , ,

dataman
()

Glaze 5.0.0 и 5.0.1

Новости — Разработка
Группа Разработка

5 и 20 марта состоялись выпуски 5.0.0 и 5.0.1 высокопроизводительной библиотеки Glaze, предназначенной для чтения и записи JSON.
Также поддерживаются форматы CSV и BEVE. Библиотека написана на языке C++ (header-only, стандарт C++23) и распространяется по лицензии MIT.

( читать дальше... )

>>> Подробности на GitHub

 , , , ,

dataman
()

Дедупликация в Btrfs

Статьи — Администрирование
Дедупликация в Btrfs

Btrfs — это замечательная файловая система, главными фишками которой являются легковесные снапшоты, реализуемые через Copy-On-Write (COW), и сжатие. Она показала высокую надежность и стабильность, и именно поэтому она включена в ядро Linux. Однако, даже наличие COW не позволяет избежать избыточности данных на уровне блоков.

( читать дальше... )

 ,

rtxtxtrx
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 3

Статьи — Desktop

Во второй части мы разобрали вопрос, как управлять параметрами эффектов в реальном времени, без перезапуска PipeWire.

Теперь рассмотрим, как можно добавить сторонний плагин, реализующий эффект, который не встроен в PipeWire, и как управлять его параметрами.

( читать дальше... )

 , ,

James_Holden
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 1

Статьи — Desktop

ВСТУПЛЕНИЕ

Звуковая система PipeWire принесла, без преувеличения, революцию в мир десктопно-мультимедийного Linux. Наконец то эта ОС получила продуманную, сделанную по уму понимающими в теме людьми, и сделанную качественно звуковую систему. Многие ее возможности присутствовали и раньше, в других более старых звуковых системах, но в PipeWire они собраны воедино и сформировали целую единую платформу, на которой можно реализовать огромное количество самых разных задач.

Но в пользовательской среде, эта революция практически не заметна, часто можно встретить мнение вида «ну играет ютуб и играет, мне хватает». Поэтому я решил сделать небольшой цикл статей, посвященный более продвинутому использованию PipeWire, раскрывающему его, без преувеличения, поразительные возможности. (Ну и чтобы изучить их самому в процессе, хехехе).

( читать дальше... )

 , ,

James_Holden
()

Qlibs++ — header-only библиотеки для C++20

Форум — Development

Kris Jusiak создал проект Qlibs++ с header-only библиотеками для С++20, без сторонних зависимостей. Часть из них – облегчённые версии библиотек из boost-ext.

На данный момент есть:

Приятного чтения! :)

 , ,

dataman
()

В C++ добавят Rust

Форум — Development

Привет, ЛОР! Я тебе покушать принёс.

Опубликован черновик расширения Safe C++, представляющего собой надмножество языка с возможностью отключать в коде Undefined Behaviour и прочие небезопасные штуки. Safe C++ добавляет в язык также borrow checker, pattern matching и другие функции, знакомые и любимые программистами на Rust. unsafe блоки входят в комплект.

Пример кода:

#feature on safety
#include <std2.h>

int main() safe {
  std2::vector<int> vec { 11, 15, 20 };

  for(int x : vec) {
    // Ill-formed. mutate of vec invalidates iterator in ranged-for.
    if(x % 2)
      mut vec.push_back(x);

    std2::println(x);
  }
}

Ошибка при сборке этого кода:

$ circle iterator.cxx -I ../libsafecxx/single-header/
safety: during safety checking of int main() safe
  borrow checking: iterator.cxx:10:11
        mut vec.push_back(x);
            ^
  mutable borrow of vec between its shared borrow and its use
  loan created at iterator.cxx:7:15
    for(int x : vec) {

Чтение за пределами обычных массивов также станет невозможным:

#feature on safety
#include <cstdint>

int main() safe {
  int array[4] { 1, 2, 3, 4 };
  size_t index = 10;

  // Panic on out-of-bounds array subscript.
  int x = array[index];
}

Результат:

$ circle subscript_array.cxx
$ ./subscript_array
subscript_array.cxx:9:17
int main() safe
subscript is out-of-range of type int[4]
Aborted (core dumped)

Таким образом, сишники и плюсисты наконец научатся писать нормальный код, который не падает с сегфолтами и не портит стэк. Так заживём!

Ссылка: https://safecpp.org/draft.html

 , , ,

hateyoufeel
()

Flux — C++20 библиотека алгоритмов с другой моделью итераций

Форум — Development

Это header-only (~405 KB) C++20 библиотека в духе C++20 Ranges, Python IterTools, итераторов Rust и других, и предоставляет набор функций, в целом эквивалентный C++20 Ranges, но использует немного другую модель итерации, основанную на курсорах, а не итераторах.
Курсоры Flux - это обобщение индексов массивов, в то время как итераторы STL - обобщение указателей массивов.
Возможности:

  • большой выбор алгоритмов и адаптеров последовательностей для создания мощных (?) и эффективных конвейеров данных;
  • более высокая безопасность по сравнению со стандартными итераторами;
  • более простое использование в распространённых случаях, особенно при определении собственных последовательностей и адаптеров;
  • более эффективное выполнение некоторых распространённых операций;
  • совместимость с существующими стандартными библиотечными типами и концептами.

Документация: https://tristanbrindle.com/flux/index.html
Код: https://github.com/tcbrindle/flux
Лицензия: Boost 1.0.
Пример:

constexpr auto result = flux::ints()                        // 0,1,2,3,...
                         .filter(flux::pred::even)          // 0,2,4,6,...
                         .map([](int i) { return i * 2; })  // 0,4,8,12,...
                         .take(3)                           // 0,4,8
                         .sum();                            // 12

static_assert(result == 12);

Он же в Compiler Explorer: https://flux.godbolt.org/z/KKcEbYnTx.


Проект от автора библиотеки NanoRange – C++20 Ranges для C++17.

 , ,

dataman
()

Записи докладов с C++Russia 2023

Форум — Development

В преддверии конференции C++Russia 2024 организаторы выложили на YouTube записи докладов с прошлогодней C++Russia 2023. Публикация прошлогодних докладов началась месяца три назад но по одному докладу в неделю, а пару дней назад вроде как выложили вообще все.

На данный момент на канале конференции доступны следующие видео (если к докладу прилагались слайды, то рядом приведена и ссылка на PDF-ку):

Евгений Григорчук — GPU Driven Rendering Pipeline, или Как пишется графика в современных видеоиграх, PDF (jugru.team)

Юрий Грибов — Как правильно писать компараторы, PDF (jugru.team)

Илья Казаков — Кастомизируем ASIO, PDF (jugru.team)

Дмитрий Мельник — Безопасный компилятор: надежная оптимизация и улучшение защищенности кода, PDF (jugru.team)

Эрнест Асанов — Модель асинхронности в C++: теория и практика

Антон Сысоев — Dynamic Libraries for Bare Metal, PDF (jugru.team)

Илья Шишков — Что-то у меня тормозит: заглядываем внутрь С++ контейнеров, PDF (jugru.team)

Тот самый стендап от Павла Филонова на C++ Russia 2023

Дмитрий Ермолов — Roren — С++ фреймворк для описания пайплайнов распределенных вычислений, PDF (jugru.team)

Ростислав Михеев — Эффективное использование GPU на примере разработки игр, PDF (jugru.team)

Олег Сенин — Sizecoding: взгляд изнутри

Максим Кита — Техники оптимизации производительности, PDF (jugru.team)

Александр Еналдиев — C++ Experiments: The Battle Continues: Cpp2 vs Carbon, PDF (jugru.team)

Иван Смирнов — YsonStruct: дешевая сериализация иерархических JSON-структур, PDF (jugru.team)

Владимир Ситников — B-tree индексы в базах данных на примере SQLite и PostgreSQL

Артем Хорошев — Ускоряем синтез: от TensorRT до CUDA C++, PDF (jugru.team)

Аяз Салихов — Имплементируем класс tuple в 100 строк кода, PDF (jugru.team)

Ashot Vardanian — Advanced Linux Kernel Bypass Techniques in 2023

Егор Суворов — Санитайзеры и стандарт не спасут, PDF (jugru.team)

Александр Ганюхин — Машина состояний: непридуманная история

Rainer Grimm — Concurrency Patterns, PDF (jugru.team)

Денис Легезо — Злые фреймворки и генерируемый ими позиционно-независимый код, PDF (jugru.team)

Елена Веселовская — Как перейти от ученичества к работе, PDF (jugru.team)

Андрей Аксенов — Про алгоритмы в поисковых движках

Техническое интервью: Архитектурная секция

Сергей Ларин, Владислав Столяров — Как сделать фронтенд компилятора в домашних условиях, PDF (jugru.team)

Антон Потапов, Антон Малахов — Учим Кукушку Летать, или ConcurrentHashMap with Seqlocks, PDF (jugru.team)

Александр Фокин — Designing Robust APIs: C++ Code that’s Safe, Extensible, Efficient & Easy to Use, PDF (jugru.team)

Дмитрий Стародубцев, Ольга Кузьмичева — Практическое применение dev-контейнеров, PDF (jugru.team)

Степан Дятковский — Почти полноценный RTTI с контролируемым overhead, PDF (jugru.team)

Иван Афанасьев — Loop unrolling в деталях, PDF (jugru.team)

Александр Ляпунов — Максимально быстрый и максимально удобный С++ msgpack-кодек

Марсель Галимуллин — Back to Basics: Lock-free, PDF (jugru.team)

Алексей Степанов, Евгений Зуев — Исходный код: скрытое знание и как его показать?, PDF (jugru.team)

Павел Новиков — Про flat_map, PDF (jugru.team)

Антон Ласточкин — Мониторим FSM во встраиваемом ПО, PDF (jugru.team)

Александр Бычук — Производство ПО глазами разработчика и менеджера, PDF (jugru.team)

Константин Владимиров — Семантические процессы в C++

Александр Кирсанов — nocc — распределенный компилятор для гигантских проектов на C++, PDF (jugru.team)

Евгений Ерохин — Back Deep to Basics: Наследование и виртуальность в C++ (Часть 1), PDF (jugru.team)

Евгений Опарин — Опыт использования Bazel

Семен Буденков — С Conan за кроссплатформенностью, PDF (jugru.team)

Сергей Талантов — С++ и безопасность: правда ли все так плохо?, PDF (jugru.team)

Александр Боргардт — Колоночное хранилище в памяти: void* и шаблоны

Петр Советов — Автоматизация программирования в СССР. Трансляторы (60–70-е годы), PDF (jugru.team)

Александр Корнилов — Идея по улучшению многопоточного кода, PDF (jugru.team)

Александр Кухаренко — Демосцена: в погоне за wow-фактором, PDF (jugru.team)

Виктор Шампаров — Компилятор LCC и оптимизация слияния кода, PDF (jugru.team)

Евгений Зощук — Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году, PDF (jugru.team)

Михаил Лукин — Практика программирования тензорных ядер

Вадим Винник — Элементы функционального программирования в языке C++, PDF (jugru.team)

Антон Соснин — С++ в мемах, PDF (jugru.team)

Антон Полухин — C++ трюки из userver

Нужны ли профсоюзы в IT?

Тренды от HR

Интервью с Максимом Бабенко

PS. Практически все доклады перечислены в том порядке, в котором их мне показывает YouTube, никакой сортировки по какому-либо принципу здесь нет.

PPS. Сам ничего из этого не смотрел, никаких рекомендаций на тему «интересно/не интересно» дать не могу.

 

eao197
()

Игры на вяленом без Xwayland

Галерея — Скриншоты

Частенько на своей печке играю, решил поглядеть, как дела с запуском игорей нативно без XWayland.
DE: GNOME 45.
Собственно, игры:

  • Minecraft (glfw);
  • Red Dead Redemption 2 (wine);
  • freegish (SDL2).

Всё запущено без иксов, как видно в выводе xlsclients. Зачем – вопрос сложный, так-то и с иксами работает не хуже. А то и лучше, т.к. в Wayland нет возможности установить кастом иконку окна без .desktop файла. Пока.

В Wine и SDL2 играх проблем не заметил – всё играется, курсор из окна не убегает. SDL2 ещё и libdecor поддерживает нормально искоропки, так что в гномовском композиторе заголовки у таких игр нормальные. glfw его тоже поддерживает, но работает кривовато из-за VulkanMod. А без него завести Minecraft нативно ещё-то приключение. Но, как проверял давно, связка работала неплохо. (потом только в 1.17 отломали).

Окно в glfw ресайзится кривовато, баг в реализации CSD и в нормальных композиторах (Kwin/wlroots) не проявляется.

Из других игорей ещё проверял Cyberpunk 2077, работает так же отлично. Конкретно wine-wayland – win, хотя есть проблемы с контекстным меню и сворачиванием. В играх оно, естественно, не нужно и не проявляется.

P.S. Вообще, изначально ждал wine-wayland из-за неприятного бага с зависанием игр на RAGE при любом вводе. Но в итоге в winex11 его тоже починили, хотя изначально думал, что вот она, победа wayland.

Завести несложно:
SDL2 - SDL_VIDEODRIVER=wayland (можно добавить в /etc/environment, но не советую).
wine (9.0+) - wine regedit -> HKCU\Software\Wine\Drivers\Graphics установить в значение wayland,x11.
Minecraft (как в других играх с GLFW не представляю) - поставить VulkanMod, игра запустится с wayland автоматически. Был способ завести без него, но работает ли он - не знаю. У меня игра просто игнорирует существование внешнего libglfw с включённым wayland.

Как я уже написал, смысла от такого не особо много. Но оно работает.

P.S. Пока писал, ничего в фоне не вылетело. Вдруг кому интересно.

Железо видно на самом скриншоте, разве что видеокарта - RX 580, но с прошивкой от 470. Потому что я ниосилил нормально андервольтнуть видеокарту, проще стало потерять 4% фпс путём «даунгрейда». Заодно потребление упало, и кулеры почти не слышно.

 , ,

whbex
()

Samsung 870 EVO

Форум — Linux-hardware

В нескольких местах в инете прочитал что у этой модели проблемы с линуксом. В том числе на лоре: Ubuntu server 20.04.2 + Samsung 870 EVO 1TB

Но то всё старые заметки, и тема 2021 года. Это ещё актуально или уже всё починили и будет работать из коробки?

Я вижу что автор там подкрутил в sysfs длину ncq очереди и вроде у него после этого заработало, но это ж костыль и плохо сказывается на производительности.

 , ,

firkax
()

Навеяно свежей дырой в Xorg

Форум — Development

Привет, ЛОР!

Ты, наверное, уже видел свежую дыру в Xorg, патч для которой выглядит буквально вот так:

-        else
+        else {
             free(to->button->xkb_acts);
+            to->button->xkb_acts = NULL;
+        }

В связи с этим у меня возник вопрос: а почему в стандартной библиотеке C нет макроса SAFE_FREE()?

#define SAFE_FREE(ptr) do{free(ptr);(ptr)=NULL;}while(0)

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту. Не только значение памяти, на которое он указывает, но и значение самого указателя, и работа с ним представляет собой жуткое undefined behaviour, а значит единственное что можно сделать – занулить его.

Так вот, почему даже таких банальных вещей нет? Я уже не говорю про строковый тип, а то даже Эдичка тут строки не осилил.

Моя гипотеза тут: C – это язык культа страданий во имя страданий.

 , ,

hateyoufeel
()

Если вам не хватало UB в C, то вам принесли ещё

Форум — Development

Привет, мои дорогие любители сишки!

Если вам начало казаться, что разработчики стандарата языка C стали предсказуемыми и больше не могут удивлять вас новыми идеями, то вы ошибались. В новом стандарте C23, комитет постановил:

— zero-sized reallocations with realloc are undefined behavior;

То есть вот это валидный код:

void *ptr = malloc(0);
free(ptr);

А вот это – UB:

void *ptr = malloc(4096);
ptr = realloc(ptr, 0); <-- хаха UB

И это несмотря на то, что в манах уже давно написано следующее:

If size is equal to zero, and ptr is not NULL, then the call is equivalent to free(ptr)

Изменение вносится задним числом, наделяя кучу корректного (согласно документации glibc) кода способностью полностью изменить логику работы программы. Ведь это то, чего нам так не хватало!

В тред призываются известные эксперты по C: @Stanson и @alex1101, возможно они смогут нам объяснить, зачем разработчики стандарта C постоянно пытаются отстрелить себе обе ноги самыми нелепыми способами.

 ,

cumvillain
()

переход с virtual-box на xen/qemu/virt-manager

Форум — Desktop

день добрый, господа колдуны! :о)

версия vbox, которая нужна - не собирает модули ядра в «новой версии» slackware, а те версии vbx-а, которые работают - сильно не устраивают.

подыскиваю замену, перерыл много инфы, вижу единственный вариант (subj)

поделитесь опытом, кто работает с данной связкой: плюсы, минусы, доп. пакеты, «заточки», на что обратить внимание, !!! особенно версии ядра/пакетов !!!

использоваться будет по максимуму, по всем направлениям

требования номер ноль:
- нормальная, безглючная работа share-папок (удобное конфигурирование)
- прямой проборос (мост) сетевой карты на реальную (удобство настроек, конфигурирования)

slackware-14.2/x64 
kernel  - 4.4.301 / nvidia-gts250
xen     - 4.13.1
qemu    - 4.1.1
libvirt - 4.5.0

 , , , ,

sunjob
()

Lisp Asp .Net MVC

Форум — Development

C# официально устарел и отправляется в помойку, т.к. теперь веб-фреймворк Asp .Net Core MVC доступен из Common Lisp.

Можно так писать:

;; Asp.Net MVC controller
(define-dotnet-callable-class (example-controller
                               (:base-type . ControllerBase))
    ()
  ;; Echo the 'Hello' message to client
  (:method index :string ((name :string))
    (format nil "Hello~:[~;, ~:*~a~]!" name)))

https://github.com/Lovesan/bike/blob/master/examples/aspnet-mvc.lisp

На линуксе работает на SBCL и на CCL, проверял.

Конечно, нужно немного дополнительных телодвижений, т.к. .NET прокси-классы генерируются в рантайме, и поэтому их надо руками указывать в качестве контроллеров, но это в принципе все при желании автоматизируется макросами и другими средствами метапрограммирования.

Также, пока bike не поддерживает аттрибуты, но это наверное добавлю позже.

Ну и с extension-методами пока не придумал что делать, пока их классы надо руками писать.

 , , , ,

lovesan
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

Статьи — Разработка
Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

Эта статья является продолжением предыдущей публикации, в которой описывается разработка сетевой библиотеки на C++20. В данном продолжении акцент сделан на более детальном описании разработки алгоритма Raft и его интеграции с сетевой библиотекой.

( читать дальше... )

 , , ,

Reset
()

Чем занимаются IBM и Red Hat, когда не портят дистрибутивы?

Форум — Talks

Тут такая интересная инфа просочилась в инфополе. Оказывается, у IBM и Red Hat в ходу корпоративные расистские тренинги. Ну, вернее, они подаются как «прогрессивные анти-расистские», конечно, но так и Северная Корея себя называет «демократической республикой». А на самом-то деле всё совсем наоборот. Так и тут.

Вот тут можно полюбопытствовать, что же утекло: https://conservativenerds.locals.com/post/4996525/ibm-red-hat-whistleblower-l...

Материалы есть презанятнейшие. Кроме утверждений, что «только белые люди могут быть расистами» (от создателей «только ситхи всё возводят в абсолют»), там есть такие перлы, как «древние греки ездили в Африку учиться наукам, потому что там уже всё было». Ну и не хочется чрезмерно цитировать, чтоб не дай бог не показалось чего-то не того, но всё вращается вокруг откровенного расизма в классическом смысле и странных заявлений. Я бы даже сказал, это уже клиническая зацикленность на расовой теме, граничащая с параноидальными идеями.

Такие дела, котаны. А мы-то думаем, почему они везде пихают вяленого, выпиливают функции из гнома, щемят CentOS и закрывают сорцы. Мне теперь вполне стало ясно, какие там настроения владеют умами... жалко, что до линукса и опен-сорса докатилась эта корпоративная «прогрессивная» чума.

 , ,

Smacker
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Статьи — Разработка
Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Введение

С годами работы в области распределённых систем, я понял, что мой опыт не будет полным без реализации алгоритма Raft. Это осознание побудило меня к действию: я решил создать свою реализацию, используя асинхронные возможности C++20.

( читать дальше... )

 , , , ,

Reset
()

Как мониторить буст отдельных ядth CPU с amd_pstate=active?

Форум — Linux-hardware

Здравствуйте, товарищи.

Решил попробовать amd_pstate=active. В теории штука замечательная — процессор сам скейлит свою частоту в зависимости от нагрузки и может моментально перейти с минимальных «оборотов» на максимальные, не дожидаясь команды от ядра.

Но возникла вот такая проблема. Раньше с acpi_cpufreq я мог отслеживать частоту отдельных ядер в /proc/cpuinfo. Но с amd_pstate=active /proc/cpuinfo сообщает, что якобы только одно (нулевое) ядро разгоняется, а все остальные сидят на 550 MHz. Если бы это было так, то производительность в многопроцессных задачах должна была бы существенно просесть, чего не наблюдается.

Есть ли какой-то другой, более достоверный способ отслеживать частоту ядер?

 , ,

annulen
()

Закон Гудхарта в действии: «неравенство полов» на конференции исправлялось «вручную». В прямом смысле слова.

Форум — Talks

Есть такой закон Гудхарта — говоря по-простому, целевой показатель эффективности становится самоцелью. Если качество чего-то начинают измерять по какому-то показателю, то этот показатель тут же становится бесполезным для применения по прямому назначению. Потому что данные начинают подтасовывать.


И вот, http://www.seoded.com/2023/11/28-devternity.html

Есть такая мера качества нынче — представленность женщин. Хитрые орги конференции во имя ПОВЕСТОЧКИ стали плодить фейковых спикерок (спикересс? спикерынь?), которые само собой будучи зявленными в программе не появлялись на мероприятии, но были снабжены некоторым фейковым присутствием в соцсетях. Но не долго музыка играла, не долго фраер танцевал — спалили. Теперь все осуждают и от конференции отказываются. Мол, не по-людски. Хотя как по мне так как раз по-айтишному.

🤡🌏

А вы сталкивались с таким?

 ,

Smacker
()