LINUX.ORG.RU

Сообщения rumgot

 

Тачскрин настройка порога перемещения

Форум — Desktop

Добрый день. Есть компьютер в промышленном корпусе и у него тачскрин прдключенный через последовательный порт. Далее используется программа inputattach для создания устройства ввода (используется параметр -t213 (Sahara Touch-iT213 Tablet PC)). Вызов inputattach оформлен в виде сервиса для systemd, который вызывается через правило udev. Кроме того для udev настроено правило для калибровки данного устройства (чтобы в той точке, где пальцем ведешь, указатель мыши и был). Но есть проблема: иногда не получается выполнить клик по значку на рабочем столе, т.е. я дотрагиваюсь (тапаю/тыркаю) до тачскрина в месте значка, но ничего не выделяется, при этом указатель мыши находится над значком. При этом если мышкой кликнуть в этом же месте - все работает. Также иногда не получается поместить фокус ввода в поде ввода. У меня есть теория, что когда я тапаю по тачскрину, он воспринимает это как перемещение указателя, а не как клик, т.е. существует очень низкий порог того, как должна измениться координата тапа по сравнению предыдущей, чтобы это было защитано за перещение, а не за клик. Можно ли это как-то настроить? Влияет ли на это матрица трансформации, используемая для калибровки?

 , ,

rumgot ()

Просьба подтвердить баг в Qt - QTBUG-88125 ошибка в MOC

Форум — Development

Добрый день.

Версия Qt с данным багом: Qt5.15.1.

Версия Qt без данного бага: Qt5.12.9.

