LINUX.ORG.RU

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

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Статьи — Разработка
Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Введение

С годами работы в области распределённых систем, я понял, что мой опыт не будет полным без реализации алгоритма Raft. Это осознание побудило меня к действию: я решил создать свою реализацию, используя асинхронные возможности C++20.

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

 , , , ,

Reset
()

Помогите настроить OPENVPN c обфускацией

Форум — Admin

Ребят, подскажите по братски. Есть сервер с OPENVPN для частной ЛОКАЛЬНОЙ сети между компами (10 шт) Доступ идет чисто как локалка чтобы работало пару прог типа базы данных. Вот такой конфиг сервера и клиента

port 1194
proto udp
dev tap
#crl-verify /etc/openvpn/crl.pem
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 172.28.55.0 255.255.255.0
route 172.28.55.1 255.255.255.0
push «route 172.28.55.1 255.255.255.0»
client-config-dir /etc/openvpn/ccd
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
client-to-client
push «dhcp-option DNS 172.28.0.1»
sndbuf 524288
rcvbuf 524288
push «sndbuf 524288»
push «rcvbuf 524288»
duplicate-cn
verb 4

. . .

Клиенты

. . .

client
remote ip.мое.го.серва 1194 
dev tap
proto udp
auth-nocache
nobind
persist-key
persist-tun
cipher AES-256-CBC
sndbuf 524288
rcvbuf 524288
verb 3
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
123
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
123
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
123
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
123
-----END OpenVPN Static key V1-----
</tls-auth>

Все работало более чем идеально, но в связи с тестами ТПСУ компы не видят друг друга. Помогите с настройками обфускации. чтобы на клиентских компах не ставить ничего нового.

 ,

Wosh
()

Как подробно диагностировать ошибки std::fstream

Форум — Development

Привет, ЛОР.

Вот такой вот нубовопрос нарисовался по языку, на котором я пишу больше 10 лет…

В С++ после fstream::open() я могу вызвать is_open(), который и сообщит мне, удалось ли открыть файл. А вот как в случае неудачи получить более полную диагностику?

Что встречал: рекомендацию зачитывать глобальный errno и по желанию вызывать strerror().

Правильно ли это? errno ведь вообще из Си пришёл…

 

hobbit
()

Яндекс выложил в опенсорс userver — инструмент для создания высоконагруженных приложений

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

Интернет, 29 июля 2022 года. Яндекс опубликовал исходный код и документацию фреймворка userver. Это первый открытый набор инструментов, который позволяет создавать высоконагруженные приложения на языке С++ и протестирован на масштабах уровня Яндекса. Userver используют в Яндекс Go, Лавке, Доставке, Маркете, финтех-проектах и многих других сервисах компании. Фреймворк предоставляется по открытой лицензии Apache 2.0.

Userver лучше всего подходит для разработки приложений с микросервисной архитектурой. Изначально фреймворк разрабатывался в Такси, с его помощью команда перешла с монолитного приложения на архитектуру, которая позволяет разрабатывать отдельные независимые компоненты (микросервисы) и использовать их в разных приложениях.

Микросервисы автономны, поэтому приложение на подобной архитектуре легко обновлять и добавлять в него новые функции. Так, микросервис поиска водителя на заказы в Такси можно использовать для схожей задачи — например поиска курьера для выполнения заказов Яндекс Доставки. То же самое можно проделать и с расчетом времени прибытия водителя или курьера и многими другими задачами.

«Когда мы переходили на микросервисы, мы понимали, что новый фреймворк должен быть как можно проще для разработчиков и бизнеса. Поэтому userver создавали с акцентом на надёжность и удобство, а внутри него есть всё необходимое для разработки, диагностики, мониторинга, отладки и экспериментов. Например, userver подсказывает как исправить ошибки ещё на этапе компиляции, умеет работать с разными базами данных, менять параметры на лету и так далее. Он хорошо подходит для разработки приложений как в небольших, так и в крупных компаниях. И с помощью userver даже новичок может за неделю написать новый микросервис», — говорит Антон Полухин, один из авторов фреймворка и руководитель группы бэкенд-разработки решений для продуктовых команд RideTech и eCom.

Яндекс выкладывает в опенсорс и другие свои ключевые технологии — например, распределенную систему управления базами данных YDB, способную обрабатывать миллионы запросов в секунду, а также библиотеку машинного обучения CatBoost, которую Яндекс применяет в Поиске и других сервисах.

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

 , , ,

anonymous
()

Развлекательная теория и практика для C++ программистов

Форум — Development

Приветствую C++ программистов. Вы серьёзны и суровы. Но уверен, что развлечения и юмор вам не чужды. Поэтому сегодня у меня для вас ссылки на необычные ресурсы.

Во-первых, я написал статью наоборот. Я всегда писал, как сделать C++ код лучше. В этот раз я перешёл на тёмную сторону. Предлагаю вашему вниманию "50 вредных советов для С++ программиста". Будьте ментально аккуратны. Там зло. Если что - я вас предупреждал :).

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

Приятного чтения!

Во-вторых, мы возродили квест по быстрому нахождению ошибок и опечаток в C++ коде. Возможно, кто-то помнит, что несколько лет назад мы уж делали подобную штуку. Мы учли недостатки интерфейса и надеемся, теперь попасть в ошибку будет проще.

Удачи: Челлендж от анализатора PVS-Studio: насколько вы внимательны?

К сожалению, всё равно иногда есть неоднозначность, куда же нажать. Сделать задания идеально однозначными не получается. Прошу сильно не заморачиваться и подойти к этому именно как к развлечению, а не экзамену.

 , , ,

Andrey_Karpov_2020
()

С/С++: вопросы на собеседованиях

Форум — Development

Задача понять хорош кандидат для проекта или нет, как мне кажется, супер сложна. Допустим, он позитивный и всё такое. Поговорим исключительно о технической части. У кого есть опыт - поделитесь что вы спрашиваете у middle/senior разработчиков? Только практические задачи? Теория (какая)?

Ping bugfixer

 , ,

former_anonymous
()

Получить тип возвращаемого значения из лямбды

Форум — Development

Нюанс в том, что незивестен точный тип лямбды, они приходят из пользовательского кода, следовательно мне неизвестны типы и количество аргументов, которые функтор ожидает, т.е. я не могу использовать invoke_result<>. Нужно заглянуть в класс, схватить любой оператор() и вернуть тип возврата. Получилось такое:


template <typename T>
struct Return_type;
template <typename R, typename... Args>
struct Return_type<R(Args...)> {using type = R;};
template <typename R, typename Q, typename... Args>
struct Return_type<R (Q::*)(Args...)const> {using type = R;};
template <typename R, typename Q, typename... Args>
struct Return_type<R (Q::*)(Args...)> {using type = R;};

struct A{
	struct V {
		double operator()(int t)const {return 5;}
	};
};

int main() {
	auto l = [](double a, int e)mutable{return 2;};
	auto l2 = [](int a){;return 2;};
	Return_type<decltype(&decltype(l)::operator())>::type a;
	Return_type<decltype(&decltype(l2)::operator())>::type a2;
	Return_type<decltype(&A::V::operator())>::type a3;


	auto l3 = [](auto b){;return 2;};
	Return_type<decltype(&decltype(l3)::operator())>::type a4;

	return 0;
}

И в принципе свою задачу я решил, мне этого хватит, но не знаю как (и возможно ли вообще) получить тип от лямбды, внутри которой шаблонный оператор() (тот, что auto l3). Решаема ли задача в случае с l3?

 

kvpfs
()

Visual C++ STL code review

Форум — Talks

Больше открытости от Microsoft :)

На этот раз решили показывать code review C++ STL для всех желающих. Это первое видео, записанное в январе, в будущем будут выложены более новые видео.

Если вам интересно узнать как проходит code review в Майкрософт: https://www.youtube.com/watch?v=FUzrnHEiFI0

Обещают обновлять список code review: https://www.youtube.com/playlist?list=PLReL099Y5nRffygixwNJhENbYxhuJL6Ei

Кто-нибудь знает есть ли подобное у LLVM/gcc или просто у других языков?

 ,

fsb4000
()

doxygen и C++, примеры

Форум — Development

Коллеги!

Встречали ли вы проекты написанные на C++ и качественно документированные при помощи doxygen?

Можете ли ткнуть пальцем, ежели встречали?

Хочется посмотреть на то, как это делают лучшие из нас.

Или может быть есть какая-то система документации встроенной в код лучшая чем doxygen, а я про нее ничего не знаю?

 ,

shaplov
()

Hello world без ОС

Форум — Development

здрасьте здрасьте люди добрые


 section .text
global main
main:
movq $'1', %rcx
movq $4, %rax
movq $1, %rbx
movq $1,%rdx
int $0x80 

вот это я хочу скомпилировать получить машинные инструкции и записать их в файл f.bin после с помощью dd if=f.bin of=/dev/sdb

записать на флешку и запустить на голом железе. что мне нужно добавить в код на ассемблере, чтобы получить правильный машинный код, который выведет на экран '1'?

 

Assembler
()

Когда графику наконец перенесут в ядро?

Форум — Desktop

Где ей самое место.

Я ведь правильно понимаю, что сейчас при перемещении мыши происходит следующее:

  • Ядро ловит прерывание, пишет читающим из /dev/input/... инфу о перемещении мыши и пробуждает ждущих данных с соответствующего дескриптора (Xorg-сервер). Это первое переключение контекста.

  • Xorg, прочитав о перемещении мыши, дёргает drmModeMoveCursor чтобы переместить изображение курсора на экране. drmModeMoveCursor — это переключение контекста обратно в ядро.

  • Далее, Xorg-сервер посылает клиентам событие о перемещении мыши, записывая в сокет — опять переключение в ядро.

  • Клиенты читают из сокета — опять переключения контекста.

В общем, куча переключений контекста, поэтому графика заметно тормозит, что порождает темы вроде Windows работает плавнее и четче

Почему многие плюются от микроядер, говорят, что FUSE — это игрушка и реальные ФС должны быть в ядре, но при этом к идее всунуть графический сервер/композитор в ядро относятся отрицательно?

 , ,

utf8nowhere
()

Рабочее место.

Галерея — Скриншоты

Вот такой вот десктопчик. Всетаки WM самый оптимальный вариант для полноценной
работы. А если Вам необходим режим "карантина" при переходе с Винюков на
XWindow, то KDE и GNome в самый раз.

avalon@erussia.khv.ru

>>> Просмотр (1152x864, 214 Kb)

anonymous
()

Это вообще законно? Провал выполнения в нижележащую «мёртвую» функцию

Форум — Development

Случай из реального проекта, код ~10-летней выдержки. Когда-то давно забыл добавить return в функцию, где имеется хитрая условная компиляция. Долгое время всё нормально работало, а сегодня вот пересобрал проект и поимел весёлых проблем. При проигрывании звука сегфолтилось, хотя вроде как в коде всё было нормально. Старые версии (собранные старым GCC) не сегфолтились. При отключенной оптимизации сегфолта тоже не было. Что тут можно ещё сказать? Спасибо Сталлману за gdb, сильно удивился когда увидел вызов якобы вырезанной функции в нём. Ну и главное: читайте и анализируйте Warning’и, господа! Минимальный пример:

$ cat dead_code.cpp 
// dead_code.cpp

#include <cstdio>

int stub_0();
int pxt_PlayWithCallback(int chan, int slot, char loop, void (*FinishedCB)(int, int));

int pxt_Play(int chan, int slot, char loop) {
#ifdef _PLS_NO_DEAD_CODE
	if (stub_0()) {
		fprintf(stderr, "!!!!! GOOD CODE !!!!!\n");
	}
#else
    return pxt_PlayWithCallback(chan, slot, loop, NULL);
#endif
}

int pxt_PlayWithCallback(int chan, int slot, char loop, void (*FinishedCB)(int, int)) {
	fprintf(stderr, "????? DEAD CODE ?????\n");
	return stub_0();
}

int stub_0() { return 42; }

int main(int argc, char *argv[]) {
	return pxt_Play(-1, 20, 0);
}

// OK:
$ g++ dead_code.cpp
$ ./a.out 
????? DEAD CODE ?????

// OK:
$ g++ -D_PLS_NO_DEAD_CODE dead_code.cpp
$ ./a.out 
!!!!! GOOD CODE !!!!!

// WTF?:
$ g++ -O2 -D_PLS_NO_DEAD_CODE dead_code.cpp
$ ./a.out 
!!!!! GOOD CODE !!!!!
????? DEAD CODE ?????
Segmentation fault (core dumped)

// WTF???:
$ g++ -O3 -D_PLS_NO_DEAD_CODE dead_code.cpp
$ ./a.out 
!!!!! GOOD CODE !!!!!
!!!!! GOOD CODE !!!!!
...
!!!!! GOOD CODE !!!!!
!!!!! GOOD CODE !!!!!
Segmentation fault (core dumped)

А ведь довольно интересный простор за этим может скрываться. Ну право ведь, забыли return проставить, компилятор же по-дефолту return 0 впихнёт, верно? А я в этом был уверен.

P.S.

// Имеется предупреждение по-дефолту, отсутствует ret в конце функции, провал и сегфолт.
$ gcc --version
gcc (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)

// Предупреждение только с -Wall, ret в конце функции имеется, нет провала и сегфолта.
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)

P.P.S. поиграться с компиляторами:

C++: https://gcc.godbolt.org/z/7ne8PM
C: https://gcc.godbolt.org/z/b6vqbK

Может кто-нибудь из профи подробно объяснить механизм такого поведения? Спасибо.

См. комментарии и ссылки в теме.

 , , , ,

EXL
()

Опубликован Mesosphere — открытое ядро ОС для Nintendo Switch

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

Привет, ЛОР!

Mesosphere – открытый вариант ядра операционной системы Horizon для игровой приставки Nintendo Switch, совместимый с оригинальным. Разработкой занимается автор кастомной прошивки Atmosphere и группа разработчиков. На данный момент ядро загружается и работает на приставке, игры так же работают. Тем не менее, остаётся ещё большое количество багов и отсутствующих функций.

Исходный код опубликован под лицензией GPLv2 с исключениями.

>>> Исходный код на GitHub

>>> Анонс на Reddit

 , ,

hateyoufeel
()

Юзерспейсные обработчики могут мягко обрабатывать ситуации с нехваткой памяти

Форум — General

Летом был тред о неспособности ядра обрабатывать нехватку памяти: Линукс ядро не может мягко обрабатывать ситуации с нехваткой памяти

Пришло время продемонстрировать элегантное решение: https://youtu.be/G0FYDIKVPYI

Проблема: https://lkml.org/lkml/2019/8/4/15.

Решение: https://github.com/hakavlad/nohang.

Обсуждение в r/linux: https://www.reddit.com/r/linux/comments/ee6szk/killing_the_elephant_in_the_room_the_userspace/.

 ,

hakavlad
()

Наконец-то собственный рабочий кабинет дома

Галерея — Рабочие места

Давно смотрю на ЛОРе чужие рабочие места и очень хочется показать свое, рассказать о нем немного, ну и вообще поделиться радостью. Покупка собственной квартиры позволила организовать дома полноценный рабочий кабинет, такой как давно хотелось, а не такой какой приходилось.

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

Интерьер на вкус и цвет как фломастеры, а вот гвоздем программы явились столы. Опишу чуть более подробно, может кому пригодится. Вдоль двух стен углом размещены два стола по 2м 60см длиной каждый, шириной 65см и высотой 77 по верхней кромке (высота подбиралась опытным путем), под ними и на них огромное пространство для беспорядка и творчества соответственно. Столики сварены из квадратного профиля 40мм со стенкой 2мм, окрашены автоэмалью, а столешницы выполнены из ЛДСП. Просто и надежно. Вот только в лифт они не влезли и пришлось тащить на 8 этаж на горбу. Слева под столом спряталась передвижная тубма с полками и на колесиках - тоже самодел, целиком из ЛДСП. Справа мини стол длиной 45см со встроенными полками между ножек. Все провода и кабели подвешены под столом, не видно, не мешают, пыль не собирают, хотя подумываю организовать для них всех кабель-канал.

Последние лет 10 мечтал о подобном рабочем пространстве. Хоть ковыряйся с железом (места хватит для всего чего угодно), хоть сиди и прогай себе умиротворенно в полном порядке и чистоте. Основная моя деятельность сейчас связана именно с разработкой софта на Go. В качесвте хобби железо и сборка ПК, моделирование в CAD-системах.

Для удобного сидения и полулежания было приобретено кресло Метта SAMURAI S-1, очень нравится, прошел уже год и нисколько не жалею денег потраченных на него. После всех предыдущих заметно меньше стала уставать спина и шея, а приходится проводить, как и большинству здесь собравшихся, большую часть жизни сидя.

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

Железо, которое было нажито упорным «непосильным» трудом:

  • Проц AMD Ryzen Threadripper 1950X.
  • Память 64Gb DDR4 2400MHz Corsair Vengeance LPX (CMK64GX4M4A2400C14) (4x16Gb KIT).
  • БП 1700W Enermax Platimax (EPM1700EGT).
  • Стенд Thermaltake Core P7 Tempered Glass Black. Сейчас вероломно спрятан под стол, в процессе находится поиск элегантного расположения для него.
  • Мать ASUS ROG ZENITH EXTREME.
  • Видео Radeon RX Vega 64 MSI PCI-E 8192Mb Wave 8G.
  • Вебка Logitech HD Pro C920.
  • Полочники Yamaha NS-6490 в паре с простым интегральным усилком Yamaha A-S201.
  • Беспроводные уши Sony MDR-XB950N1.
  • Мышь и клавиатура проводные из сегмента а-ля геймер, но очень полюбившиеся, служащие верой и правдой уже три года A4Tech Bloody V8 и A4Tech Bloody B120.
  • Микрофон конденсаторный китайский безродный, но неплохой.
  • Телевизор, который прикидывается монитором DEXP U49D9000K UHD 60Hz (использую без масштабирования, как по мне, идеальная замена четырем мониторам FULL HD, печально только одно, не умеет в сон как любой монитор, приходится включать и выключать руками). Повешен на плоский кронштейн на стену. Цветопередача устраивает более чем, отклик тоже, я не искушенный задрот, поэтому позволяю себе на нем и поиграть. Опыт юзания огромных экранов уже большой, лет 6-7, глаза не устают и не отваливаются, все путем.
  • Вне дома выручает походно-переносной помощник ультрабук Honor MagicBook KPL-W00 14" на рязани, шустрая машинка за свои деньги, симпатичный, а что еще надо…
  • Домашней сетью рулит MIKROTIK CRS125-24G-1S-2HND-IN. Правда, у него нет 5Ггц, но для меня это не проблема. Вообще на данный момент по квартире разведены штук 10 кабелей гигабитной сети, вай-фай нужен по мелочам - телефоны, ноуты.

