Всем привет, меня зовут Влад. Сегодня я хочу рассказать как и с помощью чего, я веду свои задачи в Obisiadn.
Как я докатился до жизни такой…
C таск трекерами у меня долгая история: я много сидел на Todoist, потом перешел на TickTick. Не знаю на сколько это было связанно с сами таск трекерами или уже с моими личными проблемами — но по итогу они мне мало помогали закрывать задачи, что личные, так и по работе. Потом у меня появился iPad и годовая подписка на Microsoft Office. Так я и перешел на OneNote.
Примерно в тоже время после тренинга по эмоциональному интеллекту было принято решение делить задачи на сферы жизни: Быт, Работа, Яркость жизни, Хобби и тд, — чтобы можно было заметить перекос в ту или иную сторону. Текстовый редактор, как по мне, в отличие от приложений, дает больше свободы в структурировании и нахождении своего способа организации дел. Если не знаешь как тебе удобно (а ты не знаешь, если только начинаешь вести задачи), то приложения будут структурировать хаос, а не наводить порядок.
Подписка закончилась, продлевать было лень и не очень то и хотелось за один OneNote платить. Так я и перешел на Obsidian, который и по сей день является моим основным приложением для всего.
Переход к автоматизации
По началу я разделял задачи руками, сферы жизни — заголовки, месяц — отдельный файл. Но спустя некоторое время, как бы обойтись без французкого… мне надоело это делать руками, Я ЖЕ ПРОГРАММИСТ подумал я и начала автоматизировать свою работу.
Начал я с плагина Tasks, который позволяет писать кастомные запросы на задачи со всего хранилища. И это был ад.
Сама возможность использовать мой любимый Javascript в запросах не может не вызывать уважения к плагину, но то как это пишется… примерно так
filter by function \ const SPRINT_P = 'SPRINT';\ \ const SPRINT_START_DATE = '2025-03-17';\ const SPRINT_END_DATE = '2025-03-30';\ \ const hasSprintTag = () => {\ const sprintTagBegin = '#Спринт25';\ const currentSprint = '03С2';\ const sprintTag = sprintTagBegin+currentSprint;\ return task.tags.includes(sprintTag);\ };\ \ ...
Про дебагинг я вообще молчу, один раз я искал пробел после слеша целый час, может быть если я изначально знал, что искать, то нашел бы быстрее, в том же Templater с этим проблем нет, я конечно не пробовал Dataview, но может быть там все хорошо.
Сейчас мой запрос работает на свойствах файла и тегах задач.
Структура самого шаблона:
-
Инбокс — задачи, которые появились в текущем спринте
-
Задачи — блок с запросом Tasks
Сам результат запроса выглядит так:

Символом параграфа отмечаются категории в тегах, двойными — родительские задачи (так удобнее понимать к чему относиться задача). В «Не сгруппировалось» попадают задачи без категории
Описание свойств, которое используются в запросе:
|
Свойство |
Описание |
Значения |
|---|---|---|
|
HAS_TASK |
Чтобы задачи попали в запрос у Файла должно быть это свойство |
Не имеет значения |
|
SPINT |
свойство отвечающее за то, зависят ли задачи от тега со спринтом |
DONE — попадает в запрос, если дата завершения попадает в период спринта TAG — задачи попадают в тот спринт, который указан в теге задачи |
|
GROUPING |
отвечает за группировку |
HEADING — группировка по заголовкам (нужна для списков, где есть несколько категорий) CUSTOM — группировка по свойствам файла |
|
GROUP_NAME |
Название группы |
Строка |
|
SUBGROUP_NAME |
Название субгруппы |
Строка или |
На сегодня я использую только два набора свойств для списков:
|
Свойство |
|
Значения |
|---|---|---|
|
Описание |
Списки с несколькими категориями, например, беклог на год или на квартал |
Список под конкретную категорию Пример: Похудение, Петпроект %NAME%, и тд |
|
SPINT |
TAG |
DONE |
|
GROUPING |
HEADING |
CUSTOM |
|
GROUP_NAME |
— |
{{Название категории}} |
|
SUBGROUP_NAME |
— |
$FILENAME |
Шаблон с запросом Tasks: https://github.com/imabramon/my-templates
Работа с тегами
После агрегирования главной проблемой стала работа с тегами, так как вся группировка основана них. По началу я еще не уставал вручную писать, но, например, когда начинается спринт, пишешь очень много задач, многие их которых относятся к разным категориям, то это надоедает. Так я написал первые версии шаблоны на JS. В целом ничего сложного, бьешь tp.selection на строки и добавляешь в конец теги из промта.
Но планы были грандиозные (да и сейчас остались), вот например есть такой список:
- [ ] task - [ ] sub parent - [x] sub 1 - [ ] sub 2 - [x] sub 3
Хотелось бы шаблон который сможет превратить его в
- [ ] task - [ ] sub parent - [ ] sub 2 - [x] task - [x] sub parent - [x] sub 1 - [x] sub 3
Т.е. разделить на завершенную часть и незавершенную. Например у меня есть большая задача в инбоксе, и я не хочу переносить всю ее в беклог или следующий спринт. Так или иначе были идеи шаблонов, для которых нужна была абстракция, чтобы можно было удобнее работать, да и перспектива писать код в обсидиане меня не впечатляла. Так я перешел в привычный vs code.
К сожалению не так часто удавалось или даже хотелось писать из-за личных загонов. Но по спустя временя, понял что это было интересно, как говорил Жан Пьер Польнореф. Потихоньку писал парсер, фиксил баги, писал тесты, фиксил баги, думал какие шаблоны сделать еще и фиксил баги. Не хватает пару обычных для коллекций функций по типу map, reduce и тд, но то что уже есть сейчас хватит, чтобы покрыть большое количество запросов (в первую очередь моих).
По итогу сейчас есть следующие шаблоны:
-
добавление и удаление тегов — тут понятно
-
разделение по завершенности — пример выше
-
счетчик — создает однотипные задачи вида
- [ ] N, удобно использовать для трекеров привычек
Так же есть 2 шаблон использующие понятие категории (сферы жизни):
-
разделить по категории — удобно сортировать инбокс
-
теги как у родителя — так же удобно работать с инбоксом, так как обычно у меня нет пересечений по категориям
Более подробно про сами шаблоны с примерами и JS API, которое есть на данным момент есть, можно найти на гитхабе: https://github.com/imabramon/templater_tasks_processor
Заключение
Пациент в глубокой коме…
Пока все это делал, довольно много устал от этого проекта. Вот в начале каждого пета есть некий тильт, так как еще не очень шаришь, мало что есть и много что надо сделать, в середине самый пик приятных эмоций — уже много что есть, начал уже жестко шарить за область проекта, но вот в конце, когда надо полишить — самый тягостный период разработки, как по мне. Понимаешь, что так оставлять нельзя, но и доделывать очень тяжело (возможно у меня SVG).
Надеюсь получилось не слишком душно и кому-нибудь это поможет для работы в obsidian.
ссылка на оригинал статьи https://habr.com/ru/articles/899042/
Добавить комментарий