creator cover S.P.
S.P.

S.P. 

Разработка прикладного ПО для российской ОС Аврора

8subscribers

116posts

goals1
$33.76 of $136 raised
Свободное ПО денег не приносит, но приносит пользу как минимум разработчику. В РФ донаты непопулярны пока, но думаю ситуация может измениться. Гранты)

About

В свободное от основной деятельности время занимаюсь разработкой прикладного ПО в первую очередь для своих нужд, с недавнего времени для российской ОС Аврора.
Совмещение QML и C++ достаточно гибкая штука и это пришлось мне по душе. 
Буду рад, если мои разработки или наработки окажутся для кого-то ещё полезными. 
Программирование помогает мне в хозяйстве, кхе-кхе:)
Весь свой код (если не указано иное) - публикуется под лицензией BSD-3 Clause (делайте с кодом что хотите, используйте в любых коммерческих и некоммерческих проектах, но ко мне никаких претензий) 
Достаточно большую часть кода приложений (QML-часть) создаю прямо на Аврора-планшете F+ Lifetab+, Аврора 4.0.2.303, из ВсëСмарта.
Текущие проекты:
ОС Аврора:
QMLPrototyper - приложение для прототипирования QML- страниц и компонентов на планшетах и смартфонах на ОС Аврора
Назначение - набросать QML-код (сделать скетчи, наброски) прямо на Аврора-девайсе, проверить  QML идеи и поделиться ими (лежа на диване, находясь в дороге, в командировке или в учебных целях). Преимущество - не нужно иметь IDE под рукой, недостатки - это всë-таки не полноценная IDE (пока работа возможна только с одним qml- файлом) 
WebServerLocal - однопоточный HTTP сервер (оболочка к Mongoose) для ОС Аврора для расшаривания файлов в wifi-сети и тестирования веб-фреймворков типа Three.js, Xeokit и других, а также веб-приложений типа Draw.io, CascadeStudio, etc. на ОС Аврора
VectorD (Вектор-Д) - векторный редактор SVG (в процессе разработки в стадии раннего прототипа, срок разработки до вменяемого вида оцениваю где-то в 12-24 месяца, начиная с начала 2025 года)
MyBusiness (Управление.бизнесом) - небольшая локальная CRM-система на Qt Quick для ИП и небольших организаций на УСН (в разработке, в настоящий момент - стадия альфа-версии). Реализованы пока модули - Сделки, Контрагенты, Мои организации, Заметки, Нормативные документы.
Десктоп (Linux):
TextEditorWide - широкоэкранный текстовый редактор, позволяющий редактировать одновременно 4 файла, предназначенный для широких экранов 21:9 (29", 34"). Десктопное приложение использует 80% кода мобильного приложения QMLPrototyper. Это скорее пример переносимости кода из Qt-приложений, написанных для  ОС Аврора, на десктоп, используя только базовые  QtQuick-QML-элементы. Заметьте, что в данном случае основой для десктопного приложения стало мобильное приложение, хотя зачастую бывает наоборот. 
Доработки чужих проектов:
Cascade Studio 3D - параметрическое моделирование твердых тел методом ввода кода на JavaScript (по типу OpenSCAD), работает в браузере локально, позволяет создавать 3D модели в форматах .stl, .step, .obj для последующей 3D-печати. Достаточно интересный проект браузерной CAD любительского уровня (на основе собранной в wasm библиотеки OpenCascade - OpenCascade.JS, использующейся в промышленности и в разных проектах, например в FreeCAD и Salome Platform). К сожалению, последняя версия оригинального приложения Cascade Studio - 0.0.7 - была выпущена автором @zalo где-то в 2020-2021 годах и после этого обновлений не было. Исходный проект - https://github.com/zalo/CascadeStudio
Плюс этого проекта - возможность работы локально через самый простой веб-сервер, я упаковал в приложение с использованием Mongoose и частично русифицировал. Получилось кросс-платформенное решение. Создал уже прилично 3D-моделей в нем и напечатал на самом простом и доступном фотополимерном 3D принтере Anycubic Photon Mono 2.
В целом по Cascade Studio 3D вижу для себя следующие направления применения:
- 3D моделирование (копирование, реверс-инжиниринг) автомобильных пластиковых деталей (в моем случае для BMW серии E65) и их последующая печать на фотополимерном 3D-принтере
- 3D моделирование всяких именных штук типа вывески, брелки, нашивки, наклейки и проч и их последующая печать на фотополимерном 3D-принтере, то есть те пластиковые изделия, которые нигде не купишь
- архитектурное моделирование (быстровозводимые сборно-разборные каркасные сараи, гаражи, навесы, мини-здания)
- планы помещения 3D (по моей работе - это размещение кондиционеров, вентиляции и прочих инженерных коммуникаций плюс несложная расстановка мебели - диван, ТВ, стеллаж, шкаф, стол и тд опять же для небольших помещений)
P.S. Есть похожий на Cascade Studio проект посвежее - https://replicad.xyz (https://studio.replicad.xyz/workbench), но Cascade Studio мне понравился больше по синтаксису команд и я стал работать с ним.
Пчёл - игра на Three.JS, использующая встраиваемый веб-сервер Mongoose. Пожалуй, самый простой и быстрый путь к 3D на ОС Аврора. Работает в WebView на Chromium и Gecko (Аврора 4, Аврора 5). Автор -  https://codepen.io/wprod/pen/YjJOXa (https://github.com/wprod/). "Вариант, чтобы занять чем-то ребенка минут на 15."
RacingHexGL- игра на Three.JS, достаточно старая, 12 лет, источник проекта - https://github.com/BKcore/HexGL (https://hexgl.bkcore.com/play/) Работает в WebView на Chromium и Gecko (Аврора 4, Аврора 5). "Вариант, чтобы занять чем-то ребенка минут на 15."
Плюс в процессе работы выкладываю разные наброски (скетчи) или свое видение каких-то нюансов. 

Небольшая доработка шаблона проекта llama.cpp для ОС Аврора 5.1+ (версия для устройств до 4 Гб ОЗУ)

Недавно был опубликован проект запуска llama.cpp на ОС Аврора от ОМП:
https://hub.mos.ru/auroraos/examples-extra/llm-runner
Я немного его доработал (в основном внешний вид) и выкладываю сборку armv7hl для устройств с количеством ОЗУ до 4Гб:
rpm
ru.auroraos.LlmRunner-1.0.0-1.armv7hl.rpm2.13 Mb
Модель здесь используется IBM Granite-4.0-micro-Q3_K_S - очень маленькая (и "глупая") на 1.6 Гб:
https://huggingface.co/ibm-granite/granite-4.0-micro-GGUF/blob/main/granite-4.0-micro-Q3_K_S.gguf
Скачайте модель и поместите в папку Downloads или Documents.
Отмечу, что модель такого размера подходит разве что для создания несложных SQL-запросов и bash-скриптов, то есть не ждите от нее многого. Это скорее вариант для развлечения.

Небольшая доработка шаблона проекта llama.cpp для ОС Аврора 5.1+

Недавно был опубликован проект запуска llama.cpp на ОС Аврора от ОМП:
https://hub.mos.ru/auroraos/examples-extra/llm-runner
Я немного его доработал (в основном внешний вид) и выкладываю исходный код и сборку aarch64 для устройств с количеством ОЗУ больше 6 Гб:
Исходники (для сборки нужен установленный Conan в IDE):
zip
LLMrunner_KVADRA-sources.zip746.09 Kb
Установка Conan в IDE:
https://hub.mos.ru/auroraos/conan/ConanClientRpm 
(я ставил по шагу 1, проверьте, может в шаге 1 пункт 1 и 2 не нужны)
Готовая сборка aarch64 для ОС Аврора 5.1+ (сборка SDK 5.1.1.60):
rpm
ru.auroraos.LlmRunner-1.0.0-1.aarch64.rpm2.11 Mb
Устанавливаем / собираем приложение и качаем модель (2.84 Гб) в папку Downloads или Documents пользователя:
Модель: https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-4B-GGUF/tree/main
Имя файла (скачать по ссылке выше и поместить в папку Downloads или Documents):
NVIDIA-Nemotron-3-Nano-4B-Q4_K_M.gguf

Мой опыт практического использования ИИ-алгоритмов для помощи в создании ПО (Qt-Qml-C++) для ОС Аврора на примере локальных нейросетевых gguf-моделей, запускаемых при помощи llama.cpp на CPU

Год назад, в феврале 2025 года, я написал свое мнение по поводу использования нейросетей, а именно больших языковых моделей LLM:
https://boosty.to/mastercond/posts/57a5cb58-7477-48af-80aa-a0ba91972299
Примером для той статьи было общение с бесплатными вариантами GigaChat и Deepseek. С тех пор прошел год, я периодически обращаюсь по каким-то вопросам (скорее для тестирования) к бесплатной онлайн-gigachat и опробовал за это время несколько локальных llama.cpp моделей, которые запускал на своем железе (ЦП AMD 7500f, ОЗУ 32gb ddr5, без применения видеокарты) в формате gguf:
  • deepseek-coder-33b-instruct (модель примерно 2023 года, размер 18.9 Гб, сжатие Q4_K_S)
  • granite-4h-small от IBM (размер 19,5 Гб, 3-4 токена/сек, сжатие Q4_K_M)
  • nemotronic-3-nano от NVidia (размер 20.7 Гб, 6-7 токенов/сек, сжатие Q3_K_L)
