LINUX.ORG.RU

Сообщения MOPKOBKA

 

gtk3, как сделать такую таблицу

Форум — Development

Есть таблица (TreeView) вида

+------+------+------+
| Заг1 | Заг2 | Заг3 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+

Нужно добавить под каждую строку прогресс бар, размером с (Заг1+ Заг2), при этом остальные столбцы должны быть выравнены.

+------+------+------+
| Заг1 + Заг2 | Заг3 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+-------------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+-------------+------+

Как это сделать?

 

MOPKOBKA
()

Как научить человека пользоваться компьютером?

Форум — Talks

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

Что можно такому человеку предоставить на русском языке по Linux? С упором на вещи которые можно применять в обычной жизни, то есть лучше что бы не был упомянут chmod, а было упомянуто как перекинуть файлы на флешку, как заполнить форму в LibreOffice итд. Что бы проходились поверхностно, но по нужным вещам.

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

 

MOPKOBKA
()

А почему у Gtk еще нету официальной React-подобной библиотеки поверх?

Форум — Development

Вот смотрю на то как в Rust делают приложения на Gtk, и очень удивляюсь, неужели кому то нравится писать вручную все эти интерфейсы в императивном стиле? А ведь пишут, еще обходя все проблемы, которые исходят из того что у Gtk свой подход к управлению памятью который на Rust не налазит, как и наследование компонентов, из за чего в Rust пришлось добавлять «классы» через макросы - https://gtk-rs.org/gtk4-rs/stable/latest/book/g_object_subclassing.html

Есть ли какая то проблема в создании libgtk-react, где можно будет описывать интерфейс декларативно, с использованием javascript, с удобным получением данных из C++ или Python части?

Вроде есть какие то библиотеки, но они нигде не используются как я понял.

 , ,

MOPKOBKA
()

NVIDIA, EDID и ttyX, как избавиться от «Вход не поддерживается»?

Форум — Desktop

После установки драйверов nvidia-driver:525, после запуска Xorg, если переключиться в tty монитор писал «Вход не поддерживается», переключение обратно в xorg tty не помогало. После добавления в xorg.conf

Section "Screen"
  Option "UseEDID" "False"
EndSection
Переключение обратно в xorg начало приводить к тому, что xorg нормально отображается. Но в tty все равно «Вход не поддерживается», его я никак после запуска xorg увидеть не могу.

Как я понял, проблема в том что переключение на tty пытается ввести монитор в какой то неправильный режим, но как его сделать правильным?

Пробовал ставить по отдельности и вместе nomodeset, nvidia-drm.modeset=1, nvidia-drm.modeset=0, drm.edid_firmware=edid/custom_edid.bin где custom_edid.bin это то что я сгенерировал находясь в графической сессии с помощью nvidia-settings, но ничего не помогло.

В Wayland вообще всегда нет сигнала, как и в tty, как я понимаю настроив tty я смогу и им пользоваться.

Debian 12, Linux 6.1.0, NVIDIA 525.105.17, RTX 3060 LHR

Монитор https://www.dns-shop.ru/product/483fcc72d53b3332/238-monitor-acer-ka242ybi-ce...

Видеокарта https://www.dns-shop.ru/product/49b77a8077562eb0/videokarta-kfa2-geforce-rtx-...

 , ,

MOPKOBKA
()

Баг в названии опроса

Форум — Linux-org-ru

www.linux.org.ru/vote-vote.jsp?msgid=17134667

Опрос тут называется:

«Рукость» ЛОРовца: какая рука у вас преобладающая?
Напрягают
«
и
»
maxcom

 

MOPKOBKA
()

Какой VPN поставить на сервер?

Форум — General

Однажды я смог настроить PPTP, но теперь не получается, пробовал WireGuard но там какие то интерфейсы, пиры, ключи, вроде переменных меньше, но слишком сложно, я вообще ничего не понял. Для OpenVPN какие то ключи надо делать, конфиги писать, iptables запускать, неужели еще ничего не придумали простого? И что бы NetworkManager поддерживал.

 

MOPKOBKA
()

Как приходят в Kali Linux

Форум — Talks

