LINUX.ORG.RU

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

argparse 3.0

Новости — Разработка
argparse 3.0
Группа Разработка

Состоялся выпуск 3.0 C++ (стандарт C++17) header-only библиотеки парсинга аргументов командной строки argparse, распространяемой по лицензии MIT.

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

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

 , , , ,

dataman
()

Вышла новая версия C++-драйвера для PostgreSQL

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

Pgfe (PostGres FrontEnd) - продвинутый и многофункциональный драйвер для PostgreSQL, написанный на C++. Разработка нацелена на простоту использования и надёжность, учитывая производительность.

Pgfe можно скачать на странице Github.

Достоинства

  • быстрый и надёжный;
  • может использоваться как header-only библиотека, так и как статическая или разделяемая библиотека;
  • работает с подключениями к базе данных как в блокирующем, так и в неблокирующем режимах ввода-вывода;
  • поддерживает prepared statements как с позиционными, так и с именованными параметрами;
  • обеспечивает первоклассную поддержку для вызова функций и процедур;
  • поддерживает продвинутые функции PostgreSQL, такие как конвейер, COPY и большие объекты;
  • поддерживает обработку ошибок с помощью исключений и условий ошибок: предоставляет запись enum для каждого предопределенного SQLSTATE;
  • обеспечивает продвинутую поддержку преобразования данных: даже многомерные массивы PostgreSQL в/из любых комбинаций контейнеров STL могут быть выполнены с лёгкостью;
  • обеспечивает поддержку динамического построения SQL-запросов;
  • позволяет разделить SQL-запросы и код C++ на стороне клиента;
  • обеспечивает простой, надежный и потоко-безопасный пул соединений;
  • многие другие функции для удобства и безопасности.

Требования

  • компилятор C++17 (протестировано на GCC и MSVC);
  • libpq;
  • CMake 3.16+ (необязательно, только если требуется сборка).

>>> Оригинал

 ,

anonymous
()

Разный результат исполнения из-под отладчика и с использованием systemctl

Форум — Development

Добрый день

Имеется Малинка RPi3b. Написано приложение на Qt, которое читает данные от GPS модуля и выводит их на экран. Если запускать апп при старте Малинки с помощью systemctl, то выводятся одни координаты. Если запускать апп из-под отладчика, то другие, отличаются на сотые доли градуса. Помогите, пожалуйста, разобраться.

Спасибо.

 , ,

AlexVM2020
()

ИИ для бота на CUDA/TensorFlow

Форум — Development

Что почитать для написания простого бота для танчиков как в денди? На двумерной сетке, без анализа графики, то есть данные доступны уже в готовом виде - позиции противников, препятствия и т.п. Чтобы мозги работали на нейросетях и играл как человек, соперничал, искал обходные пути, мог оценивать разные не сложные стратегии и принимать решения, ну и всё такое… насколько это всё сложно и насколько продвинулись в этом нейросетки и существующие фреймворки по типу TensorFlow?

 , , , ,

menangen
()

Поиск легковесной C++ библиотеки для запуска дочерних процессов в Linux-е

Форум — Development

В последний раз, когда довелось столкнуться с задачей запуска дочерних процессов в Linux-е, то воспользовался вот этой штукой: https://github.com/skystrife/procxx

Но она уже более трех лет не развивается. Поэтому возник вопрос, а не появилось ли за это время что-то более свежее и живое?

Если кто-то знает хорошие альтернативы procxx, то поделитесь ссылками плиз.

PS. Ищется небольшая C++11 библиотека, без большого количества зависимостей, поэтому Qt, Boost-ы, ACE и Poco не рассматриваются. В принципе, можно и для более свежих плюсовых стандартов, хотя пока что есть надобность ограничиться C++11.

 

eao197
()

Узнать размер объекта в C++ по его vtable

Форум — Development

Собственно есть подобный код:

class Obj 
{public:  
};

class P: public Obj {
public: P() {}
    
};

class O: public Obj { 
    int x = 42;
public: O() {}
};

void foo(Obj* obj) {
    auto size = ????(obj);
}

Могу ли я как то получить в функции foo размер объекта который является аргументом? Например при foo(new O()) я ожидаю получить sizeof(int)

 

guixoid
()

Вывод типа для значений для которых нет перегрузки в std::ostream

Форум — Development

Вопрос к знатокам.

Хочу сделать вывод названий типов используя typeid(T).name() для выражений которые «не умеют» выводить своё значение в std::ostream.

