LINUX.ORG.RU

Сообщения KennyMinigun

 

Способ на vptr data race

Форум — Development

Есть data race прям как в примере тут: https://github.com/google/sanitizers/wiki/ThreadSanitizerPopularDataRaces#dat...

<Для Ъ>:

struct Base {
    virtual ~Base() { 
        unregister(this); // внутри сложный код с синхронизацией
    }

    virtual void someMethod() = 0;
};

struct Derived : public Base {
    ~Derived() { simpleDestruction(); }
    void someMethod() override;
};

Проблема такова, что деструктор и someMethod() могут быть вызваны с разных потоков. А используемые в проекте реализации GCC/Clang меняют vptr при вызове родительских деструкторов. Соотв. если во время синхронизации в ~Base() будет вызван someMethod() получится pure virtual method call. (так как используемые компиляторы GCC).

</Для Ъ>

Было бы дешево и сердито решить проблему переносом синхронизации в деструктор дочернего класса, однако в реальности ситуация такова, что существует дерево из 6 потомков класса Base:

Base_______________
|        \         \
Derived1  Derived2  Derived3
|         |
Derived11 Derived21
|
Derived111
И каждый из потомков может использоваться самостоятельно. Т.е. если реальный тип обьекта Derived111, то синхронизация должна быть в ~Derived111 (и не происходить ни в ~Derived11, ни в Derived1, ни в ~Base). Однако если реальный тип — Derived11, то синхронизация должна происходить только в ~Derived11.

Подскажите пожалуйста как поправить проблему? Может существует какой-нибудь паттерн для такого?

 bad design, ,

KennyMinigun
()

Кто-нибудь вылечил bootloop на Nexus?

Форум — Mobile

Короче, в один прекрасный день мой Nexus 5X завис и не захотел загружаться дальше лого Google.

Последовав инструкциям отсюда, я вынял материнскую плату и тщательно ее прогрел феном для волос (грел около 45 секунд).

В результате вышеприведённых манипуляций мне удалось загрузить девайс до ОС, включить USB debugging и отключить OEM Locking.

После чего я последовал инструкциям с xda-developers и прошил приведённый там образ (N2G47Z_4Cores.img). Опциональные действия не выполнял. Все время держал телефон в разобранном состоянии (с прямым доступом к мат. плате) и регулярно его подогревал во время процесса. Все прошилось без проблем (насколько можно было судить с выхлопа fastboot). Выключил телефон, собрал корпус.

Ну и конечно же, после окончательной сборки корпуса у меня на столе лежал всё такой же кирпичик...

P.S. Не отходя от кассы, прошу, посоветуйте подобный телефон на замену: чтоб около 5" и без (поменьше) bloatware в стоковой прошивке.

P.S.S. *В горечи пошёл накатывть Android 7 на старый, добрый и рабочий Nexus 4*

 , , , ,

KennyMinigun
()

Ставил ли кто-нибудь софт Neon поверх Kubuntu?

Форум — Talks

Вот и закончилось мое приключение с KDE Neon: просто не могу сидеть на древнем софте. В связи с чем вопрос: кто-нибудь обновлял KDE из репо neon на новой Kubuntu (скажем Zesty, 17.04)?

Если да, то каким способом? Dist-upgrade с дистрибутива Neon или же добавление репо neon в уже установленную Kubuntu?

// Просто ищу план Б на случай если Kubuntu снова решит слоупочить с обновлением KDE

 , ,

KennyMinigun
()

Gedit все

Форум — Talks

Сабж. Известный каждому линуксоиду редактор текста «no longer maintained».

http://www.omgubuntu.co.uk/2017/07/gedit-text-editor-unmaintained

 ,

KennyMinigun
()

Невозможно поменять выбор в голосованиях

Форум — Linux-org-ru

Проблема уже недавно поднималась.

Суть такова: после отдания голоса (голосов) можно нажать на ссылку «проголосовать» и выставить голос (голоса) по другому, но ничего не после нажатия кнопки «проголосовать».

Возможные способы ремонта:

  • Не показывать ссылку «Проголосовать» после отдания голосов (и добавить предупреждение о невозможности смены голосов на страничку голосования)
  • Разрешить изменять выбор в голосованиях (и чтоб это работало)

 , ,

KennyMinigun
()

Установка несколько ОС (Linux) на одну ФС

Форум — Linux-install

По мотивам Соседнего треда. Задался вопросом, а можно ли установить (сохранив работоспособность) несколько дистрибутивов Linux на один раздел c ФС.

Т.е. у меня в голове уже нарисовался такой план:

  • Раздел с (например) EXT4 имеет такую структуру:
    /
      -linux1/
        - bin/
        - lib/
        - usr/
        - var/
        - ...
      -linux2/
        - bin/
        - lib/
        - usr/
        - var/
        - ...
    
  • Саму установку линуксов произвести довольно просто (процедура наподобии установки stage3 в Gentoo)
  • Монтирование корневой директории (напр на устройстве /dev/sda1 директория linux1) можно осуществить с помощью хитрого скрипта в initrd
  • /boot наверное придется вынести на отдельный раздел
  • В /boot держать по ядру для каждого установленного дистрибутива с соответствующим initrd (загрузчик должен подхватить).

Предлагайте свои способы реализации. Интересно.

 , ,

KennyMinigun
()

Unity 8 таки форкнули

Форум — Talks

Не знаю, хорошо ли это или плохо, но сабж.

Unity 8 под именем «Yunit» теперь доступна для установки под *ubuntu 16.04 LTS.

wget -qO - https://archive.yunit.io/yunit.gpg.key | sudo apt-key add
  echo 'deb [arch=amd64] http://archive.yunit.io/ubuntu/ xenial main' | sudo tee /etc/apt/sources.list.d/yunit.list
  echo 'deb-src http://archive.yunit.io/ubuntu/ xenial main' | sudo tee --append /etc/apt/sources.list.d/yunit.list
  sudo apt update
  sudo apt upgrade
  sudo apt install yunit-desktop

Взято отсюда: http://news.softpedia.com/news/unity-8-fork-yunit-now-available-as-an-overlay...

Официальная страница: https://yunit.io

 , , ,

KennyMinigun
()

Бета-версия Cossacks 3 для GNU/Linux

Новости — Игры
Группа Игры

13 июня для GNU/Linux стала доступной бета-верися игры Cossacks 3.

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

>>> Игра в Steam

>>> Анонс

 ,

KennyMinigun
()

SRAM Gx Eagle (1x12)

Форум — Talks

Вот SRAM выпустили Eagle (1x12) версию группы Gx: https://www.sram.com/sram/mountain/family/gx-eagle (прежде Eagle был доступен только в XX1 и XO1 — «топовых» группах)

Т.е. тенденция миграции технологий со старших моделей в младшие сработала. И теперь 1x12 стал более доступным. Интересно, какая будет ответка Shimano, сделают ли они (наконец) касеты для XD драйвера?

P.S. Я помню кто-то с ЛОРа твердил что x12 на шоссейных велосипедах «нинужын и нибудит» в одной из давних тем про велосипеды. Так вот, ставлю 1000 интернет очков, что через 1.5-2 года x12 будет и на этих ваших шосейниках.

P.P.S. А дисковые гидравлические тормоза уже набирают обороты на «гравийниках» (и появляются в професиональном пелетоне).

 , ,

KennyMinigun
()

Саундтрек Dying Light

Форум — Talks

Как-то меня случайно перенаправило на саундтрек к данной игре на youtube. Остался доволен после прослушивания. Напомнило саундтреки к Half-Life и Black Mesa. Поляки — молодцы, хорошая игра и саундтрек. Рекомендую любителям саундтреков из игр.

Целый альбом: https://www.youtube.com/watch?v=9iDYnAireiw (так же рекомендую к прослушиванию саундтреки с дополнений и DLC).

Для поиска: Paweł Błaszczak - Dying Light

 , ,

KennyMinigun
()

Подскажите PPA со свежим PulseAudio для Ubuntu Xenial

Форум — General

Имеется KDE Neon на базе Ubuntu Xenial (16.04). Подскажите PPA со свежими версиями PulseAudio для дистрибутива.

// Ну, или на крайняк годную инструкцию по самосборке.

 , , ,

KennyMinigun
()

Нецензурная лексика?

Форум — Linux-org-ru

Тут в Development была выкошена добрая часть обоснованной дискусии: Использование POD членов класса до их инициализации

Сообщение удалено leave по причине 5.1 Нецензурные выражения (0)

Поскольку причина удаления мне не понравилась, да и жалко сообщений, провел небольшие раскопки на тему. И, насколько, я вижу слово «педераст» не является нецензурным:

Максимальный негативный аттрибут характеризирующий слово — «вульгарный».

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

 ,

KennyMinigun
()

Использование POD членов класса до их инициализации

Форум — Development

Привет ЛОР,

Подскажите, наличествует ли в приведенном коде UB? https://wandbox.org/permlink/6aWOyqM3lln2aJgT

class StringView {
public:
    StringView(const char *str, std::size_t size)
        : m_str(str),
          m_size(size)
    {}
    
    const char *data() const { return m_str; }
    std::size_t size() const { return m_size; }
    
private:
    const char * const m_str;
    const std::size_t m_size;
};

template <typename T>
class NumericStringView : public StringView {
public:
   NumericStringView(T value) 
       // вопрос с топика адресует строчку ниже
       : StringView(convertToBuffer(m_buffer, BUFFER_SIZE, value))
   {}
    
private:
    static StringView convertToBuffer(char *buffer, std::size_t size, T value) {
        auto str = std::to_string(value);
        if (str.size() >= size)
            throw std::runtime_error("value is too big");
        
        strcpy(buffer, str.c_str());
        return StringView(buffer, str.size());
    }
    
private:
    constexpr static std::size_t BUFFER_SIZE = 30;
    // указатель на данный POD-член передается в родительский конструктор
    char m_buffer[BUFFER_SIZE]; 
};

А именно интересует вызов конструктора базового класса с (неявной) передачей ему указателя на POD член дочернего класса (StringView(convertToBuffer(m_buffer, BUFFER_SIZE, value))).

P.S. да, я знаю про std::string_view и в оригинальном коде он и используется. В данном примере StringView использован для наглядности (см. по ссылке).

P.P.S. В оригинале в convertToBuffer используется sprintf и черная магия, потому попрошу не придираться к реализаии в примере.

 ,

KennyMinigun
()

Чем парсить целые числа?

Форум — Development

Ситуация такова, что даже хваленый boost::lexical_cast может удивить: https://wandbox.org/permlink/PP0RTfmifVO816U0

std::cout << boost::lexical_cast<unsigned int>("-1"); // исключения не будет

Спойлер: http://www.boost.org/doc/libs/1_60_0/doc/html/boost_lexical_cast/frequently_a...

Скажите, есть ли вообще в природе средства для парсинга целых чисел (пускай даже ограниченные до radix=10) которые не удивляют?

Т.е. :

  • Не пропускают пробелов вначале строки
  • Интерпретируют всю строчку (а не до первого непонятного символа)
  • Нет автоматического определения radix (т.е. "012" будет 12 а не 10)
  • Могут интерпретировать подстроку (но польностью). Как boost::lexical_cast(str, len)
  • Трактуют 8-ми битные типы как числа (а не как символ/байт, ибо первый байт строки я и сам могу взять)
  • ... не имеют других подводных камней

 , ,

KennyMinigun
()

Самые раздражающие вещи при работе за компьютером

Форум — Talks

Сабж. Меня дико бесит залипание клавиш на клавиатуре, после того как разлил на нее чай/кофе/etc. Ведь как не чисти, все равно чтоб было как раньше — не добьешся

А что раздражает вас?

 ,

KennyMinigun
()

