Всем привет! Меня зовут Алексей, я являюсь .NET разработчиком. Это моя первая статья на Хабре. Время от времени возникает необходимость где-то записывать различные вырезки из статей, инструкции, сниппеты с кодом и т. д. Раньше приходилось хранить все это в отдельных файлах в системе, но со временем их становилось все больше, и я начал забывать, что и где находится. Однажды возникла идея разработки Desktop приложения на WPF для удобного хранения текстовой информации в одном месте, чтобы можно было ее систематизировать и быстро находить.
Начал разработку в 2022 г. и продолжаю ее по сей день в свободное от основной работы время. На данный момент приложение имеет довольно неплохой функционал, оно получилось удобным и удалось реализовать практически все что требовалось на момент задумки. Приложение называется Data Organizer и предназначено для работы в ОС Windows.
Интерфейс
Интерфейс выполнен по принципу Master–detail, где в левой части экрана находится иерархический список папок и документов, напоминающий проводник в ОС Windows, а в правой, представление выбранного в списке документа. В данный момент реализованы следующие типы документов:
Простой текст - обычный текстовый документ с возможностью подсветки синтаксиса;
Форматированный текст - аналог документа docx;
Электронная таблица - аналог документа xlsx;
Набор данных - документ в виде набора карточек, позволяющих разделять информацию по категориям с порциями текста.
В планах добавить возможность хранения документов PDF.
В настройках можно изменить параметры цветовой темы приложения, выбрать русский или английский язык интерфейса.
Есть места, где локализация только английская, это диалог подключения к базе данных (очень много текста нужно перевести), в представлении документов с форматированным текстом и электронных таблицах для которых используются компоненты от Telerik (нужно будет найти время чтобы заняться этим).
Возможности
Есть возможность перетаскивать объекты в любое место в списке с помощью Drag-and-drop, а также с помощью клавиатуры комбинациями Alt+Up/Down в пределах папки.
Реализован поиск объектов как по названиям и тэгам (тэги служат для обобщения объектов в списке), так и по содержимому документов (в данный момент поиск по содержимому применяется к документам с простым и форматированным текстом).
Есть возможность экспорта всех данных в один XML или JSON файл, или в физические файлы, где каждому документу соответствует один файл на диске с учетом иерархии папок в списке. По такому же принципу реализован и импорт данных в приложение.
Присутствует история просмотров содержимого документов и история копирования содержимого.
Так же есть шифрование содержимого папки в списке (лучше пока не пользоваться, занимаюсь изменением подхода к шифрованию).
Есть возможность добавления комбинации глобальных горячих клавиш для документов с простым текстом, чтобы можно было быстро копировать содержимое документов в системный буфер обмена.
Режим «Избранное». Специальный режим работы, в котором приложение имеет минималистичный интерфейс для показа только избранных документов с простым текстом. Данный режим служит для быстого нахождения и копирования в системный буфер обмена наиболее часто используемых порций текста. Режим становится доступным в меню, если в главном списке редактора есть избранные документы, которые назначаются с помощью контекстного меню нажатием на правую кнопку мыши. Так же в данном режиме есть просмотр истории копирования содержимого, для еще более быстрого повторного копирования текста.
Хранение данных
По умолчанию приложение использует для хранения данных локальную базу данных SQLite, создаваемую и находящуюся рядом с исполняемым файлом, но есть возможность подключения через специальный диалог к другой базе SQLite а так же к MySQL, Oracle, PostgreSQL, SQLServer.
Публикация
Приложение компилируется в портативную сборку, включающую в себя целевую платформу .NET 8, для удобства переноски на съемном носителе. Систему своими файлами и записями не засоряет, все необходимые для работы файлы, создает в папке рядом с исполняемым.
Заключение
Я хочу поделиться своим приложением бесплатно со всеми желающими. Возможно, кому-то оно будет так же полезным. Так как занимаюсь его разработкой в одиночку, я был бы очень благодарен за обратную связь (для этого можно использовать диалог «Техническая поддержка» в самом приложении). Буду рад предложениям по доработкам, улучшению, замечаниям, добавлению новых функций, выявленным багам и т.д.
Приложение находится в открытой папке на Яндекс диске и доступно по ссылке: https://disk.yandex.ru/d/jeUJ8m7PJYRu4g или qr-коду:
Я пытался найти действующий, не заблокированный на территории России ресурс для размещения скомпилированной сборки Data Organizer, но не удалось, если кто-нибудь сможет подсказать о существовании такого, буду очень благодарен.
Комментарии (76)
iredun
01.06.2024 07:56+10А почему решили писать свое? Не смотрели уже существующее разработки, тот же Obsidian например.
Serge78rus
01.06.2024 07:56+8Как известно, все существующие разработки имеют один "фатальный недостаток":
https://ru.wikipedia.org/wiki/Синдром_неприятия_чужой_разработки
alexeyfala Автор
01.06.2024 07:56+1Написал свое, так как, хотелось назначать документам глобальные горячие клавиши, для максимально быстрого копирования текста в буфер обмена. И еще хотелось иметь особый минималистичный режим работы, который реализован в приложении как режим «Избранное». Я добавил описание этого режима в статью.
alextrof94
01.06.2024 07:56+2Обсидиан поддерживает markdown (оформление кода с подсветкой синтаксиса, вставка изображений, заголовки и прочее), перекрестные ссылки между документами.
Копировать текст кода из блока кода, который может находиться в целом смешанном гайде - 1 клик.
Есть вкладка "закладки" (bookmarks), где будут только "избранные" файлы. Ну, а история буфера обмена уже встроена с вин10, если войти в учётку Майкрософт, а не через локальную сидеть.
Синхронизация настраивается, учитывая, что это просто папки с файлами ".md" - хоть через Гугл/Яндекс/чтоугодно диск, хоть через гит.
А ещё там есть плагины...
В общем, рекомендую ознакомиться с софтиной. Скорее всего отпадет желание продолжать делать свою.
AndreyFr
01.06.2024 07:56Ищу нормальное (не монструозное) апп. До сих пор ищу, так как еще не нашел.
Приложение - заметки, которое имело бы версии на андроид, линукс desktop и windows с возможностью синхронизации и не весило бы миллиард гигобайтов.
LeshaRB
01.06.2024 07:56+1UpNote попробуйте, купил про и не жалею
Был и WizNote и Nimbus и ОбсидианDolios
01.06.2024 07:56Выглядит интересно. Есть только одна проблема, если компания перестанет существовать и отключит серверную инфраструктуру, вы лишитесь возможности дальше пользоваться заметками.
nronnie
01.06.2024 07:56+1Обсиданыч не зависит от какой-либо серверной инфраструктуры. Конечно, есть у него действительно недостаток, это то что он closed-source, Но от чего либо, кроме самого его инсталлятора он не зависит.
Dolios
01.06.2024 07:56Его пока и использую. Подкупает тем, что заметки точно никуда не денутся по независимым от меня причинам.
iDuran
01.06.2024 07:56Обсидиан, но там для синхронизации придется чутка пострадать. А вообще, если хотите локальную БД с заметками и связями - очень рекомендую посмотреть в сторону anytype. Ребята пилят notion, но с локальной БД
nronnie
01.06.2024 07:56Что в вашем представлении "не монструозное"?
AndreyFr
01.06.2024 07:56То же самое, что в представлении "не монструозное" для нормальных людей.
А не как это, напр.: https://imgur.com/a/bYVSBAY
А пару лет назад оно весило около 10мб, а то и меньше.
LonerD
01.06.2024 07:56Я тоже. В итоге остановился на My Note Keeper, андроидом пришлось пожертвовать. Второй вариант -EPIM, с локальной синхронизацией с андроидом.
evgenij_byvshev
Приложение может и хорошее, но выкладывать скомпилированный бинарник и давать на него ссылку в то время когда все говорят, что не стоит скачивать и тем более устанавливать файлы из непроверенных источников - это не очень хорошая идея. А если в это приложение украдет все мои пароли?
Вот если бы в статье было описание исходников и ссылка на них тогда можно и посмотреть, что у вас получилось.
exTvr
Ну мало ли, а вдруг кто и поведётся?/s
nronnie
Возможно, что автор просто еще не дошел до изучения git и сервисов для хранения открытых исходников.
AndreyFr
Слушай. Ты антивирусом не умеешь пользоваться что ли. А прикинь, если апп вообще без исходников было б и платное и - что?
exTvr
Антивирусом пользуешься не ты, а тебя пользуют. В большинстве случаев.
Rax12
Когда я раньше баловался vb а потом шарпом, то сам удивлялся что ни один антивирусник ничего не говорит на приложение которое например берет твои куки браузеров и отправляет их по сети.
Да даже на кейлоггер не ругались.
me21
Если антивирус ничего не нашёл, это значит только, что антивирус ничего не нашёл.
AndreyFr
Ну да, и virustotal если ничего не нашёл - то если нет исходников и тонны времени ковырятся в чужом коде - то лучше не запускать приложение, а то ещё вирус подхватишь. Ну его...
alexeyfala Автор
Спасибо вам за критику.
Есть несколько причин, по которым я не выкладываю исходники в открытый доступ:
В приложении есть возможность шифрования содержимого документов, если логика дешифрования станет доступна, можно будет ею воспользоваться, а я сам храню в Data Organizer важную информацию. Понимаю что любые данные при желании можно вскрыть, но все же, вдруг приложение станет востребованным и просто не хочется кого-то подставить.
Я использую проприетарные компоненты от Telerik (сам купил лицензию) и Syncfusion (комьюнити лицензия). У Syncfusion странная система лицензирования компонентов, вынуждающая прописывать ключ прямо в коде, не хотелось бы его светить, на всякий случай, чтобы мой аккаунт не заблокировали.
Если у кого-нибудь есть идеи, как это можно обойти, то я бы с радостью выложил исходники в открытый доступ.
nronnie
У вас в приложении своя собственная логика шифрования? LOL, удачи вам и творческих успехов :)))
Dolios
Ну вот, приехали )))) Security through obscurity на самописных велосипедах? Если так, то можете считать, что никакого шифрования у вас нет.
nronnie
Теоретически, можно что-нибудь и своё интересное придумать, но со "своим интересным" тогда можно и неприятностей, как когда-то Циммерман, себе нажить.
Dolios
Раньше был такой анекдот:
С самописной системой шифрования обычно что-то похожее происходит. Циммерман более 10 лет специализировался на криптографии, прежде чем PGP написал. Это то самое исключение, подтверждающее правило.
shimarulin
Логика шифрования/дешифрования должна опираться на стандартные, проверенные и открытые решения. Тогда и самому писать ее не нужно, и причин прятать нет. Я с гораздо большим недоверием отношусь к программе, алгоритм шифрования которой мне неизвестен, чем к открытой программе вообще без шифрования. Так как программа хранит мои текстовые данные, я хочу иметь доступ к этим данным независимо от существования этой программы, на том простом основании, что данные - мои. Как только данные зашифрованы неизвестным алгоритмом, я немедленно теряю контроль над ними, мне просто дают ими попользоваться. Однажды могут и не дать, письменных гарантий я не получал))) В общем банально прикрутить RSA и дать пользователям хранить у себя ключик было бы маленькой задачей для программиста, но огромным скачком для программы)
Прямо в коде теоретически можно вызвать переменную окружения или другой механизм передачи приватных данных (Vault первым приходит в голову, хотя это явно оверхед). Ключ виден только в окружении сборки, но не в исходниках.
А вообще интересный опыт, дерзайте! Я сам дважды в одиночку писал приложения подобного рода (на разном стеке), прежде чем появился Obsidian, в котором все мои хотелки были воплощены)
alexeyfala Автор
Спасибо за развернутый комментарий. Я пересмотрю свой подход к шифрованию данных. Была мысль использовать переменные окружения, но посчитал этот подход менее безопасным) Также ради комментариев была создана мною статья.
user5000
Секретность шифрования должна определяться только секретностью ключа, использованного при шифровании. При этом следует предполагать, что алгоритм шифрования известен злоумышленнику.
Да, и гляньте на википедии "Принцип Керкгоффса".
ilriv
Нельзя все чувствительные куски кода загнать в библиотеки?
MAXH0
Основная логика шифрования в том, что в шифровании логично не полагаться на "секрет" знание которого скомпрометирует все шифрование.
dukei
Обойти это очень просто - все личные данные надо вынести в конфигурационный файл сборки, и не включать его в репозиторий.
И правильно вам говорят - если вы боитесь, что исходный код шифрования позволит кому-то расшифровать ваши записи, значит, у вас очень плохое шифрование. Тем более, программы на .NET весьма дружественно декомпилируются.
wepp
А ключи от лицензий? Их тогда покупать всем, кто захочет пользоваться?
smind
надеюсь это вы исправите
UnknownMe
Насчёт алгоритмов шифрования и опенсурса - современные алгоритмы шифрования позволяют и с наличием опенсурс вполне надёжно шифровать данные, WireGuard тому пример