Пытаюсь делать вот так:

#include <iostream>
#include <typeinfo>

template <typename T, typename = std::ostream&>
struct can_be_streamed : std::false_type {};

template <typename T>
struct can_be_streamed<T, decltype(std::declval<std::ostream&>() << std::declval<T>())> : std::true_type {};

template <typename S, typename T>
typename std::enable_if<!can_be_streamed<T>::value, S&>::type operator<<(S &s, const T &t)
{
    return s << "type:" << typeid(t).name();
}

class A {};

std::ostream& operator<<(std::ostream &s, const A &)
{
    return s << "value:" /*<< ...*/;
}

class B {};

int main(void)
{
    A a;
    std::cout << a << std::endl;
    B b;
    std::cout << b << std::endl;
    return EXIT_SUCCESS;
}

Есть несколько версий компиляторов и...

gcc 9.1.0 всё Ok.

clang 7.0.1 всё Ok.

А вот gcc 6.4.0 кричит:

v1.cpp: In substitution of 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::error_code&) [with _CharT = char; _Traits = std::char_traits<char>]':
v1.cpp:8:66:   recursively required by substitution of 'template<class S, class T> typename std::enable_if<(! can_be_streamed<T>::value), S&>::type operator<<(S&, const T&) [with S = std::basic_ostream<char>; T = char [8]]'
v1.cpp:8:66:   required by substitution of 'template<class S, class T> typename std::enable_if<(! can_be_streamed<T>::value), S&>::type operator<<(S&, const T&) [with S = std::basic_ostream<char>; T = char [8]]'
v1.cpp:20:17:   required from here
v1.cpp:8:66: fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum)
 struct can_be_streamed<T, decltype(std::declval<std::ostream&>() << std::declval<T>())> : std::true_type {};

Откуда рекурсия?

И что нужно подправить для gcc 6.4.0 что бы это починить?

 

user0xff
()

Файловые потоки и причины ошибок

Форум — Development

Задумался я тут над элементарным вопросом о C++:

Как грамотно различать ошибки при работе с файловыми потоками (std::ofstream)?

Справочник по стандартной библиотеке указывает только на наличие флагов failbit, badbit, eofbit и соотв. геттеры. Гугл выдает какие-то мутные рецепты с SO, в которых при возникновении ошибок при работе с std::ofstream/ifstream подразумевается, что errno будет содержать код ошибки, как для операций В/В в стандартной библиотеке C.

Но с какой стати, если стандартная библиотека С++ не обязана ничего знать о существовании errno? По крайней мере в драфте стандарта C++11 в разделе о стандартной библиотеке ничего не сказано о errno.

 

seiken
()

Странное поведение панели plasma

Форум — General

Короче, когда запускаю некоторые приложения (hackmud, milkytracker, dota2), в панели виджет task manager зависает с одним и тем же списком приложений. Типа, утром я играл в hackmud, а вечером запускаю milkytracker и вижу в панели те приложения, которые запустил утром.

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

 , ,

Deleted
()

do{} while(0) вместо вложенных ифов

Форум — Development

Привет!
Народ, откуда пошла такая конструкция?

do
{
 if ( !cond0 ) break;
 foo();
 if ( !cond1) break;
 bar();
 //...
 if ( !condN) break;
return true;
} while ( 0 )
return false;


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

 ,

xoomer
()

Бинарный bash_history у root

Форум — General

У меня Debian 9, самый обычный. При этом bash_history у root почему-то бинарный файл, а не просто текст ASCII, как у моего пользователя.

Вопрос: для чего это сделано и как вернуть все обратно, если нужно? То есть сконвертировать .bash_history обратно в ASCII и чтоб она и далее так сохранялась.

vsevolod@hp15debian9:~$ file .bash_history
.bash_history: UTF-8 Unicode text
vsevolod@hp15debian9:~$ su
Пароль: 
root@hp15debian9:/home/vsevolod# cd ~
root@hp15debian9:~# file .bash_history
.bash_history: data
root@hp15debian9:~# 

 , , ,

Vsevolod-linuxoid
()

Абанта докатилась, пихает бездуховную рекламу в /etc/motd и сливает инфу

Форум — Talks

In Ubuntu 17.04 or newer, there is a script at /etc/update-motd.d/50-motd-news that reads motd.ubuntu.com and displays that text with the rest of the MOTD.

Currently, motd.ubuntu.com shows a news item about HBO's Silicon Valley which has a reference to Ubuntu.