Многие на ЛОРе жалуются, что люди выбирают Kali Linux просто так первым дистрибутивом, в погоне за любимым персонажем из фильма например, и советуют вместо этого читать книжки о Linux, изучить а там уже приступать. Ну и вот что там написано в этих самых книгах, как раз о той самой установке Kali Linux с нуля!

Страницы из книги

Перемещено hobbit из screenshots

 

MOPKOBKA
()

Docker Compose привязка к домену + порту

Форум — Development

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

Если все проекты на Apache2 + PHP, без докера, то я бы использовал VirtualHosts, сделал бы для каждого проекта домен, и тестировал бы все там.

А что можно сделать в docker, docker compose из подобного? Идеальным решением было бы привязать docker-compose.yml к домену, что бы:

curl project-a.dev:8080 это /dev/project-a/docker-compose.yml::httpd

curl project-b.dev:8080 это /dev/project-b/docker-compose.yml::httpd

Как это реализовать?

 ,

MOPKOBKA
()

Программа для заметок

Форум — Desktop

С поддержкой синхронизации для Android, и возможностью поставить сервер на своей впске. Что есть? Желательно минималистичное. Возможно достаточно пары утилит и блокнота?

 

MOPKOBKA
()

А за что забанили metaprog?

Форум — Linux-org-ru

Заморозка - понятно. А бан из за чего прилетел сейчас? Верните все взад.

maxcom, hobbit

 

MOPKOBKA
()

Убрать выскакивающие меню в Electron приложениях для Gnome 3

Форум — Desktop

Например в Ubuntu, если использовать приложения на Electron, такие как Skype, VSCode, Atom, OnlyOffice, то можно столкнутся с неприятным багом, когда нажатие Alt+Shift открывает меню.

Как я это исправил:

  • Отключить в настройках все бинды на Alt+Shift, в том числе и переключение раскладки в Gnome Tweaks
  • Создать файл /usr/bin/switch-keyboard-layout.sh
    #!/bin/bash
    LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
    if [ "$LAYOUT" == "ru" ]
      then `/usr/bin/setxkbmap us`
      else `/usr/bin/setxkbmap ru`
    fi
    
    if [ "$LAYOUT" == "ru" ]; then
      gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
    else
      gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
    fi
    
  • Сделать
    chmod +x /usr/bin/switch-keyboard-layout.sh
  • В домашнюю папку вписать файл keybinder.py
    #!/usr/bin/env python3
    import subprocess
    import sys
    
    # defining keys & strings to be used
    key = "org.gnome.settings-daemon.plugins.media-keys custom-keybindings"
    subkey1 = key.replace(" ", ".")[:-1]+":"
    item_s = "/"+key.replace(" ", "/").replace(".", "/")+"/"
    firstname = "custom"
    # get the current list of custom shortcuts
    get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    array_str = get("gsettings get "+key)
    # in case the array was empty, remove the annotation hints
    command_result = array_str.lstrip("@as")
    current = eval(command_result)
    # make sure the additional keybinding mention is no duplicate
    n = 1
    while True:
        new = item_s+firstname+str(n)+"/"
        if new in current:
            n = n+1
        else:
            break
    # add the new keybinding to the list
    current.append(new)
    # create the shortcut, set the name, command and shortcut key
    cmd0 = 'gsettings set '+key+' "'+str(current)+'"'
    cmd1 = 'gsettings set '+subkey1+new+" name '"+sys.argv[1]+"'"
    cmd2 = 'gsettings set '+subkey1+new+" command '"+sys.argv[2]+"'"
    cmd3 = 'gsettings set '+subkey1+new+" binding '"+sys.argv[3]+"'"
    
    for cmd in [cmd0, cmd1, cmd2, cmd3]:
        subprocess.call(["/bin/bash", "-c", cmd])
    
  • Запустить из домашней папки
    python3 keybinder.py 'keyboard layout switch' '/usr/bin/switch-keyboard-layout.sh' '<Alt>Shift_L'
    после чего keybinder.py удалить, или дальше использовать

Можете предлагать свои варианты!

 ,

MOPKOBKA
()

Telegram из tar.gz перестал выводить звук через pipewire 0.3.43

Форум — Desktop

Смотрю через pavucontrol, как выводящее приложение telegram появляется, но полосочка громкости не скачет, но если переключиться на pulseaudio, то и полосочка скачет, и звук играет. Кто сталкивался?

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

 

