Что: b1ac320825bc6653f09ad75359b5a97fc1692f8c
Когда: 2022-03-15 10:37:17+03:00
Темы: zsh
zk.zsh -- zettelkästen/wiki помощник и генератор статичных сайтов http://www.git.stargrave.org/?p=zk.zsh.git;a=blob;f=README https://box.matto.nl/zettelkasten-in-plain-textonly-flat-files.html https://www.youtube.com/watch?v=4W_m176PIdU https://github.com/drcode/zek Посмотрел попристальнее что такое zettelkästen о котором много говорят на разных ресурсах. Пообщался и с одним человеком его активно использующем. По сути это просто культура работы со знаниями. Ничего специфичного с технической точки зрения этот метод не требует толком. В чём разница между какой-нибудь wiki технологией и ZK? Никакой, грубо говоря -- вопрос только в подходе как, что, когда и каким образом заполнять в них. В одной статье показано что Vim может быть очень удобно использован для ведения ZK без проблем. Главное это хранить всё в plain text файлах. Стараться делать их с CamelCase, чтобы редактор мог определять границы слов удобно. ZK предполагает иерархию? Файловая система автоматом это предоставляет. "gf" команда Vim без проблем может переходить на файл под курсором. expand("%:r") вызов покажет относительный (относительно корня) путь до файла, если надо куда-то скопировать текущий "адрес" заметки. Хочется дополнения названия имеющихся заметок? Встроенное родное дополнение Vim-а по именам файлов (:help compl-filename) -- идеально для этого подходит. Хочется fuzzy-like поиск по содержимому или именам заметок? fzf может в этом легко помочь. Посмотрел и видео автора ZEK ZK-движка. По сути он сделал ed, но с ZK фичами. Единственное что Vim из коробки не предоставит -- показ зависимостей между записями. Если понять на что ссылается данная заметка ещё можно бы было, например помещая ссылки в []-скобки и выпарсивая их, то понять кто ссылается на заметку уже не тривиально. А это вроде бы одно из самых важных требований в ZK. Делать это руками, конечно же, не вариант. Just-for-fun решил написать утилитку которая бы парсила все заметки, составляла зависимости и показывала бы backlinks/backreferences. На чистом zsh: $ zk.zsh backs SomeNote AnotherNote Sub/Dir/Note $ zk.zsh links AnotherNote SomeNote Это автоматом покрывает и такую штуку как тэги и категоризацию заметок? Факт наличия ссылки на категорию/тэг -- автоматически означает что заметка будет в backlink-ах страницы категории, которая вообще может быть пустым файлом. А потом решил написать генератор HTML-ек на основе всего этого. Чтобы в них и ссылки автоматически были на заметки и ссылки с backlinks-ами. Оказалось довольно просто и мало кода отняло. Ни одного внешнего вызова не делается, никаких grep/awk/perl/sed. Плюс автоматическая генерация Index-страниц с полным списком заметок в текущей директории. Вполне себе такой генератор web-сайтов вышел, довольно быстрый. Понятия не имею буду ли я его использовать для чего-либо, но получил огромное удовольствие от написания, ибо это реальный use-case для лучшего познания возможностей программирования zsh. Если несколько лет назад я нередко искал в Интернете вопросы "как сделать XXX в zsh" и получал магические строчки, то сейчас, владея info zsh, умея пользоваться поиском по индексам в нём, я без проблем быстро нахожу все нужные мне подсказки и без посторонней помощи легко самостоятельно пишу какие-нибудь (${(oi)${(k)pages[(I)$1*]}}) выражения, понимая каждый символ в них. Для того, чтобы узнать backlinks, он парсит абсолютно все файлы в директории, рассматривает каждое слово в них. В принципе это безумно дорого, но на моих заметках оно выполняется за десятки миллисекунд. Если пришлось бы работать с большими объёмами данных, то достаточно бы было просто сделать кэш отпарсенных значений, храня ctime/hash (как в redo) для понимания устаревания данных. И аналогично можно сделать и кэш отренедренных HTML-ек, ибо это самая дорогая операция в нём. Когда-то давно я сайты делал на движке Vimwiki, по сути используя только его навигацию по []-ссылкам и HTML-рендер. Если добавить чуть-чуть поддержку форматирования в zk.zsh (что тривиально), то для меня было бы полной заменой Vimwiki тогда. И ещё я понял что ZK мне точно нафиг не сдался. Нет у меня use-case-ов когда такой подход работы с "знаниями" мне был бы нужен или полезен.
Сгенерирован: SGBlog 0.34.0