Как стать автором
Обновить

Часть 3. Управление знаниями в Obsidian. Продвинутые техники. Excalibrain. Spaced repetition. Breadcrumbs. Longform

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров52K
Всего голосов 15: ↑13 и ↓2+15
Комментарии15

Комментарии 15

интересно было бы попробовать в контексте изучения языка программирования или фреймворка. Есть ли у кого-то success story?

Не кажется ли вам странным ждать чужой отмашки, чужого позволения, чтобы начать пробовать самому?

После тысячной заметки обсидиан сойдет с ума. По крайней мере у меня так он и сделал. Жутко тормозит и не хочет разгоняться.

Наверное, вы что-то перекрутили с плагинами. В целом то Обсидиану без разницы сколько у вас заметок. Другое дело, когда у вас постоянно при изменении заметок происходит перерасчёт иерархии или ещё какие индексы постоянно пересчитываются. Ну, или у вас на каждом шаге, на каждой заметке постоянно что-то ищет dataview. Может у вас линтер постоянно работает или коррекция грамматики и орфографии грузит систему. Может у вас просто какая-то дико сложная иерархия с кучей разных параметров, мириадой папок и прочего.

Понятное дело, что что-то может постоянно в каких-то местах подтормаживать. Как никак под капотом всё таки Электрон. Другое дело, что вы вероятно Обсидиан заставляете постоянно делать много какой-то излишней работы. А вот какой именно, это уже вопрос к вам. Я уж совсем молчу о случае, когда у вас сама по себе железка не особо тянущая. Тут разве, что можно только переехать на какую-нибудь консольную программу, типа Neovim с нужными обвесами – на нем будет уж точно всё летать, правда без крутых каких-то плюшек, но всё же.

подскажите, есть ли такой тип поиска в Обсидиан, который ищет заметки которые ни на какие другие заметки не ссылается (ссылается на 1 заметку, на 2 заметки).
как долго вы ведете свою картотеку? сколько в ней записей?

Более менее сносно веду базу знаний пару лет. Может даже несколько меньше. До этого делал разные попытки в других софтинках. Да и в самом Obsidian несколько раз пробовал делать, но просто не шибко удачно получалось, поэтому забрасывал. Заметок сейчас прям сильно больше, чем тысяча. Точнее число говорить не буду, чтобы никого не начать стращать или, хуже того, провоцировать на нелепые фалломерские сравнения.

Для получения списка заметок с определенным количеством ссылок, можно заюзать dataview. Другие способы что-то не приходят в голову.

Например, вот такой запрос выдаст заметки у которых будет 7 входящих ссылок ИЛИ 3 исходящие:

пример
```dataview
LIST
WHERE
	length(file.inlinks) = 7
	OR 
	length(file.outlinks) = 3 
```

Если вам нужно, чтобы было прям точное значение для входящих и исходящих ссылок, то заюзайте оператор "AND" вместо "OR". Если вам нужны заметки без ссылок (ни с чем не связанные заметки), то просто поставьте нули и оператор "AND".

Если вам просто нужно найти несвязанные заметки, то можете попробовать плагины Janitor или Find unlinked files.

спасибо за развернутый ответ. есть ли у вас документация по использованию DQL на русском языке?

Увы, но нет.

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

Во второй части в блоке про dataview, где формировался inbox.

Заметка там была такая:
---
aliases: 
- "поиск несвязанных заметок"
- "inbox"
- "atom"
- "orphan"
tags: ?
---

# ? inbox

```dataview
LIST
FROM #?
WHERE file.link != [[inbox and pending and orphan notes]]
```

# ⚛ pending atomization

```dataview
LIST
FROM #⚛ 
```

# ? orphan

Здесь приводится **LIST** из *заметок* и *файлов*, которые ни с чем НЕ связаны:

```dataview
LIST
FROM 
	!"home" 
	AND 
	!"templates" 
	AND 
	!"periodic" 
	AND 
	!"files/excalidraw"
	AND
	!"projects"
WHERE
	length(file.inlinks) = 0 
	AND 
	length(file.outlinks) = 0 
	AND 
	length(file.tags) = 0
	AND
	file.link != [[excalibrain]]
	AND
	file.link != [[excalidraw_template]]
```

Спасибо, пропустил в общей массе.

А почему Obsidian выбрали, а не Notion например?

Вы задаете вопрос, который может возвать к распрям на "религиозной" почве.

Хотя все же попробую как-то в мягкой форме обосновать свой выбор.

