aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2024-11-17-obsidian/index.md
blob: 64253cc5b77b282fd438e8dc742ff06fc02d63b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
+++
title = "Obsidian"
description = ""
date = 2024-11-17T22:30:37+03:00
categories = [ "Без рубрики" ]
tags = ['it', 'joplin', 'obsidian']
location = "Казань"
image = "logo.webp"
+++

Некоторое время назад я [писал](/posts/2024-07-13-joplin/) про заметочник Joplin.

С тех пор мои вкусы несколько поменялись и я открыл для себя его величество [Obsidian](https://obsidian.md/).

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

# Что такое Obisidian?

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

Приложение работает на операционных системах: Windows, macOS, Linux, iOS, Android.

<!--more-->

# Основные функции и преимущества

1. **Граф связей** — да, он есть уже много где, но нельзя его не упомянуть.
2. **Markdown** — очень приятно, что все заметки хранятся в Markdown, что обеспечивает максимальную интероперабельность 
    и переносимость
3. **Плагины** — плагины пишутся на JS/TS и их много. Даже не так, их **МНОГО**. Что приятно, они скачиваются и лежат
    в той же директории что и основное хранилище, а это важно для следующего пункта
4. **Синхронизация** — она есть. Но вроде как платная. Но мне это и не интересно, я использую Syncthing. Просто шарю
    через него директорию хранилища по схеме оба ноутбука <-> NAS <-> Android. При этом синкаются все плагины и
    настройки.
5. **Скорость** — не смотря на то, что он написан на проклятом электроне, работает достаточно шустро, претензий нет.
6. **Доска для рисования** — мелочь, конечно, но удобно, когда надо на скорую руку накидать небольшую схемку. В конце
    этого поста как раз есть пример такой схемки.

# Минусы

1. **Проприетарность** — Obsidian хоть и в целом бесплатный, но он не свободный и даже не opensource. Да, это серьёзный
    минус, но он компенсируется тем, что хотябы вся база данных не в проприетарном формате. И в случае чего можно будет
    с наименьшими проблемами свалить куда-нибудь.
2. **Electron** — ну это скорей мой личный пунктик. Но при этом приходиться смиряться с электроном что на Obsidian что
    на VSCode (VSCodium, конечно же), потому что лучше-то и нет.

Это только то, что сейчас пришло в голову.

# А теперь самое вкусное

Не помню, я упоминал что у него много плагинов? :)

Так вот, поехали, мои самые любимые:

## Dataview

https://blacksmithgu.github.io/obsidian-dataview/

Ну это просто must-have плагин, который позволяет обращаться с вашими заметками именно как с базой данных, не меньше.

Например, можно создать новый документ, написать в него

```
    ```dataview
    TASK
    WHERE status = " "
    ```
```

и волшебным образом вместо этого блока появятся все невыполненные задачи, а вот так 

```
    ```dataview
    TASK
    WHERE status = "x"
    ```
```

мы получим все выполненные.

Язык запросов [очень мощный](https://blacksmithgu.github.io/obsidian-dataview/queries/structure/), в нём сто́ит 
разобраться.

Ещё есть возможность делать однострочные запросы, например, в домашней заметке (которая у меня открывается по умолчанию)
у меня есть ссылка на именно сегодняшнюю заметку ежедневного журнала. Сделано вот так:

```
`=link(dateformat(date(today), "yyyy.MM.dd"))`
```

## Templater

https://silentvoid13.github.io/Templater/

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

```
<%*
try {
    // Получаем имя текущей ежедневной заметки
    const noteName = tp.file.title;
    
    // Разбиваем полученное имя на компоненты даты
    const [year, month, day] = noteName.split('.').map(Number);

    // Создаём объект Date на основе поученных компонентов
    const currentNoteDate = new Date(year, month - 1, day);

    // Вычисляем предыдущий и следующий день
    let previousDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() - 1));
    let nextDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() + 2));

    // Форматируем дату обратно в "DD-MM-YYYY"
    const formatDate = (date) => {
        const dd = String(date.getDate()).padStart(2, '0');
        const mm = String(date.getMonth() + 1).padStart(2, '0');
        const yyyy = date.getFullYear();
        return `${yyyy}.${mm}.${dd}`;
    };

    const previousDay = formatDate(previousDayDate);
    const nextDay = formatDate(nextDayDate);

    // Формируем ссылки
    const baseFolder = tp.file.folder(true);
    const previousNotePath = `${baseFolder}/${previousDay}.md`;
    const nextNotePath = `${baseFolder}/${nextDay}.md`;

    // Выводим даты в виде ссылок
    tR += `← [[${previousNotePath}|${previousDay}]]  |  [[${nextNotePath}|${nextDay}]] →`;
} catch (error) {
    console.error("Templater Error:", error);
}
%>

## Задачи
___
<%
`- [ ]`
%>

## Заметки
___

```

и переходя к сегодняшней заметке я сразу получаю такую заготовку:

![Заметка из шаблона](/posts/2024-11-17-obsidian/templater.webp "Заметка из шаблона")

## Остальные плагины

Остальные тоже крутые, но я их приведу просто списком:

- [tasks](https://publish.obsidian.md/tasks/Introduction) — помогает более богато управлять
    задачами. В частности, у меня проставляет дату завершения задачи, и проставляет даты дедлайна и прочее.
- [reminder](https://uphy.github.io/obsidian-reminder/) — трекает и напоминает про задачи
- [calendar](https://github.com/liamcain/obsidian-calendar-plugin) — просто миникалендарь в боковой панели
- [homepage](https://github.com/mirnovov/obsidian-homepage) — позволяет задать произвольную заметку "домашней"
- [icon-folder](https://github.com/timolins/obsidian-icon-folder) — позволяет задавать директориям и заметкам 
    произвольные иконки. Пример есть как раз на скриншоте выше.
- [pomodoro-timer](https://github.com/eatgrass/obsidian-pomodoro-timer) — думаю, из названия и так понятно
- [kanban](https://publish.obsidian.md/kanban/) — шикарнейший канбан плагин

# А что же мне не хватает?

Я упомянул выше что мне кое чего не хватает. А именно, постить заметку в мой блог по протоколу 
[Micropub](https://indieweb.org/Micropub).

Только из-за Obsidian и того, что он использует Markdown я опять [вернулся на Hugo](/posts/2024-11-15-hugo/), который
так же рендерится из Markdown.

«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить
меня ты. А я отвечу что у меня вот такой план:

```mermaid
graph TB
b1["Заметка в Obsidian"]
b2["Плагин obsidian-micropub"]
b3["micropub сервер на моем сервере"]
b4["вызов hugo"]
b5["Загрузка или копирование результата на веб сервер"]
b1 --> |Publish в контекстном меню| b2
b2 --> |POST neonxp.ru/micropub| b3
b3 --> |Запись в директорию content блога| b4
b4 --> |hugo рендерит markdown -> html| b5
style b1 fill:#28252e, stroke:#754fcc
style b2 fill:#2e2121, stroke:#c81319
style b3 fill:#2e2121, stroke:#c81319
style b4 fill:#222c2c, stroke:#20acaa
style b5 fill:#222c2c, stroke:#20acaa
```

То что выделено красным — ещё не существует в природе.

micropub сервер для hugo я уже начал писать. Да, есть nanopub сервер, но у него есть два серьёзных недостатка, это PHP и
то что его сделал не я.

micropub плагин для obsidian я вижу сделать на основе существующего плагина rest-publish. Ну или как пойдёт.

В общем, меня ждёт ещё очень много весёлого дрочева с этим всем.

# Закругляюсь

Пожалуй, пока на этом всё. Поделился как радостью использования Obsidian, так и планами на пет-проекты, что ещё надо-то?

Если что, пишите комментарии. Лучше всего здесь, но можно и во всяких телеграмах-вкшках.