Про дальнейшее развитие OutWiker
После релиза OutWiker 4.0 пришло время подумать о том, в какую сторону развивать программу дальше. Идей по этому поводу у меня много, и я не называю это планом, вряд ли все эти хотелки упихнутся в одну версию. Это больше напоминает мешок с задачами, из которого я буду вытаскивать по одной задаче, руководствуясь принципом «кажется, это сейчас можно сделать». Есть несколько дальнейших путей развития приложения, где-то эти пути пересекаются, а где-то идут параллельными тропами. Далее я попробую логически сгруппировать задачи, которыми можно заняться в ближайшее время.
Плач Ярославны Нытье разработчика
Основной вопрос, который стоит на ближайшее время — хватит уже поддерживать Windows 7 или еще немного потерпеть. От этого зависит, как назвать следующую версию — 4.1 или 5.0.
Из-за Windows 7 приходится поддерживать работу приложения под старой версией Python 3.8, но уже многие библиотеки перестали работать с этой версией Python, что не позволяет использовать более новые версии этих библиотек. При этом для Linux сейчас OutWiker собирается под Python 3.10 (в snap-пакете) и Python 3.12 (внутри flatpak-пакета). Snap надо будет тоже обновить, чтобы работать под Python 3.12. Я знаю, что существуют неофициальные дистрибутивы более новых версий Python для Windows 7 или можно попытаться собрать их самостоятельно из исходников. Вопрос в том, удастся ли запустить такие версии на сервере сборки Github Actions. Это тоже является направлением для экспериментов.
Другая тяжелая зависимость — это библиотека wxPython. В последней версии wxPython 4.2.5 этой библиотеки исправили неприятный баг, проявляющийся в некоторых линуксовых дистрибутивах (баг связан с Wayland), но я сомневаюсь, что эту версию удастся скомпилировать под Python 3.8 в Windows. Можно попытаться под Windows и Linux использовать разные версии wxPython и надеяться, что поведение этих версий библиотек одинаково, а это не всегда так, несмотря на изменения лишь в третьем разряде версии.
Еще один вопрос, если отказываться от поддержки Windows 7, то как быть с 32-битными системами? Официально используемая сейчас версия wxPython уже не собирается разработчиками под 32-битные Windows, но при желании такую версию можно скомпилировать из исходников. Как обстоят дела с более новыми версиями wxPython, пока не знаю.
Что даст отказ от Windows 7?
Теперь о том, что даст отказ от Windows 7 пользователям.
Во-первых, в версии OutWiker под Windows можно будет использовать более новый системный HTML-движок Edge на основе Chromium вместо применяемого сейчас движка Internet Explorer. С одной стороны, не каждому пользователю это важно, но это даст возможность использовать более продвинутые возможности для рендеринга викистраниц и поддержку картинок в формате WebP.
Переход на новый движок — это тоже не самая простая задача, я уже начинал копать эту сторону, в исходниках есть ветка, в которой HTML-движок переключен на Edge. С ним предстоит еще много возни, потому что он ведет себя с точки зрения программирования совсем не так, как движок IE. Например, основная проблема заключается в том, что новый движок полностью перехватывает все горячие клавиши, не отдавая их наружу. Чтобы это обойти, надо написать код на JavaScript, который эти клавиши будет перехватывать и через специальную функцию передавать в родительский интерфейс. В свою очередь, снаружи полученные таким образом комбинации клавиш надо преобразовать в другой формат и пытаться найти соответствующие им комбинации клавиш, которые используются в программе. Помимо этого, Edge по-другому обрабатывает нажатия ссылок и открытие страниц, эту часть тоже надо будет переписать. Но я надеюсь, что эти проблемы решаемы.
Во-вторых, отказ от Windows 7 позволит легче перейти на новую версию библиотеки wxPython, которая вроде бы (тут я говорю с осторожностью) должна дать возможность использовать под Windows темную тему оформления интерфейса. Под Linux такая поддержка появилась давно, а под Windows, кажется, ее добавили только недавно. Это приведет к тому, что надо будет делать два набора значков для кнопок — для темной темы и для светлой темы. Я надеюсь, что перекрашивание значков в светлый цвет будет не самой сложной задачей, хотя повозиться придется.
Разные сборки
Еще мне постоянно пишут, что неплохо было бы собрать какой-нибудь более «родной» пакет под Linux, особенно deb-пакет. Наверное, я готов предпринять еще одну попытку по такой сборке, но пока обещать ничего не буду. То же самое касается и сборки в формате AppImage. Ну и поскольку сам я пользуюсь дистрибутивами на основе Arch Linux (Manjaro) и NixOS, то можно попробовать сделать пакеты под них.
После релиза 4-й версии на LOR написали о проблемах, связанных с пакетом Flatpak и Wayland, а в комментах в Телеграм-канале накидали возможные пути решения. Это тоже надо будет попробовать.
Кроме того, версию под Windows интересно было бы разместить в репозитории Chocolatey, чтобы можно было бы скачивать и устанавливать OutWiker через терминал Windows.
Идеи новых возможностей
Все, что говорил выше, в основном касалось внутренней кухни разработки, теперь давайте я набросаю идеи, чем можно заняться в новых версиях из того, что будет видно пользователям.
Начну с изменений, которые мне очень хочется сделать, и которые не потребуют больших исправлений в коде. В первую очередь мне хочется уменьшить количество телодвижений при создании и настройке заметок. Например, при создании новой заметки в диалоге настроек кроме вариантов размещения ее в начале или в конце ветки хочу добавить пункты для размещения заметки непосредственно до или после открытой в данный момент заметки. Помимо этого хочу добавить флажок для открытия новой заметки в новой вкладке.
Сюда же можно отнести идею создания заметки на основе выделенного текста, потому что когда нужно разбить какую-то заметку на несколько, перенести часть текста в новую заметку, приходится постоянно переключаться между ними, копируя блоки текста.
Еще планирую сделать создание заметки вообще без диалога. При этом возникают вопросы, какого типа заметку создавать, и куда ее помещать. Первая проблема решается настройками по умолчанию в диалоге настроек. Для решения второго вопроса можно принудительно создавать родительскую страницу «Входящие», и эту страницу делать родительской для таких наскоро созданных заметок.
Мне хотелось бы заняться развитием плагина TeXEquation, который позволяет вставлять формулы в формате LaTeX. Основная задача — добавить панель с кнопками для вставки наиболее часто используемых элементов формул и, возможно, дополнительное поле ввода рядом с предпросмотром формул с подсветкой кода LaTeX. Кстати, похоже, что для корректной работы последних версий библиотеки KaTeX, которая используется для рендеринга формул, тоже нужно переходить на более новый HTML-движок под Windows (с Линуксом проблем нет).
В версии 4.0 я отказался от нескольких стандартных контролов в пользу самописных. Можно пойти дальше по этой скользкой дорожке и переделать еще пару элементов интерфейса. В первую очередь можно попробовать переделать панель инструментов. Многие справедливо возмущаются мерцанием интерфейса при переключении с одного типа заметок на другой. В первую очередь это связано с тем, что при таком переключении удаляются одни кнопки и добавляются другие, а в процессе добавления и удаления каждой отдельной кнопки панель перерисовывается. Можно попробовать удалять и добавлять кнопки сразу пачками по несколько штук. Не уверен, что это удастся сделать с помощью используемой панели, но если сделать полностью свою панель инструментов, то все возможно.
Также в списке прикрепленных файлов хотелось бы иметь возможность показывать дополнительную информацию о файлах и иметь возможность сортировать вложения по размеру, дате и т.д.
Если продолжать мечтать о том, что еще хотелось бы сделать, то из крупных изменений — это корзина для удаленных заметок. Просто для защиты от глупости, чтобы заметки не уничтожались совсем, а на некоторое время перемещались в отдельную ветку, и удалялись оттуда через некоторое заранее установленное время.
Все никак не дойдут руки сделать поиск заметок с предварительной индексацией или хоть как-то ускорить поиск. Интерфейс страницы глобального поиска тоже надо полностью переделать, а то он сейчас выглядит страшно.
Еще в прошлой версии я хотел добавить фильтр в дереве заметок, чтобы отображались только те заметки, в названиях которых есть искомая фраза. Когда я переделывал дерево заметок, это была одна из возможностей, которую я держал в голове.
Не всем нравится викинотация, которая используется на викистраницах, особенно кавычки, которые используются для выделения текста курсивом и полужирным шрифтом. Поэтому есть идея сделать новый тип заметок с другими форматами нотации, например, AsciiDoc или reStructuredText (RST). Про страницу с визуальным редактором я пока промолчу, хотя в этом тоже может помочь переход на новый HTML-движок.
Всякие мелкие исправления, которые я себе записал в ToDo, я пока перечислять не буду, и так уже много понаписал. Но только еще раз скажу, что все вышеперечисленное — это не жесткий план на одну ближайшую версию, а мысли по поводу того, что можно делать дальше.
OutWiker на Rust
Еще одна идея, которую я пока не упоминал, и которой хотел бы заняться — это ускорение открытия дерева заметок. Изначально я думал реализовать загрузку заметок на Rust с использованием многопоточности. За последний месяц я урывками это напрограммировал в отдельном проекте, чтобы оценить выигрыш по скорости. Особо большого прироста скорости я не получил — где-то 20-30%. Надо еще поточнее померить среднее время, но я ожидал большего. При этом, пока я возился с загрузкой заметок на Расте, я начал набрасывать общую архитектуру OutWiker, как бы я сейчас ее делал, если бы писал на этом языке. И понеслось…
Подумал, что неплохо было бы полностью отделить интерфейс от ядра, чтобы интерфейс легко было бы заменять на другой, не переписывая всю программу. Например, как это сделано в (Neo)Vim, где по сути применяется клиент-серверная архитектура с использованием протокола MessagePack-RPC, и поэтому для NeoVim существует множество разных графических оболочек. Кроме того, переход с Python на Rust решил бы множество проблем, связанных со сборкой под разные версии Linux и Windows.
Переписывание OutWiker на Rust даст возможность использовать полноценную многопоточность. Это было бы полезно не только при загрузке дерева заметок — загрузку заметок можно было бы сделать постепенной, когда пользователь работает над одними заметками, а остальные еще загружаются. Полноценная многопоточность ускорила бы проверку орфографии, раскраску кода и много где еще можно было бы ее применить.
В итоге я решил понемногу копать в эту сторону, неторопливо пробовать, как это может выглядеть. Я это делаю скорее из собственного любопытства, а не для пользователей. Но может быть когда-нибудь из этого что-нибудь и получится, кто знает. Хотя исходники с этими экспериментами и открыты, но я пока даже не буду давать на них ссылки, самые любопытные из вас могут найти этот репозиторий у меня в профиле на GitHub.
Заключение
В общем, такие вот у меня мысли по поводу дальнейшего развития OutWiker. Хочется сделать много всего, и эти изменения разрастаются в разные стороны, а, к сожалению, времени заняться сразу всем не хватает. Еще надо не забывать, что я планирую и дальше переделывать значки в векторный формат, что тоже занимает много времени.
Теперь, когда все это написал, можно постепенно начинать что-то делать.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.




Leave a comment