Повторно описывать подробно не буду, если что милости прошу на страницу бага (https://bugreports.qt.io/browse/QTBUG-88125).

Если у нас есть некий производный от QObject (или другого в его иерархии) с макросом Q_OBJECT и если в данном заголовочном файле есть подключение <bsoncxx/types.hpp> (напрямую или косвенно) то будет ошибка компиляции метаобъектным компилятором Qt (MOC).

Проблема заключается в следующих строках файла <bsoncxx/types.hpp>:

enum class type : std::uint8_t {
#define BSONCXX_ENUM(name, val) k_##name = val,
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
};

И вот содержимое <bsoncxx/enums/type.hpp>:

#ifndef BSONCXX_ENUM
#error "This header is only meant to be included as an X-macro over BSONCXX_ENUM"
#endif

BSONCXX_ENUM(double, 0x01)
BSONCXX_ENUM(utf8, 0x02)
BSONCXX_ENUM(document, 0x03)
BSONCXX_ENUM(array, 0x04)
BSONCXX_ENUM(binary, 0x05)
BSONCXX_ENUM(undefined, 0x06)
BSONCXX_ENUM(oid, 0x07)
BSONCXX_ENUM(bool, 0x08)
BSONCXX_ENUM(date, 0x09)
BSONCXX_ENUM(null, 0x0A)
BSONCXX_ENUM(regex, 0x0B)
BSONCXX_ENUM(dbpointer, 0x0C)
BSONCXX_ENUM(code, 0x0D)
BSONCXX_ENUM(symbol, 0x0E)
BSONCXX_ENUM(codewscope, 0x0F)
BSONCXX_ENUM(int32, 0x10)
BSONCXX_ENUM(timestamp, 0x11)
BSONCXX_ENUM(int64, 0x12)
BSONCXX_ENUM(decimal128, 0x13)
BSONCXX_ENUM(maxkey, 0x7F)
BSONCXX_ENUM(minkey, 0xFF)

Update 0 Временное решение

Все директивы #include для подключения заголовочных файлов библиотеки bsoncxx/mongocxx оборачивать в блоки с применением макроса Q_MOC_RUN:

#ifndef Q_MOC_RUN
// start to include the bsoncxx/mongocxx library header files
#include <bsoncxx/types.hpp>
#include <bsoncxx/array/value.hpp>
#include <bsoncxx/array/view.hpp>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/document/value.hpp>
#include <bsoncxx/document/view.hpp>
// etc
#endif

Спасибо @aol

 , ,

rumgot ()

Аналог git для большого количества файлов большого размера

Форум — Desktop

Добрый день.

Подскажите пожалуйста инструмент для выполнения резервного копирования (инкрементального) больших объемов данных с наличием версий. В основном мультимедиа: личные фото/видео, книги, фильмы, образы разделов. Желательно с интерфейсом командной строки (gui тоже пишите, если считаете нужным). Т.е. такой git только для файлов большого объема. Видел проект bup (https://github.com/bup/bup), может кто-то использовал, поделитесь опытом. Или просто использовать git? Но в таком случае, мне кажется будет долгая песня с большим объемом мультимедиа. Подскажите пожалуйста, кто-что думает?

 , ,

rumgot ()

Роскомнадзор разблокировал Telegram

Форум — General

Эта новость достойна LOR? https://rkn.gov.ru/news/rsoc/news73050.htm

Если да, запилите пожалуйста. Четно признаюсь мне, лень.

 ,

rumgot ()

С++ размышление об указателях на члены-переменные структур/классов

Форум — Development

Добрый день. Нормально ли считается использовать обычные указатели на члены-переменные структур/классов, например так:

#include <iostream>

using namespace std;

struct A {
  int i;
};

void f(int *i) { cout << dec << *i << " " << hex << (long)i << endl; }
void f(int &i) { cout << dec << i << " " << hex << (long)&i << endl; }

void f(A *pa, int A::*am) {
  cout << dec << pa->*am << " " << hex << (long)&(pa->*am) << endl;
}

void f(A *pa) { cout << dec << pa->i << " " << hex << (long)&(pa->i) << endl; }
void f(A &ra) { cout << dec << ra.i << " " << hex << (long)&(ra.i) << endl; }

int main() {
  A a{55};

  // Номально ли делать так
  f(&a.i);
  f(a.i);

  // Или лучше так (чем лучше?)
  f(&a, &A::i);

  // Или может вообще лучше так
  f(&a);
  f(a);

  return 0;
}

// Вывод:
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274

 

rumgot ()

Qt wigets рендеринг на OpenGL

Форум — Development

Добрый день. Подскажите пожалуйста с таким вопросом. Можно ли сделать так, чтобы рендеринг стандартных виджетов (QWidget и потомки) осуществлялся с использованием OpenGL, а не с использованием программного рендера. Вот например, столкнулся я с проектом, который представляет собой помойку из стандартных виджетов вперемешку с QML виджетами QQuickWidget и подумал, раз QML виджеты рисуются через OpenGL, то пусть бы все рисовалось через OpenGL. И еще вопрос: как вы относитесь к смещиванию стандартных виджетов и qml? Не приводит ли это к просадкам в производительности? Можно ли все делать полностью на qml или без виджетов не обойтись?

 , ,

rumgot ()

Внутреннее представление объекта зависит от реализации ???

Форум — Development

Добрый день.
Возможно вопрос соответствует не очень высокому уровню, прошу прощения, если что.
Вот есть такой код в книге «Язык программирования C++ С. Прата»:

const int LIM = 20;
struct planet {
    char name[LIM];
    double population;
    double g;
};
planet pi;

// Сохранение объекта pi в файл:
fout("planets.dat",ios_base::out | ios_base::app | ios_base::binary);
fout.write((char*) &pl, sizeof pi);
Правильно ли я понимаю, что внутреннее представление объекта pi принадлежащего структуре/классу planet определяется реализацией компилятора и не оговорено стандартом? И тот же вопрос для случая, когда среди членов класса будут объекты других классов, контейнеры, умные указатели и прочее. Немного уточню вопрос: массив char получающийся в итоге и сохраненный в файле будет одинаковый на разных платформах и компиляторах и оговорено ли в стандарте то какой будет этот масссив (т.е. оговорено ли, какое будет побайтовое представление объекта в памяти)?

UPD0 Помечу, что для единообразного преобразования числа в массив байт, и последующего единообразного обратного преобразования (даже при том, что эти преобразования могут быть выполнены на разных пк (например при передаче по сети) в программах, которые были скомпилированы разными компиляторами) можно использовать:
Boost.Lexical_Cast
std::stringstream (указано в документации к Boost.Lexical_Cast)
Qt QDataStream

 ,

rumgot ()

cmake добавить каталог заголовочных файлов к другим целям

Форум — Development

Добрый день.
В корне проекта есть каталог config. В нем есть файл config.h.in. Это шаблон конфигурационного файла на основе которого при сборке через механизм cmake configure_file() генерируется файл config.h который будет подключаться в исходниках целей через директиву

// Здесь не указываются пути, только имя файла
#include "config.h"

Также в каталоге config есть файл CMakeLists.txt следующего содержания (config.h.in добавляется к цели для того, чтобы отображаться в дереве проекта в IDE):

add_library(config config.h.in)
set_target_properties(config PROPERTIES LINKER_LANGUAGE CXX)
# или же можно установить свойства конкретного файла (с тем же эффектом)
# set_source_files_properties(config.h.in PROPERTIES LANGUAGE CXX HEADER_FILE_ONLY ON)

set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

configure_file(config.h.in config.h)
Без второй строки получаю ошибку:
CMake Error: Cannot determine link language for target "config".
CMake Error: CMake can not determine linker language for target: config
(это из-за того что cmake по расширению .in не может определить язык поэтому далее я указываю язык явно через set_target_properties())
Данный файл подключается в корневом файле CMakeLists.txt через команду
add_subdirectory("config")
Также есть подкаталог program со своим CMakeLists.txt который подключается в корневом CMakeLists.txt также через команду add_subdirectory(). Вот содержимое CMakeLists.txt из подкаталога program:
add_executable(program main.cpp)

target_link_libraries(program library0 library1 config)
В данном случае я добавил config в команду target_link_libraries() для того, чтобы добавить к текущей цели каталоги с заголовочными файлами из цели config.
При данной конфигурации сборка работает.
Вопрос: правильная ли это архитектура? Или добавить путь к конфигурационному файлу удобнее иначе? Например через команду cmake add_custom_target (через нее у меня не получилось, но возможно я делал это как-то не корректно)?

 , ,

rumgot ()

VxWorks memPartAlloc: block too big

Форум — Development

Добрый день. Имеется система VxWorks 6.8 и ее Ide Workbench. Есть проект. Проект собирается в качестве Downloadable Kernel Module. И при запуске получается вот такая ошибка:

memPartAlloc: block too big ...
Я понимаю, что в процессе работы моего кода, было выделено памяти больше чем позволено по дефолту. Так вот помогите пожалуйста настроить это допустимое количество памяти, куда тут смотреть? Имею ввиду конечно опции проекта в Workbench.

 ,

rumgot ()

C++ классы, friend функции, подскажите место в стандарте

Форум — Development

Добрый день.
Подскажите место в стандарте, где разъясняется следующее поведение:

#include <iostream>

using namespace std;

class A {
    int i_ = 555;

    friend void f0(A& a) { 
        cout << a.i_ << endl; 
    }

    friend void f1() {
        A a;
        cout << a.i_ << endl;
    }
};

// Если не указать эту строку, 
// то дальнейший вызов f1() не удастся
void f1();

int main() {
    A a;

    f0(a);

    // Здесь будет ошибка, если выше
    // нет объявления f1() вне класса
    f1();  

    return 0;
}
Где в стандарте написано, что в данном случае для f0 достаточно объявления в классе, а для f1 нет? Заранее спасибо.

UPD0
Нашел ответ.
В книге Язык программирования C++ Специальное издание (Бьерн Страуструп)
11.5.1. Поиск друзей
...

Дружественная функция может явно объявляться таким же образом, что и дружественный класс; или же ее можно искать по типу аргументов (§8.2.6) даже в случае, когда она объявлена вовсе не в самой близкой из охватывающих областей видимости.
Например:

void f(Matrix& m) {
    invert(m); // invert() - друг класса Matrix
}
Итак, дружественная классу функция или объявляется в непосредственно охватывающей области видимости, или имеет аргумент типа класса (или производного от него класса) (§13.6), или вообще не может быть найдена.
...

8.2.6. Поиск имен
Чаще всего функция с аргументом типа Т определяется в том же пространстве имен, что и тип Т. Поэтому, если функцию не удается найти в контексте, где она используется, поиск продолжается в пространстве имен ее аргументов.
Например:
namespace Chrono {
    class Date{ /*...*/};
    boot operator==(const Date&, const std::string&);
    std::string format(const Date&); // выдать строковое представление
    // ...
}

void f(Chrono::Date d, int i) {
    std::string s = format(d); // Chrono::format()
    std::string t = format(i); // error: нет format() в области видимости
}

 , , ,

rumgot ()

clang-format c++ разрешить пробелы перед скобками в функциях преобразования

Форум — Development

Добрый день.
Есть конструкции в объявлении шаблонного класса:

friend std::ostream &operator<< <>(std::ostream &os, const Point<T> &point);
friend bool operator== <>(const Point<T> &point, const Point<T> &otherPoint);
friend bool operator< <>(const Point<T> &point, const Point<T> &otherPoint);
При проходе этого clang-format-ом получается не очень красиво:

friend std::ostream &operator<<<>(std::ostream &os, const Point<T> &point);
friend bool operator==<>(const Point<T> &point, const Point<T> &otherPoint);

// А эта строка вдобавок не компилируется
friend bool operator<<>(const Point<T> &point, const Point<T> &otherPoint);

Как бы сказать clang-format-у, чтобы он не удалял данные пробелы?
Заранее спасибо.

UPD0
Пока на ум приходят только

// clang-format off
// ...
// clang-format on

UPD1 Отправил bug report https://bugs.llvm.org/show_bug.cgi?id=42381

 , ,

rumgot ()

Уровни C++ разработчика

Форум — Development

Добрый день. Вот попалась на глаза таблица с описанием необходимых навыков C++ разработчика https://i.postimg.cc/L47jp2pY/2-5452047437050938576-page-001.jpg. Огласите ваше мнение пожалуйста.

 

rumgot ()

C++ вызов метода объекта в выражении с конструктором

Форум — Development

Добрый день.
Подскажите пожалуйста момент.
Можно в C++ вызывать метод объекта сразу при создании:


class SomeClass {
public:
    int someMember() { return 0; }
};

int main() {

int i = SomeClass().someMember();

return 0;

}

Я так никогда не делал, т.к. считал, что это не по фэншую. Но вот иногда встречается в библиотеках эта форма (например в OpenCV есть).
Как вы к такому относитесь? И укажите пожалуйста, если в курсе, в стандарте такая форма где-то упомянается?

 ,

rumgot ()

ПО для геометрических вычислений

Форум — Desktop

Добрый день.
Посоветуйте пожалуйста ПО для геометрических вычислений.
Конкретно нужно:
- Нарисовать отрезок/прямую/многоугольник/окружность/точку.
- Получить точки пересечения прямых/отрезков/многоугольников/окружностей.
- Иметь возможность сохранить координаты точек многоугольников и остальных фигур в простом текстовом формате.

 , ,

rumgot ()

Паттерн наблюдатель - Менеджер изменений

Форум — Development

Добрый день.
В книге Приемы объектно-ориентированного проектирования. Паттерны проектирования от Банды четырех в главе о Наблюдателе обсуждается так называемый менеджер изменений (ChangeManager), применяемый для инкапсуляции сложной семантики обновления. А также реализация основанная на ациклическом направленном графе зависимостей между субъектами и их наблюдателями (DAGChangeManager).
0) В начале описания менеджера изменений пишется, что если некоторая операция влечет за собой изменения в нескольких независимых субъектах, то нужно, чтобы наблюдатели уведомлялись после того, как будут модифицированы ВСЕ субъекты, дабы не уведомлять одного и того же наблюдателя несколько раз. Почему именно так? Ведь если субъекты независимы, то логично при изменениях в некотором субъекте СРАЗУ уведомить соответствующих наблюдателей. И почему тут говорится НЕ УВЕДОМЛЯТЬ НЕСКОЛЬКО РАЗ ? Ведь за один вызов уведомляющей функции наблюдателю передается информация об изменении одного субъекта, соответственно, для того, чтобы уведомить его об изменениях в нескольких субъектах, нужно вызвать уведомляющую функцию, соответствующую каждому субъекту. Соответственно в любом случае будет столько вызовов уведомляющей функции, сколько субъектов изменилось для каждого наблюдателя.
1) В описании говорится, что если у одного наблюдателя несколько субъектов, то плохо, когда изменения сразу у нескольких субъектов, ведь тогда наблюдатель получит избыток уведомлений. Но почему избыток? Ведь логично, что от каждого субъекта будет по одному уведомлению для каждого субъекта? И далее пишется, что DAGChangeManager гарантирует, что наблюдатель получит только одно уведомление. Опять-таки какого хрена? Ведь нужно, чтобы наблюдатель получил уведомление от каждого субъекта, у которого зарегистрирован.
2) Можете более подробно описать работу DAGChangeManager?

 

