zeit
дядечка в чалме допился Валтасар, Рембрант
Учёт времени Zeit
Introduction • Briefly introduce the concept of time tracking and its importance for productivity.
Мене, мене, текел, уфарсин . Человечество научилось считать, отмерять и учитывать, теперь куда ни глянь, везде увидишь контроль и учёт:
- считают деньги в кошельках и на карточках,
- учитывают количество горячей и холодной воды,
- переписывают население в государствах,
- считают сколько раз человек облетел вместе с Землёй вокруг Солнца.
Все что-то считают. Я считаю шаги когда хожу, музыкант считает такты произведения, писатель — слова, издатель — листы. Укаждого дела count(*) особый.
Зачем? Зачем что-то учитывать? Седые и строгие дяди и тёти спустились с Олимпа и сказали нам: «Нельзя улучшить то, что нельзя измерить». И сложно с этим не согласиться. Тем не менee тут мы утыкаемся в философский вопрос: когда мы считаем шаги или кубометры воды, вытекающие из крана, мы считаем потраченные ресурсы, в то время как когда мы считаем деньги (которые у нас есть) или книги на книжной полке (чтобы узнать для себя, что наша семейная библиотека составляет целых 18 томов, например), мы считаем ресурсы, которыми обладаем, которые у нас есть, с которыми мы можем что-то делать.
Получается, что ресурсов, подлежащих учёту, есть два типа:
- те, которые мы тратим
- которые мы собираемся или можем потратить
Но стоп. Время учитывается и так как будто оно у нас есть и так как будто мы его уже потратили и так как будто мы его только собираемся тратить. Сейчас объясню: вот часы тикают всегда только вперёд — это как вода, котрая льётся из крана. А табличка в эксельке, в которой написано, что на перекрашивание кнопки из красного в ярко-красный подрядчик просит 8 человеко-часов — это бюджет, то есть, как бы ресурс, которым мы моооожем распоряжаться.
Чтобы учитывать время, надо понять какое именно его проявление мы собрались считать. И соответственно задачам, выбрать инструменты.
- Время, котрое как вода из крана. Для работы с таким видом времени нужен, грубо говоря, секундомер с фиксацией того, что происходит в нашей жизни в какой-то табличке — беспрестрастный лог (прошёл 54 шага, выпил восемь чашек кофе, сходил в туалет три раза, помыл руки два раза, на клавиатуре нажал 77 раз кнопку Enter). Такие данные собирают фитнес-браслеты, пропуска-ходилки в офисах, турникеты в метро и прочие механизмы (на компьютере это что-то типа ResqueTime или ActivityWatch
- Время, которое мы стараемся посвятить конкретным задачам. Тут мы работаем не со «временем вообще», не со временем, как измерением нашей Вселенной, а с временем, которое мы сами структурируем для себя в какие-то блоки. Эти блоки мы для удобства и взаимопонимания называем «Проекты», «Задачи» (ну и ещё как-то, наверное, но я на практике больше не использую). Мы фиксируем такое время в специальных программах типа Tyme, Watson, TimeWarrior и тд и тп.
The Discovery and The Letdown • Compare the options, highlighting their differences. • Explain why typical options didn’t fit, considering factors like simplicity and tech stack.
С ноября 2014-го я вёл учёт рабочего и около-рабочего времени в штуке, которая называется Tyme. Купил сначала первую версию, потом вторую, потом мобильное приложение для iPhone, синхронизировал через iCloud, смотрел на графики, помнил все горячие клавиши, экспортировал и отправлял клиентам эксельки с отчётами. Было классно.
Кроме шуток, если вы на маке и если вы ищете UI time-tracker, обратите внимание на Tyme. Мне пришлось с неё уйти потому что вторая версия достигла end of life, а третью покупать у меня не входило в планы, потому что не люблю платить за аренду конечных вещей (одно дело аренда музыки или сериалов, или в общем-то не нужного тебе самоката или велика — плата за доступ к какой-то возможности, которая не обязательна, другое дело — аренда мобильного телефона, одежды, или рабочего инструмента, который тебе прям нужен и нужен каждый день). Плюс, отказ от Tyme подогревался желанием перейти на следующий уровень использования терминала: we need to go deeper.
И пошёл я искать что-то, что будет:
- Учитывать рабочее время (быть тем, что называется time tracker software)
- Работать в командной строке
- Желательно быть чем-то новым и с открытым исходным кодом, чтобы можно было посмотреть как люди делают такие штуки
- Быть простым
- Встраиваться в мой workflow
- Давать мне возможность чему-то научиться
- Быть таким, чтобы я мог втянуться в его использование за несколько дней
- Справляться с тем, к чему я привык
Тема тайм-менеджмента и приложений для него достаточно хайповая и интернет в этой сфере основательно загажен. Основной улов, который приносят поисковые системы, состоит из подписочных сервисов, картинок с графиками сомнительной красоты и статей про успешный успех («мы внедрили вот это и у нас все как начали работать, так и не могут остановться до сих пор»). После трёхступенчатой фильтрации остались уже упомянутые Timewarrior и Watson, россыпь мелких скриптиков, сделанных на уроках домоводства и несколько заметок с размышлениями на тему.
Timewarrior и Watson не подошли по критериям новизны и простоты, про workflow я даже не стал проверять (потому что не стал их устанавливать, только посмотрел снаружи как оно сделано). Наверняка это классные продукты, но у меня были немного другие цели.
Why Zeit? • Explain why you chose it, considering factors like modern design and programming language (Go).
Среди статей о тайм-менеджменте средствами линуксовой консоли, нашлась небезынтересная частица информации, я бы даже сказал, жемчужина: Zeit, erfassen: A CLI Activity & Time Tracker Если читаете на высоком наречии, обратите внимание, там весь сайт https://マリウス.com/ великолепен, начиная с доменного имени.
Мотивация автора и его видение требований к cli-тайм-трекеру настолько гармонировало с моим восприятием прекрасного, что я прекратил дальнейшие поиски и отправился на гитхаб.
Итак, мы поняли как судьба свела меня с этим проектом, давайте постепенно приближаться к тому какая от него практичекая польза.
Зачем нужен Zeit
Программа под названием Zeit (читается «цайт», но я игнорирую правила, поэтому говорю «ЗАЙТ» и что вы мне сделаете?) предназначена для работы со вторым из перечисленных типов времени (того времени, которое мы отводим для конкретных задач). Она позволяет нам хранить информацию о задачах, которые мы решаем и проектах, в которых мы участвуем.
Минимальной единицей, «атомом» в модели мира программы Zeit, является «запись» (entry), она объединяет проект и задачу, а также хранит в себе всю мету про отмеренное время (дату начала, окончание, комментарии и прочее).
Проект -> задача -> запись :)
Соответственно, как это всё работает:
-
Мы осознаём свою смертность и конечность, в следствии чего, приходим к необходимости как-то управлять ограниченным количеством времени (ещё есть маленький нюанс — мы не знаем сколько у нас всего этого невосполнимого ресурса в наличии, но обо этом я сейчас не буду)
-
В отчаянии хватаемся за голову и на листе бумаги выписываем всё, что нам нужно успеть в обозримом будущем (дедлайны тут ставить не будем, это не тайм-менеджмент, это обзор прогаммы для учёта времени, потраченного на задачи, который никак не начнётся)
-
Теперь открываем комп и устанавливаем Zeit.
- нам нужна коммандная строка и одна из существующих в мире операционных систем: Download the latest version for macOS, Linux, FreeBSD, NetBSD, OpenBSD & Plan9 here. Plan9, вау!
- ну или go install github.com/mrusme/zeit (и читать как это собирать, я уже не помню, но вроде собралось без вопросов)
- Теперь собираем выписанные задачи и группируем их по смыслу:
- работа в кузнице на барина
- ковать железо
- носить воду
- заготавливать дрова
- заниматься огородом чтобы не протянуть ноги с голоду зимой
- пахать землю
- сажать турнепс
- поливать
- То, что в этом списке на первом уровне (работа на барина, огород) — это проекты, добавляем их вот так:
zeit project "Кузница" --color "#333333"
zeit project "Огород" --color "#eeffa4"
- То, что в этом списке на втором уровне (ковать железо, пахать землю) — это задачи, добавляем их вот так, при добавлении время сразу начнёт учитываться, поскольку мы используем команду track, что логично:
zeit track --project "Кузница" --task "ковать железо"
Чтобы просто добавить задачу, без автоматического старта, используется команда task, но идите сами читайте как потом задачу привязать к проекту, я не помню.
Можно спросить zeit что именно происходит командой zeit tracking, в ответ она напишет, что либо не происходит ничего, либо скажет какая задача отслеживается и на протяжении какого времени.
Можно накидать задачи отдельными командами zeit task "пахать землю"
, а затем привязать эту задачу к проекту zeit при помощи команды zeit entry
.
Именно эта команда позволяет редактировать те самые «атомы». Для операций над записями нужно знать из id, которые можно узнать командой zeit list.
Зная айдишку записи мы можем сделать с ней всё, например, удалить
Чтобы остановить таймер, нужно воспользоваться командой zeit finish. Иногда бывает полезно сказать трекеру, что мы начали работать некоторое время назад, и что таймер надо стартовать раньше (но мы-то его уже запустили и сейчас как раз останавливаем. Для этого можно написать:
zeit finish -b -02:10
--b -begin
— значит BEGIN, начало открою вам секрет, что время и дату окончания тоже можно задавать с помощью ключа --s --finish
С такой консистентности ключей я знатно угорел. Но великодушно простим это и сочтём за каприз творческой души, гении именю право на странности. Для нас важно другое: в качестве даты/времени можно указывать относительную или абсолютную дату, строку — по всякому можно записывать время остановки/начала — удобно.
При помощи ключа -n можно указать комментарий к записи (что именно мы делали в это время).
zeit finish -n 'Вспахал два гектара'
Ну вот мы поработали и хотим окинуть усталым взглядом наш сложившийся график. Для этого можно использовать zeit stats
— эта команда выводит столбиковую диаграму по проектам за текущую и прошедшую неделю, а также сводную статистику за всё время. Тут, кстати, могут пригодиться цвета, которые мы устанавливали для проектов где-то в начале нашего пути (цвета тоже редактируются, смотрите примеры на гитхабе и в zeit project --help
)
Когда вдруг понадобится отчитаться о том как мы гнули спину в трудах праведных перед начальником, заказчиком, клиентом, мамой, своей неумолкающей совестью, к нашим услугам команда экспорта: zeit export
, она поддерживает фильтры по проектам, задачам, даты с-по и формат экспорта tyme, например.
Если вы знаете кунфу, то можно написать вот так: zeit export --project Personal --task Blog | jq
и получить красоту
Да, это JSON, а чем плох JSON, нет вы скажите, я жду!
The Challenge: Importing Data from Tyme • Describe the issue of importing data from your previous tracker.
Ещё она умеет импортировать данные в формате Tyme, но я покрутил немного таймовсие файлики (csv и json и решшил оставить их лежать немым напоминанием о моих счастливых годах). Так и лежат теперь — один на 2,2 мегабайта, другой на шесть с копейками, смотрю на них иногда и смыхиваю скупую слезу ностальгии с прорезанного морщинами лица. Короче, не стал импортировать.
The Killer Feature • Discuss the most notable feature you’ve found helpful.
О! One More Thing! Такая one more thing, что я до сих пор вне себя от радости каждый раз когда с ней сталкиваюсь. При создании задач (или при её редактировании) можно указать абсолютный путь до репозитория и она при остановке таймера будет подхватывать commit messages, которые появились в git-репозитории за то время, которое тикал таймер. Я скептически относился к интеграции подобных штук с гитом, но в этот раз распробовал и полюбил как она сделана.
А теперь, когда всё сосчитано, учтено и взвешено, — самое время посмотреть на плоды своего труда и спросить себя: «Куда я шёл всё это время, зачем я это делал, к тому ли я стремился? В чём смысл всей этой эффективности?»
мужик какой-то бородатый смотрит как тётю закалывают Сарданапал, Эжен Делакруа .