Короче программка под все платформы
Решил я тут написать собственную программку для ведения заметок. Обоснование простое:
- Я хочу быть независим от вендора
- Иметь свои заметки на всех платформах
- Иметь простой инструмент, а не комбайн
- Не платить за это денег
- Реализовать свои специфические цели и абмиции
Когда я задумался над тем на чем писать для меня выбор был очевиден - берем flutter. Он уже умеет во все 5 платформ, а мне всего лишь нужно нарисовать три экранчика и редактор визуальный.
Ага. Всего лишь.
Короче в современном мире худшее что можно сделать - это начать писать свою реализацию какой-то простой вещи, которой занимаются уже много лет множество людей. WYSIWIG редакторы - это как раз такая штука.
Я оценил кол-во времени, которое мне понадобится на реализацию полнофункционального редактора и понял, что увы, но у меня нет такого кол-во свободных часов в неделю, а значит пострадает либо работа, либо личная жизнь. Наверное еще лет 7 назад я бы не задумываясь забил на это ограничение, но сейчас - это блокер.
Итак, во флаттере нет нужного кол-ва библиотек решающих мои хотелки для визуальной части редактора, на чем тогда делать?
На сцену выходят сеньёры-джаваскриптизёры!
Несмотря на то, что я не хотел изначально браться за эту разработку на JS, снова увы, но это самый быстрый и надежный вариант.
Почему? Потому что конкретно для решения задачи визуального редактирования текста на просторах JS библиотек было написано такое кол-во решений, что конкурировать с 19 летними библиотеками пережившими недавно очередной виток осознания и взросления - было бы безумием и слабоумием с моей стороны.
Итак задачка разработки заметок для всех платформ стала сильно проще. Теперь всего лишь нужно не облажаться с стеком и фреймворками.
Для клиентского бекенда (это тот, что будет отвечать за работу с файловой системой, синхронизацией заметок и прочими низкоуровневыми операциями - не на js же это писать!) естественно будем брать что-то, что можно скомпилировать подо всё на свете. Си? Нет... Го! Можно не любить этот язык сколько угодно, но величие кросскомпиляции и поддержки почти любого утюга из коробки без анального зуда - это величие. Ну и скорость разработки в моем случае будет высока ибо я этот язык люблю и пишу на нем много.
Для отрисовки клиента вариантов не так много - либо електрон, либо вебвью и биндинги к гошке. Электрон идет лесом ибо 100+ мб для приложения, которое всего лишь управляет заметками - это борщ. Вебвью реализаций есть множество, но я решил дать молодым дорогу и попробовал wails (хоть 2ая версия в бетте еще, но достаточно стабильна на моих тестах)
Сам клиент будет написан на vuejs и quasar потому что быстро, просто, знакомо и кому какая разница на чем написан фронтенд - это так или иначе современный яваскрипт. Ну а квазар выбран потому как имеет все нужные мне компоненты из коробки для верстки плюс имеет задел под сборку мобильных приложений (что в теории должно сэкономить время).
Мобильные же приложения пока остаются небольшим белым пятном в этой схеме ибо я не реализовывал JS приложения еще, флаттер понятно, натив понятно, а как работать с вебвью и всякими там cardova и прочими знаю лишь в теории, ну да вроде дорожка протоптанная, не должно быть супер проблем.
Что в этом всем важного? Важно не пролюбиться и сохранить максимально однородную и единую кодовую базу, т.к. разработчик я один, времени у меня порядка 6 часов в неделю в лучшем случае и хотелок на самом деле дофига. Если этого не получится, то проще было бы написать 5 разных приложений с одинаковой бизнес логикой. Но вроде бы пока беды не жду.
Почему не взять готовое решение?
Да их попросту нет.
Либо решения монструозны и не удовлетворяют меня визуально, либо они платные, либо они ограничены по возможностям, либо они закрытые, либо они не поддерживаются авторами больше. А я хочу apple notes только с блекджеком и маркдауном. Возможно стоит подготовить сравнение со всем остальными решениями в виде сводной таблицы.
Прототип
Так или иначе, но решение это я принял в пятницу, сегодня утро понедельника. За ~3 дня я собрал мак и виндовс версию с почти полным функционалом не считая синхронизации между девайсами. Хотя и этот кусок решается через стороннюю синхронизацию например приложением яндекс диска, дропбокса, гуглодрайва или чем-то еще другим, что умеет синкать файлы между устройствами.
На данный момент приложенька умеет:
- Создавать плоскую структуру папок
- В папках создавать заметки в формате GFM (GitHub Flavored Markdown)
- Удалять и перемещать заметки между папками
- Показывать все заметки во всех папках
- Показывать счетчик заметок в папках и сколько их всего
- Поиск по всем заметкам (не полнотекстовый пока, но регистронезависимый)
- Открывать исходник заметки в системном приложении (саблайм, вскод, блокнот, тайпора и тд)
- Сортировать по дате изменения файлов
- Редактировать файл визуально как будто это вордовский документ
- Поддерживает светлую и темную тему оформления
- Поддерживает вставку форматированного текста из яблочных заметок или того же ворда (заслуга редактора, но таки плюс)
- Весит меньше 10мб
- Выглядит почти как apple notes
Попутно был запилен простенький сайтец, как попытка не дать себе включить заднюю, да и просто чтоб было все по хентаю и феншую сразу - https://notes.sloth.pro
Далее намечен некоторый план развития этого дела. Самое главное, что уже сейчас я перенес все свои основные заметки из яблочных в свою самописную туловину и могу уже ей пользоваться дописывая по мере сил и времени. За 3 дня на флатере я бы, дай бог, сваял базовую верстку и сидел бы курил дарт или биндинги дарта в го или еще что-то подобное.
Короче самое лучше решение в выборе стека - это выбирать тот, который знаешь.
Самой прогой пользоваться пока всем подрят не призываю, ибо сыроватая и много есть очевидных проблем, которые для меня либо не критичны, либо я готов с ними мириться на этой стадии. Как докачу до стабильной версии - буду рад, если кому-то понравится и будет удобной и полезной.
Ну и наверное я сделаю еще один подход к флаттеру в следующий отпуск, но это не точно.