Хочу поделиться своим опытом разработки настольного приложения для коллекционеров с открытым исходным кодом.
По роду своей основной деятельности я разрабатываю ПО для встраиваемых систем и редко пересекаюсь с конечными пользователями. Поэтому речь пойдет об особенностях, с которыми я столкнулся при разработке некоммерческого приложения для широкого круга пользователей, которые стали для меня открытием.
Описание
OpenNumismat как видно из названия предназначен, в первую очередь, для учета коллекции монет. Но вполне подходит и для других видов коллекционирования — марок, открыток, значков и более экзотических вещей.
Приложение написано на языке Python, для хранения данных используется база данных на SQLite, для интерфейса, доступа к данным и многого другого — PyQt, для генерации отчетов — Jinja2, для построения графиков статистики — Matplotlib. Несмотря на мой первоначальный скепсис этого оказалось достаточно для обеспечения приемлемой производительности — несколько тысяч записей с изображениями обрабатываются без каких-либо заметных тормозов.
Поскольку все компоненты кроссплатформенные, то и OpenNumismat имеет сборки для Windows, Linux (Debian/Ubuntu), macOS.
Так же есть версия для Android, в настоящее время заброшенная. Ей на смену пришло PWA (Progressive Web App), позволяющее просматривать свою коллекцию в любом браузере — используется SQLite.js. Разработать PWA оказалось гораздо легче создания аналогичного по возможностям нативного Android-приложения. Кроме того, оно сразу доступна на всех платформах.
Конкуренты
Сейчас существует масса приложений для коллекционеров и, в частности, нумизматов. Большинство из них «выглядит так, как будто кто-то получил свою первую версию Firefox и использовал ее».
В США многие используют коммерческий софт, несомненным плюсом которого является наличие готовых баз существующих монет. Пользователю остается только отмечать имеющиеся монеты и заносить информацию о покупке — цена, дата и т.д.
Аналогичные возможности предоставляют мобильные приложения (большинство для Android) и веб-сервисы. OpenNumismat больше нацелен на создание каталога своей собственной уникальной коллекции, а не на «закрытие дырок в готовом альбоме», как выражаются некоторые нумизматы.
Но самый главный конкурент — это Microsoft. Подавляющая часть коллекционеров использует Excel не смотря на то, что он плохо работает с изображениями. Так же некоторые используют Access или 1С и создают свою базу данных коллекции со всем что им требуется. Но это все же требует некоторой подготовки.
Для привлечения пользователей реализован импорт из наиболее популярных альтернатив.
Что касается Linux и macOS, то для этих платформ аналогов практически нет.
Преимущества открытости
Основным преимуществом открытости кода оказалась возможность бесплатного использования сторонних сервисов для распространения, перевода, баг-трекинга. Пулл реквестов же, к моему огорчению, было всего три.
Неожиданно для меня еще одним преимуществом оказалось потенциальная возможность убедить скептиков в безопасности программы — на форумах утверждают, что проверяли код grep'ом и никаких подозрений нет.
Используемое окружение
Изначально для распространения OpenNumismat был выбран Google Code, который предоставлял удобный баг-трекинг, мультиязычную вики для документации, загрузку бинарников и конечно git-репозиторий. Но начиная с 2013 Google Code начал умирать. Для переезда выбор стоял между SourceForge и GitHub. Оба сервиса предоставляют возможность создавать сайты проекта (документацию из вики пришлось переделать в статические страницы сайта), но скачивание бинарников с SourceForge выглядит страшновато для неподготовленного пользователя. Поэтому выбор пал на GitHub.
Баг-трекер GitHub требует регистрации, что не так удобно пользователям, далеким от программирования. Поэтому было решено использовать сторонний сервис. Был найден Idea.Informer (Реформал для русскоязычной аудитории) — бесплатный и удобный сервис, но в настоящее время не развивается и это вызывает ряд трудностей (Idea.Informer перестал отсылать письма и не поддерживает SSL).
Изначально OpenNumismat поддерживал английский и русский язык. Но уже через год после первого релиза из Венесуэлы поступило предложение перевести на испанский. Потом появились предложения перевода и на другие языки. Изначально перевод осуществлялся с помощью инструмента Qt Linguist. Для удобства волонтеров сейчас используется онлайн-сервис, предоставляющий удобную инфраструктуру для открытых проектов. В настоящее время OpenNumismat переведен уже на 15 языков.
Для продвижения OpenNumismat пришлось изучить некоторые трюки CEOшников. Так использую семантическую разметку удалось продвинуть и улучшить отображение сайта приложения в поисковиках.
Проблемы версий библиотек
В настоящее время для Windows версии используется PyQt версии 5.5.1. Переход на более свежую версию затруднен заменой Qt WebKit на Qt WebEngine, который до сих пор не умеет делать предпросмотр печатаемых страниц, используемый для работы с отчетами.
А переход нужен для использования Qt Charts для построения графиков статистики, но он не доступен в используемой версии. Конечно можно было бы его и собрать отдельно, но руки не дошли. Поэтому для статистики используется Python пакет Matplotlib.
Также свежие версии Python не поддерживают Windows XP, который еще используется небольшим количеством пользователей.
Версия для Linux вообще может использовать любую комбинация версий PyQt, Python, Matplotlib. Поэтому на некоторых конфигурациях может не работать статистика, на других ограничен просмотр отчетов.
Для сборки под macOS было два варианта: использовать официальную сборку Python с требуемыми пакетами или MacPorts. В первом варианте возникают описанные проблемы с отчетами, так же процесс сборки не удалось полностью настроить, во втором возникли проблемы с Matplotlib, но MacPorts имеет сборку свежей версии PyQt с Qt WebKit. В настоящее время используется вариант с MacPorts.
Так же хочу отметить, что SQLite плохо поддерживает не-ASCII символы из коробки. Это вызывало проблемы при сортировке у пользователей, использующих алфавиты где используются символы, отличные от латинского и русского (например, украинский и каталонский — пользователи этих стран особенно обращали внимание на проблему). Перенос сортировки из запросов SQL в Qt не только решил проблему, но и повысил производительность.
Обратная связь
Отзывы и обратная связь — это самая приятная часть работы. Лучше всего OpenNumismat был принят в испанском сообществе нумизматов. Русские же удивили меня отзывами вроде: «Программа ждет, когда коллекция заполнится максимально, а потом сообщает КУДА НАДО». Видимо опасаются «русских хакеров». Часто приходится оправдываться перед скептиками, которые даже не собираются использовать OpenNumismat — это порой расстраивает.
Многие пользователи пишут, чтобы просто поблагодарить, предлагают новые идеи, просят помочь разобраться в работе приложения. Большинство же описывают ошибки и проблемы в работе приложения, которые, несомненно часто возникают, ведь разработка и тестирование ведется одним человеком.
Наиболее частый вопрос — «у меня демо версия, как мне получить полную». Связано это с тем что при первом запуске открывается демонстрационная база данных с названием demo. Видимо это сильно смущает новых пользователей.
Довольно часто предлагают добавить весьма специфичную функциональность, которая может быть полезна отдельным пользователям, но большинству может показаться совершенно лишней и усложняющей. Или же изменяет основную логику организации данных. На такие предложения приходится отвечать отказом или, что чаще, игнорировать сообщение.
Порой приходят сообщения об ошибках, которые мне не удается воспроизвести. Если контакт с пользователем установлен, то проблема как правило решается после некоторой переписки и совместных экспериментов. Иногда выйти на контакт не удается, и ошибка остается неисправленной и, возможно, никем более не замеченной.
Так же приходят письма от создателей нумизматических сайтов и электронных каталогов, которые пытаются произвести революцию, но заметных подвижек пока нет.
Заключение
Разработка ведется уже более 6 лет. Многого удалось достичь, но приложение еще далеко от совершенства. Есть еще очень много идей, которые хотелось бы воплотить.
Получать положительные отклики, безусловно, приятно и хочется сделать для пользователей по-настоящему полезный инструмент. А поскольку я и сам являюсь активным пользователем OpenNumismat, то останавливаться на достигнутом не собираюсь.
Автор: JanisV