Scons проверить вывод clang

Форум — Development

Вот и настал тот момент, когда мне надо ковырять билд-скрипты scons. Раньше использовал scons только как пользователь.

Помогите пожалуйста решить задачу: в ситуации когда clang используется как компилятор необходимо определить выбранную инсталляцию GCC (stdlib) и задефайнить ее версию как макро во время сборки.

Т.е. можно распарсить вывод:

$ clang++ -v
clang version 3.9.1-5ubuntu1 (tags/RELEASE_391/rc2)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
...
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0
...

Но я вот только не понимаю, как проверить какой используется компилятор и как получить путь к его бинарнику?

 , ,

KennyMinigun
()

Java скатилась?

Форум — Talks

Уже который раз при обновлении Java на оффтопике оно мне предлагает (RECOMMENDED!) поменять мой поисковик на Yahoo. Методы malware... чессслово. Если бы не корпоративный интранет сайт на Java, уже бы снес за такое.

>>> Читать еще

 , ,

KennyMinigun
()

Странное поведение kwin после установки virtualbox-guest-x11

Форум — General

Накатил я апдейт до Kubuntu Zesty/17.04 в VirtualBox (раньше было Yakkety/16.10. После того kwin перестал показывать окна: ни панелек плазмы ни обычных окошек не видно (однако процессы запущены и работают). Если сделать kwin --replace (т.е. перезапуск kwin с заменой) то окна появляются на несколько мгновений, затем снова исчезают.

Методом тыка опеределил, что после сноса virtualbox-guest-x11 все возвращается к норме (вот только двусторонний буффер обмена с хостом не работает, досадно). Во время установки пакета virtualbox-guest-x11 появляются такие сообщения:

update-alternatives: using /usr/lib/virtualbox/additions/00vboxvideo.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in auto mode
update-alternatives: using /usr/lib/virtualbox/additions/00vboxvideo.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in auto mode
Причем содержание файла довольно странное:
$ cat /usr/lib/virtualbox/additions/00vboxvideo.conf
/usr/lib/virtualbox/additions

Помимо, в системе еще установлен пакет virtualbox-guest-dkms.

Подскажите пожалуйста как поправить (хотя бы заставить двусторонний буфер обмена работать).

 , ,

KennyMinigun
()

Посоветуйте велокомпьютер

Форум — Talks

Вобщем присматриваю себе сабж по критериям (в порядке приоритета):

  1. Связь со смартфоном (bluetooth or whatever) / Strava
  2. Настраиваемость (чем больше опций, тем лучше)
  3. Поддержка (запоминание) 2-х (или больше) велосипедов
  4. Возможность «поиграться» с прошивкой (попрограммировать?)

Естественно, водонепроницаемость и быстрое крепление/отстегивание «is a must».

Набрёл в сети такой пафосный Wahoo Elemnt (и его «младшего брата» Wahoo Rflkt). В принципе нравится. Цена кусается, но не очень страшно.

Короче, посоветуйте, ато я себя чувствую как школьник уставившийся на светящуюся витрину.

 , , ,

KennyMinigun
()

Сигналы и передача по ссылке

Форум — Development

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

Т.е. пример кода будет выглядеть так:

struct Foo { char data[500]; }

class Emitter : public QObject {
    Q_OBJECT
signals:
    void makeFoo() { 
        foo.emplace_back(); 
        emit fooCreated(foo.back());
    }

    void fooCreated(Foo &);
private:
   std::vector<Foo> foo;
};

class Receiver : public QObject {
    Q_OBJECT
public slots:
    void onFooCreated(const Foo &) {}
};

void run() {
    Emmiter e;
    Receiver r;
    QObject::connect(&e, &Emitter::fooCreated, 
                     &r, &Receiver::onFooCreated);

    e.makeFoo(); 
}

А вопрос для данног фрагмента кода: есть ли гарантии, что Foo не будет скопирован? (зависит ли копирование от типа соединения в QObject::connect)

 ,

KennyMinigun
()

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