Сила простоты-2

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

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

В очередной раз немного подбесившись от тормозов Таны, где я вел свои рабочие заметки, я задумался о переезде. Мне захотелось повторить тот минималистичный вайб, который мне дал переход на текстовый файл с индексом, но в голове засели какие-то ограничения: а как же теги? А как же поля у заметок, по которым я ищу? А как же сложнейшая система организации, без которой все моментально превратится в бардак?

Я в очередной раз посмотрел — в этот раз как исследователь — на Обсидиан, Emacs OrgMode и еще несколько инструментов, и понял, как устроены все заметочники.

Как устроены заметочники

Заметочник — это некоторый файл или набор файлов (.md в обсидиане, .org в оргмоде) плюс редактор-рендерер. Обсидиан рендерит встроенные свойства маркадун-файлов, вроде таблиц и разметки текста, плюс имеет какое-то количество собственных надстроек для удобства работы. Оргмод вообще адски увешан свистелками-перделками (тудушки, календари, напоминалки), и все они рендерятся из текстового содержания орг-файла или какой-то его скрытой части, не видной пользователю.

Аутлайнеры — workflowy, dynalist, roam research, tana.inc — используют формат буллет-листа с возможностью бесконечной вложенности. Единицей контента обычно считается буллет, и на него уже наворачивают фич кто во что горазд. Тана, например, умеет прикреплять к буллетам поля, с помощью которых можно как-то этот буллет формализовать: присвоить тип, дату, еще чего-то. После этого из таких буллетов можно строить таблички. Вот как выглядит карточка книги из моей таны:

Поля автоматически возникают у любого буллета, помеченного тегом #book

Что нам дает это понимание? Например, следующее: чем проще разметка и файл — тем быстрее все будет работать. В обсидиане поиск моментальный, а вот тана ощутимо подтормаживает и при поиске, и при скроллинге длинного списка буллетов.

Вторая важная штука: если мы выбираем для задачника распространенный формат (md, txt) — нас лишь частично затронет утрата рендерера. Контент останется, мы его не потеряем. Тана и прочие аутлайнеры требуют регулярных бэкапов и перевода в нужный формат — потому что экспорт у них сделан через жопу и редко работает как надо. А контроль над собственным контентом для нас важен, т. к. наступает эра ИИ-агентов, которые точно смогут нам помочь с задачами-заметками, и проприетарные сервисы за их использование захотят получить свой кусочек маржи. А нам оно не надо: во-первых, мы дальновидные и хотим гибкости, пока рынок не определил лидеров; во-вторых — мы экономные и хрен вам, а не кусочек маржи.

Очевидный вывод: можно получить удобство проприетарного инструмента вроде Таны/воркфлови/роума, если использовать распространенный формат файлов и хороший удобный редактор. Я остановился на двух конфигурациях: один маркдаун-файл и VScode для рабочих задач, с синхронизацией через гитхаб, и Обсидиан с синхронизацией через гитхаб для личных.

Про Обсидиан и так все знают, поэтому сегодня мы говорим о первом варианте.

Один файл для всего

В дополнение к вышеописанному добавлю, что все-таки хотелось понять — насколько минимальным может быть сетап для задач и заметок?

В упомянутом посте «Сила простоты» я писал:

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

Все указанные плюсы в полной мере сохраняются и для задачника. Я веду его в одном файле с прошлого октября, сейчас в нем примерно три тысячи строк. Серьезный минус всего один: нельзя вставлять картинки.

Почему файл всего один

  1. Для облегчения поиска и снижения когнитивной нагрузки. Мне не нужно создавать отдельную заметку/файл для каждой встречи, задачи или проекта — всё живет в одном файле и мгновенно ищется полнотекстовым поиском VSСode.
  2. Для простоты синхронизации. Файл лежит на гитхабе, ничего не весит и доступен с любого компа.

Почему маркдаун
Маркдаун позволяет минимально размечать текст — заголовки, подзаголовки, списки, цитаты, — и при этом поддерживается кучей редакторов. Я работаю с файлом в режиме редактирования, но даже так редактор подсвечивает разметку, поэтому работать удобнее, чем с плоским txt.

Почему VSCode
Мне он показался самым мощным из бесплатных вариантов. Быстро работает, отличный поиск, всякие программистские штуки вроде редактирования нескольких строк разом и т. п. Есть две киллер фичи конкретно для моего рабочего процесса: разделение окна (можно открыть разные части одного файла в разных секциях), панель результатов поиска с возможностью прокликать все результаты. Эти две фичи закрывают сразу несколько сценариев из тех, что меня беспокоили при отказе от проприетарных инструментов.

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

Как устроен файл

Ну раз у нас маркдаун, то можно навести некоторую иерархию. У меня она такая:

Заголовки первого уровня (один диез #) — это разделы, их несколько: индекс (важная инфа по файлу, список тегов, ссылки и тексты, которые регулярно нужны), задачи и заметки (тут основная работа), 2024 (тут все за прошлый год), старое (из других задачников переходного периода, меньше сотни строчек).
Заголовки второго уровня — это подразделы, в которых некая конкретная информация. В разделе «задачи и заметки» подразделами являются даты — каждый день я завожу строчку вида ## 28.03.25 и пишу под ней задачи и заметки за день.

VSCode умеет показывать структуру файла по заголовкам, по ней можно сориентироваться.

Заголовки третьего уровня — для встреч или важных заметок внутри дня.
Задачи я пишу маркированным списком (не признаю другого способа записи) и помечаю хештегом #todo в конце строки. По чесноку, хештег — избыточная мера: редактор не умеет делать хештеги кликабельными. Но я во-первых уже привык, а во-вторых, если открыть файл через Обсидиан — теги станут интерактивными.
Выполненные задачи я помечаю тегом #done. В маркдауне есть разметка для чекбоксов:

- [ ]

но ее неудобно вводить, неудобно искать и неудобно помечать выполненные.

Помимо todo/done у меня есть теги для ссылок, контактов и справочной инфы, все эти теги перечислены в разделе «Индекс» в самом верху файла. Строки с тегами я нахожу обычным поиском: контрол-эф, вводим тег, вуаля — во-первых теперь они подсвечены в тексте, во-вторых их видно на карте файла справа.
Если жмем контрол-шифт-эф, то результаты поиска открываются в отдельной панели, что еще удобнее.

Панель с поиском слева

Крошечный лайфхак, который нивелирует невозможность кликнуть тег: если выделить текст и нажать контрол-эф, VSCode сразу в окошке поиска вставит выделенный текст. Не нужно копипастить. А если вы умеете с клавиатуры выделять слово целиком (контрол-шифт-стрелка влево/вправо), то по скорости эта операция не уступает клику по тегу в Обсидиане.

На связь задач и проектов я забил: проекты висят списком в самом верху раздела «Задачи и заметки», периодически я туда дописываю короткие комментарии и перемещаю проекты из активных в выполненные или отмененные, да и все. Из контекста задачи обычно понятно, к какому проекту она относится, если же я боюсь забыть — просто указываю в скобках в конце строки с задачей.

На встречах я либо набиваю заметки/минутки прямо в файл, либо пишу от руки в ремаркабл и потом перебиваю в файл после встречи. Календарь и расписание живут в аутлуке.

И чо, удобно?

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

Единственная штука, которую очень хочется, это возможность менять режим отображения в файле, скрывая часть строк. Речь не про collapse/expand, это VScode умеет, пусть и только с мыши, я скорее про режимы отображения из OrgMode. Там можно было комбинацией клавиш циклически переключать вьюшки: показать всё, показать только задачи, показать только напоминалки, показать только заметки. Тогда можно продолжать вести записи в хронологическом порядке (единственный приемлемый для меня способ), но быстрее находить требуемое через нужную вьюшку.

Отправить
Поделиться
Запинить