LINUX.ORG.RU

Сообщения yorshka

 

В Wayland завезли глобальные хоткеи

 ,

Привет, чят!

Следом за протоколом, позволяющим программами самим ставить координаты своих окон, в Wayland теперь можно ещё и глобальные хоткеи назначать без порталов и прочих странных штук.

Ссылка: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/commit/819004adb3ab7e46f3fa3caef05b96e20434b244

Так глядишь, из Wayland получится сделать полноценную оконную систему лет через 10.

yorshka
()

Jujutsu — истории успеха?

 , jujutsu, ,

Привет, чят!

Уже год с лишним изо всех щелей слышу про сабж, систему контроля версий на основе git, которая якобы позволяет дофига и больше. Но при этом все рассказы, которые я встречаю, выглядят крайне сомнительно и больше похожи на поиски проблемы под решение, нежели что-то дельное.

Есть ли тут кто-то, кому эта штука реально помогает в работе?

P.S. тут нет тега jujutsu. Можно его добавить?

yorshka
()

Бегство с GTK продолжается

 , ,

Привет, чят!

Тут пару часов назад вышла новая версия Audacity 4.0 (новость писать не буду, не вижу смысла), основная фича в которой – переписанный с wxWidgets (почти GTK лол) на Qt6 интерфейс. У меня всё больше и больше складывается ощущение, что из-за повёрнутости авторов GTK на гнуме и почти полном покладании болта на работу в других средах, на GTK скоро софта вообще не останется.

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

Такие дела, чят. Продолжаю наблюдения.

yorshka
()

Как запретить чтение системных ID программам?

 , ,

Привет, чат!

Два вопроса, от частного к общему.

Частный случай: есть проприетарная прога (сразу уточню, впопенсорцных анало говнет и не предвидится), которая для проверки активации использует мак-адрес сетевой карты, и если тот меняется, активация слетает. На ноутбуке с рандомизированным для приватности маком это, понятное дело, неудобно. Есть ли готовые решения, которые позволят эту херню убрать? Можно через eBPF перехватывать сисколлы или вставлять .so в процессы, но если кто-то уже сделал, будет круто узнать.

Добавлю, прога легально куплена мной, поэтому это вопрос исключительно удобства, к пиратству отношения не имеющий.

Общий вопрос: линукс позволяет юзерспейсным процессам вообще слишком много доступа к разным железным ID, начиная от тех же мак-адресов и заканчивая вагоном разных штук в /sys. Хуже того, с приходом dbus и systemd каждая система имеет уникальный /etc/machine-id за каким-то хером, который доступен вообще каждом программе. Есть ли какой-нибудь более-менее список этих трекеров и рецепты как их заткнуть, не сломав работу зависящего от них кода?

Спасибо, чат.

yorshka
()

Хочу пейджер рабочих столов с превью

 

Привет, чат!

А есть что для KDE6? Хочу как старом Enlightenment сделать, т.е. повесить экран пейджер рабочих столов с предпросмотром. Примерно как вот на этом скриншоте из местной галереи.

Встроенный в KDE так не умеет. На store.kde.org тоже ничего путного не нашёл. Максимум, можно очертания окон сделать, но это вообще не то.

yorshka
()

Как получить список и координаты окон на экране?

 , ,

Привет, чат!

Ни для кого не секрет, что нынешние линуксовые десктопы являются просто чудовищно ужасающе депрессивно самоубийственно скучными, и я хочу попробовать это поправить. Когда-то давно у меня на компе была прога, которая показывала милого котика на экране, и этот котик прыгал по открытым окнам, тёрся об них жоп^Wспинкой и делал прочие милые вещи. Хочу сделать аналогичную штуку под современный десктопный стек.

Интересует, в первую очередь, связка KDE+Wayland. Если есть лёгкие способы сделать это в других композиторах типа Hyprland, будет круто, но не обязательно. GNOME принципиально не рассматриваю, потому как гномерам понятие красивого чуждо. Быстрый взгляд на https://wayland.app/protocols/ ничего подходящего не даёт. Т.е. получить список окон через ext-foreign-toplevel-list-v1 можно, но вот как из этого достать координаты? Как альтернатива этому, можно сделать плагин для KWin, рассылающий ивенты с окнами и координатами через dbus (ну либо вообще свой протокол Wayland запилить), но такого хочется пока что избежать.

yorshka
()

В Си предложили добавить switch-case для строк

 , ,

Привет, чат!

Спустя много лет, в язык Си наконец предложено добавить возможность использовать выражение switch-case для строк. Например, можно будет писать вот такое:

const char *s = get_some_string();

switch(s) {
case "this":
  handle_this();
  break;
case "that":
  handle_that();
  break;
default:
  handle_other();
  break;
}

Таким образом, в Си будет чуть меньше способов отстрелить себе ноги.

Ссылка на предложение: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3895.pdf

yorshka
()

Выключить Wayland в wine

 , ,

Привет, чат!

Есть многооконная прога, работающая в Wine. После перехода wine на Wayland как бэкенд по умолчанию прога стала не совсем корректно работать. Соответственно, хочется насильно запустить её под X11 (XWayland). Как это сделать?

Что я пробовал:

  • Сунуть ключу реестра [HKEY_CURRENT_USER]\Software\Wine\Drivers\Graphics значение x11. Не помогло.
  • Убрать переменную WAYLAND_DISPLAY в шелле перед запуском. Тоже не помогло.

Какие ещё варианты есть? Пересобирать wine без поддержки Wayland пока не очень хочется.

Софт:

  • wine staging 11.9
  • KDE 6.7.1 (если это имеет значение)

UPD:

Как выяснили тут (linux.org.ru), Wine таки запускался через X11 после моих модификаций, просто утилита xlsclients глючит и не показывает окна под винишком.

yorshka
()

C++ — туда и обратно, или зачем нужен Boost

 , , ,

Мой предыдущий тред в Development собрал самое большое число ответов аж с сентября, то есть за последние 9 месяцев, и это лишний раз подтверждает упадок этого форума. Полагаю, кто-то должен это изменить, и поэтому мы с тобой, ЛОР, поговорим сегодня про C++.

Начиная с C++26 вместо std::function вводится пачка новых классов: std::copyable_function, std::move_only_function (доступна с C++23) и std::function_ref. Что же не так с оригинальным std::function, ты можешь спросить? А вот что:

#include <functional>
#include <print>

struct call_me {
    int x = 0;
    void operator()() {
        std::print("x was {}\n", x++);
    }
};

int main() {
    const std::function<void()> f = call_me{};
    f();
}

Несмотря на то, что переменная f объявлена константной (люблю оксюмороны!), у неё есть внутреннее состояние и оно меняется при вызовах. Компилятор это без проблем хавает.

Так вот, ковыряясь в том, зачем и кто вообще смог так насрать себе в штаны сам, я наткнулся на статью ребят, которые подводят список подобных косяков комитета C++, когда фичи живут по 10 лет и объявляются устаревшими.

Небольшой список фич, которые были придуманы, оказались не нужны/бесполезны/вредны и выкинуты:

  • Известный vector<bool>, живущий издревле в STL и про который все говорят, что его надо избегать. Частично заменяется std::bitset.
  • std::auto_ptr. Бесполезен, ломает контейнеры, выкинут на помойку в C++17.
  • Указание исключений у функции в формате throw(X, Y). Так же выкинуто в C++17.
  • std::iterator объявили устаревшим в C++17, собираются удалить в C++26.
  • std::aligned_storage и std::aligned_union добавлены в C++11, объявлены устаревшими в C++23, скоро удалят.
  • Ключевое слово register удалено в C++17, хотя всё ещё доступно в Си.
  • std::get_temporary_buffer и std::raw_storage_iterator удалены в C++20.
  • Потрясающее по эпичности фиаско с интерфейсом для сборщиков мусора. std::declare_reachable сотоварищи были добавлены в C++11. Выяснилось, что сборщики мусора для C++ писать либо никто не умеет, либо никто не хочет, поэтому в C++23 это всё удалили и сделали вид, что ничего не было.
  • Абсолютное безумие вокруг концептов, модулей и поддержки сети. Предложения одобряли, вновь отклоняли, переделывали, и по итогу теми же модулями до сих пор никто не пользуется.
  • Сопрограммы (coroutines). В том виде, в котором они есть в C++, это просто ужас. Достаточно того, что корутины требуют выделения памяти из кучи во время работы, а значит вообще не подходят для случаях, когда требуется серьёзная производительность. Например, в любом коде, требующим работы в реальном времени и не позволяющем делать системные вызовы.

Просто лютый трешак, который никто подчищать пока не собирается:

  • std::regex – лютый тормоз, рекомендуется не использовать.
  • Мертворождённый std::simd, добавленный в C++26 и уже с ходу не нужный вообще никому, потому что код с std::simd в два-три раза тормознее чем со сторонними библиотеками, просто голыми интринсиками, и даже медленнее чем просто цикл for.
  • std::async. Дескруктор ждёт завершения асинка и поэтому может залочить весь код тебе. Наконец починили в C++26, но эта штука была сломана 15 лет.
  • Отвратительно спроектированный <iostream>. Его наконец можно выкинуть и использовать std::print, но не все про это знают.
  • Абсолютно тормозные контейнеры map, set, unordered_map. Вместо первого можно использовать flat_map из C++23. Контейнеры в стандартной библиотеке Rust (BTreeMap) и другие реализации B-Tree Map их обгоняют по производительности, но тем не менее в C++ выбирают убогий дефолт.

Решения многих из этих проблем существуют в Boost и сделаны там гораздо лучше. Но в то же время возникает важный вопрос: зачем вообще нужен настолько плохо спроектированный язык, где каждое следующее поколение инженеров, работающих над ним, отменяет решения предыдущих, а код под новые стандарты часто нужно переписывать если не с нуля, то очень близко к тому? Даже процесс разработки Rust с его поехавшими клоунами в юбках на этом фоне выглядит адекватным.

В общем, всё печально, ЛОР. Такие дела.

yorshka
()

Авторы Си — наркоманы?

 , , ,

Столкнулся с интересным багом. После того как разобрался, что же именно происходит, меня постигло крайнее изумление! Оказывается, в языке Си тип числовой константы зависит от формата записи.

Дистиллированный пример кода, который это демонстрирует:

#include <stdbool.h>
#include <stdio.h>

#define IS_HEX(x) \
    _Generic((x), \
        unsigned int: true, \
        long: false \
    )

#define X 0x80000001
#define I 2147483649

int main(void) {
    if(X == I)
        puts("X == I");

    if(!IS_HEX(I))
        puts("I is not hexadecimal");

    if(IS_HEX(X))
        puts("X is hexadecimal");

    return 0;
}

Все три сообщения будут выведены на экран.

Зачем это сделано? Кому от этого легче? Какие оптимизации это позволяет проворачивать, кроме оптимизации отстрела ног программистам? Непонятно! В общем, стремлюсь поделиться своим негодованием здесь и предостеречь будущие поколения от наступления на эти грабли.

yorshka
()

Из Gentoo удаляют Qt5

 ,

Совсем. И весь зависящий от него софт. Такие дела, парни. При этом gtk2 продолжает жить.

Ссылка: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0ea1db6eed7bee860acb0bd55a767a3fe51beb99

Сначала думал новость вам запилить, но что-то на новость совсем не тянет.

yorshka
()