LINUX.ORG.RU

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

Что менее монструозное в 2020 как библиотека: Qt или GTK для C++ разработки чисто под linux?

Форум — Development

Есть старый C++ GUI сделанный в 2012. Собирался под win и linux. Поддерживать win надоело, сам её не юзаю, да и мастдай уже произошёл. Qt была выбрана по совету знакомых как супермегапростая штука. Хотя юзал из всего набора минимум - окна, кнопки и иконки.

Глядя на сегодняшний мир всяких убунт, мы видим что GTK как-то более распространён (или так только кажется)? Никакого Qt в базовых интерфейсах, никаких KDE и прочего говнища.

Гуй требует переработки, код написан слишком давно, выглядит лохмато, без современных стандартов и т.п. Всё равно много перекапывать.

Так чё, на GTK всё переписать, чтобы быть в тренде и меньше гимора в дальнейшем? К тому же, никогда не нравились всякие эти ненативные приблуды в Qt вроде MOC или как там его. Хочется что-то ламоповое без cmake, минималистичное, быстрое, современное и самое трендовое. Поддержики всякого JS-кода в интерфейсах, звука, воспроизведения видосов не требуется (есть вывод звука, но там на ALSA всё руками сделано по-пацански).

 

igloev
()

Юзерспейсные обработчики могут мягко обрабатывать ситуации с нехваткой памяти

Форум — General

Летом был тред о неспособности ядра обрабатывать нехватку памяти: Линукс ядро не может мягко обрабатывать ситуации с нехваткой памяти

Пришло время продемонстрировать элегантное решение: https://youtu.be/G0FYDIKVPYI

Проблема: https://lkml.org/lkml/2019/8/4/15.

Решение: https://github.com/hakavlad/nohang.

Обсуждение в r/linux: https://www.reddit.com/r/linux/comments/ee6szk/killing_the_elephant_in_the_room_the_userspace/.

 ,

hakavlad
()

Новая версия библиотеки plibsys 0.0.4

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

Вышла новая версия библиотеки plibsys 0.0.4. plibsys - это системная библиотека, написанная на С, и портированная на большое количество систем и компиляторов. Библиотека обеспечивает работу с потоками, межпроцессное взаимодействие, сокеты и много чего полезного. Так как ранее она уже была представлена здесь сообществу, то подробное описание можно прочитать из соответствующей новости.

Во-первых, хочется выразить благодарность ЛОРу за конструктивную критику и пожелания. Это помогает переосмысливать некоторые вещи. Во-вторых, спасибо тем, кто создал пакеты под разные системы и дистрибутивы, помог с распространением. И спасибо тем, кто помогал в некоторых моментах с тестированием (особенно на ПК «Эльбрус»).

Теперь к изменениям в новой версии. Возможно, некоторые из изменений уже были отражены в прошлой новости частично, но я дам полный список для простоты.

( Что же изменилось за прошедший год? )

>>> Репозиторий на GitHub

 , , , ,

HardCode
()

ElectronMail 3.0.0 (e2ee-клиент ProtonMail и Tutanota)

Новости — Безопасность
Группа Безопасность

Неофициальный клиент email-securely-app для почтовых сервисов со сквозным шифрованием ProtonMail и Tutanota обновился до версии 3.0.0 и получил новое имя - ElectronMail. Программа написана Владимиром Яковлевым на фреймворке Electron и имеет открытый код. Основное отличие от бесплатных версий официальных клиентов — возможность поиска, отсутствие ограничений по объему и дополнительные возможности в оффлайн-режиме.

Среди изменений:

  • Улучшена изоляция аккаунтов (например, теперь возможна настройка разных proxy для разных аккаунтов);
  • Увеличена скорость экспорта;
  • Включена песочница.

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

 , , email-securely-app, ,

linuks
()

Патч pf-kernel для Linux 5.0

Новости — Ядро Linux
Группа Ядро Linux

Состоялся первый выпуск pf-kernel для ядра Linux ветки 5.0.

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

В эту версию входят:

Патч применяется к чистому ядру версии 5.0.

Также доступны бинарные пакеты для Arch Linux (x86_64) без оптимизаций и с оптимизациями для процессоров Intel Silvermont и Skylake.

>>> IRC: #pfkernel @ Freenode

>>> Скачать патч

>>> Официальный сайт

>>> Анонс

 , , , ,

post-factum
()

впечатления от трех дней на манджаре

