Обновить
128K+

C++ *

Типизированный язык программирования

231,44
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

C++/Qt: пора валить?.

Время на прочтение14 мин
Охват и читатели129K

image


Если бы раньше я запускал новый долгоживущий проект, в котором основные функции связаны с большим объёмом вычислений при каком-то взаимодействии с пользователем через графический интерфейс, я бы не задумываясь использовал С++/Qt. Это позволяло использовать один фреймворк/язык везде, независимо от структуры проекта и его компонентов, без дополнительных сложностей с зоопарком технологий и зависимостей.

Сейчас, в свете присходящего с Qt, придётся менять подход...


Читать дальше →

Сколько кода на C++ нужно написать для разбора HTTP-заголовка Authorization с помощью easy_parser из RESTinio?

Время на прочтение9 мин
Охват и читатели7.2K


Мы продолжаем развивать бесплатный и открытый встраиваемый в С++ приложения HTTP-сервер RESTinio. В реализации RESTinio активно используются C++ные шаблоны, о чем мы здесь регулярно рассказываем (недавний пример).


Одной из точек приложения C++ной шаблонной магии стал easy_parser, небольшая реализация нисходящего рекурсивного парсера на базе PEG. Easy_parser был добавлен в RESTinio в прошлом году для того, чтобы упростить работу с HTTP-заголовками.


Мы уже немного обсуждали easy_parser-е в предыдущей статье. А сегодня хочется показать как же easy_parser применяется при разработке RESTinio. На примере разбора содержимого HTTP-заголовка Authorization. Попробуем, так сказать, заглянуть в потроха RESTinio.


Грамматика Authorization


Структура заголовка Authorization определена в RFC7235 следующим образом:

Читать дальше →

Микросервисы на С++. Выдумка или реальность?

Время на прочтение5 мин
Охват и читатели18K


В этой статье я расскажу о том, как создал шаблон (cookiecutter) и настроил окружение для написания REST API сервиса на С++ с использованием docker/docker-compose и пакетного менеджера conan.


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


Так вот, перед нами встала задача написать высоконагруженный сервис, основной задачей которого был препроцессинг поступающих к нему данных и запись их в БД. И после очередного перекура товарищ предложил мне, как С++ разработчику, написать этот сервис на плюсах. Аргументируя это тем, что так будет быстрее, производительнее, да и вообще, жюри будут в восторге от того, как мы умеем распоряжаться ресурсами команды. На что я ответил, что никогда не занимался такими вещами на С++ и с легкостью могу оставшиеся 20+ часов посвятить поиску, компиляции и компоновке подходящих библиотек. Проще говоря, я струсил. На том и порешили и спокойно дописали все на Python.

Читать дальше →

Реализация скелетной анимации для трёхмерных моделей

Время на прочтение16 мин
Охват и читатели23K

Здравствуйте! В данный момент на Хабре существует большое количество статей, посвящённых компьютерной графике и реализации различных эффектов, однако текстов на тему реализации скелетной анимации (особенно "с нуля") достаточно немного. Постараюсь восполнить этот пробел с помощью данного текста с описанием технологии и примером несложной реализации на C++ и OpenGL 4.5 (SDL2).


Кругом сплошные плюсы: топ-10 докладов конференции C++ Russia 2019 Piter

Время на прочтение3 мин
Охват и читатели9.7K
C++ требует серьезного подхода. Поэтому мы верим, что большинство плюсовиков — серьезные профессионалы, и если на праздниках требуется сидеть дома — они не будут выбираться на шашлыки тайными тропами, а предпочтут в это время расти как специалисты. И таким профессионалам на этих праздниках пригодится наш топ-10 докладов с конференции C++ Russia 2019 Piter:


Робот-попрошайка на ROS и нейросетках

Время на прочтение17 мин
Охват и читатели8.5K
Обычно к таким поделкам возникает два вопроса: «как?» и «для чего?» Первому вопросу посвящена сама публикация, а на второй я отвечу сразу:

Этот проект я затеял для того, чтобы освоить робототехнику, начиная с Raspberry Pi и камеры. Как известно, один из лучших способов чему-нибудь научиться — это придумать себе техзадание и попытаться его выполнить, по ходу получая необходимые навыки.