Касательно того поста годичной давности - мнения я своего не поменял, даже несмотря на качественный прогресс в сфере нейросетей. Если спрашиваешь у нейросети что-то, что мне незнакомо - 100 % информацию нужно перепроверять по нескольким источникам, а лучше в первоисточниках - очень часто смесь из корректных и некорректных данных. То есть для такого применения нейросеть (по крайней мере локальную) использовать нежелательно.
Тем не менее, я на сегодняшний день увидел для себя следующие практические применения локальных llm-нейросетей, которые у меня хоть и в экспериментальном режиме, но уже работают и приносят какой-то практический результат:
1) работа нейросети по шаблону: у меня есть готовый шаблонный допустим qml-код, который при определенных условиях делает то-то. Ставится задача нейросети переписать этот код для похожей задачи, но с другими входными данными.
Пример:
Промт (запрос) для нейросети на примере приложения MyBusiness (Управление.бизнесом):

Вектор-Д - Прототип векторного SVG редактора - тестовая альфа-версия 0.2.3

Очередная тестовая версия векторного графического редактора Вектор-Д.
Что сделано в версии 0.2.3:
✔ поправил qml-код, чтобы было намного меньше ошибок в консоли (в основном это проверка существования динамически создаваемых qml-компонентов)
✔ добавил текстовые утилиты - проверка и коррекция длины имени файла, проверка и коррекция при вводе разрешенных/неразрешенных символов в имена файлов, проверка и коррекция полей ввода координат и чисел. По полям точной корректировки координат X,Y ("точное позиционирование") пока мне не очень нравится, как это работает, возможно, в дальнейшем буду делать отсрочку по времени при вводе или ещё как-то улучшать в этом месте, чтобы было по-удобнее делать ручную правку, потому что именно этими полями я пользуюсь достаточно часто
✔ добавил на панель "Последние файлы" кнопки создания нового файла и открытия файла из файловой системы - стало поудобнее, не нужно теперь в левом боковом меню эти позиции искать
✘ Прочие баги в этой версии не исправлял, графических компонентов не добавлял.

Вектор-Д - Прототип векторного SVG редактора - тестовая альфа-версия 0.2.2

Сегодня выдался продуктивный день - выкатываю ещё одну тестовую версию Вектор-Д 0.2.2.
Что изменилось по сравнению с версией 0.2.1:
✔Поменял диалог "Последние файлы" - добавил пиктограммы и фон, который рандомно меняется пока из 3 фонов при каждом открытии диалога "Последние файлы". Фоны - это SVG, созданные в приложении Вектор-Д. Пиктограмма файлов также создана в Вектор-Д.
✔Добавил чертежный ГОСТ-шрифт на обложку. Если будет много негатива по этому поводу - сделаю раздел "Настройки" с возможностью выбрать это как опцию
✔Добавил в раздел ВИДН (видеонаблюдение) 11 пиктограмм из 
Р78.36.039-2014 от МВД РФ "РЕКОМЕНДАЦИИ ТЕХНИЧЕСКИЕ СРЕДСТВА СИСТЕМ БЕЗОПАСНОСТИ ОБЪЕКТОВ. ОБОЗНАЧЕНИЯ УСЛОВНЫЕ ГРАФИЧЕСКИЕ ЭЛЕМЕНТОВ ТЕХНИЧЕСКИХ СРЕДСТВ ОХРАНЫ, СИСТЕМ КОНТРОЛЯ И УПРАВЛЕНИЯ ДОСТУПОМ, СИСТЕМ ОХРАННОГО ТЕЛЕВИДЕНИЯ". Их я нарисовал в Вектор-Д неделей раньше и прикладываю здесь ниже исходники. Есть документ посвежее - Р 071-2017 от ФСВНГ Рекомендации.Технические средства систем безопасности объектов. Обозначения условные графические элементов. - при подготовке следующего набора пиктограмм буду использовать таблицу оттуда.

Вектор-Д - Прототип векторного SVG редактора - тестовая альфа-версия 0.2.1

Было сделано много мелких доработок и вот выкладываю тестовую альфа-версию Вектор-Д 0.2.1.
По сравнению с версией 0.2.0:
✔ появились элементы дуга (квадратичная кривая Безье, строится по 3 точкам, раздел СТД) и универсальный элемент
✔добавил первые универсальные элементы - в разделе ЭЛЕК (электрика) - нарисовал автоматические выключатели 1P, 2P, 3P, 4P для визуализации схем электрощитов. У универсальных элементов есть возможность задавать коэффициент масштабирования.
✔ переработана несколько работа с элементом Линия
✔ диалоги редактирования координат (точное позиционирование) теперь около клавиатуры и не закрывают весь обзор, как раньше
✔ добавлен диалог удаления элементов из списка "Элементы SVG" - при создании тестовых эскизов у меня было несколько раз случайное удаление элементов
✔ так по мелочи ещё кое-где какие-то моменты поправил
Теперь непосредственно пакеты тестовой версии 0.2.1:

