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

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

Потребовалось сделать в приложении анонсирование и поиск себе подобных. Причём без завязки на системный Avahi.
Выбор пал на три реализации mDNS/DNS-SD:
Первый отбросил из рассмотрения, так как показался слишком переусложнённым. Потом пошёл смотреть на libmicrodns - получилось собрать прототип очень быстро - мало кода. Но… жирный крест поставило то, что они до сих пор не исправили косяк, что нужно JOIN TO GROUP делать. Без этого анонсирование работает нормально, а вот запросы/поиск будет только на неком дефолтном, первом интерфейсе.
Пошёл на mdns. Для интеграции нужно больше кода, но почти весь можно как есть взять из примера mdns.c, библиотека без внутренних аллокаций. И очень неплохо дружится с внешними event-loop’ами, будь то libev или asio.
В общем, мой выбор - mdns.
А под катом - небольшая табличка сравнительная. Жирным - критерий преобладающий над соперником. Если ничто не выделено - нет приоритета.
Короткая заметка и ссылки. Возможно потом дополню информацией о разрешении (resolution) временных меток.
- FAT/FAT32
- Хранит локальное время, без указания Timezone. Поменяешь в системе зону - время создания файлов останется без изменений. Т.е. нужно помнить в какой ТЗ они создавались.
- Windows сохраняет вот прям вот локальное время
- Linux добавляет час, при переводе часов
- timestamp:
- дата 16 битное число: 7 бит - год, 4 бита - месяца, 5 бит - день. Год в диапазоне 1980-2107.
- время 16 битное число для часов, минут, секунд
- exFAT:
- Время хранится локальное. Но есть нюанс.
- Временная зона хранится в 1 байте. Vista SP1 не использует его. Что бы нормально жилось, старший бит сигнализирует - применять или нет смещение зоны. 0 - не применять. 1 - применять. Остальные 7 бит - 15минутные интервалы для смещения. Положительное направление - на восток.
- Т.е. если бит 7 в TZ поднят, то система будет пересчитывать время файла в UTC, что бы корректно отобразить в системе при смене часового пояса. Эдакая обратная совместимость.
- NTFS
- EXTx (EXT2/3/4)
Это логическое продолжение
этого с учётом
нововвидений по добавлению файлов.
Весь “код” разместил на GitHub:
qtc-other-files-helper. Там же есть и детальное описание.
Тезисно:
- Так же используем вспомогательный файл
- Так же используем кастомный таргет
- Но уже не сканируем дерево: отдаём на откуп пользователю, что добавить, что убрать. Что бы не конфликтовать с существующими файлами.
- Не используется
CMAKE_TOOLCHAIN_FILE
, вместо него - CMAKE_PROJECT_INCLUDE
.
- Доработано решение для использования как на уровне per-project, так и глобально, на уровне Kit. Но бросить файлик второй в директорию с проектом всё равно нужно будет.
Из косяков:
- При добавлении файлов, QtC стремиться создать новую запись
target_sources()
в CMakeLists.txt верхнего уровня. Приходится вручную вырезать и вставлять в qtc-other-files.cmake
Ну и в старом способе была проблема, что эти файлы попадали в кодовую модель и мешали парсеру. Детально не разбирался в новых реалиях.
На выходных, 22-23 июня 2023, отлично прогулялись с сыном по двум водопадам у подножия хр.Большой Воробей: Березняк и Маруськины слёзы.

Как обычно в мемориз.
Раньше был тул abs
, потом вся структура мигрировала на Git. Теперь что бы получить пакет нужен тул
Arch Build Source Management Toolили коротко - asp
. Не путать с
ASPLinux… Да был когда-то такой.
Ставится:
Получить PKGBUILD:
или:
Например:
Далее работам как обычно с PKGBUILD: makepkg
с полезными опциями. Сам спек правим по необходимости.
На чистом Arch Linux ещё есть пакет
devtools, который содержит тул pkgctl
, который позволяет достичь той же цели: получить PKGBUILD для сборки:
pkgctl repo clone PKGNAME
На производных, типа Manjaro (мой случай) этого тула может не быть. А вот
asp
-
есть.
Полезные ссылки:
-
Arch Build System
Итак, обновляю свой
CMakeProjectManager2 и что я вижу:
71eb0ab9f8e98df9bd021c1c49d7ec00a66492cb
- завезли парсер CMake в стоковый плагин.
d41365610ff80478d8c6c2812299d95d139561ec
- его интегрировали в билд.
d8be2491a5f5cfdc512f63c766a550dd43694063
/ 13 апреля 2023 - реализовали добавление новых и существующих файлов к таргету, причём файл пытается добавляться прямо в CMakeLists.txt: файл будет добавлен последним элементов к соответствующей “well-known” функции (они захардкожены) типа add_executable()
, add_library()
, qt_add_executable()
, qt_add_library()
, qt6_add_executable()
, qt6_add_library()
. Для кастомных функций будет добавлен вызов target_sources()
, что тоже неплохо. Уже можно начинать пользоваться.
039baab6e70160bc8130ef95e499141f7c875225
/ 20 апреля 2023 - реализовали вышеперечисленное для QtQuick проектов, в список “well-known” функций добавились: qt_add_qml_module()
, qt6_add_qml_module()
54af6bd5b3f5ba5e3396f5cb9eb539f198abafff
/ 21 апреля 2023 - разрешили переименовывать файлы. Работает как для явно указанных файлов, так и для добавленных через file(GLOB|GLOB_RECOURSE)
.
411b2e05b8ac4442d1ef179381dc7c37492ab37b
/ 24 апреля 2023 - разрешили удалять файлы.
5c2b2966e78129dcbd220e35e15f6278a1b3d05d
/ 27 апреля 2023 - разрешили добавлять существующую директорию. Пока, как я понял, добавляются все файлы, а не add_subdirectory()
. Что, по мне, более логично: все операции target-ориентированные.
874b1133d9cfaef179851aa925b7d6b96e85019b
/ 26 апреля 2023 - пофиксили удаление и переименование, что бы оно срабатывало и с файлами, которые указываются через переменные для таргета.
Ну и пачка мелких фиксов.
На текущий момент, меня огорчает отсутствие вывода всех файлов их проектной директории (например, README.md или скрипты вспомогательные, которые вполне можно редактировать в QtC), но уже можно начинать пытаться нормально работать.
Собственно в рамках CMakeProjectManager2 я теперь попытаюсь реализовать возможность отобразить всех файлов, по аналогии с текущей реализацией и подключить добавление файлов из апстрима.
А вообще, тенденция к тому, что CMakeProjectManager2 можно будет выкинуть меня радует!
Сегодня мне не хватило такого (C++20):
for (std::tie(m_imageWidth, m_imageHeigth) : sizes) {}
Пришлось так:
for (auto const &size : sizes) {
std::tie(m_imageWidth, m_imageHeigth) = size;
}
В мемориз:
Подборка полезный утилит и стандартов связанных с дисплеями: HDMI, DP:
К сожалению, свежие стандарты HDMI 2.0, 2.1 чувака заставили удалить из публичного доступа (почитайте письмо, которое ему написали).
Помимо этого есть спеки ITU/BT - там можно поискать коэффициенты RGB-YUV конвертаций для различных режимов (Rev.601 vs Rec.709 vs BT.2020, а вот про BT.2100 я уже не слышал) - бывает полезно (наипался, когда программировали матричный pCSC).
Офигенный раздел по кабелям и переходникам:
и его “продакшн” версия:
Так же раздел, для расчёта параметров монитора (например, DPI) по разрешению и диагонали: