Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

15.08.2023

Дерево задач для Obsidian

В продовження теми з доповненням для Obsidian сьогодні розробляв структуру даних для задач.

В минулому пості я розповідав про синтаксичне дерево Markdown. Довгий час я планував працювати з цим деревом, як воно є, та просто доповнювати вузли потрібними мені атрибутами (наприклад, задачу — її статусом.) Проте це незручно: задачі губляться посеред інших елементів.

Набагато легше, якщо задачі побудовані в дерево тільки з самих задач. Причому не тільки тому, що коду буде менше (бо не треба обробляти особливі варіанти), а й розуміти це дерево буде простіше, що звісно ж сприяє новим творчим рішенням.

До того ж я хочу, щоб в задачу можна було вкласти цілий окремий документ, який своєю чергою теж містить задачі. Це спрощує проєктування, бо мати детальне дерево в одному документі — це абсолютно нереально за масштабом. А так можна створювати піддерева тоді, коли задача цього потребує. Якщо дерево задач перетинає межі документів, то ще важливіше мати його окремо.

Щоб мати можливість відтворити зміни назад в документ, потрібно привʼязати задачі до відповідних їх місць документа, тобто вузлів синтаксичного дерева. Це можна було б робити за допомогою матеріалізованого шляху, тобто зберігати шлях до вузла. Але оскільки в JavaScript всі обʼєкти завжди передаються за посиланням, то можна просто зберігати сам вузол в атрибут задачі. Далі можна, скажімо, виконати певні перетворення задач (додати дати закінчення), поміняти вузли, та згенерувати з синтаксичного дерева новий документ.

А Obsidian Tasks мені перестав подобатись, не так він працює, як я хочу. Ідеї в них хороші, але можна їх дорозвинути.