Приложение ArmorPaint для Linux (RPM, DEB)

Есть приложение для текстурирования 3D моделей ArmorPaint, лежит в исходниках на github, но бинарные сборки (несмотря на открытый исходный код) распространяются за денежку, о чем автор указал на своей странице (https://github.com/armory3d/armortools/tree/main/paint). У меня из исходников по мануалу не собирается - какие-то ошибки отсутствия каких-то файлов, поэтому пошел искать уже собранную версию. Нашел в дистрибутиве AltLinux. Версия 0.9 от февраля 2025 года.
Брал RPM отсюда (см.раздел Download, Binary Package), перегонял в DEB при помощи утилиты alien:
https://altlinux.pkgs.org/sisyphus/classic-x86_64/armorpaint-0.9.1-alt1.x86_64.rpm.html
Обе версии прикладываю, если кому нужно:
deb
armorpaint_0.9.1-1_amd64.deb14.85 Mb
rpm
armorpaint-0.9.1-alt1.x86_64.rpm14.77 Mb
Вроде особых зависимостей пакеты не имеют. DEB версия у меня запускается, RPM не проверял, но тоже должно. Русский язык в настройках имеется.
Руководство по приложению на английском тут:

Вектор-Д - Прототип векторного SVG редактора - тестовая альфа-версия 0.2.0

Где-то в районе года назад, как раз в конце февраля 2025 года, я опубликовал предыдущую версию-прототип векторного редактора Вектор-Д 0.1.10 для ОС Аврора.
Это была моя первая проба пера в этом направлении, показавшая ошибочность некоторых идей, а именно - ожидание, что можно создать много qml-компонентов и потом из property этих компонентов построить итоговый svg-файл. Реальность оказалась такова, что при примерно 118 компонентах пользоваться приложением было невозможно - UI подвисал и не справлялся даже на мощных планшетах. 
После этого год ушел на некоторые исследования и переписывание кода, работа шла поначалу достаточно тяжело и буксовала, но в итоге на рубеже 2025-2026 удалось добиться некоторого прогресса: для формирования итогового svg-кода в приложении стали использоваться std::unordered_map и много где в С++ части - лямбда-функции для использования многопоточности, а также я стал по возможности использовать стандартную библиотеку совместно с конвертерами в форматы, которые могут передаваться из qml слоя в С++. Это работало (например) для std::string и std::stringstream в несколько раз быстрее, чем сразу работать с QString и QTextStream.
Такой подход сразу же положительно отразился на производительности кода.

Очень простая работа с обложкой Аврора-приложения на Qt-QML

Изучая документацию на https://developer.auroraos.ru по работе с обложкой приложения, я не смог найти примера, как можно очень легко и быстро из qml поменять значение, например, имя файла на обложке (если это редактор) или значение какого-то счетчика (если это например игра).
Зачастую нужно прям одно-два значения регулярно менять и не нужна никакая сложная логика.
Решение я нашел, и это работа с сигналами и Connections (слотами) в qml.
Задача: редактор, нужно менять имя файла из 4 мест в коде, причем несколько qml-объектов, из которых нужно передавать данные для смены значения на обложке, создаются динамически при помощи Qt.createQmlObject
Как я ее решил:
1. Идем в основной qml-файл приложения, в котором содержится код с ApplicationWindow и проверяем, чтобы для материнского для всего приложения объекта ApplicationWindow было задано id, если оно не задано - задаем (пусть у нас оно будет id: applicationWindow)  
2. Задаем сигнал, пусть это будет 
signal updateCoverFilename (string newfilename)
я через глобальную переменную делал которую объявлял в ApplicationWindow в целом тоже работало 
У меня по коду в двух местах сложилась такая ситуация - не захотели меняться property, подписанные на, например, element.x, element.y, этот element создавался динамически (и такой код вполне работал парой сотней строк раньше для других элементов - почему так, разобраться не удалось - вот не работает и всё, в логах пишет, что невозможно получить значения от null). В одном случае выручило введение функции вместо property и ее вызов в обработчике, а в другом случае (там посложнее) - там с сигналами пришлось работать, хотя конечно с property наамного проще конечно же. Хорошо, что в Qt для многих вещей есть разные работающие пути :)
Subscription levels0
No subscription levels
Go up