Потенциально постоянная рубрика о "любимых программах", точнее, рефлексии на тему "правильно" и "неправильно" сделанных фич.
Итак, WikidPad -- комбинация персональной вики и аутлайнера-записной книжки. Как человек глубоко текстоцентричный, без записной книжки обойтись не могу. Почему же именно это? (Еще раз: цель этого текста -- не доказательство того, что "моя любимая программа -- самая лучшая", а исключительно анализ.)
Редактор
Текстовый редактор WikidPad симпатичен мне своей plain text'овостью. Скорее всего, это свойство "программистского" мировосприятия -- но мне куда удобнее/привычнее форматировать свои мысли именно обычным текстом (включая "таблицы" табуляцией, схемки псевдографикой и проч.). Ключ здесь наверное -- в однородности "материала", вся информация имеет символьное представление, всю ее можно вводить/редактировать с клавиатуры (при этом НЕ запоминая десятки дополнительных сокращений).
Кстати о plaintext -- мне крайне симпатичен тот факт, что все "страницы" моей личной wiki -- обычные текстовые файлы с расширением *.wiki, могут быть изменены любым текстовым редактором, а также, например, заброшены в систему контроля версий -- что я уже давным-давно сделал.
При этом WikidPad имеет удобные встроенные средства "повышения выразительности/подсветки" (также программистская привычка) -- по вики-принципу подсвечивая текст в звездочках *жирным*, в подчеркиваниях _курсивом_ -- но еще важнее работа с заголовками (количество плюсиков в начале строки определяет уровень заголовка): их подсветка (со сменой размера шрифта), составление "автосодержания" и фолдинг (сворачивание) содержимого раздела под заголовком.
Кроме того, редактор WikidPad имеет и средства "поддержки формы" текста -- как привычное программистам сохранение отступов (если строка начинается с пробельных символов, то после нажатия Enter в начале следующей строки окажется столько же пробельных символов), так и специфическое "сохранение списков" (если строка начинается с "1. ", то после нажатия Enter в следующей будет "2. " -- причем это будет обычный текст, а не "специальная область с маркерами" a-la Word). Кстати, этой фичи мне часто уже не хватает и в обычном "программистском редакторе", при написании комментариев-документации.
И еще кроме того, редактор неплохо продуман и в смысле "мелких плюшек" (таких, как instant search).
Вики/Записная книжка
Как записная книжка, WikidPad ценен "вики-принципом": название страницы является определяющим, чтобы вставить ссылку на эту страницу, надо просто набрать "[имя страницы]" (или camel-case имя для олдскульных викоидов). Создание новых страниц -- совершенно в том же вики-духе: пиши себе в квадратных скобках. Такой подход очень симпатичен -- одно соглашение по внешнему виду + 3 новых клавиатурных сокращения (Ctrl+L -- перейти по ссылке на страницу, Ctrl+вверх/вниз -- соответственно, список страниц "которые ссылаются на эту" и "на которые ссылается эта") позволяют расширить удобный текстовый редактор до удобной многостраничной записной книжки.
От других вики-систем (в частности, персональных вики, как браузерных, так и десктопных) WikidPad отличают несколько очень важных вещей (перечислены в порядке убывания важности):
* отсутствие режимов (единственный режим "удобного-редактирования-и-красивого-представления" вместо традиционных двух "редактирования-как-в-блокноте"/"представления-как-в-Ворде", между которыми надо сознательно переключаться) -- маст-хэв для персональной вики
* наличие "оглавления всей вики" -- конечно же, Wikipedia-style переход по 1й ссылке за раз для персональной записной книжки недостаточно эффективен; впрочем, и предлагаемое WikidPad'ом "просто дерево" тоже не без греха. Про это подробнее будет ниже.
* возможность поставить ссылку на произвольное место на странице: ссылка вида [Страница]#слово при переходе по ней будет находить первое вхождение "слово" на странице и прыгать к нему. Для десктопной системы (не ограниченной логикой ссылок браузера) -- исключительно мудрое решение.
Причины для недовольства
У меня их много. Впрочем, глобальная лишь одна -- о ней ниже. Ну, а если по мелочи:
* подсветка могла бы быть гибче/настраиваемее (например, подсвечиваемые "текстовые todo-листы" -- это хорошо)
* для "просто текстового редактора" работает это все не супер-быстро (точнее, при достаточно длинных страничках он начинает ощутимо "задумываться, как бы это все подстветить" после каждого изменения в тексте) /это, кстати, одна из причин, почему я до сих пор не "сделал такую же только свою" -- уж если Python в ВикидПаде не поспевает за моими пальцами, можно представить, чего ожидать от Ruby.../ Именно при "просто вводе текста" лаги даже по нескольку миллисекунд являются ощутимым раздражающим фактором.
* привычная по другим викам "история изменений страницы" -- тоже, как выяснилось, штука не совсем ненужная; в принципе, складывание страниц вики в SVN вопрос в какой-то степени решает, но можно было бы и получше.
* Python, как основной язык написания/расширения -- увы, но лично мне читать/писать на нем тяжело (иначе, возможно, некоторые из моих претензий можно было бы исправить)
Главную же неприязнь у меня вызывает дерево как способ навигации по всем страничкам. Вот такое:
Во-первых, дерево -- в принципе один из самых неудачных, уродских и малоприменимых "стандартных контролов"; в большинстве случаев можно сделать лучше, если обойтись без дерева (я имею в виду тот элемент управления, что известен под названием Tree View). Распространяться на эту тему я могу очень долго, а пока просто запомним: дерево -- плохо вообще.
Помимо "вообще", дерево плохо и в частности, именно в этом контексте: если кому неясно, WikidPad строит дерево на основе ссылок (страница А ссылается на страницу Б -- означает, что страница Б будет "дочкой" страницы А в дереве). Такой подход имеет множество проблем, вытекающих из того, что ссылки -- это не иерархия; а дерево, все же, призвано представлять иерархию. Да, одна страница может быть "дочкой" нескольких одновременно в этом дереве; да, у WikidPad есть в опциях специальная настройка "(не)показывать циклы", определяющая, будут ли 2 страницы, ссылающиеся друг на друга, составлять "бесконечную ветку" дерева. Кстати, еще одна вещь, которой в WikidPad не хватает -- установление явных "иерархических отношений" между страницами -- например, как в MediaWiki, через называние страниц "Страница/Подстраница".
"Правильная" навигация, которую мне хотелось бы видеть в персональной вики во-первых, должна быть "текущая-страница"-центрична (в каждой вике, созданной WikidPad, есть "главная страница", и дерево выстраиваетя от нее); во-вторых, "текстовый-редактор"-дружелюбна (то есть, не быть "прилеплена сбоку", а вписываться в обхваленную мной выше коцепцию "plain text -- наше все).
Пример от противного:
(это навигатор по страницам программы
Connected Text, которая вся, целиком -- удивительно последовательный пример на тему "как не надо делать персональные вики". Ну, не так сурово... скажем так, ConnText -- система, ориентированная на медленное создание красивинькой информационной системы, а не записис все время обо всем.)
А теперь внимание, важныя -- сентенция, актуальная для любой небольшой вики (не только персональной), а может быть даже и большой:
* Естественной частью страницы вики должны быть "пути, которые ведут сюда" и "пути, которые ведут отсюда" (в смысле, естественной частью отображения, а не "руками отредактируйте пути")
* Какое количество путей и какой длины показывать -- вопрос, требующий обдумывания и экспериментов. Эмпирически, мне кажется, имеет смысл отображать все ссылки 1го уровня (т.е. страницы, ссылающиеся на данную и ссылаемые ею непосредственно), большую часть или все -- 2го уровня, и некоторые пути достраивать до важных, "узловых" страниц.
* Для больших вики, возможно, имеют смысл "контекстные пути" (особенно выделить путь, которым я попал на эту страницу -- и сейчас, и в прошлом; впрочем, трекинг путей это
отдельная большая тема).
Возвращаясь к WikiPad'у, мне видится следующее идеальное (сферическое в вакууме) решение: у каждой страницы есть отдельная "нередактируемая" область (т.е. там такой же "простой текст", в нее можно перейти курсором от редактируемой области, просто поднявшись строчкой выше -- только ничего нельзя стереть/написать, и обозначается это, скажем, другим бэкграундом или цветом шрифта):
[
todo]->[
срочное]-> ->[
hipster long-term todo]
[
проекты]->[
программирование]->[
hipster]->[hipster todo]->[
squat]
[
ЖЖ]->[
отложенное]-> ->[
ideas]->{[
dumbbrowser], [
tapedictionary]}
это НЕ "псевдографика" -- это именно так, досимвольно, оно и должно выглядеть в "ВикидПаде моей мечты".
hipster todo - "текущая" страничка; обратите также внимание на "свертку" нескольких однородных "ссылок отсюда" после ideas.
Такой способ визуализации "wiki-контекста" делает его естественной частью самой вики, позволяя использовать для этих ссылок "в разные стороны" те же навыки, что и для прочей навигации по вики, выгодно отличаясь здесь от инструментов вроде
Pathaway скриншот, которые так и остаются "интересным дополнительным инструментом анализа". (Чтоб два раза не вставать, todo: написать про использование Википедии с "моментальными аналитическими инструментами")
Все, умаялся. Ну, должно быть уже понятно и так