Приложение для структурирования информации
Недавно написал для себя приложение для структурирования информации, которое позволяет организовать её в древовидном виде. Иначе говоря, можно создавать множество деревьев. Так, на мой взгляд, можно структурировать в удобном виде что угодно. И не надо распихивать ничего по блокнотам или мучить обсидиан. Я долгое время структурировал данные через него, но реально дать структуру информации он не позволяет. Там есть текст, есть ссылки на другой текст, есть mermaid. Можно подсчитывать ассоциации и очаровываться линиями. И для кого-то этого хватает. Но структурировать данные от простого к подробностям, чтобы удобно объять всю информацию и работать с ней, и главное, чтобы было этот удобно визуализировать — такого там нет, да и нет подобных приложений.
Поскольку я практически не писал приложений под десктоп, но знаю немного Blazor, то решил написать на нем десктоп приложение. Да и redux подобный фреймворк Fluxor, на мой взгляд, гораздо удобнее того, что есть для десктопа. Вместе с UI фреймворком Radzen получилось вполне сносно. По правде говоря, его пришлось форкнуть и доработать ресайз панели.
Шаблон приложения для такого рода интеграции под десктоп это .NET MAUI Blazor Hybrid app. Там, по сути, вся отрисовка происходит в браузере с wasm. И это хорошо, браузер не плохо заточен под это дело. Единственный минус это отсутствие многопоточности. То есть подождать таску при этом сохраняя в бд sql lite асинхронно не получиться. Будут небольшие лаги. Которых, кстати, не заметно.
В перспективе можно вынести это в настоящий браузер, добавить авторизацию и использовать как сервис. Но функционала уже будет меньше и данные будут храниться уже не локально. В дальнейшем я планирую добавить шифрование для базы данных и бекапов.
Итак, о приложении.
Верхний узел дерева относительно дочернего узла описывает что-то общее, а дочерние уже подробные детали. Например, список дел: главная задача и подзадачи. Таким образом переходя от общего и раскрывая дочерние очень удобно оперировать информацией.
Сейчас я в этом приложении веду абсолютно всё: список дел, задачи по разработке, по тех. анализу, список покупок, TODO список по разработке самого приложения и т. д.
Особенно это приложение будет полезно авторам художественной литературы. Когда описываешь состояние мира: персонажи, взаимодействие, наброски и куча мелких деталей, например, кто где находится.
Ещё одна из основных фич это возможность ссылаться на данные, то есть лист (далее сущность) дерева может являться ссылкой на другой лист. Его так же можно раскрывать, и если ссылка ведет на родительский, то можно раскрывать дерево бесконечно, рекурсия в данном случае безопасна и ничего не сломает.
Для удобства представления деревьев они находятся в контейнерах, это области на экране, размер, которых можно изменять. Можно вкладывать в контейнер другой контейнер и таким образом создать любую визуализацию. Я обычно делю экран на 4 контейнера. Корневые контейнеры представляют из себя пространства, которые можно переключать. Экран может быть занят одним корневым контейнером.
Ещё удобная фича — это возможность работы с несколькими базами, которые так же на лету можно переключать. Их можно бэкапить и ресторить. В сам бекап входят так же файлы. Поэтому информацию можно удобно передать на другой компьютер.
Все данные организуются в виде баз, контейнеров и сущностей.
Сущности.
Сущность состоит из имени, контента, файлов и дочерних сущностей. Текстовые фалы и изображения можно просматривать в самом приложении. Сущность может быть ссылочной, то есть ссылаться на другую сущность. При этом появляется дополнительно поле для имени, в нем можно указать дополнительную информацию, например количество.
Сущности можно копировать, копировать по ссылке и вырезать/вставлять. Сущность можно отметить, как завершенной, при этом она отображается зачеркнутой.
Контейнеры.
Контейнеры могут содержать сущности и другие контейнеры. Содержимое контейнера можно ориентировать по вертикали или горизонтали.
Контейнеры можно вырезать/вставлять, изменять размер.
Корневые контейнеры — это пространства.
Темы.
Можно выбрать тему приложения в любой момент. Тема будет сохраняться для каждой базы.
Базы.
Приложение может переключаться между базами данных. Базы можно создавать, делать бэкапы, восстанавливать из бэкапов. Бэкап включает в себя базу данных и все файлы.
Файлы
К сущности можно добавить файлы. Картинки и текстовые можно просматривать. В планах есть добавить шифрование для файлов.
На данном этапе практически всё что нужно для себя я с делал, однако список TODO ещё длинный. Одна из интересных фич из списка — это отмена действий. Будет возможность смотреть примененные команды и отменять их. Архитектура приложения это позволяет — применяется трекер изменений для доменных объектов.
Все, кто хочет скачать приложение и поддержать, заходите на бусти.
Немного скриншотов:
Вероятно, надо было это отправить в хаб «я пиарюсь», но у меня не хватает кармы, да и есть некоторые подробности на чем это сделано. Можно рассматривать эту статью как набор возможностей веба для десктопа. Конкретнее это возможность написать код под браузер на Blazor, и использовать его, с некоторыми, доработками на различных платформах.
.NET MAUI Blazor Hybrid app позволяет из коробки писать под различные операционки и устройства. А сам Blazor можно еще оформить в виде сервиса. Но доработок будет больше. И это уже зависит от архитектуры приложения. Например, если говорить про бд, то если хорошо отделить базу данных и домен, то с минимальными усилиями. В моем случае это просто смена провайдера в di и отключение множественного выбора бд.
Переход же на server side с wasm, тоже прост благодаря трекеру изменений. Это делается в одном месте для всех данных.