21 декабря 2022

SaveGamePro: вопросы и ответы

Вопрос:
Что это?

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

Вопрос:
Зачем, есть облачные сохранения Steam/Uplay/Origin/GOG/Epic Games Launcher cloud?

Ответ:
1. Облачные сохранения привязаны к конкретной платформе/лончеру.
2. Облачные сохранения привязаны к конкретному аккаунту, в рамках своей платформы.
3. Облачные сохранения синхронизируются только между сессиями, т.е. во время их не сохраняются.
4. Наконец не все игры привязаны к какому-то лончеру либо не имеют поддержки облачных сохранений вовсе.

Вопрос:
Есть несколько программ, для сохранения резервных копий сохранений, зачем ещё одна?

Ответ:
Программы действительно есть, разной степени юзабельности. Дабы избежать критики конкретных, опишу, чем руководствовался я, начиная работу над SaveGamePro:

1. Программа должна быть удобной и понятной.
2. Программа, для начала работы с ней, не должна мучить пользователя длительной либо не очевидной настройкой параметров. Или и вовсе самостоятельным вводом всех параметров: что, куда, откуда и как. На данный момент SaveGamePro требует только указания директории, куда будут сохранятся резервные копии, все остальные параметры (а их не мало) являются опциональными.
3. Программа должна работать быстро, насколько это возможно, при этом потребляя минимум ресурсов (оперативная память, время цпу и тд). Многие программы сейчас пишут на модных "молодёжных" фреймворках: Electron (по сути являющийся движком браузера), TypeScript, Vue, и так далее.
Я считал и считаю, что для десктоп приложения это не лучшее решение, если это собственно не веб браузер. Оправдание это якобы быстрой разработкой не выдерживает критики: пишется софт один раз, а ресурсы ПК при работе уходят каждый раз, при запуске такого софта. Десятки, чаще сотни мегабайт памяти и ресурсы цпу идут на обеспечение работы не самой программы, а среды в которой крутятся  эти скрипты. Следствием чего являются либо тормоза при работе, либо непомерный расход памяти или цпу, часто и то, и другое. Кроме того, фреймворк и приходят и уходят, кто сейчас помнит замену Adobe Flash от Microsoft - SilverLight?

Немного цифр:
SaveGamePro запуск программы - 10 мегабайт памяти, работа (сканирование ПК на наличие сохранений) около 16-20 (зависит от количества найденного).
Потребление ресурсов цпу только во время сканирования, сохранения копий (архивирования) или восстановления. Задачи сканирования, архивирования, восстановления выполняются в отдельных потоках (в приложении реализован пул потоков, принимающий задачи, выполняющий их параллельно и дающий коллбэк в виде прогресса выполнения задачи и самих данных).
10-15 мегабайт по современным метрикам ничто, приложение содержит все ресурсы в себе (звуки, графика) кроме базы данных игр, либо быстро (!) генерирует их во время работы по мере надобности.
Мгновенный запуск приложения. От начала сканирования более десятка тысяч директорий на нескольких обычных HDD и сотен записей реестра Windows, с собиранием статистики, фильтрации, до завершения - несколько секунд. Ищутся все сохранения, не только установленных игр.

Софт с примерно аналогичными задачами:
От более чем 4-кратного до 80-кратного (это даже не в разы, и не на порядок!) превышения в объеме оперативной памяти. Интерфейс блокируемый при длительных задачах до состояния "Приложение не отвечает" иногда просто тормозной. Всего этого в меру возможностей я постарался избежать.

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

Вопрос:
На чем написана программа и какие фреймфорки или библиотеки использует?

Ответ:
C++ 17.
GUI: wxWidgets (c++)
Базы данных: SQLite 3 (c/c++)
Парсинг JSON: JsonCpp (c++)
Парсинг XML: wxWidgets (враппинг над libexpat)
Криптография (контрольные суммы, ассиметричное шифрование) CryptoPP (c++)
Архивирование на данный момент zlib, более эффективный в плане сжатия lzma (liblzma xz) (c/c++) пока в релизе не доступен, ввиду того, что этот формат не контейнера для нескольких файлов, а алгоритм сжатия и необходимо перед сжатием собрать все файлы в единый контейнер (например tar), а это лишний расход либо памяти либо дискового пространства. В разработке тестировалось, возможно когда-то, после переработки попадёт в релиз. Использовать 7z как отдельную библиотеку (либо просто CLI к 7z.exe как в некоторых аналогичных по задачам программах) пока не планирую.
Немного Win32 Api, для специфичных Windows фич.
Отрисовка некоторой графики в offscreen битмапы и вывод в DC средствами Direct2D либо GDI.
Работа с реестром Windows, файловой системой, IPC (межпроцессное взаимодействие), конфигурационные файлы, звук, сеть - встроенные классы  wxWidgets (c++).
Графические иконки - векторные svg, конвертируемые в рантайм в нужный формат.

Вопрос:
Почему не Qt?

Ответ:
Потому, что:
1. Ограничительная лицензия.
2. Пустая форма дает 20 Мб. оперативной памяти.
3. Раздутый размер, вместе со всеми зависимостями.


Вопрос:
Программа поддерживает только 64-битные версии Windows? Будет ли поддержка x32?

Ответ:
Нет не будет. Начиная с Windows Vista никакого практического смысла, кроме обратной совместимости, использовать WoW64 (позволяет запускать 32-битные приложения на 64-битных версиях Windows) нет.

Вопрос:
Какие зависимости у программы? .NET или еще что-то.

Ответ:
Только Microsoft Visual C++ 2019 x64 Runtime.
MS куда-то убрали отдельную версию, теперь рантайм для 2015, 2017, 2019 и 2022 распространяется одним пакетом:
Microsoft Visual C++ последние поддерживаемые скачиваемые файлы

Вопрос:
Версии для других ОС, Steam Deck будут?

Ответ:
Не знаю, зависит от многих вещей. В теории возможно, на практике это довольно большой труд и время.


Вопрос:
Программа может восстановить сейвы от одного аккаунта в другой?

Ответ:
It depends, как говорится: технически программа видит все профили того же Steam или Uplay и сами резервные копии не привязаны к конкретным путям в операционной системе (используются переменные среды). Практически некоторые игры используют тот же Steam UserID или Uplay ID в самих файлах сохранений. Статистики таких игр я пока не веду.

Вопрос:
Можно ли настроить внешний вид программы?

Ответ:
Да, такая возможность есть, изучите настройки.

Вопрос:
Есть ли поддержка тем?

Ответ:
Ограниченная, базовый цвет использующий иконками и некоторыми меню.
Всплывающее информационное окно более настраиваемое: цвет фона, текста и заголовка, эффекты появления и исчезновения, Acrylic Blur (Aero).
Использования пользовательских иконок или звуков на данный момент нет.

Вопрос:
Есть ли поддержка dark mode aka темная тема?

Ответ:
Да, поддержка dark mode есть.

Вопрос:
Как часто будет обновляются база игр?

Ответ:
Пока нет конкретных сроков. В идеале вышедшие популярные релизы должны добавляется по мере выхода, менее значимые реже.

Вопрос:
На чём держится разработка?

Ответ:

На данный момент только на моих усилиях. Спонсоров у проекта нет.

Вопрос:
Сколько будет поддерживаться программа:

Ответ:
Ответ выше.

Вопрос:
Сколько заняла разработка:

Ответ:
Сложно сказать, за последние 4 месяца в среднем было по одному коммиту в локальный репозиторий в день, каждый коммит содержит 5-10 изменений/фиксов/добавления различных фич. Человеко-часы подсчитать трудно, я не бухгалтерия и писать расчёт самому себе смысла нет. Что-то приходилось полностью переписывать, из-за более скромных по-началу планах. Усилий достаточно.

Вопрос:
У меня есть идеи по функционалу!

Ответ:

Это прекрасно, можете связаться со мной и донести их до сведения.

Вопрос:
Мне не нравится, то-то и это!

Ответ:
См выше.

Вопрос:
Я требую, то-то и это:

Ответ:
Можете стать разовым донатером либо постоянным спонсором проекта. Чтобы ваши желания рассматривались в приоритетом порядке.

Вопрос:
Что даст донат или спонсорство?

Ответ:
Вам или мне? Если вам то смотрите выше, кроме этого доступ к некоторым фичам. Возможно также ранние билды и упоминания в программе в "About" особо отличившихся (по желанию).
Я считаю справедливым, что люди приложившие усилия в поддержке будут как-то вознаграждены, это работает в обе стороны.

Вопрос:
Где кнопка доната?

Ответ:
Иконка с сердечком в приложении. Или ссылка на сервис boosty: https://boosty.to/savegamepro 


Вопрос:
Что значит название SaveGamePro, pro это маркетинговой Professional?

Ответ:
Нет, изначально это было SaveGame Prototype, т.е. прототип. Потом по мере развития возможностей от названия отвалились некоторые буквы. "Глупые волосы покидают умную голову" (c) или наоборот, я уже не помню.

Вопрос:

Программа поддерживает локализацию?

Ответ:
Да, поддерживает. И локализацию и локальный формат дат и даже Right-to left интерфейс при выборе соответствующей локали. Ментейнером русской и английской является автор. Если хотите чтобы в приложении появилась новая локализация и являетесь носителем языка или, как минимум хорошо знакомы с ним, свяжитесь со мной.

Вопрос:
Программа поддерживает ассоциацию файлов?

Ответ:
Да поддерживает, загляните в настройки.

Вопрос:

Программа поддерживает Drag-n-Drop (перетаскивание файлов)?

Ответ:

Да поддерживает, перетащите архивы созданные программой в формате *.sgpro в окно программы.

Вопрос:

А можно целый каталог перетащить?

Ответ:

Да хоть несколько, файлы будут проверены на валидность, не являющиеся поддерживаемыми либо невалидные будут отфильтрованы.
Можно добавить ярлык программы в Send-To (пока только самостоятельно, если знаете как) и отправлять файлы или каталоги в программу из контекстного меню Проводника.

Вопрос:

Можно скрывать программу в системный трей?

Ответ:
Да можно, смотрите в настройках.

Вопрос:

Можно запускать свернутой в трей.

Ответ:
Да можно, смотрите в настройках.

Вопрос:
Есть ли в трее меню?

Ответ:
Есть. ПКМ на иконке в трее. Также есть поддержка Windows Jump List, ПКМ на иконке в панели задач. В этом режиме запускается новая копия программы, обращается посредством IPC к текущей копии получая данные, которые обрабатываются если не открыто модальное окно.

Вопрос:
В автозапуск можно программу добавить?

Ответ:
Да, можно, смотрите в настройках.

Вопрос:

Можно при запуске программы делать автоматически сканирование сохранений или резервных копий?

Ответ:

Да можно, смотрите в настройках.

Вопрос:
Как перейти к файлу/директории в списке сохранений?

Ответ:
Пкм на файле или директории в правой или нижней панели, зависит от настроек или даблклик по файлу, директории. Также можно открыть куст в реестре, если есть запись.

Вопрос:
При открытии записи в реестре на долю секунды открывается окно консоли!

Ответ:
К сожалению regedit не поддерживает аргументы командной строки и сам запуск из программы запущенной не от администратора возможен только таким способом.

Вопрос:
Программа сохраняет в резервные копии записи реестра?

Ответ:
Да, если они есть. Восстановление планируется в будущем.

Вопрос:

Программа работает в Portable режиме?

Ответ:
Да, при выборе в инсталляторе соответствующей опции, файлы конфигурации, базы данных и прочее будет хранится в каталоге исполняемого файла, если есть права на запись в этот каталог. Деинсталлятор не создается, запись в реестр не добавляется.

Вопрос:
Программа понимает кириллицу либо unicode в путях?

Ответ:
Да, понимает.

Вопрос:

Можно настроить имя создаваемого архива?

Ответ:
Можно, смотрите в настройках.

Вопрос:
Можно показывать или не показывать инфо окно при слежении за игрой?

Ответ:
Можно, смотрите в настройках.

Вопрос:
А звуковое оповещение?

Ответ:
Да можно, смотрите в настройках.

SaveGamePro скриншоты

Темный режим:




















Обычный режим:



















SaveGamePro: вопросы и ответы

Вопрос: Что это? Ответ: Программа для резервного копирования и восстановления игровых сохранений и сохранения состояния изменений игры во вр...