На столе еще присутствует парочка вейпов, понемногу ухожу от лампового курения.

Кроме рабочей станции и ноутбука есть еще три машины в других комнатах (пк в качестве тв приставок, собраны на рязани 1400, и, только не падайте в обморок, на каждой Vega 64, просто так вышло случайно, изначально на основной машине стояло четыре видеокарты, потом за ненадобностью они перекочевали в новые пк). Весь зоопарк недавно был дружно переведен на Ubuntu 20.04 beta методом чистой установки, почему? да просто на всякий случай, данных почти не было на дисках, ничего в общем не мешало. Заняло это все достаточно мало времени, сейчас полет нормальный.

Желаю всем, кто еще не успел, обзавестись уютным функциональным местом для работы или хобби, а тем у кого оно уже есть улучшать его и изменять, если того требует душа. Всем добра!

>>> Просмотр (4608x3456, 1300 Kb)

 , ,

zasyadko
()

U++ Framework 2020.1

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

В мае этого года (точная дата не сообщается) вышла новая, 2020.1, версия U++ Framework (Он же Ultimate++ Framework). U++ — кроссплатформенный фреймворк для создания GUI приложений.

Нововведения в текущей версии:

  • Linux бэкенд по умолчанию теперь использует gtk3 вместо gtk2.
  • «look&feel» в Linux and MacOS переработан и лучше поддерживает тёмные темы.
  • У ConditionVariable и Semaphore появились варианты метода Wait с параметром timeout.
  • Добавлена функция IsDoubleWidth для определения глифов UNICODE двойной ширины.
  • U++ теперь использует директории ~/.config and ~/.cache для хранения разного.
  • Добавлена функция GaussianBlur.
  • Модернизирован внешний вид виджетов в дизайнере слоёв.
  • Поддержка нескольких мониторов в MacOS и другие исправления.
  • В дизайнер добавлено несколько часто используемых виджетов, таких как ColorPusher, TreeCtrl, ColumnList.
  • Нативный диалог выбора файлов, FileSelector, переименован в FileSelNative и добавлен в MacOS (в дополнение к Win32 и gtk3).
  • Рефракторинг GLCtrl в OpenGL/X11.
  • Добавлена функция GetSVGPathBoundingBox.
  • PGSQL теперь может экранировать ? через ?? или использовать метод NoQuestionParams в целях избежания использования ? как символа подстановки параметров.

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

 , , ,

next_time
()

ПО для SpaceX разработано на С++

Форум — Talks

"Управляющее полётом Falcon 9 ПО написано на C/C++ и запускается параллельно на каждом из трёх компьютеров. Три дублирующих компьютера необходимы для обеспечения должного уровня надёжности за счёт многократного резервирования. Результат каждого решения сравнивается с результатом, полученным на остальных компьютерах, и только при совпадении на всех трёх узлах команда принимается микроконтроллером, управляющим двигателями и решётчатыми рулями.

В доставляемом на орбиту пилотируемом космическом корабле Crew Dragon также используется Linux и полётное ПО на C++."

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

Перемещено leave из development

 , ,

Lzzz
()

В чем плюсы контейнеров для разработки?

Форум — Development

Вот есть классический подход: наваял тулчейн (например, с помощью crosstool-ng), напихал туда нужных библиотек и таскаешь его с собой между системами в виде архива.

Сейчас модно нахерачить целый докер образ и таскать его с собой.

Вопрос: в чем плюс подобного подхода?

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

 ,

Trunk
()

C++ — сила, а вы не верили

Форум — Talks

Опытный разработчик игр проясняет смузихлебам за С++, линукс и emacs.

Для Ъ: аватар поставил хипсторов на место

P.S. на 02:00:00 самое интересное. Он рекомендует Croco.

Таймкоды в первом комментарии на ютубе.

 , , ,

BceM_IIpuBeT
()