На заре моего заметкотворчества я пробовал и даже интенсивно использовал Notion. Но тогда для меня все же входной барьер оказался довольно высоковатым и я так и не смог достигнуть какой-то заметной эффективности. Однако больше меня все-таки раздражало отсутствие оффлайн версии, ибо недостаток в знаниях программы является все же решаемой проблемой. Можно сказать, что именно невозможность получить доступ к заметкам без интернета меня и отвратило от этой программы.

Сейчас я Notion не использую совсем. Но при этом все же моё мнение насчет этой программы расширилось. Как мне кажется, единственное и крайне хорошее применение у данного софта лежит в области совместной работы (но только в рамках небольших и средних проектов). В остальном же интерфейс сильно медлит при даже небольшом количестве отображаемых данных; в целом весь функционал довольно жестко предопределен видением разработчиков; сами же данные едва ли мне принадлежат.

Почему же Obsidian? В общих словах ответ будет такой – он дает мне больше возможностей в контролировании процесса создания знаний и их использовании. Ну, вот, например, из этой статьи вы узнали, что можно создавать иерархии с помощь метаданных и, по большому счёту, связей. Техника довольно мощная и одновременно гибкая. Если ей обогатить свой арсенал, то можно настроить себе довольно полезный рабочий процесс.

Или, например, возьмем Dataview. По сути это можно назвать фильтром в Notion. Однако Dataview не такой, условно говоря, жирный и предопределенный. Его можно применять в суперлокальных местах или наоборот закрутить вокруг него все свои рабочие процессы – он будет применен на столько, на сколько нужно в конкретной ситуации. Если уж совсем хочется как в Notion, то можно добавить плагин DB-folder. Тоже мощная штука, но более прямолинейная.

Управление шаблонами в Obsidian тоже более гибкое. Если понять как писать шаблоны с помощью Templater и немного подразобраться как расширить их применение с помощью QuickAdd, то необходимая и достаточная сложность будет также наращиваться только в нужных местах. Ну, например, я использую Anki и для меня является довольно удобным процессом, когда я в рамках Obsidian добываю какие-то знания, а потом тут же одной командой создаю нужную мне карточку (нужный шаблон) и отравляю её в Anki. Получается, что я не дублирую свою работу и при этом не усложняю там, где это не нужно. Это также относится и к Zotero. Если у меня есть желание более предметно поработать с источником, то я просто создаю с помощью шаблона заметку, метаданные которой автоматом подгружаются из Zotero. При этом я вижу и в самом Zotero, что у меня есть заметка по данному источнику в Obsidian. Ну, и в Anki я вижу, что карточка прилетела из Obsidian. Это значит, что я могу быстренько, если нужно что-то подредачить или в другом случае вообще углубиться сильнее в знание, если я забыл что-то нужное и связанное с этой карточкой (а такое происходит довольно часто в каких-то узких и специфических областях).

Охх... Трудно остановиться...

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

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

Я мог бы переехать на какие-то другие программы. Но как бы смысл? Я вкачиваю много интеллектуального труда в заметки, при этом мне важен больше сам процесс добычи знаний. Obsidian во всем этом мне помогает разными способами. Если я перееду в другую программу, то многие мои решения и какая-то неизвестная заранее часть интеллектуального труда обнулятся. Что я получу в ответ на это обнуление? Ну, что-то наверняка получу, но будет ли это оправданно? Думаю, что не особо.

Кстати, я все же смог найти плюс в том, что Obsidian крутится на Electron. Я не шибко разбираюсь в веб-технологиях, но вот поправить код css могу. Поэтому, если меня начинают раздражать какие-то интерфейсные решения, то я их просто исправляю в меру своих возможностей. Если бы все вдруг заработало на том же Rust, то стало бы как-то потяжелее вручную что-то фиксить.

Короче я думаю, что вы смогли уловить почему я выбрал именно Obsidian.

В статье я оставил недоделанной тему автоматизации плагина Longform. В целом я так и не придумал каких-то простых способов, поэтому решу эту проблему как знаю. Однако сделаю я это, к сожалению, немного выбиваясь из логики прошлой статьи.

Решение с помощью templater

Плагин Templater может сам создавать директории, а Longform же парсит свои проекты с помощью метаданных. Этими фактами можно воспользоваться, чтобы создать функцию создания проекта Longform. Итак, создадим шаблон.

templater
<%*
let title = tp.file.title
if (title.startsWith("Untitled")) {
title = await tp.system.prompt("Title");
}
await tp.file.rename(title)
-%>---
type: project
longform:
  format: scenes
  title: <% title %>
  workflow: Default Workflow
  sceneFolder: /
  scenes: []
  ignoredFiles: []
---

<% tp.file.move("projects/" + title + "/" + title) %>