rumgot ()

C++ RVO NRVO где в стандарте

Форум — Development

Добрый день. Ребят прошу прощения за наглость. Подскажите пожалуйста, где в стандарте написано про оптимизацию RVO и NRVO?

 ,

rumgot ()

Кто пишет SRS, SDD?

Форум — Development

Добрый день. Кто в ваших конторах (должность) пишет документы SRS(Software requirements specification), SDD(Software design description) и прочие? И второй вопрос: эти документы пишутся перед непосредственной разработкой, во время или после?

 , , ,

rumgot ()

Необходимость Boost.Multiprecision

Форум — Development

Добрый день.
Есть необходимость производить некоторое количество геометрических расчетов. Поиск точек пересечения, некоторые операции с векторами на плоскости и т.п. Так вот столкнулся с известными проблемами double (потеря точности). Как бы вы сделали, заморачивались бы с double самостоятельно или просто взяли бы готовую библиотеку, которая позволяет представлять числа с фиксированной точностью (Boost.Multiprecision)?

 , , , ,

rumgot ()

Предложение добавить возможность вставлять SVG изображения

Форум — Linux-org-ru

Добрый день всем.
Навеяно темой про emoji (Как вы относитесь к идее запрета emoji на форуме?).
Не знаю право, насколько есть польза от emoji.
Но вот хорошо было бы иметь возможность добавлять в сообщения изображения (хотя бы в SVG), чтобы при обсуждении некоторых вопросов графически изобразить вопрос или ответ (например схему сети или диаграмму классов и т.п.)
Как думаете?

 , , ,

rumgot ()

C++ кроссплатформенная библиотека для получения списка процессов и прочей инфы

Форум — Development

Добрый день.
Есть ли какая-нибудь не очень большая кроссплатформенная (linux / windows) C++ (или C на худой конец) библиотека для получения списка процессов, получения объема используемой памяти, загрузки процессора по каждому процессу и по всей системе и другой сопутствующей информации?

 , , , ,

rumgot ()

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