Форум — Talks

поигрался в манджару на компе и на ноутбуке. на три дня меня хватило, пишу, пока ничего из головы не вылетело. определенно совсем абсолютно не готов, если в кратце. на что перееду пока не знаю, хотя та же бубунта определено ведет себя более прилежно. итак, начну с плюсов:

  1. аур

минусы:

  1. на ноутбуке мерцает экран при выборе nonfree или free, без разницы. ну мало ли, лайв сиди, но нет, после установки то же мерцание. во всех комбинациях vesa, интел, нвидиа, бамблиби одно и то же мерцание.
  2. если поставить nonfree драйвера, а потом удалить free драйвера из «менеджера настроек», то после перезагрузки черный экран логотипа биоса на ноуте. и хоть бы какое предупреждение.
  3. чудесный многолетний баг с раскладкой клавиатуры, если поставить в лайв сиди русский интерфейс и английский пароль, то при первом входе нельзя поменять раскладку. нужен цифровой пароль, иначе не зайти.
  4. если при установке выбрать «автоматический вход», то он работает только после второго ребута. после первого просит пароль, а после второго входит сам. чудно.
  5. в одной загрузке лайв сиди на рабочем столе есть ярлык «установить манджаро», в другой загрузке его нет. флешка та же, версия дистрибутива та же. отчего так?
  6. xfce не умеет растянуть обоину на три экрана, при выборе «растянуть на все» оно тупо устанавливается на текущем экране, это даже бубунта умеет.
  7. plank вырисовывает какую-то серую линию в нижней трети экрана, если не убрать в опциях настроек окошек xfce «отображать тени». причем тут планк и тени, как они связаны?
  8. если в thunar правой кнопкой щелкнуть «создать», то меню отображает одну полоску урезанную и нельзя создать пустой файл. тот же клик на рабочем столе дает подменю и создает пустой файл.
  9. отдельные впечатления от попытки побега из этого чудесного дистрибутива и запись флешки
    • woeusb не может записать флешку, потому что она смонтирована. ок. через thunar я ее размонтирую и она пропадает из woeusb. а если флешку размонтировать из gparted, она не пропадает из woeusb. что это было? у gparted и thunar разные размонтирования? или одно размонтирование более размонтированее другого размонтирования?
    • через gparted разбил флешку на фат32, woeusb при записи ругается, что мало места и «пределы фат32 достигнуты». ок. форматирую флешку в ntfs, тоже самое - «пределы фат32 достигнуты». ок. не форматирую вообще, просто создаю новую таблицу разделов, тоже самое - «пределы фат32 достигнуты».
    • раз через раз при форматировании в gparted всплывает чудесное сообщение - «операция завершена, но ядро не в курсе». что?
  10. ахах, перед отправкой перечитал свой опус, смотрю - девять пунктов. как то не красиво, не ровный счет. дай думаю, еще чего найду, лол. захожу в батарею на ноуте, который воткнут в розетку и вижу - «отключен от сети», а там же рядом - «подача питания - да». отключен от сети, но подача питания есть, хм. так есть у меня искра в розетке или нет?

бонусом обоина, которой лешил манджаро, не сумев растянуть на три монитора

 , ,

chenbr0
()

Чем scala лучше java?

Форум — Talks

Не вброс, не троллинг. Гуглил долго. Нормальных аргументов так и не нашел. Может тут кто-то что-то знает. Стоит ли выбросить яву и начать изучать скалу? И почему?

stevejobs на всякий случай

Перемещено tailgunner из development

 ,

Deleted
()

Динамические библиотеки, конспект

Форум — Development

Привет. Так вышло, что пришлось основательно разобраться в теме и пока память свежа изложил всё в виде небольшой памятки. Удобно по прошествии некоторого времени освежить память прочитав небольшой конспект. Вообще, по-хорошему, блог что ли какой завести )). Просьба - не флудить, ссылки/комментарии/дополнения по теме приветствуются. ЗЫ: подразумевается, что либы -fpic

1. Утилиты readelf, objdump. Читать man elf, man ld.so. N в именах структор
   подразумевает 32 или 64.
2. Структура ELF файла:
   1. заголовок (смещение 0, struct ElfN_Ehdr). Readelf::ELF Header
   2. program header table (массив struct ElfN_Phdr). Содержит информацию о том
      как отображать секции в память процесса. Readelf::Program Headers
   3. section header table (массив struct ElfN_Shdr). Readelf::Section Headers
