Софт: Trunk Notes

18 июня 2017 (00:00:00)

Что приходит в голову большинству людей, когда они читают слово «вики»? «Википедия»? Но это лишь частный случай — один-единственный конкретный ресурс, — а за словом в действительности стоит целая философия.

Попробуем эту философию определить:

Вики — это способ организации информации, при котором она представляется набором произвольно связанных между собой страниц, оформленных при помощи простого языка разметки.

Вики может быть чем угодно: рабочим дневником, читательским дневником, сборником фактов или цитат, хранилищем рецептов (будь они кулинарными, программистскими или ещё какими), логом проекта… в общем, понятно. Или вообще объединять в себе всё вышеперечисленное.

Кому нравится та же «википедия», тот вполне может поднять собственный сайт на базе тамошнего движка. Хоть на внешнем хостинге, хоть даже на домашнем компьютере. Повозиться, конечно, с этим придётся, — веб-сервер, PHP, SQL, все дела, — однако же затея абсолютно реальна. Другой вопрос: а надо ли? Если единственным пользователем этого проекта будете вы сами, то стоит ли огород городить?

Программистский народ давно понял две вещи. Во-первых: вики, как тип информационного пространства, есть удобная штука. Во-вторых: совершенно необязательно делать вики публичной, она и в качестве персонального продукта весьма удобна. А поняв, программисты наделали для пользователей (и для себя!) соответствующего софта.

Я упомяну одну только персональную вики для десктопных систем — WikidPad. Есть для виндовс, линукса и макоси (для двух последних — вообще без проблем, питон же!). Мощная и удобная, пользуюсь сам и рекомендую другим. Но речь пойдёт не о ней.

Для iOS тоже есть персональные вики — AppStore в поиске показывает две штуки. Лучшей из них является Trunk Notes — то есть это настолько качественный продукт, что я в своё время был очень впечатлён, да и по сей день ещё продолжаю впечатляться. Стоит сейчас 459 рублей и — чтоб мне провалиться! — стоит из этих денег каждого рубля. Существуй именно вот такой продукт для десктопа, и я бы даже не задумался потратить на него двадцать-тридцать баксов… но увы. Только под iOS. Приложение универсально для iPad/iPhone, есть встроенные покупки типа «пожертвовать на дальнейшее развитие проекта». Спрятаны очень далеко и никак себя не проявляют… хотя я, кстати, пожертвовал. ;)

Давайте рассмотрим этот продукт и разберём, чем же он так хорош.

Начнём с того, что в качестве языка разметки страниц используется самый обычный Markdown. Это означает весьма богатые оформительские возможности (многоуровневые заголовки, абзацы, три вида списков, сноски, таблицы, цитаты, ссылки, вставки кода, картинки, шрифтовые выделения) при очень простом и привычном синтаксисе. Автор не стал изобретать велосипед, благодаря чему получилось не только удобно, но и функционально — любую страницу вики при желании можно моментально конвертировать хоть в материал для блога, хоть в PDF, хоть в LaTeX, хоть во что.

Если нужно вставить локальную картинку (а это традиционно слабое место Markdown), то её нужно предварительно загружать в вики из «фотоплёнки».

Разумеется, здешний Markdown расширен возможностью ставить внутренние ссылки между вики-страницами. В самом простейшем случае достаточно указать на странице ВикиСлово — то есть некоторое составное слово, в котором меняется регистр букв: оно будет распознаваться как ссылка на страницу с таким именем, и при первом её открытии страница будет создана. В более сложных случаях вы можете контролировать всё вручную — например, можно в тексте одной страницы сослаться на другую страницу с именем VojnaiMir, так, чтобы ссылка в тексте отображалась своим русским вариантом «Война и мир». В руководстве всё это очень хорошо расписано.

Но возможность создавать и связывать страницы пока не делает такую информационную среду полноценной вики — есть ещё дополнительные продвинутые возможности.

Trunk Notes имеет собственный макроязык, с помощью которого можно (список неполон):

  • формировать ссылки по истории просмотра страниц и по их взаимосвязям между собой («родители—потомки»);
  • автоматически добавлять ко всем страницам общие заголовки и подвалы;
  • вставлять текст одних страниц в другие страницы;
  • задавать CSS-оформление страниц как в целом, так и индивидуально;
  • формировать списки страниц, удовлетворяющих указанным критериям (теги, наличие искомого текста и т.п.);
  • вызывать скрипты, результаты работы которых вставляются в текст страницы и отображаются как тот же Markdown.