На тот момент у меня еще не было светлых идей в области робототехники, поэтому я решил сделать исключительно фановый проект — робота-попрошайку. В итоге получился автономный робот на Raspberry Pi и ROS, использующий Movidius Neural Cumpute Stick для обнаружения лиц. Он бродит по помещению, ищет людей, и трясет перед ними банкой. Вот как выглядит этот робот:


Читать дальше →

Трассировка silicon-а в формате хакатона. Без Physical Design не будет Айфона

Время на прочтение13 мин
Охват и читатели3.6K


Все смотрели фильм Дудя про стартапы Силиконовой Долины? А вы знаете, какой стартап Долины был самый силиконовый в 1977 году? Это был Silicon Valley Research, также известный как SVR и Silvar-Lisco. Стартап делал программы, которые автоматически размещали транзисторы на площадке чипа и соединяли их дорожками. Стартап вышел на биржу и даже дожил до 21 века, но не смог конкурировать с новыми лидерами — сначала Daisy/Mentor/Valid, а потом Synopsys и Cadence.

Программы, которые делал SVR, назывались программами размещения и трассировки, по английски Place & Route — P&R. Они сильно повысили производительность труда инженеров — до P&R программ чертежи маски чипа клеили из цветного картона (Intel 4004), рисовали карандашами на бумаге, или бегали курсором по текстовому экрану и соединяли плюсиками и минусиками элементарные блоки, которые изображались звездочками (так проектировали чипы в IBM/370-совместимых компьютерах Amdahl, продвинутых родственниках советских ЕС ЭВМ).

SVR основал профессор из Стенфорда Билл ван Климпат, которого я знал лично, так как он был ангел-инвестором и членом совета директоров моего собственного стартапа. Билл периодически воспитывал меня за плохое поведение на заседаниях и прокрастинацию, а также рассказывал байки про патентные суды, по которым он постоянно ходил в качестве эксперт-свидетеля.

Поэтому когда в казанском Иннополисе мне предложили организовать проект на их хакатоне для студентов по CASE Tools, я вспомнил Билла и предложил сделать на хакатоне минимальную программу трассировки. Этот пост — отчет о результатах этого экспериментального хакатона. Их также наверное стоит обсудить на zoom-конференции в Иннополисе по Open Source проектам, которая будет через неделю.

Учебник по симулятору сети ns-3. Глава 6

Время на прочтение38 мин
Охват и читатели3.4K


главы 1,2
глава 3
глава 4
глава 5


Глава 6 Строим топологии
6.1 Построение топологии шинной сети
6.2 Модели, атрибуты и реальность
6.3 Построение топологии беспроводной сети
6.4 Очереди в ns-3
6.4.1 Модели очередей доступные в ns-3
6.4.2 Изменение настроек по умолчанию


Глава 6


Строим топологии


6.1 Построение топологии шинной сети


В этом разделе мы собираемся расширить наши знания по сетевым устройствам и каналам ns‑3, чтобы охватить пример шинной сети. Ns‑3 предоставляет сетевое устройство и канал, который мы называем CSMA (множественный доступ с контролем несущей).


Устройство CSMA в ns‑3 моделирует простую сеть в духе Ethernet. Настоящий Ethernet использует CSMA/CD (множественный доступ с контролем несущей и обнаружением коллизий) с экспоненциально нарастающей конкуренцией за общую среду передачи. Устройство и канал CSMA ns‑3 моделируют это только отчасти.


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


В нашей директории examples/tutorial мы предоставляем пример сценария. Этот скрипт основан на сценарии first.cc и добавляет сеть CSMA к симуляции точка-точка, которую мы уже рассмотрели. Откройте examples/tutorial/second.cc в вашем любимом редакторе. Вы уже видели достаточно кода ns‑3, чтобы понять большую часть того, что происходит в этом примере, но мы пройдемся по всему сценарию и рассмотрим некоторые из результатов.

Читать дальше →

C++ быстрее и безопаснее Rust, Yandex сделала замеры

Время на прочтение15 мин
Охват и читатели150K

Спойлер: C++ не быстрее и не медленнее и вообще смысл не в этом. Эта статья является продолжением славных традиций развенчания мифов крупных российских компаний о языке Rust. Предыдущая была "Go быстрее Rust, Mail.Ru Group сделала замеры".


Недавно я пытался заманить коллегу, сишника из соседнего отдела, на Тёмную сторону Rust. Но мой разговор с коллегой не задался. Потому что, цитата:


В 2019 году я был на конференции C++ CoreHard, слушал доклад Антона antoshkka Полухина о незаменимом C++. По словам Антона, Rust еще молодой, не очень быстрый и вообще не такой безопасный.

Антон Полухин является представителем России в ISO на международных заседаниях рабочей группы по стандартизации C++, автором нескольких принятых предложений к стандарту языка C++. Антон действительно крутой и авторитетный человек в вопросах по C++. Но доклад содержит несколько серьёзных фактических ошибок в отношении Rust. Давайте их разберём.

Руководство Google по стилю в C++. Часть 10

Время на прочтение15 мин
Охват и читатели34K
Часть 1. Вступление

Часть 9. Комментарии
Часть 10. Форматирование
Часть 11. Исключения из правил


Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Читать дальше →

Сортировка слабой кучей

Время на прочтение10 мин
Охват и читатели11K

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

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

Алгоритмы рандома

Время на прочтение5 мин
Охват и читатели101K
В этой статье вы увидите самые разнообразные велосипеды алгоритмы для генерации случайных чисел.

Про что статья


Про алгоритмы генерирующие псевдослучайные числа, которые отличаются между собой качеством результата и скоростью исполнения. Статья будет полезна тем, кто хочет получить высокопроизводительную генерацию чисел в своих программах или разработчикам софта для микроконтроллеров и старых платформ по типу ZX Spectrum или MSX.
Читать дальше →

Параллелизм, корутины, событийные автоматы,… живая математика

Время на прочтение16 мин
Охват и читатели5.4K
Параллельные вычисления завораживают неожиданностью своего поведения. Но нельзя, чтобы совместное поведение процессов было непредсказуемым. Только в этом случае его можно изучить и разобраться в его причудах. Современный многопоточный параллелизм неповторяем. В буквальном смысле. И в этом вся его нехорошая суть. Суть, на которую можно и нужно повлиять. Суть, которую следовало бы, по-хорошему, давно изменить…

Хотя есть и другой вариант. Не надо ничего пока менять и/или на что-то влиять. Пусть будет многопоточность и корутины, пусть будет… и параллельное автоматное программирование (АП). Пусть соревнуются и, когда это необходимо и возможно, дополняют друг друга. В этом смысле у современного параллелизма есть, как минимум, один плюс — он позволяет это делать.

Ну, так что, посоревнуемся!?
Читать дальше →

Ближайшие события

Установка и настройка SDK для сборки LibreOffice extension

Время на прочтение4 мин
Охват и читатели8.1K

Введение


В процессе разработки нашего продукта DSS потребовалось создать расширение для LibreOffice на C++. Выбор языка был обусловлен наличием уже существующих проектов на C++, а разводить «зоопарк» в проектах не хотелось.

Начали изучать материалы по этому вопросу, статьи, в том числе и на данном ресурсе. Казалось бы, данных довольно много, однако на самом деле информация была либо очень скудной, либо она была уже не актуальна из-за устаревших версий LO.

Пришлось изучать вопрос своими силами.

image

Сборка SDK


Для сборки под Windows понадобятся


  • LibreOffice 6.2.4/6.2.5 +LibreOffice SDK 6.2.4/6.2.5 ( LibreOffice & SDK) или версии выше.
  • GNU Zip Make CoreUtils Sed( GNU )
  • jdk (JDK)
  • Microsoft VS с установленным компилятором под C++ + MSTools и Microsoft.NET

Основные шаги


Устанавливаем LibreOffice и LibreOffice SDK, желательно в директорию «Без пробелов».

Пример C:\App\Libreoffice6.2.4.2x64 и C:\App\Libreoffice6.2.4.2x64\sdk соответственно.

Открываем консоль, переходим в директорию содержащую наше скаченное SDK:
cd C:\App\Libreoffice6.2.4.2x64\sdk
Запускаем setsdkenv_windows.bat

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

  1. LibreOffice;
  2. LibreOffice SDK;
  3. GNU утилит необходимых для сборки пакетов, компиляторов С ++,C# и VB.NET, и директории Java SDK.

Указываем соответствующие папки.
Читать дальше →

Создание и настройка Mesh-сети на собственном опыте, а также немного цифр и аналитики

Время на прочтение6 мин
Охват и читатели11K