3. link_map   
3.1. Загруженные в память модули попадают в список (массив) из struct link_map.
     Списков может быть много, каждый список - "пространство имён". Для
     загрузки модулей в неглобальный список (создание нового) используется
     dlmopen().
3.1. Получать link_map модуля через dlinfo() или dladdr1():
     [--code--]
     #define _GNU_SOURCE
     #include <link.h>
     #include <dlfcn.h>
     #include <stdio.h>
     int main()
     {
        static char addr_in_mod;
        Dl_info __info;
        struct link_map *lm;
        if(dladdr1(&addr_in_mod, &__info, (void*)&lm, RTLD_DL_LINKMAP) != 0) {
           printf("link_map:\n");
           struct link_map *i = lm;
           for(; i->l_prev != NULL; i = i->l_prev);
           for (; i != NULL; i = i->l_next)
              printf("addr diff=%p  name=%s%s",(void*)i->l_addr,  i->l_name, i==lm?"  <--cur\n":"\n");
        }
     }
     //output:
     //link_map:
     //addr diff=0x41f000  name=  <--current module
     //addr diff=0xb7fc4000  name=linux-gate.so.1
     //addr diff=0xb7fa3000  name=/lib/libdl.so.2
     //addr diff=0xb7dc5000  name=/lib/libc.so.6
     //addr diff=0xb7fc6000  name=/lib/ld-linux.so.2
     [/--code--]
3.2. Во время переразмещений символ ищется в модулях указанных в link_map
     списке начиная от начала списка т.е. порядок важен, "gcc -ls1 -ls2"
     libs1.so находится в списке раньше, чем libs2.so.
3.3. При добавлении библиотеки через LD_PRELOAD, она попадает перед остальными
     разделяемыми библиотеками в глобальном link_map списке.
3.4. Опция RTLD_DEEPBIND для dlopen - собственные символы модуля приоритетнее
     символов из вышестоящих в link_map списке модулей.
     Собственные символы загружаемой библиотеки содержат:
      1. символы из самой загружаемой библиотеке
      2. символы из библиотек, которые были слинкованы с загружаемой из
         командной строки (у первых приоритет выше).
3.5. При загрузки через dlopen, библиотеки добавленные с флагом RTLD_GLOBAL
     имеют приоритет над RTLD_LOCAL, не смотря на то, что находятся в link_map
     списке позже (не относится к получению void f() через dlsym()). Например:
     [--code--]
     // предоставляет void f(), ссылается на void f().
     dlopen("lib1.so", RTLD_LOCAL);
     // предоставляет void f().
     dlopen("lib2.so", RTLD_GLOBAL);
     // при ленивом переразмещении, lib1.so будет ссылаться на lib2.so::f().
     [/--code--]
4. RTLD_GLOBAL - символы из загруженного модуля будут участвовать в
   переразмещениях для заргуженных в дальнейшем библиотек. RTLD_LOCAL - не будут.
   Если lib2.so линкуется с lib1.so через командную строку
   "gcc -fpic -shared -l2 s.c -o lib1.so", то видимость символов из lib2.so
   наследуется от видимости символов из lib1.so:
   [--code--]
   dlopen("./lib1.so", RTLD_LAZY|RTLD_GLOBAL);    // символы из lib2.so глобальные
   dlopen("./lib1.so", RTLD_LAZY|RTLD_LOCAL);     // символы из lib2.so локальные
   [/--code--]
   Если lib2.so подгружается из lib1.so через dlopen(), то видимость символов
   из lib2.so контролируется флагом dlopen() при загрузке lib2.so. Способ
   загрузки (через командную строку или dlopen) и флаг для dlopen при
   загрузки lib1.so значения не имеет.
5. Переразмещение (relocation).
5.1. Переразмещение - процесс соединения символьной ссылки с символьным
     определением.
     Переразмещение: ленивое - загрузчик вызывается при ссылке на символ, и
     ненеленивое - переразмещение при загрузке. Переразмещение переменных всегда
     неленивое.
5.2. Символы, требующие переразмещения, содержатся в .rel... секциях. В них
     находятся ElfN_Rel структуры.
     [--code--]
     typedef struct {
         Elf32_Addr r_offset;    \\ адрес внесения правки (адрес в GOT, например. readelf::Offset).
         uint32_t   r_info;      \\ содержит тип переразмещения и индекс в таблице символов (массив Elf32_Sym[]).
     } Elf32_Rel;
     typedef struct {
         uint32_t      st_name;   \\ индекс в таблице строк. Т.е. сопостовляет символ с Си строкой.
         Elf32_Addr    st_value;  \\ адрес символа в текущем модуле (readelf::Sym.Value).
         uint32_t      st_size;
         unsigned char st_info;
         unsigned char st_other;
         uint16_t      st_shndx;
     } Elf32_Sym;
     [/--code--]
5.3. Механизм обращения к переменным (требующим переразмещений):
     1. линкер на старте правит .got секцию, она начинает указывать на нужные
        данные.
     2. ссылка на переменную в коде (в .text секции):
          [--code--]
          call   44c <__x86.get_pc_thunk.ax>  # получаем в eax адрес следующей инструкции
          add    $0x1bcb,%eax                 # в eax адрес .got секции
          mov    0x14(%eax),%edx              # отступ от края .got на адрес переменной,
                                              # разыменовываем в edx
          [/--code--]
5.4. Механизм обращения к функциям, для пример - exfn():
     1. ссылка на exfn() в коде (в .text секции)
     2. переход на "трамплин" в .plt секции - plt@exfn()
     3. переход на разыменованный указатель из .got.plt, если переразмещение
        уже было произведено, то попадаем на exfn(), иначе:
        3.1. возврат в plt@exfn(), в стек кладётся смещение в .rel.plt
             секции Elf32_Rel структуры и указатель на link_map список
        3.2. вызов ld.so, правится указатель в .got.plt
        3.3. переход на exfn().
6. .dynamic секция может быть прочитана из программы через массив _DYNAMIC[],
   который содержит struct ElfN_Dyn, автоматически заполняется линкером.
7. Экспортируемые символы из elf модуля указываются в .dynsym секции.
8. -rdynamic опция линкера (для исполняемого ELF) - символы из exe, которые не
   были востребованы библиотеками, указанными в командной строке, не
   экспортируются (не указываются в .dynsym секции) и не участвуют в
   переразмещениях в библиотеках, которые подргружаются через dlopen. Данная
   опция заставляет линкер помещать в таблицу все функции.
9. Управление экспортом из модуля
   * Управление экспортом по умолчанию:
     gcc -fvisibility=default
     -fvisibility=hidden
     -fvisibility=internal
     -fvisibility=protected
   * Управление экспортом посимвольно:
     __attribute__ ((visibility ("hidden")));
     __attribute__ ((visibility ("hidden")))
   * Для группы:
     #pragma GCC visibility push(hidden)
     ...
     #pragma GCC visibility pop
   * static и анонимные namespace
   * Управление эспортом через export map, через опцию --version-script

 , , ,

pavlick
()

Они добрались до pleer.ru

Форум — Talks

 

Jopich1
()

Alpine Linux \ Void Linux на десктопе для слабого ПК

Форум — General

Alpine Linux \ Void Linux на десктопе для слабого ПК

Думаю поставить что-то из этих двух. Поделитесь историями успеха работы с этими дистрибутивами, какие есть плюсы и минусы на ваш взгляд. Alpine использует musl, вызывает ли это больше проблем, чем пользы? Как вам void без systemd?

 , , , ,

SHODAN
()

Void Linux + i3-gaps

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

Пока жду некоторые детали для апгрейда синкпада, решил на нем попробовать дистрибутив с отличной от systemd системой инициализации. Выбор пал на Void Linux.

Установил пока минимум пакетов (браузер плюс пллеры) и оформил WM. Возможно, попробую собрать некоторые пакеты через xbps-src.

В качестве WM использую i3-gaps. Панель — polybar. Композитный менеджер — compton. За уведомления отвечает dunst.

Шрифты: в панели — Cantarell 10, Font Awesome 10 - для значков тегов, Siji — для значков строки состояния в правой части панели, в терминале — Ubuntu Mono 14.

Терминал — urxvt, текстовый редактор — Geany, файловый менеджер — PCmanFM.

Для музыки — DeadBeef, для видео — SMPlayer. Браузер — Firefox 57.

GTK Theme — Xfce-flat (стандартная тема Xfce), иконки — Faience-Azur.

Еще скриншоты: PCmanFM+DeadBeef+SMPlayer, Firefox c ЛОР'ом+Geany, обои в jpg.

 , ,

mad_austronaut
()