Сегодня мы поговорим об учете самого важного, на мой взгляд, ресурса — времени. Почему я считаю его самым важным? Потому, что он невосполнимый: его есть определённое количество и нового не будет. Можно только постараться максимально разумно распорядиться доступным. И куда же в этом деле без грамотного учёта? Я бы сказал, что учёт является базой для таких вещей, как тайм-менеджмент и планирование, т.к. без понимания, как расходуется время, крайне непросто его распределять и вообще что-то планировать. Да и просто полезно осознавать, на что и в каких количествах мы тратим драгоценное время нашей жизни.
Для решения этой задачи я предлагаю достаточно простой инструмент. Заинтересовавшимся добро пожаловать под кат.
Как можно догадаться из названия статьи, речь пойдет о программе для учета времени или таймтрекере. И, чтобы выяснить, какой должна быть эта программа, начнем с идеологической части.
Идея
Когда-то я прочитал про т.н. "систему Любищева" и меня она заинтересовала (на хабре есть статья). Вкратце, методика состоит в том, чтобы записывать, на что тратишь свое время, распределяя его по категориям и время от времени делать отчеты, суммируя затраченное время на каждую категорию. Подобные данные позволяют понять, сколько времени и на что уходит, а также чем занимался в конкретный момент времени.
Именно такой подход я и выбрал: учитывать все время. И в наш век высоких технологий, хочется что-то более удобное, чем просто записи на листочке. Поскольку мы постоянно окружены разнообразными гаджетами и просто компьютерами, было бы неплохо задействовать их для решения нашей задачи: зачем вручную вести всю эту бухгалтерию, если есть машина? Время тратить, опять же :) Значит, нам нужна программа, в которой мы будем отмечать, чем мы занимаемся и которая будет все подсчитывать, выводить отчеты и рисовать красивые графики :)
Теперь нужно определиться со списком требований, которым должна удовлетворять эта самая программа.
Требования
Список небольшой:
- Ручной учет. На этом остановлюсь подробно чуть ниже.
- Простота. Исходя из предыдущего пункта, программу предполагается использовать часто и не хотелось бы тратить постоянно кучу времени на сам учет.
- Кроссплатформенность.
- Синхронизация между устройствами.
- Безопасность. Не сильно хочется доверять такие данные какому-то непонятному сервису, как с точки зрения приватности, так и с точки зрения надежности — сервис может в один прекрасный день перестать работать.
- Средства для анализа. Собранные данные необходимо обработать и представить в понятном и удобном для восприятия виде.
Почему не автоматический учет?
Существует целый класс программ, которые собирая различную информацию об активности пользователя пытаются определить, чем он занимается. И для этого программе нужно уметь вытаскивать информацию из самых разных мест, поэтому не редкость такие вещи как плагины для браузера, скайпа и т.д. Не так давно здесь была статья про таймтрекер, поддерживающий запуск специального демона в виртуальной машине, который отслеживает активность пользователя в этой самой машине и передает ее по сети основной программе. В попытке хоть как-то угадать деятельность пользователя нужно придумывать все более изощренные алгоритмы и собирать все больше и больше данных, как паук, опутывая всю систему своей паутиной. Не удивлюсь, если начнут использовать данные с фитнес-трекеров, чтобы определить, чем пользователь занят когда он не за компьютером.
Главная проблема такого подхода — а как понять, чем действительно занят пользователь? Например, если я нахожусь на рабочем месте, значит ли это, что я работаю? Мы же с вами прекрасно понимаем, что вовсе не значит :) Если у меня открыт браузер вместо среды разработки, значит ли это, что я отдыхаю? Снова, нет. И даже если в браузере открыта социальная сеть, нельзя сказать однозначно, чем я там занят. Наверняка еще и придется подстраиваться под программу, чтобы она могла выдавать адекватные результаты. Резюмирую: на мой взгляд, на данном этапе развития технологий, подобный метод не может обеспечить приемлемую точность.
А что же ручной учет?
Нет необходимости пытаться определить, чем мы заняты в конкретный момент времени. Ведь мы сами это знаем! В любой момент времени мы можем сказать, чем мы занимаемся. Осталось только начать записывать :)
Конечно, нужна будет некоторая дисциплина, по крайней мере, пока это не войдет в привычку. Зато когда постоянно отмечаешь, чем занимаешься, немного меняется восприятие времени. Можно даже сказать, что появляется такая вещь, как осознанность.
Поэтому, я сделал выбор в пользу ручного трекера и именно такой мы сейчас и рассмотрим.
G-TimeTracker
Когда мне понадобилась программа, которая соответствует означенным требованиям, я таковой не нашел, пришлось писать самому :) Прошу любить и жаловать: G-TimeTracker или Global Time Tracker — (первая?) распределенная программа для учета времени. О том, к чему тут "распределенная" мы поговорим чуть позже, а сперва рассмотрим основной функционал.
Собственно учет
Основной экран программы показывает недавние записи. Его можно листать, чтобы посмотреть более ранние. Конечно есть и поиск и просмотр истории за конкретный период времени. Выглядит это примерно так:
Процесс учета времени крайне прост: жмем на кнопку '+' и в открывшемся окне редактора указываем время начала деятельности, категорию и опционально пишем комментарий. Время конца указывать не нужно, т.к. оно рассчитывается автоматически, исходя из времени начала следующей записи.
Нередко в разных трекерах нужно что-то постоянно запускать и останавливать, чтобы переключиться на другую активность, текущую нужно остановить и запустить эту другую и т.д. У меня принципиально другой подход: запускать ничего не нужно, вы же не запускаете время, оно само идет :) Вы просто создаете запись, когда переключаетесь на другую активность. И останавливать ничего не нужно: вы же не можете остановить время?
Категории можно создавать/удалять/редактировать. Есть поддержка подкатегорий, уровень вложенности не ограничен. По умолчанию создается небольшой набор категорий, которые можно смело дорабатывать под себя.
Статистика
Помимо сбора данных, нужно их представлять в наглядном виде. Для этого программа умеет строить графики распределения затраченного времени по категориям. Для каждой категории можно посмотреть более детальное распределение по подкатегориям.
Синхронизация
А теперь разберемся, что же это за распределенность такая. Данный функционал я готов назвать киллер-фичей программы :)
Итак, экземпляры программы запущенные на разных устройствах могут синхронизироваться между собой. Казалось бы, что тут такого, облака и облака. Но все намного интереснее. Само приложение не привязано ни к каким облакам. Просто нужно создать каталог, который будет синхронизироваться при помощи каких-либо облачных сервисов и указать этот каталог в программе. Программа будет синхронизироваться с этим каталогом, а тот в свою очередь между другими устройствами. Так что вам не нужно заводить учетную запись в еще одном облачном сервисе и доверять кому-то еще свои данные. Вы можете продолжать использовать то, чем пользовались раньше, будь то Google Drive, DropBox или SyncThing. Просто делаете записи на разных устройствах, а при синхронизации произойдет слияние всех изменений.
Конечно, в реализации подобный подход имеет свои нюансы и пришлось немало потрудиться, чтобы потом не пришлось разруливать конфликты после очередной синхронизации. Но результат того стоит.
Кстати, синхронизацией пользоваться необязательно, программа полностью функциональна и без нее.
Оценки
Программа не выставляет каких-либо оценок. Здесь нет каких-то "хороших" и "плохих" категорий или "продуктивных" и "непродуктивных". Это инструмент для исследования, в задачу которого входит сбор и отображение данных, а их интерпретация уже дело пользователя.
Разное
На данный момент есть сборки под Android, Windows и Linux. Появление под другие платформы вероятно :)
Есть поддержка импорта/экспорта в CSV-подобный формат.
Рекламы нет, код программы открыт, лицензия GPLv3.
Ссылки
Заключение
Обычно, когда говорят о цене, имеют в виду некую сумму денег. При помощи учета времени мы можем сделать эдакий виртуальный ценник вида "это стоит мне N часов в неделю/месяц/год". Это дает нам дополнительный инструмент для того, чтобы повысить свою продуктивность и минимизировать потери времени на малозначительные вещи, что в итоге делает нашу жизнь лучше.
Буду рад получить замечания, предложения и отзывы по моей программе :)
Комментарии (22)
VolCh
26.05.2016 08:35Как-то неправильно выглядит, что длительность текущего действия, например дороги, фиксируется на время ввода. Я уже полчаса еду, а всё 16 минут. И хорошо бы иметь возможность назначить две категории — дорога и Хабр, например :)
BlackRaven86
26.05.2016 16:06Это недоработка, длительность для последней записи не обновляется в реальном времени. Пока что :)
BlackRaven86
26.05.2016 20:52А насчет двух категорий: в какую категорию тогда относить запись в статистике? Если во все, то получится сумма > 100% :)
Если вы в дороге, чтобы не терять времени, читаете книжку (как делал тот же Любищев), то можно и записывать это в "чтение", а не в "дорогу". Получается, что одной категории тут достаточно :)
VolCh
27.05.2016 06:51Ну, лично мне приятно видеть, что я трачу время с эффективностью большей 100%, что могу делать несколько дел одновременно :)
VolCh
26.05.2016 08:43А вообще, по-моему, будущее (до создания сильного ИИ) за полуавтоматическими треккерами, которые будут фиксировать объективную активность, а квалифицировать её предоставят пользователю. Явно или с помощью правил. Без подсказок или с подсказками на базе истории.
meln1k
26.05.2016 10:12Что будет если в офлайне сделать две записи на двух разных устройствах, а потом они начнут синхронизацию? Одна из версий будет перезапишет другую?
BlackRaven86
26.05.2016 16:05Нет, будет две записи. В это фишка, что можно делать записи на разных устройствах и они потом сольются.
meln1k
26.05.2016 18:58Каким образом это реализовано?
BlackRaven86
26.05.2016 20:37У каждой записи есть свой UUID. При создании двух записей у них будет разный UUID и при синхронизации в итоге будет две разных записи. Тоже работает для редактирования, удаления и для категорий. А вот если одна запись редактировалась на двух разных устройствах, то в итоге будет более поздняя версия.
meln1k
26.05.2016 21:14Хороший подход :)
А если попробовать реализовать какую-нибудь последовательную CRDT (например LSEQ) поверх дропбокса, то можно добиться вполне приличного слияния при редактировании записей.BlackRaven86
27.05.2016 01:55Спасибо :) Ну у меня по сути нечто типа CRDT и реализовано — я так и проектировал, что было SEC. Только у меня записи являются атомарными. Я думал о том, чтобы можно было редактировать только часть записи, но тогда нужно хранить время модификации еще и для каждого поля. Сделать не проблема, но будет оверхед и я пока не решил, что оно того стоит.
AVX
26.05.2016 10:30Собственно, какой-то трекер — это лишь малая часть того (при этом и не обязательная, можно всё это просто в голове учитывать, а в идеале просто контролировать использование времени, чтобы не было бесполезных трат), что нужно для эффективного управления распределением собственного времени.
Могу посоветовать пару книжек:
1. Алан Лакейн. Исскуство успевать (Alan Lakein «How to get control of your time and your life» ) — каждый из неё найдёт для себя что-то полезное. Перевод есть в сети.
2. Томас Лимончелли. Тайм-менеджмент для системных администраторов (Thomas A.Limoncelli. «Time Management for System Administrators») — ну, тут конкретно для ИТ специалистов (не для всех). Книгу в электронном виде покупал на books.ru по свободной цене.BlackRaven86
26.05.2016 16:43В системах тайм-менеджмента нередко все начинается с того, чтобы начать учет времени. Собственно вот он :)
Но такой учет может пригодиться не только для тайм-менеджмента, но и просто чтобы оценить, во сколько обходятся те или иные вещи. Например, у вас есть автомобиль. Время от времени его нужно возить на СТО, менять резину зимнюю/летнюю, возить на мойку, оформлять разные страховки, покупать туда разную фигню и т.д. Все временные расходы можно записывать например в "Обслуживание > Авто" и потом можно будет оценить, во сколько обходится машина не только по деньгам, но и по времени.
Другой пример: на дорогу до работы и обратно тратится часа по два с половиной или даже больше. Можно подсчитать, осознать, что это почти месяц в году и тихо офигеть. Или громко :) И можно попробовать подсчитать, сколько будет стоить переехать поближе к работе и оценить, сколько это сэкономит времени и сделать выводы — выгодно или нет.
Учет особенно полезен для каких-то нерегулярных вещей, как в примере с машиной, когда навскидку подсчитать временные затраты не так просто.
За книжки спасибо, посмотрю.
ferosod
26.05.2016 16:10Предлагаю на обсуждение такую идею (для мобильных ОС):
1. Добавляем в настройках приложения точку на карте и указываем, что это, например, работа или, там, бассейн.
2. Приложение периодически считывает данные о местоположении устройства
3. Если устройство находится рядом с указанной точкой и не было заявлено никакой другой активности, то логируется активность, соответствующая этой точке (работа, бассейн..)
4. Если устройство движется со скоростью, > x км/ч, записывается активность, заданная в настройках для таких условий (например, «дорога»)BlackRaven86
26.05.2016 16:12Да, я думал о таком. Можно и по точкам доступа Wi-Fi определить, что я пришел на работу. Но, это же не значит, что я там буду работать :)
MoonMaster
26.05.2016 16:12А ваша программа распространяется как Open Source или как коммерческий проект?
ProstoUser
26.05.2016 16:14А мне вот интересно, один я такой извращенный, что постоянно хочу в подобных программах видеть произвольный набор пользовательских систем категорий?
Простой пример.
Есть время на дорогу. Я в дороге, когда еду на работу, когда еду в магазин покупать что-то для своего хобби, когда еду навещать родителей на дачу, когда еду на тренировку в спортзал. Можно, конечно, сделать подкатегории для категории «дорога». Но как тогда быть, если я хочу понять, сколько всего времени тратится на хобби, или на спорт? Значит надо делать в категориях хобби, спорт, работа, семья и прочих подкатегорию «дорога»? А как тогда понять, сколько всего времени уходит на разнообразные разъезды? Ортогональные классификаторы элементарно решают эту задачу, но их ни где нет!
В некоторых трекерах (например, расходов) есть зачаток системы независимых категорий под названием «проект». Это, конечно, уже кое-что, но по хорошему в проектах тоже нужны подкатегории. И главное, я ни где не видел просто нескольких независимых классификаторов, по которым можно было бы рассовывать затраты времени, денег и т.п.
А если бы еще можно было поменяв классификатор по каким-то кастомным правилам пересортировать «старые» записи в новые категории…
Я, конечно, не надеюсь на имплементацию такой фичи, но хотелось бы понять, неужели это такое странное и не очевидое желание?BlackRaven86
26.05.2016 16:23Мысль интересная, не сказал бы, что неочевидная. У меня сделано так, что показывает распределение времени по категориям. Т.е. смотрим график за месяц и у нас не будет суммарно больше времени, чем месяц. И если посмотреть отдельно по категориям статистику и сложить, то получится тот же месяц. А если одна и та же запись будет "Хобби > Дорога" и "Дорога > Хобби", то тут уже цифры могут не сходиться. Конечно, если пользователь ожидает такое поведение, то все нормально.
Я думал над тем, чтобы добавить тэги, которых можно навесить на запись и сделать поиск и статистику не только по категориям, но и по тэгам.
ProstoUser
26.05.2016 20:36Вот и я о том, что вроде как совершенно очевидная штука, но не имплементят. Наверное есть какой-то подвох!
Да, тэги частично решают эту проблему. И это самое простое.
Но ортогональные классификации — это несколько другое. Там в рамках каждой классификации тоже сумма времени будет ровно месяц. Надо ведь отнести запись к какой-то категории по каждой из классификаций.
Тут как раз «проект» — наиболее очевидный вариант классификации. Например: Работа, семья, хобби, жизнеобеспечение (сон, еда), друзья.
Сейчас подумал и понял, что сделать «правильную» систему классификаций — очень не простое занятие. Наверное потому их и не имплементят. На первый взгляд просто и логично, а как начинаешь думать уже конкретно — не все так очевидно. Но я бы, наверное, все равно подумал.
Hayate
Какие есть преимущества перед toggl?
BlackRaven86
Насколько я понимаю, оно вообще для других задач.