Последняя возможность требует особого комментария. В приложение встроен интерпретатор скриптового языка Lua, а документация описывает API, так что пользовательские скрипты могут получать доступ к страницам вики, считывать и модифицировать их содержание. Язык Lua не особенно сложен, API описан очень внятно, так что здесь открывается широчайший простор.

Зачем это может быть нужно? В документации приводится пример скрипта, который в зависимости от текущего времени показывает страницы в «дневном» или «ночном» оформлении. Я могу привести действующий пример от себя: у меня в вики есть список книг, которые я хочу прочесть. Каждая книга рядом со своим названием содержит чекбокс, изначально пустой. Прочитав эту книгу, я отмечаю её чекбокс галочкой, и мой скрипт на главной странице формирует прогресс-индикатор чтения. (При желании можно даже написать скрипт, который сам вычищает из списка уже прочитанные книги… но я без самой крайней необходимости не буду писать ничего такого, что могло бы модифицировать содержание страниц.) В общем, изучите Lua и реализуйте что угодно.

Ещё одна удобная функция приложения — работа со сниппетами, то есть фрагментами готового текста. Шаблонами. Тут совсем просто: в настройках вы определяете «исполнительный суффикс» — например, два твёрдых знака «ъъ», которые в нормальном русском тексте уж точно подряд встретиться не могут. Теперь при редактировании текста Trunk Notes будет следить за данным сочетанием, и если встретит его при наборе — посмотрит, нету ли в вики сниппета, имя которого совпадает с несколькими предыдущими символами текста. Если есть, то вставит его содержимое.

 

Осталось сказать о средствах системной интеграции приложения — если коротко, то с ними тоже всё в порядке.

Начнём с самого простого. Вы же видели «наклейки» на иконках в iOS? Такие красные блямбочки с числами. Например, почтовое приложение показывает количество непрочитанных писем. Trunk Notes тоже может показывать на своём значке наклейку. Для этого достаточно на специальной страничке сформировать список: сколько в нём будет элементов, такое число и будет видно в наклейке. Кстати, список этот вполне может формироваться не вручную, а скриптом — вот вам и ещё одна причина пользоваться скриптами.

Теперь похитрее. Trunk Notes при установке регистрирует собственный протокол, посредством которого может взаимодействовать с другими приложениями. Для этого достаточно сформировать ссылку вида wiki://... или tn://... и затем активировать её посредством вызова так называемого x-callback-url — не пугайтесь, оно делается намного проще, чем может показаться, для этого даже программистом не нужно быть. Я надеюсь рассказать об этом отдельной статьёй…

Ну и, наконец, внешняя интеграция. Приложение умеет синхронизироваться с Dropbox, причём синхронизацию можно запускать как вручную, так и автоматически — стоит только измениться хоть одной странице вики. В результате на дропбоксе у вас будут храниться Markdown-тексты всех вики-страниц, вы сможете открывать их в любом приложении с любого устройства и делать с ними всё что вам угодно. Всё это также означает, что вы можете иметь Trunk Notes установленным на нескольких своих iOS-устройствах, и на всех на них будет одна и та же вики.

Кроме того, имеется собственный http-сервер — запустив его, вы сможете видеть свою вики через веб-браузер с любого устройства, лишь бы оно находилось в той же сети, что и iPad. И не только видеть, но и скачивать локальные копии, а также через тот же браузер редактировать страницы (последнее особенно удобно для отладки скриптов).

Очень-очень важное предупреждение!

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

Достоинства и недостатки любой персональной вики — не только Trunk Notes! — являются продолжениями друг друга. То есть, вы можете организовать свою информационную среду именно так, как вам хочется, — и это огромное достоинство. Но! Если вы не сможете организовать её грамотно, или не осилите функционал вики хотя бы на оформительском уровне языка разметки, или будете лениться время от времени прибираться в своей информационной среде… тогда вы очень быстро вместо нормальной вики получите колоссальную свалку, в которой сам чёрт ногу сломит.

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