Настройка Android SDK для Qt
В Сети множество заметок о том, как заставить Qt компилировать приложения под Android. Однако, я столкнулся с некоторыми проблемами при использовании этих рецептов, и теперь хочу опубликовать своё решение указанных проблем в этой короткой заметке.

Собственно, чтобы Qt научился создавать приложения для Android, нам потребуется только четыре компонента: сам Qt,...

Настройка WireGuard-сервера на роутере с OpenWRT (с описанием настройки клиентов под Windows и Android)
Я уже писал, как настроить и собрать прошивку на основе ОС OpenWRT для роутера GL-MT300N-V2. Почитать эти заметки можно здесь и здесь. Теперь я решил построить свою виртуальную частную сеть на основе этого роутера. Структура этой сети предполагается такой. Есть роутер с двумя портами: WAN и LAN.

[Заметка] Конвертирование SVG-координат в GPS-координаты
Понадобилось мне как-то нанести план дачного посёлка с номерами домов на карту. Геодезисты дали топосъёмку. Ну, как топосъёмку... Просто сетку участков, выгруженную в графический файл *.bmp - вот такую примерно: (изображение) Эту сетку мне и требовалось наложить на карту. Задача показалась мне интересной, а решение - нетривиальным, поэтому решил опубликовать небольшую заметку о...

Классификация русских имён с использованием технологий машинного обучения
Так сложилось, что основным языком, применяемым в проектировании систем машинного обучения, стал Python. На Python написаны многие библиотеки машинного обучения, например, scikit-learn. Однако, для некоторых приложений уместнее использовать другие языки, и для них, конечно, есть свои библиотеки. Так, было бы интересно применить технологии машинного обучения на веб-сайте, а веб-сайты часто пишут на PHP.

DIY-роутер GL-MT300N-V2. Часть 2 - написание и сборка собственной программы под OpenWRT
Итак, будем писать свою программу на Си под OpenWRT. Отличий от обычного программирования под UNIX или Linux здесь, в общем-то, нет, за одним исключением: процесс компиляции программы осуществляется не на роутере, а на компьютере, в среде OpenWRT Buildroot. То есть, сначала нужно скомпилировать toolchain и прошивку, а потом уже можно собирать свою программу.

DIY-роутер GL-MT300N-V2. Часть 1 - знакомство и сборка кастомной прошивки для переопределения функции GPIO-порта
Есть такой замечательный DIY-роутер GL-MT300N-V2 от GL-iNet. Он интересен тем, что позволяет радиолюбителю получить доступ к портам ввода-вывода GPIO (они выведены на плату) и совместим с роутерной ОС OpenWRT. Плюс, имеет всего один LAN-порт. Смекаете? Да, его можно и нужно использовать для удалённого управления периферией по Ethernet и создания VPN-туннелей.

Патчи для утилит find и cp во FreeBSD, реализующие полноценную работу с расширенными атрибутами
Механизм расширенных атрибутов во FreeBSD (extattr) позволяет управлять дополнительной информацией, связанной с файлом или директорией. При помощи семейства команд setextattr, getextattr и rmextattr можно редактировать расширенные атрибуты файла, принадлежащие к двум пространствам имён: системному и пользовательскому. Редактирование пользовательских атрибутов может пригодиться для классификации файла: добавления описания, ключевых слов и других метаданных.

[Сниппеты Qt] Как открыть документ при запуске своей программы
Путь к открываемому файлу передаётся в качестве первого параметра при запуске соответствующей программы. Кроме имени файла в открываемую программу можно передать, например, номер документа, который должен открыться при старте программы (если документы берутся из, скажем, базы данных). В программе нам нужно просто получить передаваемый ей параметр и должным образом обработать его.

[Сниппеты Qt] Получение списка всех COM-портов
Пример получения списка всех доступных COM-портов.

Список всех COM-портов в системе


QT += serialport #В pro-файле

-----

#include <QSerialPort>
#include <QSerialPortInfo>

...

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
ui->comboBox->addItem(info.portName(),info.portName());
}


[Сниппеты Qt] CRC16 для ModBus
Потребовалось вычислять контрольную сумму по алгоритму CRC для пакетов данных, передаваемых по протоколу ModBus. В интернете есть функция вычисления CRC16, но её пришлось немного переделать, чтобы результат получался с нужным порядком следования байтов (протокол ModBus требует BigEndian).

CRC16 с BigEndian для ModBus в Qt

#include <QtEndian>

...

QByteArray MainWindow::CRC16_ModBusRTU(QByteArray buf, quint16
...