LINUX.ORG.RU

Сообщения 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 ()

Вызов переопределенного метода через объект производного класса

Форум — Development

Собственно ответ нашел (https://stackoverflow.com/a/6319619).

struct Base
{
    virtual int Foo()
    {
        return -1;
    }
};

struct Derived : public Base
{
    virtual int Foo()
    {
        return -2;
    }
};

int main(int argc, char* argv[])
{
    Base *x = new Derived;

    ASSERT(-2 == x->Foo());

    //syntax is trippy but it works
    ASSERT(-1 == x->Base::Foo());

    return 0;
}

Но интересно, такая форма описана в каком-нибудь стандарте?

 , , ,

rumgot ()

Libreoffice Writer особенности нумерации

Форум — Desktop

Добрый день.
Нужно сделать вот что.
Документ
1-2 страницы без нумерации,
3-4 нумерация римскими цифрами начиная с I (т.е. I-II),
5 и далее нумерация арабскими цифрами начиная с 1 (т.е. 1,2,3,...,n)
Пока просто сделано отдельными документами ((1-2),(3-4),(5-n)), но это не солидно. Подскажите пожалуйста, как это сделать в одном документе.

 , , ,

rumgot ()

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