MOPKOBKA
()

Как создать массив в С++

Форум — Development

Нужно создать массив с элементами у которых разный размер. Размер массива, элементов, и их порядок известен в compile-time. В коде могу представить так:

template<int N = 5>
struct A {
  std::array<int, N> = {
    // Вот эти значения должны как то создаваться автоматически
    // 1...N, N = 5
    std::array<int, 1>,
    std::array<int, 2>,
    std::array<int, 3>,
    std::array<int, 4>,
    std::array<int, 5>, 
  };
};


template<int N = 3>
struct B {
  std::array<int, N> = {
    // Вот эти значения должны как то создаваться автоматически
    std::array<int, 1>,
    std::array<int, 2>,
    std::array<int, 3>,
  };
};

Есть что то готовое, что можно использовать, и работающее в компилтайме?

-----------------------------------------------------

Первое решение:

#include <type_traits>
#include <iostream>
#include <tuple>
#include <array>

template <typename... Ts>
class tuple_array_t : public std::tuple<Ts...> {
public:
    using std::tuple<Ts...>::tuple;

    template <size_t N>
    constexpr auto&& operator[](std::integral_constant<size_t, N>) {
        return std::get<N>(*this);
    }

    [[nodiscard]] constexpr auto size() const {
        return std::integral_constant<std::size_t, std::tuple_size_v<decltype(static_cast<std::tuple<Ts...>>(*this))>>();
    }
};

template <std::size_t From, std::size_t To, class F>
constexpr void constexpr_for_range(F&& f) {
    if constexpr (From < To) {
        f(std::integral_constant<size_t, From>());
        constexpr_for_range<(std::size_t)From + 1, (std::size_t)To>(f);
    }
}

template<typename T, size_t N, typename... Ts>
constexpr auto linear_tuple_array() {
    if constexpr (N > 1) {
        return linear_tuple_array<T, N - 1, Ts..., std::array<T, N>>();
    } else {
        return tuple_array_t<Ts..., std::array<T, N>>();
    }
}

constexpr auto generate_super_array() {
    auto linear_array = linear_tuple_array<float, 10>();
    auto linear_array_size = linear_array.size();
    constexpr_for_range<0, linear_array.size()>([&] (auto i) {
        constexpr auto n = linear_array_size - i;
        constexpr_for_range<0, n>([&] (auto j) {
            linear_array[i][j] = i * 1000 + j;
        });
    });
    return linear_array;
}

int main() {
    auto array = generate_super_array();

    auto x = std::integral_constant<std::size_t, 5>();
    auto y = std::integral_constant<std::size_t, 3>();
    
    // #output: 5003
    std::cout << array[x][y] << std::endl;
}

------------------------------------------------
Второе решение

#include <cstddef>
#include <type_traits>
#include <iostream>

template <typename T, size_t N>
class ctmat;

template <typename T>
class ctmat<T, 1>
{
public:
    template <size_t i, size_t j>
    typename std::enable_if<i == 0 && j == 0, T>::type& get() { return m_v[0]; }
    template <size_t i, size_t j>
    typename std::enable_if<i == 0 && j == 0, T>::type const& get() const { return m_v[0]; }
    template <typename U>
    friend std::ostream& operator<<(std::ostream& out, const ctmat<U, 1>& m);
private:
    T m_v[1];
};

template <typename T, size_t N>
class ctmat: public ctmat<T, N-1>
{
public:
    typedef ctmat<T, N-1> base_type;
    using base_type::get;
    template <size_t i, size_t j>
    typename std::enable_if<i == N-1 && j < N, T>::type& get() { return m_v[j]; }
    template <size_t i, size_t j>
    typename std::enable_if<i == N-1 && j < N, T>::type const& get() const { return m_v[j]; }
    base_type& base() { return static_cast<base_type>(*this); }
    base_type const& base() const { return static_cast<const base_type&>(*this); }
    template <typename U, size_t M>
    friend std::ostream& operator<<(std::ostream& out, const ctmat<U, M>& m);
private:
    T m_v[N];
};

template <typename T>
std::ostream& operator<<(std::ostream& out, const ctmat<T,1>& m)
{
    out << m.m_v[0] << std::endl;
    return out;
}

template <typename T, size_t N>
std::ostream& operator<<(std::ostream& out, const ctmat<T, N>& m)
{
    out << m.base();
    for (size_t j = 0; j != N; ++j)
        out << m.m_v[j] << ' ';
    out << std::endl;
    return out;
}

int main()
{
    ctmat<int, 1> m1;
    static_assert(sizeof(m1) == sizeof(int), "Unexpected size");
    m1.get<0,0>() = 1;
    //m1.get<1,0>() = 2;
    //m1.get<0,1>() = 3;
    std::cout << m1;
    ctmat<int, 2> m2;
    static_assert(sizeof(m2) == 3*sizeof(int), "Unexpected size");
    m2.get<0,0>() = 4;
    //m2.get<0,1>() = 5;
    m2.get<1,0>() = 6;
    m2.get<1,1>() = 7;
    std::cout << m2;
    return 0;
}

 

MOPKOBKA
()

Wine сбивает значки на рабочем столе при изменении видео-режима

Форум — Desktop

Можно ли как то заставить его не менять видео-режим, а просто создавать full-screen окно и самому растягивать изображение? Эмуляция рабочего стола создает рамку, немного не то.

 

MOPKOBKA
()

Почему когда пишут скрипты на Bash не используют фреймворки?

Форум — Talks

Очевидно что они ускоряют написание скриптов, упрощают, и помогают избегать ошибок. Как пример возьмем: https://github.com/niieani/bash-oo-framework

Почему же люди продолжают непрофессионально подходить к этому делу, и пишут чуть ли не в sh-стиле? Такое ощущение что они не сталкивались с реальным миром.

А еще труднее понять почему при написании скриптов не используют нормальную IDE с отладчиком?! Не знают? Не могут научиться?

Да, конечно Bash уже устарел, но это не повод погружаться в 60-е если нужно его использовать.

 ,

MOPKOBKA
()

О печальном состоянии веб-программирования

Форум — Talks

Столкнулся с проектом Vue+Symfony+GitLab. Я не понимаю кому выгодны эти запутанные инструменты, веб-фреймворки, это безумное усложнение? Но больше всего не понимаю, как это можно любить.

Критикуешь - предлагай альтернативу. И так, все предыдущие 3 года я просто мог работать, если не попадался такой вот мусор! Я подключал удаленную FTP папку в Windows 10, и редактировал файлы через notepad.exe, с тех пор как он научился в кодировки я даже не использовал Notepad++. Если сайт посещаемый, и не нужно было экспериментировать над пользователями, я делал из page.php копию page2.php и редактировал код там. Frontend? Есть JQuery и куча плагинов, скачиваешь min файл и копируешь себе в папку, вот и вся сборка.

Теперь же перейдем к моему текущему проекту. Vue, эта штука просто отбирает контроль за происходящим, как на этом сделать что то нормальное я не представляю, не удивительно что современные веб-приложения еле работают, а в IE или PaleMoon не запускаются вообще. Ну ладно, там и проект не сложный, с ограничениями я воевал всего лишь неделю... Но эти бесконечные сборки, я не против сборки, но оно же компилируется медленнее плюсов, зачем же так издеваться?! Такое и даром не нужно!

Symfony, ну явно для любителей Java штука, программирование на текстовых конфигах присутствует. А вот какой смысл делать yml/json/xml когда есть config.php? Это же скриптовый язык, зачем так извращаться?! В остальном это просто ад, даже описывать не буду, для простейших действий требуется 100500 часов, и классы, классы, классы. И шаблоны, как будто бы PHP плохой шаблонизатор. Видимо реально это делалось для Java, а потом конвертором перегнали в PHP.

GitLab, Git - отличные замедлители разработки, как и системы сборки фронтенда, я кажется близко к разгадке, программисты на скриптовых языках завидовали плюсовикам, у них проект пока скомпилируется, можно 20 чашек кофе выпить, вот и продвинули это. Git - ну просто каргокульт, пришлось однако ставить это жирное нечто на десятку, отъело пол гига!!! GitLab - поприкольнее, поинтереснее, просто так коммитить нельзя, ветка ограниченна, нужно обязательно попросить разрешение управлящего, это же так круто! Если вы не доверяете мне, зачем просить что то делать? Потом еще начинается «а разбейте на коммиты, слишком много изменений»...

