OutWiker 3.0.0.856 unstable и мысли по поводу web-версии OutWiker
Под новый год принято подводить итоги, но в этот раз я решил подождать с итогами до объявления OutWiker 3.0 стабильной версией, а вместо этого написать о дальнейших планах, косвенно связанных с OutWiker, и которые я надеюсь реализовать в следующем году. Об этом я скажу во втором разделе поста, а начнем мы с перечисления изменений в новой предновогодней версии OutWiker, которая имеет номер 3.0.0.856.
Что нового в OutWiker 3.0.0.856
В новой нестабильной версии OutWiker я продолжил дорабатывать всплывающее окно со списком страниц, которое открывается при клике на метку. Теперь вы можете изменять размер этого окна, причем этот размер будет сохраняться, и при следующем появлении окна снова менять размер вам не придется.
Также теперь сохраняются ширины столбцов, которые вы можете менять, двигая разделитель между столбцами в заголовке.
Раньше для скрытия или отображения столбцов в этом окне нужно было заходить в диалог настроек (раздел «Интерфейс — Облако меток»), а в новой версии скрывать и отображать столбцы можно с помощью контекстного меню, которое будет появляться при клике правой кнопкой мыши на заголовке.
Еще одно изменение связано с уведомлениями о различных ошибках, которые могут происходить при работе с программой. Например, при попытке открыть уже не существующую базу заметок или при попытке изменения заметок, открытых в режиме «только для чтения».
На мой взгляд диалоги с единственной кнопкой OK, которые не дают пользователю никакого выбора действий, бесполезны. Пользователь вынужден нажимать эту единственную кнопку, только чтобы убедить программу, что он прочитал показываемое ему сообщение. Поэтому в новой версии такие диалоги были заменены на всплывающие в правом нижнем углу уведомления.
Такие уведомления можно закрыть, щелкая на них мышкой, но делать это не обязательно, потому что оно само исчезнет через 5 секунд, а пользователь в это время может просто не обращать на него внимания, если оно не мешает.
Раньше в диалоге настроек в разных разделах можно было найти схожие по смыслу настройки для установки цветов интерфейса программы. В новой версии был добавлен новый раздел «Интерфейс — Цвета», куда были помещены все настройки, связанные с цветами.
И кроме того, как всегда в новой версии были исправлены некоторые ошибки. В том числе ошибка из-за которой не работал плагин UpdateNotifier под Linux.
OutWiker для web
Многие пользователи мне писали, что было бы здорово сделать веб-версию OutWiker, чтобы заметки всегда были доступны через интернет. В то же время я давно хочу переделать этот сайт, разные части которого сейчас работают на разных движках. Хотелось бы, чтобы для будущей версии сайта статьи можно было бы писать в том же формате, что используется в OutWiker, а также сделать легким перенос заметок из сайта в OutWiker и обратно.
Но прежде чем начинать писать код, надо понять, что должно получиться на выходе. Своим видением веб-версии OutWiker я и хочу поделиться, и здесь мне нужна ваша критика. Если говорить коротко, то мне хотелось бы иметь движок, который бы позволял создавать страницы разных типов (в формате HTML, викинотации и Markdown) и при этом, чтобы был импорт / экспорт заметок в формат OutWiker.
Во-первых, нужно определиться с типом веб-приложения. Я не хочу делать сервис a la Evernote, а больше представляю себе CMS, что-то среднее между викидвижком и системой блогов, ближе к викидвижку. От блогов там должны быть уведомления о новых записях (RSS, рассылка) и комментарии.
Другой вопрос, который возникнет при реализации веб-версии, это каким образом формат заметок настольного OutWiker будет связан с веб-версией. Первое, что приходит на ум — закидывать базу заметок как есть на сервер, а движок отображает отображает заметки в браузере. Пути в адресной строке задаются структурой папок, то есть если есть заметка с адресом cats/kak-kormit-kotov/korm-dla-kotov, то такая заметка получит адрес http://example.com/cats/kak-kormit-kotov/korm-dla-kotov/. Благодаря псевдонимам в настольной версии OutWiker отображаемое имя заметок можно сделать более читаемым для пользователя. Эти псевдонимы будут прописаны в теге <title> для страницы.
Но такой подход плох, во-первых, тем, что заметки и загружаемые пользователем файлы расположены в одном дереве папок. Движок должен позволять редактировать заметки через браузер, а также загружать и удалять файлы. А такое хранение заметок — потенциальная дыра в безопасности. Лучше загружаемые файлы хранить отдельно.
Следующий недостаток такого хранения заметок — это отсутствие комментариев в настольной версии, но их нужно как-то приделать сбоку в веб-версии. В принципе эту проблему можно решить, добавив в папку с заметками новый файл, где будут храниться комментарии, а настольная версия об этом файле ничего знать не будет. Но мне такой подход не нравится тем, что при каждом отображении страницы придется парсить файл с комментариями.
Мне нравятся веб-движки, которые хранят страницы не в базе данных, а в виде файлов (движок pmWiki, на котором работает половина этого сайта так устроен) тем, что можно локально у себя на компьютере написать статью или изменить имеющуюся, а когда нужно опубликовать новые и измененные записи, достаточно их перекинуть на сервер. Таким образом я обновляю страницы, связанные с OutWiker. Для получения локальной версии всех страниц сайта достаточно скопировать папку с заметками с сервера себе на компьютер. Это намного проще, чем импортировать заметки из базы данных. Но все-таки с точки зрения движка сайта парсинг файлов — это более затратная и неудобная операция, чем делать выборку из базы данных, поэтому я склоняюсь к тому, что все-таки для веб-версии страницы нужно хранить в базе.
Суммируя все вышесказанное, имеющийся формат хранения заметок в OutWiker должен быть промежуточным форматом для веб-версии.
Работу с будущим движком я себе представляю следующим образом. Помимо экзотики, о которой я напишу дальше, должна быть возможность создания и редактирования страниц через веб-интерфейс, как это принято в обычных веб-движках. Формат страниц может быть разный, как и в OutWiker: HTML-страницы (с ограниченным набором HTML-тегов), викистраницы, текстовые страницы и Markdown-страницы.
Все страницы, комментарии и сопутствующая информация (лайки, оценки, даты изменения страниц и т.д.) должны храниться в базе данных. Главная особенность будущего движка (помимо разных типов страниц) должен быть импорт / экспорт с использованием формата OutWiker. С экспортом страниц с сервера все просто — движок создает базу со страницами в формате OutWiker, упаковывает ее в zip, и когда архив будет готов, пользователь его скачает.
Сложнее с импортом. Основная идея здесь — разделить по времени этап закачки новых страниц (или новых версий страниц) с их публикацией, то есть чтобы новые версии страниц можно было закачать сегодня, а опубликовать на следующий день или когда будет нужно. Пока мне это видится таким образом. У каждого пользователя движка (у кого есть права на публикацию) будет кнопка «Импорт», с помощью которой можно закачать один или несколько архивов со страницами в формате OutWiker. Движок должен распаковать архив и показать пользователю структуру страниц, которая содержится в архиве. Пользователь может выбрать одну или несколько страниц и нажать кнопку «Опубликовать», после чего отмеченные страницы заменят имеющиеся или добавятся новые. При этом прикрепленные файлы раскидаются по соответствующим папкам, в которых движок будет хранить файлы для скачивания.
Нужно будет предусмотреть такую ситуацию, когда один пользователь пытается изменить страницу, созданную другим пользователем, и не позволять ему это сделать. То же самое и с экспортом — не давать экспортировать страницу, если она создана другим пользователем и не видна другим пользователям. Надо будет продумать систему видимости страниц, чтобы пользователь мог создавать страницы, видимые только ему.
Что касается технических подробностей, то движок собираюсь делать на Python, скорее всего с помощью микрофреймворка Flask. Хотелось бы сразу предусмотреть возможность расширения возможностей движка плагинами. Но понятно, что плагины в OutWiker и плагины в веб-движке — это разные вещи.
Пока такие вот идеи. Надеюсь, что в 2019 году начну их реализовывать.
PS. Просьба к тем из вас, кто переводил программу на украинский язык. Пожалуйста, обновите локализацию, а то уже накопились строки, которые ждут перевода.
PPS. Всех с наступающим новым годом, спасибо вам за моральную поддержку в развитии OutWiker, присылаемые патчи, найденные ошибки и ваши предложения по улучшению программы.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
CodeNull:
Здравствуйте.
Я не бог весь какой специалист в разработке веб-ресурсов, но возник следующий вопрос, а нельзя ли всю интеграцию сделать через API (без скачивания архивов и т.п.?? В десктоп версии реализовать плагин, который будет заниматься синхронизацией данных с веб-версией.
RPC или REST для передачи данных между веб-ресурсом и десктоп приложением — достаточно простое решение. Сервер может как угодно хранить данные у себя, главное — иметь возможность отрендерить их к формату десктоп приложения и выдать по запросу.
24 января 2019, 7:37 дпJenyay:
Тут дело в том, что веб-версия, о которой я тут писал, мне представляется как независимый веб-движок, не привязанный к настольной версии. Но в принципе да, никто не мешает сделать дополнение к OutWiker, которое бы отправляло данные на сервер. Такое усложнение, о котором я тут писал нужно для того, чтобы закачать на сайт новые версии страниц сайта, а публиковать их не сразу, а когда понадобится. Но я согласен, что процесс выглядит сложным. Это пока первые мысли, наверняка со временем это будет обретать более удобную форму. По поводу Вашего вариант стоит тоже подумать.
24 января 2019, 8:58 ппTwirlFog:
… виуинотации …
5 марта 2019, 12:57 ппПоправьте опечатку, пожалуйста.
Jenyay:
Спасибо, поправил.
5 марта 2019, 1:04 ппBaNru:
Синхронизация — будет очень сложная вещь.
Тут надо смотреть в сторону GIT/SVN.
Синхронизация должно происходить в фоне, а не по кнопке.
Она должна отображать «есть новая версия на сервере/программе» и по кнопке уже выгружать.
В случае конфликтов, когда и там и там новые — надо выбирать какую версию заменить, или мержить по принципу GIT.
Такой подход приведёт новых пользователей — групповое хранение заметок, например группе бухгалтеров на предприятие (это пример, они конечно не придут).
Если такое задумаешь реализовывать — это будет ад. Ну и «конкуренция» на данном рынке уже имеется, например Trello, Redmine, Битрикс24 и так далее. Разумеется они немного для других задач, но смежная сфера.
Формат передачи данных — не думаю, что такая важная проблема, можно передавать как угодно. Но устоявшийся формат в наше время JSON с REST. Если открыть API, то можно привлечь и других разработчиков для других проектов и плагинов. Но это уже наполеоновские планы.
На первом этапе, я бы рекомендовал сделать независимую красивую и современную онлайн-версию без синхронизации (синхронизацию потом несложно будет привязать если правильная архитектура будет).
22 апреля 2019, 10:44 пп