Суть его в следующем:
блок, который идет до метаданных – я его юзал в прошлой статье (кратко логика его в том, что при создании заметки будет выдано окно в которое нужно вписать название заметки)
type: project – у меня все проектные заметки лежат просто в папке projects (по сути это плоская структура за исключением папок для индивидуальных longform-projects, а все же направления задаются ссылками на заметки-категории, т.е. не папками как я сделал это в статье); отображение, сортировка и фильтрация делается у меня с помощью плагина db-folder (а не с помощью projects, как я сделал это в статье); короче говоря, у меня выделен отдельный тип заметок-проектов и это вам придется учитывать далее (именно это всё и выбивается из логики прошлой статьи)
<% tp.file.move("projects/" + title + "/" + title) %> – эту штуку лучше объяснить на примере. Если мы создадим из шаблона заметку и назовём её, например, "Маркеры хорошей базы знаний", то будет создана заметка по пути "projects/Маркеры хорошей базы знаний/Маркеры хорошей базы знаний.md". Заметка созданная по этому пути будет работать и как индексная заметка для Longform, и как заметка, которую мы будем парсить (с помощью dataview или ещё как-то).

Создание проекта с помощью templater

Положим, что шаблон будет называться "longform template". Если его положить в папку к остальным шаблонам, то создать longform-проект можно будет с помощью самого templater.

Templater: Create new note from template

Если стоит плагин buttons, то кнопка будет такая:

button
```button
name ? longform project
type note(Untitled) template
action longform template
templater true
```

Создание с помощью QuickAdd

Если шаблон лежит где-то в ином месте (т.е. не в том, где templater берет шаблоны по дефолту), то вполне себе разумно добавить команду по созданию проекта с помощью QuickAdd.

Нужно создать новую команду из шаблона в настройках QuickAdd.

QuickAdd

1 - пишем название команды

2 - выбираем template

3 - жмем "Add Choice"

Заходим в настройки и в них нужно указать точное место шаблона в базе. Например, шаблон у нас может лежать по этому пути "projects/templates/longform template.md"

QuickAdd

Заходим в настройки

Вставляем (или пишем вручную) наш кастомный путь к шаблону "projects/templates/longform template.md" и жмем галочку, чтобы автоматически открывалась созданная заметка.

Закрываем это окно и жмём молнию, чтобы добавить команду в палитру команд.

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

Палитра команд

Ни шибко чисто выглядит, но в целом почему бы и нет?

Кстати, button будет выглядеть вот так:

button
```button
name ? longform project
type command
action QuickAdd: add PROJECT (longform)
templater true
```

Отображение проектов с помощью dataview

Тут может быть что-то типа такого.

dataview
```dataview
LIST
FROM "projects"
WHERE contains(type, "project")
```

Без указания типа заметки, как-то уж совсем трудновато придумать как можно отобразить single-project и longform-project в виде одного списка проектов.

Настройка в db-folder

Если вы юзаете этот плагин, то для корректного отображение придется немного изменить настройки:

db-folder (projects)
FROM "projects" WHERE type

Суть в том, что теперь он будет показывать заметки из папки projects у которых есть поле type. Это нужно для того, чтобы индексные файлы Longform также отображались как проекты (ну, и стоит отметить, что у обычных проектов тоже должен стоять в метаданных "type: project", чтобы они отображались).

Дополнения

Возможно вы уже поняли, что индексные файлы Longform можно называть как угодно – т.е. не обязательно, чтобы было название "index", которое предлагает сам плагин.

Не вижу большого смысла использовать Longform для single-project. Поэтому вам стоит, наверное, создать два шаблона: первый для longform, а второй для обычных проектных заметок. Однако, если вам всё же хочется единообразия, то можете этого попробовать добиться за счёт функции tp.system.suggester, которая будет вас спрашивать какой вам проект нужен (single или multi) и в зависимости от выбора менять шаблон.

Если вы создавали базу по моему гайду, то у вас все заметки создаются в корне, а файлы скидываются в папку files. Однако в случае Longform-проектов есть смысл складывать файлы по проекту в подпапку проекта (например, это нужно для того, чтобы потом можно были эти файлы проще как-то искать и использовать вне Obsidian, а также это полезно для архивирования). Чтобы так сделать нужно в настройках Obsidian поменять следующее:

files and links

Так мы сохраним логику с тем, что по дефолту заметки будут складываться в корень (это не относится к заметкам Longform), файлы по этим заметкам также будут лежать в папке files. Но файлы для Longform заметок будут складываться в папку проекта.

Архивирование проектов происходит путём скрытия папки в файлом менеджере. Плюс в том, что вы больше не видите проект в Obsidian. Минус в том, что если вы создали какие-то новые знания (новые заметки) из проектов, то при скрытии проектов пропадут связи и возможно какие-то заметки станут orphans.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации