Org-mode. Пакет org-window-habit

Org-mode. Пакет org-window-habit

2026-03-01 · 8 мин. для прочтения
blog

Org-mode. Пакет org-window-habit.

Содержание

1 Общая информация

  • Репозиторий: https://github.com/colonelpanic8/org-window-habit
  • Расширение возможностей работы с Habit.
  • Основная идея — введение окна привычки.
  • Вместо вопроса «Вы это сделали сегодня?», она спрашивает «Вы сделали это достаточное количество раз в течение этого временного окна?»

2 Концепция окна привычки

  • Вы определяете:

    • Длительность окна: насколько далеко назад следует учитывать завершенные операции (например, 7 дней, 1 месяц).
    • Необходимое количество повторений: сколько завершений требуется в течение этого временного промежутка (например, 5 раз).
    • Интервал оценки: как часто следует проводить повторную оценку, т.е. шаг для скользящего окна (например, ежедневно).
  • Продолжительность окна определяет, какой объем истории учитывается для достижения вашей цели.

  • Интервал оценки определяет, насколько детально окно сдвигается вперед.

    • Например, при 7-дневном окне и 1-дневном интервале оценки вы получаете новую оценку каждый день, которая охватывает предыдущие 7 дней.
    • Если бы интервал оценки также составлял 7 дней, окно сдвигалось бы еженедельно, а не сдвигалось бы ежедневно.

2.1 Пример

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

2.2 Привязка интервала оценки

  • Для интервалов фиксированной длины (дни, часы) границы оценки привязаны ко времени начала вашей привычки, а не к произвольным календарным границам:

    • Привычка с 3-дневным интервалом оценки, начавшаяся 10 января, будет иметь периоды: 10-13 января, 13-16 января, 16-19 января и т. д.
    • Другая привычка с тем же 3-дневным интервалом, но начинающаяся 11 января, будет иметь другие периоды: 11-14 января, 14-17 января, 17-20 января и т. д.
  • Библиотека отслеживает выполнение заданий и рассчитывает коэффициент соответствия — движетесь ли вы к своей цели?

  • Когда вы выполняете привычку, org-window-habit автоматически переносит её на следующую дату, когда её выполнение потребуется для поддержания соответствия привычкам, вместо использования фиксированного интервала повторения.

2.3 Пример: Еженедельные упражнения

  • Вы хотите заниматься спортом 5 раз в неделю:

    ​* TODO Exercise
    SCHEDULED: <2024-01-15 Mon .+1d>
    :PROPERTIES:
    :STYLE: habit
    :OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 5)))
    :END:
    
  • Если вы занимаетесь спортом в понедельник, вторник, среду, четверг и пятницу, вы достигли своей цели на неделю.

  • Суббота и воскресенье будут отображаться как «необязательные» — заниматься спортом необязательно, но вы можете, если хотите создать запас энергии.

  • Если вы занимались спортом всего 3 раза на этой неделе, и сегодня пятница, график показывает, что вы отстаёте, и привычка, по-видимому, требует завершения.

3 Ключи конфигурации

КлючНеобходимыйПо умолчаниюОписание
:window-specsДа\-Список технических характеристик окон
:assessment-intervalНет(:days 1)Как часто следует проводить переоценку
:reschedule-intervalНет(:days 1)Минимальный срок после завершения работ, после которого можно перенести их на другое время.
:reschedule-thresholdНет1.0Пороговое значение коэффициента соответствия для переноса сроков
:max-reps-per-intervalНет1Максимальное количество завершенных заданий за интервал оценки.
:only-daysНет(все дни)Ограничить определенными днями (например, (:monday :friday) )
:fromНет(неограниченный)Игнорировать завершенные проекты до этой даты

3.1 Формат спецификации окна

(:duration (:days 7) :repetitions 5)
(:duration (:days 7) :repetitions 5 :value 1.0)  ; with explicit weight

3.2 Формат продолжительности

  • Продолжительность окон можно указать следующим образом:
    • Сокращенные строки: 1d (1 день), 1w (1 неделя), 1m (1 месяц), 2w (2 недели).
    • Свойства: (:days 7), (:weeks 1), (:months 1) или комбинации, такие как (:days 1 :hours 12).

3.2.1 Недельное выравнивание

  • 1w преобразуется в (:days 7), который не привязан к конкретному дню недели.

  • Для формирования привычек, привязанных к неделе, используйте тип продолжительности :weeks с необязательным параметром :start:

    • (:weeks 1) : выравнивание по понедельникам (по умолчанию);
    • (:weeks 1 :start :sunday) : соответствует воскресенью;
    • (:weeks 1 :start :saturday) : соответствует субботе.
  • Доступные дни : :sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday.

3.2.2 Ограничения по дням недели

  • Некоторые привычки имеют смысл только в определенные дни недели.

  • Например, вы можете ходить в спортзал по понедельникам, средам и пятницам или готовить еду заранее только по выходным.

  • :only-days в OWH_CONFIG ограничивает количество дней, которые засчитываются в вашу привычку.

  • Когда :only-days установлено:

    • Завершения тренировок в запрещенные дни не учитываются при подсчете достижения цели.
    • При автоматическом переносе будет назначен следующий разрешенный день.
  • Формат представляет собой список символов дня недели: (:monday :wednesday :friday)

4 Правила использования

4.1 Формирование привычки

  • Создайте заголовок TODO с помощью SCHEDULED или DEADLINE любой из репитеров (значение репитера не имеет значения — org-window-habit использует собственную логику перепланирования, но репитер должен присутствовать)

  • Добавлять :STYLE: habit под :PROPERTIES:

  • Добавить OWH_CONFIG свойство с вашей конфигурацией привычек

  • Рекомендуемый способ настройки привычек работы с окнами — использование одного свойства, содержащего все параметры привычек:

    ​* TODO Exercise
    SCHEDULED: <2024-01-15 Mon .+1d>
    :PROPERTIES:
    :STYLE: habit
    :OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 5)))
    :END:
    
  • Это определяет привычку, требующую 5 выполнений в течение 7-дневного периода.

  • Можно задать дополнительные опции:

    ​* TODO Exercise
    SCHEDULED: <2024-01-15 Mon .+1d>
    :PROPERTIES:
    :STYLE: habit
    :OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 5)) :assessment-interval (:days 1) :only-days (:monday :wednesday :friday))
    :END:
    

4.2 Изменение привычек

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

4.2.1 Пример: Увеличение частоты тренировок

* TODO Exercise
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: ((:window-specs ((:duration (:days 7) :repetitions 5))) (:until "2024-06-01" :window-specs ((:duration (:days 7) :repetitions 3))))
:END:
  • Текущее требование: 5 раз в неделю (действует с 1 июня 2024 года).
  • Предыдущее требование: 3 раза в неделю (действует до 1 июня 2024 г.)

4.3 Правила версионирования

  • Конфигурации перечислены в обратном хронологическом порядке (самые новые — первыми).
  • В первой конфигурации ничего нет. :until (активен сейчас и навсегда)
  • Каждая конфигурация :from предполагает конфигурацию :until
  • Явный :from создается промежуток, где привычка неактивна.

4.3.1 Пример: перерыв в привычке

OWH_CONFIG: ((:window-specs ((:duration (:days 7) :repetitions 5))) (:until "2024-06-01" :from "2024-01-01" :window-specs ((:duration (:days 7) :repetitions 3))))
  • Эта привычка не проявлялась до 1 января 2024 года.
  • :from в самой старой конфигурации действует как время сброса.

4.4 Примеры

4.4.1 Ежемесячное чтение

* TODO Read a book
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:months 1) :repetitions 4)))
:END:

4.4.2 Ежемесячная задача, привязанная к календарю (например, оплата аренды)

  • Для задач, которые должны выполняться ровно один раз в календарный месяц (а не в течение скользящего 30-дневного периода), установите продолжительность периода и интервал оценки следующим образом: (:months 1).

  • Библиотека устанавливает ежемесячные интервалы, начиная с 1-го числа каждого месяца:

    ​* TODO Pay rent
    SCHEDULED: <2024-01-01 Mon .+1d>
    :PROPERTIES:
    :STYLE: habit
    :OWH_CONFIG: (:window-specs ((:duration (:months 1) :repetitions 1)) :assessment-interval (:months 1))
    :END:
    
  • Оценивается раз в календарный месяц.

  • Период не обновляется ежедневно — он перескакивает с месяца на месяц.

4.4.3 Традиционный стиль (фиксированный интервал с момента завершения)

  • Если вы хотите выработать привычку, которая просто повторяется фиксированное количество дней после каждого выполнения — как при традиционном методе.
* TODO Water plants
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:days 3) :repetitions 1)))
:END:
  • В этом задании написано: «Мне нужно поливать растения раз в 3 дня».
  • После выполнения привычка автоматически переносится на следующую дату, когда её нужно будет выполнить — примерно через 3 дня.
  • Перепланирование в org-window-habit основано на моменте, когда вы перестанете соответствовать требованиям, а не на фиксированном смещении.
  • При наличии 3-дневного окна, требующего 1 завершения, вам нужно будет завершить задание снова в течение 3 дней после последнего завершения, чтобы оставаться в соответствии с требованиями.

4.4.4 Приём лекарств каждые 8 ​​часов

* TODO Take medication
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:hours 8) :repetitions 1)) :assessment-interval (:hours 1))
:END:

4.4.5 Еженедельное задание (раз в неделю)

* TODO Review finances
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 1)))
:END:

4.4.6 Несколько окон

  • Привычка должна удовлетворять всем окнам одновременно:

    :PROPERTIES:
    :OWH_CONFIG: (:window-specs ((:duration (:days 4) :repetitions 1) (:duration (:days 6) :repetitions 2)))
    :END:
    
  • По крайней мере одно завершение в течение любого 4-дневного периода.

  • Не менее 2 завершенных сделок в течение любых 6 дней.

4.4.7 Еженедельный обзор каждый понедельник

* TODO Weekly review
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:weeks 1 :start :monday) :repetitions 1)) :assessment-interval (:weeks 1 :start :monday))
:END:

4.4.8 Привычка посещать спортзал

* TODO Go to gym
SCHEDULED: <2024-01-15 Mon .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 3)) :only-days (:monday :wednesday :friday))
:END:
  • 3 посещения спортзала в неделю.
  • Засчитываются только посещения в понедельник, среду и пятницу.
  • Если вы по ошибке выполните задание во вторник, оно не будет засчитано в вашу цель.
  • После выполнения в понедельник выполнение задания переносится на среду (пропуская вторник).

4.4.9 Приготовление еды на выходные

* TODO Meal prep for the week
SCHEDULED: <2024-01-20 Sat .+1d>
:PROPERTIES:
:STYLE: habit
:OWH_CONFIG: (:window-specs ((:duration (:days 7) :repetitions 1)) :only-days (:saturday :sunday))
:END:
  • Требует приготовления еды один раз в неделю, но только по выходным.
  • Выполнение задания в будний день не будет засчитано.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.