Все началось с того, что на очередном обсуждении дальнейшей судьбы проекта, над которым я тогда работал, кто-то сказал: «А давайте прикрутим меш-сети, ведь это круто, модно и молодёжно!». И именно с этого момента началась моя неравная борьба с меш-сетями, из которой мы с товарищем вышли победителями. Хоть и с небольшой оговоркой.


image
Читать дальше →

Непоследний обзор Renga API

Время на прочтение5 мин
Охват и читатели9.5K
Система для проектирования зданий и сооружений Renga активно разрабатывается, в ней есть инструменты для архитекторов, конструкторов КЖ и КМ, инженеров ВК, ОВ, ЭО и ЭС. С каждой версией система, которая сейчас разделена на Renga Architecture, Renga Structure и Renga MEP, а совсем скоро станет единой, наращивает функциональность. Вместе с этим растет и меняется, становится все более востребованным API. Ведь в Renga можно создать информационную модель здания, но нельзя (и не планируется) получить красивый рендер, смету на строительство или расчет трубопроводов. Конечно, можно экспортировать модель из Renga в такие распространенные форматы, как OBJ, IFC, STEP и многие другие, но, чтобы обойтись без посредников и избежать возможно неверной интерпретации данных при экспорте/импорте, лучше действовать через API.

Renga MEP
Читать дальше →

Отъявленные баги и как их избежать на примере ClickHouse

Время на прочтение17 мин
Охват и читатели9.3K
Если вы пишете код — готовьтесь к проблемам. Они обязательно будут, и ожидать их стоит со всех сторон: от вашего кода и компилятора, от операционной системы и железа, а еще пользователи иногда подкидывают «сюрпризы». Если вы отмасштабировали кластер до космических масштабов, то ожидайте «космических» багов. Особенно, если речь идёт о данных из интернет-трафика.


Алексей Миловидов (o6CuFl2Q) расскажет о самых нелепых, обескураживающих и безнадёжных проблемах из его опыта разработки и поддержки ClickHouse. Посмотрим, как их приходилось отлаживать и какие меры принимать разработчикам с самого начала, чтобы проблем было меньше.

Blitz.Engine: Ассетная система

Время на прочтение9 мин
Охват и читатели5.9K


Прежде чем разбираться в том, как работает ассетная система движка Blitz.Engine, нам необходимо определиться с тем, что такое ассет и что именно мы будем понимать под ассетной системой. Согласно Википедии, игровой ассет — это цифровой объект, преимущественно состоящий из однотипных данных, неделимая сущность, которая представляет часть игрового контента и обладает некими свойствами. С точки зрения программной модели, ассет может выступать в виде объекта, созданного на некотором наборе данных. Ассет может храниться в виде отдельного файла. В свою очередь, ассетная система — это множество программного кода, отвечающего за загрузку и оперирование ассетов различных типов.

Фактически ассетная система — это большая часть игрового движка, которая может стать верным помощником для разработчиков игры или же превратить их жизни в кромешный ад. Логичным, с моей точки зрения, решением было сконцентрировать этот «ад» в одном месте, бережно оберегая от него других разработчиков команды. О том, что у нас получилось, мы и расскажем в этом цикле статей — поехали!
Читать дальше →

Учебник по симулятору сети ns-3. Глава 5

Время на прочтение27 мин
Охват и читатели2.4K


главы 1,2
глава 3
глава 4


5 Настройка
5.1 Использование модуля журналирования
5.1.1 Обзор журналирования
5.1.2 Разрешение журналирования
5.1.3 Добавление журналирования в ваш код
5.2 Использование аргументов командной строки
5.2.1 Переопределение значений атрибутов по умолчанию
5.2.2 Захват ваших собственных команд
5.3 Использование системы трассировки
5.3.1 ASCII Трассировка
Парсинг ASCII трасс
5.3.2 Трассировка PCAP


Глава 5


Настройка


5.1 Использование модуля журналирования


Мы уже вкратце рассмотрели модуль журналирования ns‑3, просматривая скрипт first.cc. В этой главе мы более пристально присмотримся к возможным вариантам использования подсистемы журналирования.

Читать дальше →

Рисование графика при помощи cairo в GTK3

Время на прочтение5 мин
Охват и читатели7.7K
image

В качестве входных данных выступает массив типа float. Программа организует отображение, растягивание, прокрутку графика.
Читать дальше →