https://bugs.launchpad.net/ubuntu/ source/base-files/ bug/1701068


Сначала реклама третьесортных тивишоу, потом реклама наркотиков, айсис и шиндошс 10. Доколе?

 ,

entefeed
()

6to4 обработка траффика iptables и ip6tables

Форум — Admin

Здравствуйте
Имеется сервер. Debian 7 x86_64, ядро 3.2.0-4-amd64
eth1 - белый ip4 адрес eth0 - адрес 192.168.0.1/24(внутренняя сеть)
Настроил 6to4 интерфейс, как описано тут:
6to4.ru
Конфигурация iptables и ip6tables по умолчанию(это временно, не обращайте внимание на то, что для локалки не настроено правил).
ipv6 интернет адреса доступны, все пингуется, также я с другого ipv6-адреса(miredo) могу зайти на данный сервер по ssh.
Теперь про iptables. Допустим я хочу контролировать траффик.
Допустим имеется следующий скрипт для iptables:

#!/bin/bash

#iptables###########################

iptables -F
iptables -X

iptables -t nat -F
iptables -t nat -X

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i eth0 -j ACCEPT

#ip6tables###############################

ip6tables -F
ip6tables -X

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT


Насколько я понимаю, в данном случае в iptables(для ipv4) НЕТ правила, которое разрешает входящие пакеты ipv4 с типом 41 (ipv6), сооветственно входящий ipv6 траффик(не настоящий ipv6, а ipv6 упакованный в ipv4, т.е. фактически это входящий ipv4 траффик) должен блокироваться в соответствии с политикой, которая установилась вызовами:
iptables -P INPUT DROP
iptables -P FORWARD DROP

!!!НО. Они проходят. В соответствии с приведенным скриптом для настройки, я спокойно захожу на данный серевер по ssh (через ipv6), или пингую его посредством ping6, пинг проходит, возвращаются ответы.
Желая разобраться добавил в приведенный скрипт следующие строки:
iptables -A INPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 filter INPUT "
iptables -A OUTPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 filter OUTPUT "
iptables -A FORWARD -p 41 -j LOG --log-level debug --log-prefix "p-41 filter FORWARD  "

iptables -t mangle -A PREROUTING -p 41 -j LOG --log-level debug --log-prefix "p-41 mangle PRE "
iptables -t mangle -A INPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 mangle INPUT "
iptables -t mangle -A OUTPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 mangle OUTPUT "
iptables -t mangle -A FORWARD -p 41 -j LOG --log-level debug --log-prefix "p-41 mangle FORWARD "
iptables -t mangle -A POSTROUTING -p 41 -j LOG --log-level debug --log-prefix "p-41 mangle POST "

iptables -t nat -A PREROUTING -p 41 -j LOG --log-level debug --log-prefix "p-41 nat PRE "
iptables -t nat -A OUTPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 nat OUTPUT "
iptables -t nat -A POSTROUTING -p 41 -j LOG --log-level debug --log-prefix "p-41 nat POST "

iptables -t raw -A PREROUTING -p 41 -j LOG --log-level debug --log-prefix "p-41 raw PRE "
iptables -t raw -A OUTPUT -p 41 -j LOG --log-level debug --log-prefix "p-41 raw OUTPUT "

Т.е. в данном случае, я смотрю через syslog, в каких цепочках побывали пакеты с типом протокола ipv6(41).
Результат(патеты с типом 41 были в):
таблица filter: цепочка OUTPUT
таблица mangle: цепочки PREROUTING, INPUT, OUTPUT, POSTROUTING
таблица raw: цепочки PREROUTING, OUTPUT.

Вопрос: Почему входящие пакеты ipv4 с типом протокола 41(ipv6) не попадают в цепочку INPUT таблицы filter? Может нужно подгрузить какой-нибудь модуль ядра?

 , ,

rumgot
()

QT - QTextStream::readLine( qint64 maxlen = 0 ) Узнать факт отсечения части строки при чтении.

Форум — Development

Здравствуйте.
Имеется текстовый файл 111, содержащий единственную строку:
1234567890

Имеется следующий код c++(используется QT):
...

QFile f1("111");
f1.open(QIODevice::ReadWrite);
QFileStream sf1(&f1);
QString s1 = sf1.readLine(3);
...
При циклическом вызове sf1.readLine(), получаю по три символа за один вызов.

ВОПРОС:
Как определить, очередной вызов sf1.readLine() вернул отсеченную в предыдущем вызове часть строки или уже начало новой строки?

rumgot
()