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-репозитории за то время, которое тикал таймер. Я скептически относился к интеграции подобных штук с гитом, но в этот раз распробовал и полюбил как она сделана.
А теперь, когда всё сосчитано, учтено и взвешено, — самое время посмотреть на плоды своего труда и спросить себя: «Куда я шёл всё это время, зачем я это делал, к тому ли я стремился? В чём смысл всей этой эффективности?»
мужик какой-то бородатый смотрит как тётю закалывают Сарданапал, Эжен Делакруа .