Друзья и коллеги!
Сегодня я анонсирую предварительный релиз версии 2.16.0-rc1 (1-й кандидат в релизы).
В этой версии было сделано большое количество различных исправлений и доработок, которые я подробно перечислю в следующем сообщении. Но здесь я хочу обратить внимание всех пользователей программы на ключевую особенность этой версии.
На протяжении более чем года, планировался большой ряд изменений в ядре программы там, где происходит чтение, запись и обработка GEDCOM-файлов. С февраля этого года по текущий момент, было сделано более двух сотен крупных изменений, затронувших свыше 600 файлов проекта, в них - более 34 тыс. строк кода.
Эти изменения ядра преследовали следующие цели:
- максимально повысить гибкость разработки новых функций программы в будущем;
- получить возможность добавлять другие форматы хранения генеалогических данных (уже добавлена предварительная поддержка формата GedML и начата разработка поддержки формата FamilyShow-файлов - оба формата не очень полезны, но это было нужно для апробирования возможности и исследования эффективности процесса);
- для обеспечения возможности работы с большими и очень большими базами данных (от 30 до 90 мб, вплоть до 500 тыс. записей в файле) - оптимизировать производительность алгоритмов и добиться максимальной экономии памяти при работе с такими файлами;
- так на базах данных около 91 мб, с 538 тыс. записей внутри, производительность загрузки файлов увеличена с 3-5 минут до 20-25 секунд, расход памяти при работе программы снижен с 1400 мб до 590 мб;
- оптимизация алгоритмов преследовала цель увеличить не только скорость загрузки таких файлов, но и производительность программы в целом на всех функциях, во всех блоках и операциях пользователя, включая построение отчетов, генерацию росписей и диаграмм, редактирование данных, обновление всех рабочих таблиц;
- также изменения требовались для улучшения гибкости поддержки многочисленных подвариантов самого формата GEDCOM, записываемого в различных других программах;
- на основе всего этого в будущем возможно будут добавлены другие возможности сохранения файлов либо поддержка реляционных баз данных.
При всём этом, ресурс по повышению производительности программы при текущей архитектуре, по моим оценкам, выработан примерно на 75-80%, по улучшению экономии памяти - примерно на 60%. Есть еще масса возможностей улучшать скорость и эффективность работы.
Теперь остановлюсь на последствиях этих изменений для всех нас. Изменения были очень необходимы и коснулись практически всех направлений работы с GEDCOM-файлами. Вся работа ядра была покрыта более чем 200 автоматизированными тестами, которые проверяли корректность работы после каждого изменения (эти тесты позволяют контролировать около 91% ядра в части работы с GEDCOM). Кроме того, всё многократно и тщательно вручную тестировалось на собственных файлах. К слову, вся программа в целом покрыта 532 тестами, которые позволяют автоматизированно проверять около всего 82% функционала. Хотя все эти тесты далеко не панацея.
Но количество того, что было переделано - велико. Поэтому сегодня я выпускаю именно предварительный вариант релиза, альфа-версию. Никакого инсталлятора, никаких публичных анонсов в других источниках, кроме этого. Только этот анонс и портируемый дистрибутив в виде простого архива, чтобы новая версия не заменяла предыдущую версию на ваших компьютерах.
Я приглашаю всех кто сможет, принять участие в месячном тестировании программы перед полноценным релизом. Несмотря на выполненное мной тестирование программы на собственных файлах, настоятельно рекомендую:
- всем обязательно сделать резервные копии своих файлов перед работой в этой версии;
- ни в коем случае не сохраняйте любые правки данных в основное место хранения ваших файлов, только в отдельную копию, которую будет не жаль удалить;
- внимательно отслеживайте любые странности в работе программы, если таковые найдутся;
- прошу оперативно сообщать в эту тему или на почту о любых проблемах при загрузке, редактировании или сохранении файлов, особенно если в сравнении с работой прошлой версии будут обнаружены какие-то пробелы в данных;