malikov.tech

Короче программка под все платформы

Решил я тут написать собственную программку для ведения заметок. Обоснование простое:

  • Я хочу быть независим от вендора
  • Иметь свои заметки на всех платформах
  • Иметь простой инструмент, а не комбайн
  • Не платить за это денег
  • Реализовать свои специфические цели и абмиции

Когда я задумался над тем на чем писать для меня выбор был очевиден - берем 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 дня на флатере я бы, дай бог, сваял базовую верстку и сидел бы курил дарт или биндинги дарта в го или еще что-то подобное.

Короче самое лучше решение в выборе стека - это выбирать тот, который знаешь.

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

Ну и наверное я сделаю еще один подход к флаттеру в следующий отпуск, но это не точно.