
Что ж… Вот я и зарелизил 🌿 iNatGet v0.9. Через два с небольшим года после v0.8, и через примерно год после последней версии — v0.8.0.16. Обо всех этих минорных корректирующих версиях я ничего не писал, главным образом потому, что там мучительно правились мелкие баги, а нормальная работа требовала глобального рефакторинга (т.е. переписать заново с нуля), на который никак не находилось времени.
Однако все это время я не прекращал пользоваться своей программой, регулярно формируя отчеты для своих проектов1 на iNaturalist. Таким образом я постепенно уточнял свое понимание того, как это в принципе должно работать и где у меня провалы в архитектуре. Плюс развитие нейросетей… В проекте ни строчки сгенерированного кода, но для консультаций и ревью я пользовался различными LLM очень активно2, что и позволило сравнительно быстро написать новую, полностью переделанную, версию.
Если версии v0.8.x я характеризовал как альфа-версии, то ветка v0.9.x пусть будет бетой, но пока — очень ранней бетой…
Коротко о том, что это за проект вообще, можно прочитать в README-ru.md в репозитории.
Что нового?
Важно: никакой совместимости со старыми версиями нет. Ни старые скрипты, ни старая БД кэша, с новой версией работать не будут. И до полноценного релиза — версии 1.0 — совместимости обещать не могу. Впрочем, механизм миграций внедрен и настроен, так что по возможности данные таки будут сохраняться.
Точнее, что принципиально нового для пользователя? Что из внутреннего устройства влияет на работу с программой?
-
Многозадачность на основе дочерних процессов (через
fork), а не потоков. Все-таки GIL в Ruby никто не отменял, и потоки существенно друг другу мешают.Кстати, сначала я попытался использовать новомодные
Ractor‘ы, но увы — с большинством имеющихся библиотек, в частности —Sequel, они работать пока не могут, поскольку в принципе запрещают общие данные, тогда как классический запуск подпроцессов черезforkих клонирует (там есть нюансы, которые приходится учитывать, но работать можно).Важно: межпроцессное взаимодействие делается через unix-сокеты. Под виндой ничего работать не будет, во всяком случае, без WSL.
-
Более-менее нормально перенесена работа с данными на уровень БД, без загрузки больших объемов в память.
-
Отказался от настраиваемых режимов кэширования/обновления. Впрочем, они все равно не работали… Сейчас остался только обычный режим и offline — во втором случае не делаются никакие обращения к API. Кэширование теперь работает только так, как задумано, зато работает.
Вообще, параметров командной строки стало меньше, настройки остались только в конфиге. Зато в командной строке есть ключ выбора конфига.
По конфигу нужно писать отдельную доку. К релизу (т.е. к 1.0) обязательно будет.
-
Потенциально все должно работать с разными СУБД. Но пока не тестировалось3.
-
DSL тоже поменялся. См. его описание в репозитории в DSL-ru.md.
-
Пока нет средств формирования отчетов и таблиц в них.
Я планирую и здесь сделать все по новому и по уму, чтобы можно было задавать структуру отчета и затем выводить его в разных форматах без переделки. А пока пользуюсь простой записью в текстовый файл.
-
Ну и наконец, репозиторий переехал с моего личного аккаунта в одноименную «организацию». По сути это ничего не меняет, но мне так удобнее — сгруппировать этот проект и все, с ним связанные, в одном месте.
Что дальше?
Отчасти ближайшие планы уже расписаны по задачам и майлстоунам версий, см. Milestones на гитхабе.
Если коротко, то основных направлений три:
-
Доработка кэширования,
-
Разработка системы мультиформатных отчетов,
-
Добавление графики и карт.
И, конечно, документация.
Сроки, естественно, совершенно неопределенные — мне за эту разработку никто не платит, и все делается в свободное время. В майлстоунах какие-то даты прописаны, но это так — чисто ориентировочно, чтобы они в правильном порядке выстраивались.
На полях…
Наверное, стоит написать отдельные посты о разных нюансах, с которыми пришлось столкнуться в процессе разработки… И в первую очередь — о плюсах, минусах и сложностях Sequel — это очень мощный инструмент, но местами без подсказок LLM мне бы пришлось туго.
А кроме того, я впервые за долгое время снова всерьез погрузился в Ruby, и там обнаружилось много нового и вкусного. В частности, мне понравилось, как работает JIT — выигрыш вполне ощутимый во многих случаях.
Надеюсь, напишу…
-
См. журналы проекта «Биоразнообразие районов Свердловской области» и его дочерних. ↩
-
О своем отношении и подходе к использованию нейросетей я подробно писал в посте: «Заметки об LLM и нейросетях вообще». ↩
-
Тестирование на разных СУБД и сравнение их работы запланировано на версию 0.9.4 — там вообще итерация задумана как тестирующая и корректирующая. ↩