LINUX.ORG.RU

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

Пользовательские сервисы OpenRC: инструкция по применению

Статьи — Desktop

Как я уже писал раньше, в систему инициализации OpenRC недавно добавлена возможность запускать сервисы в пользовательской сессии. В этой статье я покажу, как этим пользоваться, на примере pipewire в Alpine Linux.

Что было раньше

Раньше в пакете с pipewire поставлялся (и до сих пор поставляется) скрипт /usr/libexec/pipewire-launcher, который предлагалось прописывать в конфиге sway. Особенность этого сетапа в том, что после остановки Sway все запущенные им в background процессы оставались висеть в памяти, и перед последующим запуском их предлагалось прибивать с помощью pkill. Не говоря уже про полное отсутствие логов, их не было.

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

 , , ,

Lrrr
()

Что почитать C++ программистам

Статьи — Разработка

Предлагаю вашему вниманию две бесплатные электронные книги. Первая написана мной: «Вредные советы для C++ программистов» (PDF-формат). Это переработанный под печать вариант «60 антипаттернов для С++ программиста». Если вы уже читали 60 антипаттернов, то, пожалуй, читать новый вариант смысла нет. А если нет, то рекомендую — это и возможность местами улыбнуться, и польза.

Теперь про вторую книгу: «Путеводитель C++ программиста по неопределённому поведению». Здесь я был редактором, автор: Дмитрий Свиридкин. Книга опубликована частями, ссылки на которые приведены ниже. Сейчас Дмитрий перерабатывает материал под книжное издание, но это отдельная история.

  1. Часть 1: предисловие, что такое неопределённое поведение, и как оно проявляется, сужающие преобразования и неявное приведение типов.
  2. Часть 2: переполнение целых знаковых чисел, числа с плавающей точкой, integer promotion, char и знаковое расширение.
  3. Часть 3: висячие ссылки, string_view, синтаксический сахар с ложкой дёгтя (range-based for), self-reference, std::vector и инвалидация ссылок.
  4. Часть 4: списки захвата лямбда-функций, кортежи, внезапная мутабельность, неявные ссылки, use-after-move, lifetime extension.
  5. Часть 5: Most Vexing Parse, неконстантные константы, семантика перемещения, std::enable_if_t против std::void_t, забытый return.
  6. Часть 6: эллипсис и функции, operator [], iostreams (счастливой отладки!), оператор запятая, function-try-block, типы «нулевого» размера.
  7. Часть 7: NULL-терминированные строки, std::shared_ptr, (не)явное приведение типов, как передать стандартную функцию и ничего не сломать.
  8. Часть 8: бесконечные циклы и проблема остановки, рекурсия, ложный noexcept, переполнение буфера.
  9. Часть 9: (N)RVO vs RAII, разыменование нулевых указателей, static initialization order fiasco, static inline, нарушение ODR, зарезервированные имена.
  10. Часть 10: тривиальные типы и ABI, неинициализированные переменные, С++20 unbounded ranges, невиртуальные виртуальные функции, VLA.
  11. Часть 11: невалидные указатели, placement new для массивов, data race, повторный захват mutex, сигнало(не)безопасность, как сделать всё правильно и уйти в deadlock.
  12. Часть 12: std::vector::reserve и std::vector::resize, невыровненные ссылки, время жизни и смерти, статический анализ и UB, заключение.

И последнее: если пропустили, в конце 2024 года, как всегда, вышла подборка про самые интересные из найденных нами багов: Топ-10 ошибок в C и C++ проектах за 2024 год.

 ,

Andrey_Karpov_2020
()

Делаем из Vim IDE

Статьи — Разработка
Делаем из Vim IDE

В стародавние времена когда деревья были большими, трава зеленее, а мороженное стоило по 10 копеек, на Земле жили динозавры, и эти динозавры программировали в Vim.

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

 , ,

rtxtxtrx
()

xdg-open vs run-mailcap, или как вернуться к истокам

Форум — Desktop

Есть у меня пара файлов — .mailcap и .mime.types, и существует эта пара файлов уже почти 20 лет, и тиражируется на все машины.

И уже лет 20 я запускаю run-mailcap %s. И у меня даже есть возможность конфигурировать некую простую логику выбора нужной программы в случае, если есть несколько альтернатив (самый примитивный случай — это разные обработчики в X Window и в консоли), напр.:

text/plain; nedit %s; test=test -n "${VAR}" -a ${VAR} -eq 0
text/plain; vim %s; test=test -n "${VAR}" -a ${VAR} -eq 1
text/plain; gvim %s; test=test -n "${VAR}" -a ${VAR} -eq 2
text/plain; emacs %s; test=test -n "${VAR}" -a ${VAR} -eq 3
text/plain; emacs -nw %s; test=test -n "${VAR}" -a ${VAR} -eq 4
text/plain; mcedit %s;

(Сама форма записи ; test= описана в RFC 1524.)

И работает эта штука достаточно быстро.

Но вот уже лет пять как продвигается альернатива — xdg-open. Которая прекрасна всем:

  1. Пытается определить, какое у меня DE, чтобы запустить «браузер по умолчанию». GNOME? Нет, не GNOME. KDE? Нет, не KDE. XFCE? Опять мимо. Нет, я, конечно, даже глазом не успеваю моргнуть — процесоры нынче быстрые.
  2. По MIME-типу файла пытается найти нужное приложение, распарсив 100500 *.desktop-файлов в /usr/share/applications.
  3. После этого запускает наименее подходящее приложение (напр., для открытия каталогов я использовал thunar (inode/directory; thunar %s; test=test -n "${DISPLAY}")), но вот xdg-open, с*ка, решил, что разумнее запустить git-cola, а затем — audacious (видимо, потому, что в обычных каталогах git-cola возвращает ненулевой код).
  4. Наконец, для программ, у которых отсутствуют *.desktop-файлы, таковые приходится создавать вручную, что однозначно дольше добавления одной строки в .mailcap. Короче, снова приходится настраивать то, что уже годы работало.

Проблема в том, что всё больше инструментов пытаются использовать xdg-open вместо run-mailcap, а сам xdg-open попытается запустить run-mailcap только в случае, если сам не придумает какой-нибудь глупости. Снести xdg-open не получится — от него зависит chromium и ещё куча софта.

Посему вопрос: как сделать, чтобы run-mailcap запускался всегда, и запретить всякие странные эвристики и танцы с бубном?

Для Midnight Commander всё (пока) решается просто:

export MC_XDG_OPEN='run-mailcap'

Для всего остального я, увы, пока вижу лишь

dpkg-divert --divert /usr/bin/xdg-open.orig --local --rename /usr/bin/xdg-open
ln -s run-mailcap /usr/bin/xdg-open

Есть менее радикальные решения?

UPD: Временно решил проблему, создав run-mailcap.desktop след. содержания:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
NoDisplay=true
Exec=run-mailcap %u
Name=run-mailcap
Comment=run-mailcap

и прописав его в качестве обработчика для всех типов в ~/.config/mimeapps.list, но как-то это всё равно через задницу.

 , , ,

Bass
()