Хабрахабр

[Из песочницы] Опыт разработки свободного приложения для коллекционеров OpenNumismat

Хочу поделиться своим опытом разработки настольного приложения для коллекционеров с открытым исходным кодом.

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

image

Описание

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

Несмотря на мой первоначальный скепсис этого оказалось достаточно для обеспечения приемлемой производительности — несколько тысяч записей с изображениями обрабатываются без каких-либо заметных тормозов.
Поскольку все компоненты кроссплатформенные, то и OpenNumismat имеет сборки для Windows, Linux (Debian/Ubuntu), macOS. Приложение написано на языке Python, для хранения данных используется база данных на SQLite, для интерфейса, доступа к данным и многого другого — PyQt, для генерации отчетов — Jinja2, для построения графиков статистики — Matplotlib.

Ей на смену пришло PWA (Progressive Web App), позволяющее просматривать свою коллекцию в любом браузере — используется SQLite.js. Так же есть версия для Android, в настоящее время заброшенная. Кроме того, оно сразу доступна на всех платформах. Разработать PWA оказалось гораздо легче создания аналогичного по возможностям нативного Android-приложения.

Конкуренты

Сейчас существует масса приложений для коллекционеров и, в частности, нумизматов. Большинство из них «выглядит так, как будто кто-то получил свою первую версию Firefox и использовал ее».

Пользователю остается только отмечать имеющиеся монеты и заносить информацию о покупке — цена, дата и т.д. В США многие используют коммерческий софт, несомненным плюсом которого является наличие готовых баз существующих монет.

OpenNumismat больше нацелен на создание каталога своей собственной уникальной коллекции, а не на «закрытие дырок в готовом альбоме», как выражаются некоторые нумизматы. Аналогичные возможности предоставляют мобильные приложения (большинство для Android) и веб-сервисы.

Подавляющая часть коллекционеров использует Excel не смотря на то, что он плохо работает с изображениями. Но самый главный конкурент — это Microsoft. Но это все же требует некоторой подготовки. Так же некоторые используют Access или 1С и создают свою базу данных коллекции со всем что им требуется.

Для привлечения пользователей реализован импорт из наиболее популярных альтернатив.
Что касается Linux и macOS, то для этих платформ аналогов практически нет.

Преимущества открытости

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

Неожиданно для меня еще одним преимуществом оказалось потенциальная возможность убедить скептиков в безопасности программы — на форумах утверждают, что проверяли код grep'ом и никаких подозрений нет.

Используемое окружение

Изначально для распространения OpenNumismat был выбран Google Code, который предоставлял удобный баг-трекинг, мультиязычную вики для документации, загрузку бинарников и конечно git-репозиторий. Но начиная с 2013 Google Code начал умирать. Для переезда выбор стоял между SourceForge и GitHub. Оба сервиса предоставляют возможность создавать сайты проекта (документацию из вики пришлось переделать в статические страницы сайта), но скачивание бинарников с SourceForge выглядит страшновато для неподготовленного пользователя. Поэтому выбор пал на GitHub.

Поэтому было решено использовать сторонний сервис. Баг-трекер GitHub требует регистрации, что не так удобно пользователям, далеким от программирования. Informer (Реформал для русскоязычной аудитории) — бесплатный и удобный сервис, но в настоящее время не развивается и это вызывает ряд трудностей (Idea. Был найден 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.

В первом варианте возникают описанные проблемы с отчетами, так же процесс сборки не удалось полностью настроить, во втором возникли проблемы с Matplotlib, но MacPorts имеет сборку свежей версии PyQt с Qt WebKit. Для сборки под macOS было два варианта: использовать официальную сборку Python с требуемыми пакетами или MacPorts. В настоящее время используется вариант с MacPorts.

Это вызывало проблемы при сортировке у пользователей, использующих алфавиты где используются символы, отличные от латинского и русского (например, украинский и каталонский — пользователи этих стран особенно обращали внимание на проблему). Так же хочу отметить, что SQLite плохо поддерживает не-ASCII символы из коробки. Перенос сортировки из запросов SQL в Qt не только решил проблему, но и повысил производительность.

Обратная связь

Отзывы и обратная связь — это самая приятная часть работы. Лучше всего OpenNumismat был принят в испанском сообществе нумизматов. Русские же удивили меня отзывами вроде: «Программа ждет, когда коллекция заполнится максимально, а потом сообщает КУДА НАДО». Видимо опасаются «русских хакеров». Часто приходится оправдываться перед скептиками, которые даже не собираются использовать OpenNumismat — это порой расстраивает.

Большинство же описывают ошибки и проблемы в работе приложения, которые, несомненно часто возникают, ведь разработка и тестирование ведется одним человеком. Многие пользователи пишут, чтобы просто поблагодарить, предлагают новые идеи, просят помочь разобраться в работе приложения.

Связано это с тем что при первом запуске открывается демонстрационная база данных с названием demo. Наиболее частый вопрос — «у меня демо версия, как мне получить полную». Видимо это сильно смущает новых пользователей.

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

Если контакт с пользователем установлен, то проблема как правило решается после некоторой переписки и совместных экспериментов. Порой приходят сообщения об ошибках, которые мне не удается воспроизвести. Иногда выйти на контакт не удается, и ошибка остается неисправленной и, возможно, никем более не замеченной.

Так же приходят письма от создателей нумизматических сайтов и электронных каталогов, которые пытаются произвести революцию, но заметных подвижек пока нет.

Заключение

Разработка ведется уже более 6 лет. Многого удалось достичь, но приложение еще далеко от совершенства. Есть еще очень много идей, которые хотелось бы воплотить.

А поскольку я и сам являюсь активным пользователем OpenNumismat, то останавливаться на достигнутом не собираюсь. Получать положительные отклики, безусловно, приятно и хочется сделать для пользователей по-настоящему полезный инструмент.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть