summaryrefslogtreecommitdiff
path: root/content/posts/2025-11-23-org/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/2025-11-23-org/index.md')
-rw-r--r--content/posts/2025-11-23-org/index.md253
1 files changed, 253 insertions, 0 deletions
diff --git a/content/posts/2025-11-23-org/index.md b/content/posts/2025-11-23-org/index.md
new file mode 100644
index 0000000..481b9f6
--- /dev/null
+++ b/content/posts/2025-11-23-org/index.md
@@ -0,0 +1,253 @@
+---
+comments: true
+date: "2025-11-23"
+tags:
+ - гиковское
+ - моё
+title: Личный органайзер
+---
+
+Пришло в голову, почему бы не рассказать как у меня организован личный
+органайзер.
+
+Для начала стоит очертить то, какие у меня потребности от органайзера:
+
+- Вести список ежедневных, еженедельных, ежегодных, а так же, одноразовых
+ событий
+- Вести быстрый список ближайших задач (ToDo список). Под быстрым, я
+ подразумеваю то, что внести новый пункт в него я могу не дольше, чем за пару
+ десятков секунд. Если это будет требовать бо́льших усилий, то я себя знаю: я
+ это быстро заброшу, т.к. это станет для меня не помощью, а повинностью.
+- Место для быстрых заметок в формате «бесконечного текстовика». Аналогично,
+ это должно быть под рукой в быстром доступе. Obsidian себя показал _слишком_
+ медленным. Настолько, что мне стало проще запоминать, чем испытывать свои
+ нервы каждый раз, наблюдая его длительный запуск. Да, звучит на первый взгляд
+ глупо, но у меня так: запуск Obsidian длительностью в десяток секунд
+ окончательно отбил у меня желание вовсе запускать его.
+
+Что же делать? Искать идеальный для себя инструмент? Идеального для _себя_
+точно не найду. Написать самому, ведь «яжпрограммист»? Можно, но откровенно
+жаль время. Что же делать-то?
+
+<!--more-->
+
+К счастью, я вспомнил что у меня же unix-подобная операционная система, в
+поставке которой огромное количество небольших программ, которые прекрасно
+выполняют какую-то небольшую функцию и при этом отлично стыкуются друг с другом
+через стандартный текстовый поток! Грешно не воспользоваться наработками
+гораздо более умных, чем я, программистов!
+
+# ToDo
+
+Проще всего оказалось с этим. Просто поставил себе
+[todo.txt](https://github.com/todotxt/todo.txt-cli). Хоть я и говорил выше, что
+идеального инструмента я не найду, но я тогда немного слукавил. Для ToDo этот
+инструмент _почти_ идеален. Всё что мне надо, кроме одного нюанса, там есть. А
+вот тот самый нюанс, я когда-нибудь исправлю. Возможно.
+
+Для удобства я себе в zsh добавил следующие alias:
+
+```zsh
+alias t=todo.sh
+```
+
+Таким образом, чтобы добавить задачку я просто пишу `t add текст задачи`. Куда
+уж проще и быстрее?
+
+# Календарь
+
+Идею организации календаря я подсмотрел в программе calendar, которая идёт в
+комплекте с BSD системами, но не идёт в конкретно моей ОС. Да, наверняка, можно
+и к себе притащить, но я из спортивного интереса хотел решить задачу
+максимально встроенными и стандартными инструментами.
+
+Лонг стори шорт:
+
+~/calendar.txt
+
+```
+01-28 ДР Лены
+10-18 ДР Мамы
+05-24 Годовщина свадьбы
+11-23 Ежегодное событие
+
+Пн 15 Еженедельный мит
+Пн 20-21 Чтение
+
+Вт 13 Архком
+Вт 15 Грумминг
+Вт 20-21 Чтение
+
+Ср 13 Техразвитие
+Ср 20-21 Чтение
+
+Чт 15 Грумминг
+Чт 20-21 Чтение
+
+Пт 20-21 Чтение
+Сб 20-21 Чтение
+Вс 20-21 Чтение
+
+2025-11-19 10 клуб амбассадоров
+2025-11-17 16:30-17:30 Встреча c 16:30 до 17:30
+2025-11-24 10:15 Golang Техком
+2025-11-24 11-12 Анализ логики состояния
+2025-11-23 21 Написать в блог о своём календаре
+```
+
+Пояснения:
+
+- `mm-dd\t\tСобытие` - некие ежегодные события, у которых указаны только месяц
+ и день месяца
+- `Пн\tвремя\tСобытие` - еженедельное событие. Про формат времени - будет ниже.
+- `yyyy-mm-dd\tвремя\tсобытие` - разовые события в конкретную дату и время.
+
+Формат времени: его я подсмотрел у формата
+[calendar.txt](https://terokarvinen.com/2021/calendar-txt/), то есть, запись
+формата `15` - это означает что событие начнётся в 15 часов, `20-21` - событие
+длится с 20 до 21 часа вечера. С минутами, которые не обязательны, думаю, всё
+понятно из примера.
+
+Формат сам по себе абсолютно не жёсткий, допускает много вольностей. Главное,
+всё сводится к тому, что у него 1 строка - 1 событие и сама строка состоит из 3
+полей разделённых табом (в формате calendar.txt предлагается точка, для меня
+это показалось неприемлемым, т.к. я записываю в события и ссылки на созвоны, а
+ссылка включает в себя минимум одну точку)
+
+В принципе, тут уже можно было бы и остановиться и жить с просто текстовиком,
+но так было бы не интересно. Я написал на языке оболочки несколько полезных
+скриптов. Они настолько маленькие, что я просто приведу их здесь:
+
+~/.local/bin/calendar
+
+```sh
+#! /bin/sh
+
+cur=${2:-`date +%Y-%m-%d`}
+file=${1:-~/calendar.txt}
+grep \
+ -e "^$(date +%Y-%m-%d -d $cur)"\
+ -e "^$(date +%a -d $cur)"\
+ -e "^$(date +%m-%d -d $cur)" $file |\
+sort -n -k 2 |\
+cut -f2- | fold -w 80 -s
+```
+
+Собственно, это главный скрипт, который собирает для текущей (или явно
+указанной) даты все релевантные события, сортирует их по времени и выводит
+форматированным списком. Примерно так:
+
+```
+% calendar
+ Ежегодное событие
+20-21 Чтение
+21 Написать в блог о своём календаре
+```
+
+На этом я не остановился, но сделал ещё парочку вспомогательных скриптов,
+использующих его за основу:
+
+~/.local/bin/today
+
+```sh
+#!/bin/sh
+echo "Календарь:"
+echo -e ''$_{1..80}'\b-'
+cal
+echo -e ''$_{1..80}'\b-'
+echo "События дня:"
+echo -e ''$_{1..80}'\b-'
+
+calendar
+
+echo -e ''$_{1..80}'\b-'
+
+echo "ToDo:"
+todo.sh ls
+```
+
+Делает по сути тоже самое что и просто calendar, только ещё и рисует красивый
+графический календарик и показывает список ToDo задач.
+
+~/.local/bin/week
+
+```sh
+#!/bin/sh
+
+echo "На 7 дней:"
+for i in {0..6}
+do
+ d=`date +%Y-%m-%d -d "+ $i day"`
+ echo -e ''$_{1..80}'\b-'
+ echo $d
+ echo -e ''$_{1..80}'\b-'
+ calendar ~/calendar.txt $d
+done
+echo -e ''$_{1..80}'\b-'
+echo "ToDo:"
+todo.sh ls
+```
+
+Выводит план на 7 дней вперёд.
+
+## Редактирование календаря
+
+Здесь тоже предельно просто: добавил в zshrc такой алиас:
+
+```zsh
+alias ev='nvim +/`date +"%Y-%m-%d"` ~/calendar.txt'
+```
+
+и просто по команде `ev` открывается neovim и готов принимать новое событие.
+Хотя это и не самая частая операция.
+
+# Быстрые заметки
+
+Тут тоже всё просто:
+
+```zsh
+alias qn='nvim "+normal G" ~/quicknote.txt'
+```
+
+Соответственно, по команде `qn` открывается мой текстовик для заметок на самой
+последней строке. Можно дописать или поискать что-то с конца. На самом деле
+очень удобно!
+
+# Мобильный?
+
+Я бы хотел все эти мои текстовики иметь и на мобильном устройстве. Даже не для
+редактирования, а например, свериться со списком задач / событий.
+
+Тут чуть сложнее. Для синхронизации с мобильным устройством я сделал такой финт:
+
+1. Все текстовики у меня лежат не в домашней директории, на самом деле, а в
+ некой директории из которой симлинками уже прокинуты в корень домашней
+ директории.
+2. Директория эта добавлена в Syncthing который синхронизирует её с NAS и
+ мобильным устройством.
+3. На мобильном устройстве стоит замечательная программа
+ [Markor](https://f-droid.org/packages/net.gsantner.markor/) которая нативно
+ понимает формат todo.txt, ну и достаточно неплохо позволяет смотреть
+ редактировать файлы calendar.txt и quicknote.txt.
+
+# Чтобы хотелось ещё?
+
+- Как я упоминал, в todo.txt для меня есть неприятный нюанс который я бы хотел
+ исправить, а именно, вложенные задачи, когда у одной задачи может быть
+ сколько угодно дочерних, у которых, так же могут быть дочерние. Пока думаю,
+ расширить формат табуляцией в начале строки. Количество \t - уровень
+ вложенности. Но тогда придётся модифицировать todo.txt-cli который я
+ использую. И непонятно как это проглотит Markor. Можно конечно использовать
+ встроенную возможность задавать key-value значения. Тогда будет что-то типа
+ `Подзадача parent:2`. Это, как будто, самый правильный способ, который и
+ рекомендуется разработчиками формата, но получается слишком многословно, а
+ даже если сократить до `p:2` - всё равно надо в голове держать номер
+ родительской задачи. Так себе. Не знаю ещё как поступлю, но как-то поступлю.
+- Было бы неплохо прикрутить парсинг ICS файлов из почты для автоматического
+ добавления событий в календарь. Это сто́ит сделать однозначно!
+- Ну и очень желательно сделать скрипт который по крону за 15 минут до события
+ напомнит о нём, через какой-нибудь `notify-send`. Это, на самом деле, из всех
+ хотелок самая приоритетная для меня сейчас.
+
+Если будет интересно, я могу здесь рассказывать о том, что сделал из этих
+хотелок.