А вам это нравится, почему? Вы задумываетесь над тем что вы делаете? И как это делаете?

 , ,

MOPKOBKA
()

Поставил docker через snap

Форум — Talks

Ну а че, Canonical рекомендуют и сами пакет сделали.

Поднимаю проект, а volumes-таргеты в контейнере пустые, в чем же дело? В Docker? Разбирался, разбирался.

Оказывается Docker из snap вместо того что мы моунтить мои папки, создавал папки вида ~/???????/???????/%srcdir%, где знаки вопроса действительно ими были, потому что папки на русском (~/Проекты/Проект/), видимо snap разрабатывает Eddy_Em.

Захожу внутрь этих папок - пустые. Вот они и пробрасывались в контейнер.

 ,

MOPKOBKA
()

SDL2 переезжает на GitHub

Форум — Talks

https://discourse.libsdl.org/t/sdl-moving-to-github/28700/5

Одна из причин, по которой мы раньше не рассматривали переход на GitHub, заключается в том, что у этого проекта была политика владения всей своей инфраструктурой. Этот проект пережил кончину Локи, он пережил деволюцию, захваченную самозванцем, он пережил ненадежные серверы Dreamhost. Несколько лет назад у нас этого всего было достаточно, и мы переместили все в Digital Ocean, потому что это просто размещенный в одном месте Linux-сервер; мы поддерживаем все службы, и ничего не извлекается из-под нас ... в худшем случае мы просто переместим нашу ночную резервную копию на новый хост и обновим DNS, а не будем просто облажаться, когда поставщики откажутся от услуг или сломают что-то и просто обычно не не отвечаю на телефонные звонки.

Компромисс за эту свободу, конечно же, заключается в том, что все глючит и ломается, и ни у кого нет времени, чтобы исправить это. Bugzilla на самом деле не сильно отличается от того, что было двадцать лет назад (и, как мы обнаружили, разработчики Bugzilla не удосужились обновлять свой код, когда новые выпуски MySQL сломали его, а я разработчик игр и не хочу исправить код Perl, созданный два десятилетия назад, чтобы трекер ошибок заработал после обновления Ubuntu, бла-бла-бла).

Это не только Bugzilla. Это вики, списки рассылки, маленький причудливый веб-интерфейс Mercurial. Маленькая вещь с открытым исходным кодом, на которую мы полагаемся, но над которой никто не работает, и, вероятно, в ней есть дыры в безопасности. Все это дрянно и вызывает трения разработчиков. Это вызывает это у Сэма и меня, а мы старые ковбои командной строки Unix, поэтому для тех, кто ожидает, что компьютеры будут относиться к ним так же, как компьютеры в 2021 году - с гладкими пользовательскими интерфейсами и без cronjobs, которые иногда терпят неудачу, пока Райан не начнет перезапускать службу по ssh - это становилось несостоятельным.

Поэтому, переместив его на GitHub, мы обнаружили, что многие вещи стали лучше, потому что над этим каждый день работает большой оплачиваемый штат инженеров. И я вырос в период расцвета Фонда свободного программного обеспечения, поэтому я знаю, что это ловушка, но я устал, и у меня нет сил, чтобы быть администратором сервера для чего-то, что скреплено скотчем и молитвами, когда я я действительно должен писать код OpenGL.

Итак, мы переходим на серверы, которые мы не контролируем, что действительно заставляет меня нервничать, но аргумент такой: Microsoft владеет GitHub, и маловероятно, что Microsoft в ближайшее время обанкротится. Если Microsoft отключит GitHub, проблемы возникнут не только с SDL, но и со всей экосистемой с открытым исходным кодом , поэтому заинтересованные стороны будут быстро двигаться, чтобы помочь вам перейти в другое место… верно?

 , ,

MOPKOBKA
()

Виртуальная флешка (в /dev)

Форум — General

Есть файл сделанный с помощью dd, нужно сделать девайс (/dev/xxx) детектящийся как флешка с внутренностями этого файла.

Именно так, а не просто примонтировать внутренности.

 ,

MOPKOBKA
()

Почему у printf такие странные спецификаторы?

Форум — Development

Ведь логично было бы сделать %i=integer, %f=float, %d=double. Расскажите историю.

 ,

MOPKOBKA
()

RSS подписка на новые темы