Популярные статьи

Потоки и многопоточность

QFuture и QtConcurrent: асинхронные вычисления без ручного управления потоками

Введение Модуль QtConcurrent предоставляет высокоуровневый API для параллельных вычислений, скрывающий детали создания и синхронизации потоков. Вместо явного создания QThread или QRunnable достаточно вызвать функцию вроде QtConcurrent::run(), передав ей…

Arduino

Поворотный энкодер и кнопочные/переключательные модули (key switch, tilt switch, металлосенсор)

Введение Поворотный энкодер (rotary encoder) и несколько разных по принципу действия переключателей (модуль переключателя ключей, переключатель наклона, металлический сенсорный модуль, модуль «для охоты»/»hit») объединены в одну статью как…

Заметки по языку с и с++

Потокобезопасные структуры данных в Qt-приложениях: паттерны и ошибки

Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…

SSL

Подписывание и верификация плагинов для безопасности

Введение Система плагинов, загружающая произвольный код из файлов на диске, по своей природе расширяет поверхность атаки приложения — если злоумышленник может подменить файл легитимного плагина на вредоносный (через…

Arduino

Гироскоп/акселерометр (MPU6050) через I2C: измерение наклона и движения

Введение Гироскопический модуль из набора (обычно на базе чипа MPU6050 или аналогичного) — комбинированный датчик, объединяющий трёхосевой акселерометр (измерение ускорения, включая гравитацию — что позволяет определить наклон) и…

Заметки по языку с и с++

Правило пяти (Rule of Five) в C++: конструкторы копирования/перемещения на практике

Введение «Правило пяти» (Rule of Five) — современная версия классического «правила трёх» (Rule of Three) из C++98, расширенная в C++11 семантикой перемещения. Если ваш класс самостоятельно управляет каким-либо…

Синтаксис си/с++

Объединения (union) и битовые поля

Введение Ранее мы разобрали struct, где все поля существуют одновременно, занимая суммарный объём памяти — union представляет принципиально иной подход, где все поля совместно используют ОДНУ И ТУ…

Система плагинов

Песочница для плагинов: изоляция и обработка крашей сторонних плагинов

Введение Плагин, написанный сторонним разработчиком и загруженный в адресное пространство основного процесса через QPluginLoader, технически имеет полный доступ ко всей памяти процесса — баг или преднамеренно вредоносный код…

DevOps

Автоматический деплой: публикация релизов, обновление каналов распространения

Введение Упаковку готового релиза — финальный шаг CD (Continuous Deployment/Delivery) — автоматическая публикация этого упакованного релиза в местах, где его получают конечные пользователи: GitHub Releases, магазины приложений, или…