Управление делами
Я работаю программистом сразу в нескольких местах, у меня есть куча собственных проектов или проектов, в которые я ввязался, дел по дому и обустройству нашей новой жизни. Дел так много, что их невозможно удержать в голове; во многих опенсорсных проектах есть свои трекеры, но даже список этих трекеров в голове не удержать, и, конечно, времени на ежедневный их обход нет. Кроме текущих дел надо ещё не забыть что-то прочитать, посмотреть какой-то фильм. Чтобы со всем этим справиться, понадобился органайзер.
Я перепробовал много органайзеров с веб-интерфейсами, пробовал разные GUI и консольные программы — всё не то. Однажды написал утилиту tremor, которая обходит указанные в настройках трекеры и присылает мне на почту перечень задач, которые на мне висят, но приходилось вести отдельный список локальных дел, которые не относятся к программированию.
Однажды я узнал про TaskWarrior (слушая FLOSS Weekly #175), и он оказался как раз тем, что мне нужно. Это консольный органайзер, который позволяет делить задачи на проекты, управлять приоритетами, метками, зависимостями, откладывать задачи до нужной даты, добавлять к ним комментарии и произвольные атрибуты, выводить самые разные отчёты и отслеживать время, затраченное на каждую задачу (что важно при почасовой оплате труда). Он много чего ещё умеет, чем я не пользуюсь (вроде синхронизации с удалённой базой), но некоторые функции делают его для меня незаменимым.
Вывод самых важных данных
Из сотен поставленных задач под рукой мне нужна только часть, имеющая отношение к работе, и запущенные задачи (по которым считается время). Вывести их можно так:
task project:work or start.not:""
Чтобы не печатать получившийся длинный запрос каждый раз, я описал в ~/.taskrc
собственный отчёт, который выводится по команде task now
:
report.now.description=Running tasks
report.now.columns=id,project,priority,age,description
report.now.filter=project:work or start.not:"" status:pending
report.now.sort=start-,priority-,description+
В большинстве случаев мне интересна именно эта информация, поэтому если я не
указываю никаких параметров, скрипт t
добавляет за меня параметр "now".
Теперь для вывода всех важных задач мне достаточно выполнить команду t
.
Остановка задач при покидании рабочего места
Иногда мне надо быстро отойти, и писать команды для остановки таймера нет
времени. Для этого я создал файл /etc/acpi/local/lid.sh.pre
с таким
содержимым:
#!/bin/sh
yes | su -c "task start.not: stop" hex
Импорт данных
Компании, с которыми я работаю, используют для постановки задач Мегаплан, TeamLab и RedMine. Раньше у меня был скрипт, который каждое утро присылал мне список моих задач из всех этих систем. Это лучше, чем ничего, но гораздо удобнее видеть все задачи в одном месте. Специально для таких случаев есть сторонняя утилита BugWarrior. Изначально она поддерживала только распространённые в мире open source системы, но я научил её работать с нужными мне.
Импорт работает просто: для каждой удалённой задачи формируется заголовок, содержащий её удалённый идентификатор, заголовок и ссылку на оригинальный трекер. Полученная строка используется для локальной идентификации задачи. Когда задача из удалённой системы исчезает, она считается закрытой.
Список выглядит так:
ID Project Pri Age Description
174 tycoon H 1d (bw)Is#2130951 — SEO-рекомендаций .. http://j.mp/asdfg
156 acme H 2d (bw)Is#5409 — Яндекс.Директ, вывод данных .. http://j.mp/qwerty
Экспорт данных
Любые данные можно получить в формате JSON, что удобно для машинной обработки. У меня есть скрипт, который выбирает все актуальные задачи из проекта wishlist и размещает их на сайте.
С помощью этой же функции специальный скрипт, знающий мою ставку по каждому проекту, считает, кому какой счёт выставить.
Пользовательские атрибуты
Кроме предопределённых свойств пользователь может добавить задачам
собственные. Я использую это, например, для оформления вишлиста. Для этого нужно в ~/.taskrc
я добавил такие строки:
uda.url.type=string
uda.url.label=URL
После этого я добавляю ссылки к задачам таким образом:
t 123 mod url:"http://bit.ly/example"
Эти данные видны при просмотре информации (task info
), их можно выводить в списках и они включены в набор данных, получаемых по команде task export
.
Другая автоматизация
TaskWarrior сам по себе не умеет запускать пользовательские скрипты в ответ на его действия, но в UNIX это легко решается обёрткой, которая у меня выглядит примерно так:
#!/bin/bash
task $@ && nohup run-parts $HOME/.config/taskwarrior/after.d >/dev/null 2>&1 &
После любой операции запускаются все скрипты из папки after.d
, каждый скрипт
выполняет одно действие: корректирует метки, публикует вишлист, отправляет время
по только что остановленной задаче на внешний трекер (если он есть) и т.п. Всё
это делается в фоне, чтобы не тормозить мои действия в консоли.
Следить за развитием событий можно через RSS ленту или почтовую рассылку.