Всем привет! Меня зовут Алексей, я являюсь .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)


  1. evgenij_byvshev
    01.06.2024 07:56
    +17

    Приложение может и хорошее, но выкладывать скомпилированный бинарник и давать на него ссылку в то время когда все говорят, что не стоит скачивать и тем более устанавливать файлы из непроверенных источников - это не очень хорошая идея. А если в это приложение украдет все мои пароли?

    Вот если бы в статье было описание исходников и ссылка на них тогда можно и посмотреть, что у вас получилось.


    1. exTvr
      01.06.2024 07:56

      выкладывать скомпилированный бинарник и давать на него ссылку в то время когда все говорят, что не стоит скачивать и тем более устанавливать файлы из непроверенных источников - это не очень хорошая идея.

      Ну мало ли, а вдруг кто и поведётся?/s


    1. nronnie
      01.06.2024 07:56
      +1

      Возможно, что автор просто еще не дошел до изучения git и сервисов для хранения открытых исходников.


    1. AndreyFr
      01.06.2024 07:56

      Слушай. Ты антивирусом не умеешь пользоваться что ли. А прикинь, если апп вообще без исходников было б и платное и - что?


      1. exTvr
        01.06.2024 07:56

        Ты антивирусом не умеешь пользоваться что ли

        Антивирусом пользуешься не ты, а тебя пользуют. В большинстве случаев.


        1. Rax12
          01.06.2024 07:56

          Когда я раньше баловался vb а потом шарпом, то сам удивлялся что ни один антивирусник ничего не говорит на приложение которое например берет твои куки браузеров и отправляет их по сети.

          Да даже на кейлоггер не ругались.


      1. me21
        01.06.2024 07:56
        +6

        Если антивирус ничего не нашёл, это значит только, что антивирус ничего не нашёл.


        1. AndreyFr
          01.06.2024 07:56
          +1

          Ну да, и virustotal если ничего не нашёл - то если нет исходников и тонны времени ковырятся в чужом коде - то лучше не запускать приложение, а то ещё вирус подхватишь. Ну его...


    1. alexeyfala Автор
      01.06.2024 07:56

      Спасибо вам за критику.
      Есть несколько причин, по которым я не выкладываю исходники в открытый доступ:

      • В приложении есть возможность шифрования содержимого документов, если логика дешифрования станет доступна, можно будет ею воспользоваться, а я сам храню в Data Organizer важную информацию. Понимаю что любые данные при желании можно вскрыть, но все же, вдруг приложение станет востребованным и просто не хочется кого-то подставить.

      • Я использую проприетарные компоненты от Telerik (сам купил лицензию) и Syncfusion (комьюнити лицензия). У Syncfusion странная система лицензирования компонентов, вынуждающая прописывать ключ прямо в коде, не хотелось бы его светить, на всякий случай, чтобы мой аккаунт не заблокировали.

      Если у кого-нибудь есть идеи, как это можно обойти, то я бы с радостью выложил исходники в открытый доступ.


      1. nronnie
        01.06.2024 07:56
        +11

        В приложении есть возможность шифрования содержимого документов, если логика дешифрования станет доступна, можно будет ею воспользоваться,

        У вас в приложении своя собственная логика шифрования? LOL, удачи вам и творческих успехов :)))


      1. Dolios
        01.06.2024 07:56
        +7

        В приложении есть возможность шифрования содержимого документов, если логика дешифрования станет доступна, можно будет ею воспользоваться

        Ну вот, приехали )))) Security through obscurity на самописных велосипедах? Если так, то можете считать, что никакого шифрования у вас нет.


        1. nronnie
          01.06.2024 07:56

          Если так, то можете считать, что никакого шифрования у вас нет.

          Теоретически, можно что-нибудь и своё интересное придумать, но со "своим интересным" тогда можно и неприятностей, как когда-то Циммерман, себе нажить.


          1. Dolios
            01.06.2024 07:56
            +2

            Раньше был такой анекдот:

            Когда поздно вечером в дверь англичанина раздаётся стук, он, конечно, может предположить, что это королева пришла провести с ним ночь, но, скорее всего, это у соседа кончилась соль.

            С самописной системой шифрования обычно что-то похожее происходит. Циммерман более 10 лет специализировался на криптографии, прежде чем PGP написал. Это то самое исключение, подтверждающее правило.


      1. shimarulin
        01.06.2024 07:56
        +7

        1. Логика шифрования/дешифрования должна опираться на стандартные, проверенные и открытые решения. Тогда и самому писать ее не нужно, и причин прятать нет. Я с гораздо большим недоверием отношусь к программе, алгоритм шифрования которой мне неизвестен, чем к открытой программе вообще без шифрования. Так как программа хранит мои текстовые данные, я хочу иметь доступ к этим данным независимо от существования этой программы, на том простом основании, что данные - мои. Как только данные зашифрованы неизвестным алгоритмом, я немедленно теряю контроль над ними, мне просто дают ими попользоваться. Однажды могут и не дать, письменных гарантий я не получал))) В общем банально прикрутить RSA и дать пользователям хранить у себя ключик было бы маленькой задачей для программиста, но огромным скачком для программы)

        2. Прямо в коде теоретически можно вызвать переменную окружения или другой механизм передачи приватных данных (Vault первым приходит в голову, хотя это явно оверхед). Ключ виден только в окружении сборки, но не в исходниках.

        А вообще интересный опыт, дерзайте! Я сам дважды в одиночку писал приложения подобного рода (на разном стеке), прежде чем появился Obsidian, в котором все мои хотелки были воплощены)


        1. alexeyfala Автор
          01.06.2024 07:56

          Спасибо за развернутый комментарий. Я пересмотрю свой подход к шифрованию данных. Была мысль использовать переменные окружения, но посчитал этот подход менее безопасным) Также ради комментариев была создана мною статья.


          1. user5000
            01.06.2024 07:56
            +2

            Секретность шифрования должна определяться только секретностью ключа, использованного при шифровании. При этом следует предполагать, что алгоритм шифрования известен злоумышленнику.

            Да, и гляньте на википедии "Принцип Керкгоффса".


      1. ilriv
        01.06.2024 07:56

        Нельзя все чувствительные куски кода загнать в библиотеки?


      1. MAXH0
        01.06.2024 07:56

        Основная логика шифрования в том, что в шифровании логично не полагаться на "секрет" знание которого скомпрометирует все шифрование.


      1. dukei
        01.06.2024 07:56
        +1

        Обойти это очень просто - все личные данные надо вынести в конфигурационный файл сборки, и не включать его в репозиторий.

        И правильно вам говорят - если вы боитесь, что исходный код шифрования позволит кому-то расшифровать ваши записи, значит, у вас очень плохое шифрование. Тем более, программы на .NET весьма дружественно декомпилируются.


        1. wepp
          01.06.2024 07:56

          А ключи от лицензий? Их тогда покупать всем, кто захочет пользоваться?


      1. smind
        01.06.2024 07:56
        +1

        надеюсь это вы исправите


      1. UnknownMe
        01.06.2024 07:56

        Насчёт алгоритмов шифрования и опенсурса - современные алгоритмы шифрования позволяют и с наличием опенсурс вполне надёжно шифровать данные, WireGuard тому пример


  1. iredun
    01.06.2024 07:56
    +10

    А почему решили писать свое? Не смотрели уже существующее разработки, тот же Obsidian например.


    1. Serge78rus
      01.06.2024 07:56
      +8

      Как известно, все существующие разработки имеют один "фатальный недостаток":

      https://ru.wikipedia.org/wiki/Синдром_неприятия_чужой_разработки


      1. Fhann
        01.06.2024 07:56
        +3

        Ад зависимостей? Не, не слышал.


    1. alexeyfala Автор
      01.06.2024 07:56
      +1

      Написал свое, так как, хотелось назначать документам глобальные горячие клавиши, для максимально быстрого копирования текста в буфер обмена. И еще хотелось иметь особый минималистичный режим работы, который реализован в приложении как режим «Избранное». Я добавил описание этого режима в статью.


      1. alextrof94
        01.06.2024 07:56
        +2

        Обсидиан поддерживает markdown (оформление кода с подсветкой синтаксиса, вставка изображений, заголовки и прочее), перекрестные ссылки между документами.

        Копировать текст кода из блока кода, который может находиться в целом смешанном гайде - 1 клик.

        Есть вкладка "закладки" (bookmarks), где будут только "избранные" файлы. Ну, а история буфера обмена уже встроена с вин10, если войти в учётку Майкрософт, а не через локальную сидеть.

        Синхронизация настраивается, учитывая, что это просто папки с файлами ".md" - хоть через Гугл/Яндекс/чтоугодно диск, хоть через гит.

        А ещё там есть плагины...

        В общем, рекомендую ознакомиться с софтиной. Скорее всего отпадет желание продолжать делать свою.


  1. alexs963
    01.06.2024 07:56

    org-mode /s


  1. diakin
    01.06.2024 07:56
    +1

    Mars Notebook тоже.


  1. AndreyFr
    01.06.2024 07:56

    Ищу нормальное (не монструозное) апп. До сих пор ищу, так как еще не нашел.

    Приложение - заметки, которое имело бы версии на андроид, линукс desktop и windows с возможностью синхронизации и не весило бы миллиард гигобайтов.


    1. LeshaRB
      01.06.2024 07:56
      +1

      UpNote попробуйте, купил про и не жалею
      Был и WizNote и Nimbus и Обсидиан


      1. Dolios
        01.06.2024 07:56

        Выглядит интересно. Есть только одна проблема, если компания перестанет существовать и отключит серверную инфраструктуру, вы лишитесь возможности дальше пользоваться заметками.


        1. nronnie
          01.06.2024 07:56
          +1

          Обсиданыч не зависит от какой-либо серверной инфраструктуры. Конечно, есть у него действительно недостаток, это то что он closed-source, Но от чего либо, кроме самого его инсталлятора он не зависит.


          1. Dolios
            01.06.2024 07:56

            Его пока и использую. Подкупает тем, что заметки точно никуда не денутся по независимым от меня причинам.


        1. iDuran
          01.06.2024 07:56

          Обсидиан, но там для синхронизации придется чутка пострадать. А вообще, если хотите локальную БД с заметками и связями - очень рекомендую посмотреть в сторону anytype. Ребята пилят notion, но с локальной БД


    1. nronnie
      01.06.2024 07:56

      Что в вашем представлении "не монструозное"?


      1. AndreyFr
        01.06.2024 07:56

        То же самое, что в представлении "не монструозное" для нормальных людей.

        А не как это, напр.: https://imgur.com/a/bYVSBAY

        А пару лет назад оно весило около 10мб, а то и меньше.


    1. LonerD
      01.06.2024 07:56

      Я тоже. В итоге остановился на My Note Keeper, андроидом пришлось пожертвовать. Второй вариант -EPIM, с локальной синхронизацией с андроидом.