Недавно написал для себя приложение для структурирования информации, которое позволяет организовать её в древовидном виде. Иначе говоря, можно создавать множество деревьев. Так, на мой взгляд, можно структурировать в удобном виде что угодно. И не надо распихивать ничего по блокнотам или мучить обсидиан. Я долгое время структурировал данные через него, но реально дать структуру информации он не позволяет. Там есть текст, есть ссылки на другой текст, есть 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, тоже прост благодаря трекеру изменений. Это делается в одном месте для всех данных.
АПД: Это приложение не миндмап. Тут нет цели изучать ассоциации и получить озарение. Это просто приложение с кучей деревьев в любом месте экрана с возможностью ссылаться на листья.
Комментарии (19)
SquareRootOfZero
02.01.2025 19:44А каковы принципиальные отличия от Zim Wiki, например? Или, в принципе, от любой гипертекстовой системы организации информации? Что древовидная иерархизация не через отдельное оглавление и гиперссылки, а прямо в теле документа эти деревья рисуются?
Ascar Автор
02.01.2025 19:44Да, я это в статье и написал. Деление по контейнерам и деревья где угодно.
SquareRootOfZero
02.01.2025 19:44Допустим, взять обычное Wiki, классическое, любое, которому в обет сто лет: статья с гиперссылками, которые можно открыть и подробнее прочитать/написать, а в статье по каждой гиперссылке могут быть свои гиперссылки, и т. д. - тоже, по-сути, деление по контейнерам и деревья где угодно. В чём отличие?
Ascar Автор
02.01.2025 19:44Ну по вашей логике и чисто база данных это "тоже, по-сути". Как я уже и писал представление разное. Я писал про обсидиан? Писал. Зачем спрашивать одно и тоже?
И я вас не заставлю пользоваться этим. Если у вас не было потребности в таком инструменте то проходите мимо. Пользуйтесь блокнотами.
stan_volodarsky
02.01.2025 19:44Как вы обошлись без упоминания https://en.wikipedia.org/wiki/Mind_map ? Есть десятки приложений на эту тему: https://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software. Чем ваш подход лучше, удобнее?
Ascar Автор
02.01.2025 19:44Это всё же не миндмап.
Удобнее лично для меня чем миндмапы и блокноты со ссылками. Вот лично мне удобно оперировать от общих понятий к детальным, и чтобы это было удобно видеть на экране. Блокнотами так не сделать, потому что там надо переходить и открывать вкладки, это не удобно.
grizzly_8
02.01.2025 19:44Чисто для справки: в Обсидиане тоже можно сделать древовидное отображение плагином. https://github.com/j-palindrome/obsidian-link-tree
leon-mbs
02.01.2025 19:44
Oceanshiver
02.01.2025 19:44Все было неплохо до ссылки на бусти. Серьезно, клянчить деньги за сомнительный софт уровня студенческой курсовой?
Это не говоря о том, что в статье в целом неплохо бы добавить побольше технических моментов, кроме "blazor", "maui" и "Fluxor"
Ascar Автор
02.01.2025 19:44Все было неплохо до ...
Диаметрально противоречит:
... в целом неплохо бы добавить побольше технических моментов, кроме "blazor", "maui" и "Fluxor"
Вам что скидку на донат дать или что? Я не понимаю. Донаты дело добровольное. Да и зачем "гению" донатить за "студенческую курсовую"? Напиши сам по быстрому!
А если серьезно, то я не думаю что у вас есть такого рода задачи, что бы использовать этот инструмент.
Oceanshiver
02.01.2025 19:44Проблема в том, что статья выглядит как просьба с протянутой рукой, потому что больше ничего ценного в статье нет. Если бы вы, например, рассказали больше о технической реализации, дали ссылку на репозиторий и только после этого прикрутили донат - дело другое. А тут - "смотрите, сделал нечто, дайте деняк".
Напиши сам по быстрому!
Если будет необходимость - напишу, тем более стек как раз мой. Но тут вопрос не в том, что мне нужен/не нужен этот софт, тут вопрос отношения к сообществу Хабра. Удивительно что вы этого не понимаете.
Диаметрально противоречит:
Не противоречит, потому что до этого были хоть какие-то технические детали (перечисление технологий и введение в концепцию приложения), и было ощущение что дальше нам расскажут вглубь и вширь, а по факту дальше была ссылка на донаты и пара скринов.
inkelyad
Хм.. В TreeSheets было сделано очень похоже.
Ascar Автор
Не открывается.
inkelyad
Тогда сразу готовая сборка на github-е. Или сильно древнее видео (Youtube) от автора. Просто на домашней страничке еще куча скриншотов(web.archive.org) была.