Что ж… Вот я и зарелизил 🌿 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 — там вообще итерация задумана как тестирующая и корректирующая. ↩