Сегодня мы поговорим об учете самого важного, на мой взгляд, ресурса — времени. Почему я считаю его самым важным? Потому, что он невосполнимый: его есть определённое количество и нового не будет. Можно только постараться максимально разумно распорядиться доступным. И куда же в этом деле без грамотного учёта? Я бы сказал, что учёт является базой для таких вещей, как тайм-менеджмент и планирование, т.к. без понимания, как расходуется время, крайне непросто его распределять и вообще что-то планировать. Да и просто полезно осознавать, на что и в каких количествах мы тратим драгоценное время нашей жизни.


Для решения этой задачи я предлагаю достаточно простой инструмент. Заинтересовавшимся добро пожаловать под кат.



Как можно догадаться из названия статьи, речь пойдет о программе для учета времени или таймтрекере. И, чтобы выяснить, какой должна быть эта программа, начнем с идеологической части.


Идея


Когда-то я прочитал про т.н. "систему Любищева" и меня она заинтересовала (на хабре есть статья). Вкратце, методика состоит в том, чтобы записывать, на что тратишь свое время, распределяя его по категориям и время от времени делать отчеты, суммируя затраченное время на каждую категорию. Подобные данные позволяют понять, сколько времени и на что уходит, а также чем занимался в конкретный момент времени.


Именно такой подход я и выбрал: учитывать все время. И в наш век высоких технологий, хочется что-то более удобное, чем просто записи на листочке. Поскольку мы постоянно окружены разнообразными гаджетами и просто компьютерами, было бы неплохо задействовать их для решения нашей задачи: зачем вручную вести всю эту бухгалтерию, если есть машина? Время тратить, опять же :) Значит, нам нужна программа, в которой мы будем отмечать, чем мы занимаемся и которая будет все подсчитывать, выводить отчеты и рисовать красивые графики :)


Теперь нужно определиться со списком требований, которым должна удовлетворять эта самая программа.


Требования


Список небольшой:


  • Ручной учет. На этом остановлюсь подробно чуть ниже.
  • Простота. Исходя из предыдущего пункта, программу предполагается использовать часто и не хотелось бы тратить постоянно кучу времени на сам учет.
  • Кроссплатформенность.
  • Синхронизация между устройствами.
  • Безопасность. Не сильно хочется доверять такие данные какому-то непонятному сервису, как с точки зрения приватности, так и с точки зрения надежности — сервис может в один прекрасный день перестать работать.
  • Средства для анализа. Собранные данные необходимо обработать и представить в понятном и удобном для восприятия виде.

Почему не автоматический учет?


Существует целый класс программ, которые собирая различную информацию об активности пользователя пытаются определить, чем он занимается. И для этого программе нужно уметь вытаскивать информацию из самых разных мест, поэтому не редкость такие вещи как плагины для браузера, скайпа и т.д. Не так давно здесь была статья про таймтрекер, поддерживающий запуск специального демона в виртуальной машине, который отслеживает активность пользователя в этой самой машине и передает ее по сети основной программе. В попытке хоть как-то угадать деятельность пользователя нужно придумывать все более изощренные алгоритмы и собирать все больше и больше данных, как паук, опутывая всю систему своей паутиной. Не удивлюсь, если начнут использовать данные с фитнес-трекеров, чтобы определить, чем пользователь занят когда он не за компьютером.


Главная проблема такого подхода — а как понять, чем действительно занят пользователь? Например, если я нахожусь на рабочем месте, значит ли это, что я работаю? Мы же с вами прекрасно понимаем, что вовсе не значит :) Если у меня открыт браузер вместо среды разработки, значит ли это, что я отдыхаю? Снова, нет. И даже если в браузере открыта социальная сеть, нельзя сказать однозначно, чем я там занят. Наверняка еще и придется подстраиваться под программу, чтобы она могла выдавать адекватные результаты. Резюмирую: на мой взгляд, на данном этапе развития технологий, подобный метод не может обеспечить приемлемую точность.


А что же ручной учет?


Нет необходимости пытаться определить, чем мы заняты в конкретный момент времени. Ведь мы сами это знаем! В любой момент времени мы можем сказать, чем мы занимаемся. Осталось только начать записывать :)


Конечно, нужна будет некоторая дисциплина, по крайней мере, пока это не войдет в привычку. Зато когда постоянно отмечаешь, чем занимаешься, немного меняется восприятие времени. Можно даже сказать, что появляется такая вещь, как осознанность.


Поэтому, я сделал выбор в пользу ручного трекера и именно такой мы сейчас и рассмотрим.


G-TimeTracker


Когда мне понадобилась программа, которая соответствует означенным требованиям, я таковой не нашел, пришлось писать самому :) Прошу любить и жаловать: G-TimeTracker или Global Time Tracker — (первая?) распределенная программа для учета времени. О том, к чему тут "распределенная" мы поговорим чуть позже, а сперва рассмотрим основной функционал.


Собственно учет


Основной экран программы показывает недавние записи. Его можно листать, чтобы посмотреть более ранние. Конечно есть и поиск и просмотр истории за конкретный период времени. Выглядит это примерно так:



Процесс учета времени крайне прост: жмем на кнопку '+' и в открывшемся окне редактора указываем время начала деятельности, категорию и опционально пишем комментарий. Время конца указывать не нужно, т.к. оно рассчитывается автоматически, исходя из времени начала следующей записи.


Нередко в разных трекерах нужно что-то постоянно запускать и останавливать, чтобы переключиться на другую активность, текущую нужно остановить и запустить эту другую и т.д. У меня принципиально другой подход: запускать ничего не нужно, вы же не запускаете время, оно само идет :) Вы просто создаете запись, когда переключаетесь на другую активность. И останавливать ничего не нужно: вы же не можете остановить время?

Если вдруг можете - аккуратнее с этим, пожалуйста
<spoiler/>

Категории можно создавать/удалять/редактировать. Есть поддержка подкатегорий, уровень вложенности не ограничен. По умолчанию создается небольшой набор категорий, которые можно смело дорабатывать под себя.


Статистика


Помимо сбора данных, нужно их представлять в наглядном виде. Для этого программа умеет строить графики распределения затраченного времени по категориям. Для каждой категории можно посмотреть более детальное распределение по подкатегориям.



Синхронизация


А теперь разберемся, что же это за распределенность такая. Данный функционал я готов назвать киллер-фичей программы :)


Итак, экземпляры программы запущенные на разных устройствах могут синхронизироваться между собой. Казалось бы, что тут такого, облака и облака. Но все намного интереснее. Само приложение не привязано ни к каким облакам. Просто нужно создать каталог, который будет синхронизироваться при помощи каких-либо облачных сервисов и указать этот каталог в программе. Программа будет синхронизироваться с этим каталогом, а тот в свою очередь между другими устройствами. Так что вам не нужно заводить учетную запись в еще одном облачном сервисе и доверять кому-то еще свои данные. Вы можете продолжать использовать то, чем пользовались раньше, будь то Google Drive, DropBox или SyncThing. Просто делаете записи на разных устройствах, а при синхронизации произойдет слияние всех изменений.


Конечно, в реализации подобный подход имеет свои нюансы и пришлось немало потрудиться, чтобы потом не пришлось разруливать конфликты после очередной синхронизации. Но результат того стоит.


Кстати, синхронизацией пользоваться необязательно, программа полностью функциональна и без нее.


Оценки


Программа не выставляет каких-либо оценок. Здесь нет каких-то "хороших" и "плохих" категорий или "продуктивных" и "непродуктивных". Это инструмент для исследования, в задачу которого входит сбор и отображение данных, а их интерпретация уже дело пользователя.


Разное


На данный момент есть сборки под Android, Windows и Linux. Появление под другие платформы вероятно :)


Есть поддержка импорта/экспорта в CSV-подобный формат.


Рекламы нет, код программы открыт, лицензия GPLv3.


Ссылки



Заключение


Обычно, когда говорят о цене, имеют в виду некую сумму денег. При помощи учета времени мы можем сделать эдакий виртуальный ценник вида "это стоит мне N часов в неделю/месяц/год". Это дает нам дополнительный инструмент для того, чтобы повысить свою продуктивность и минимизировать потери времени на малозначительные вещи, что в итоге делает нашу жизнь лучше.


Буду рад получить замечания, предложения и отзывы по моей программе :)

Поделиться с друзьями
-->

Комментарии (22)


  1. Hayate
    26.05.2016 06:14

    Какие есть преимущества перед toggl?


    1. BlackRaven86
      26.05.2016 06:15

      Насколько я понимаю, оно вообще для других задач.


  1. VolCh
    26.05.2016 08:35

    Как-то неправильно выглядит, что длительность текущего действия, например дороги, фиксируется на время ввода. Я уже полчаса еду, а всё 16 минут. И хорошо бы иметь возможность назначить две категории — дорога и Хабр, например :)


    1. BlackRaven86
      26.05.2016 16:06

      Это недоработка, длительность для последней записи не обновляется в реальном времени. Пока что :)


    1. BlackRaven86
      26.05.2016 20:52

      А насчет двух категорий: в какую категорию тогда относить запись в статистике? Если во все, то получится сумма > 100% :)


      Если вы в дороге, чтобы не терять времени, читаете книжку (как делал тот же Любищев), то можно и записывать это в "чтение", а не в "дорогу". Получается, что одной категории тут достаточно :)


      1. VolCh
        27.05.2016 06:51

        Ну, лично мне приятно видеть, что я трачу время с эффективностью большей 100%, что могу делать несколько дел одновременно :)


  1. VolCh
    26.05.2016 08:43

    А вообще, по-моему, будущее (до создания сильного ИИ) за полуавтоматическими треккерами, которые будут фиксировать объективную активность, а квалифицировать её предоставят пользователю. Явно или с помощью правил. Без подсказок или с подсказками на базе истории.


  1. meln1k
    26.05.2016 10:12

    Что будет если в офлайне сделать две записи на двух разных устройствах, а потом они начнут синхронизацию? Одна из версий будет перезапишет другую?


    1. BlackRaven86
      26.05.2016 16:05

      Нет, будет две записи. В это фишка, что можно делать записи на разных устройствах и они потом сольются.


      1. meln1k
        26.05.2016 18:58

        Каким образом это реализовано?


        1. BlackRaven86
          26.05.2016 20:37

          У каждой записи есть свой UUID. При создании двух записей у них будет разный UUID и при синхронизации в итоге будет две разных записи. Тоже работает для редактирования, удаления и для категорий. А вот если одна запись редактировалась на двух разных устройствах, то в итоге будет более поздняя версия.


          1. meln1k
            26.05.2016 21:14

            Хороший подход :)

            А если попробовать реализовать какую-нибудь последовательную CRDT (например LSEQ) поверх дропбокса, то можно добиться вполне приличного слияния при редактировании записей.


            1. BlackRaven86
              27.05.2016 01:55

              Спасибо :) Ну у меня по сути нечто типа CRDT и реализовано — я так и проектировал, что было SEC. Только у меня записи являются атомарными. Я думал о том, чтобы можно было редактировать только часть записи, но тогда нужно хранить время модификации еще и для каждого поля. Сделать не проблема, но будет оверхед и я пока не решил, что оно того стоит.


  1. 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 по свободной цене.


    1. BlackRaven86
      26.05.2016 16:43

      В системах тайм-менеджмента нередко все начинается с того, чтобы начать учет времени. Собственно вот он :)


      Но такой учет может пригодиться не только для тайм-менеджмента, но и просто чтобы оценить, во сколько обходятся те или иные вещи. Например, у вас есть автомобиль. Время от времени его нужно возить на СТО, менять резину зимнюю/летнюю, возить на мойку, оформлять разные страховки, покупать туда разную фигню и т.д. Все временные расходы можно записывать например в "Обслуживание > Авто" и потом можно будет оценить, во сколько обходится машина не только по деньгам, но и по времени.


      Другой пример: на дорогу до работы и обратно тратится часа по два с половиной или даже больше. Можно подсчитать, осознать, что это почти месяц в году и тихо офигеть. Или громко :) И можно попробовать подсчитать, сколько будет стоить переехать поближе к работе и оценить, сколько это сэкономит времени и сделать выводы — выгодно или нет.


      Учет особенно полезен для каких-то нерегулярных вещей, как в примере с машиной, когда навскидку подсчитать временные затраты не так просто.


      За книжки спасибо, посмотрю.


  1. ferosod
    26.05.2016 16:10

    Предлагаю на обсуждение такую идею (для мобильных ОС):

    1. Добавляем в настройках приложения точку на карте и указываем, что это, например, работа или, там, бассейн.
    2. Приложение периодически считывает данные о местоположении устройства
    3. Если устройство находится рядом с указанной точкой и не было заявлено никакой другой активности, то логируется активность, соответствующая этой точке (работа, бассейн..)
    4. Если устройство движется со скоростью, > x км/ч, записывается активность, заданная в настройках для таких условий (например, «дорога»)


    1. BlackRaven86
      26.05.2016 16:12

      Да, я думал о таком. Можно и по точкам доступа Wi-Fi определить, что я пришел на работу. Но, это же не значит, что я там буду работать :)


  1. MoonMaster
    26.05.2016 16:12

    А ваша программа распространяется как Open Source или как коммерческий проект?


    1. BlackRaven86
      26.05.2016 16:13

      OpenSource, в конце статьи есть ссылка на гитхаб.


  1. ProstoUser
    26.05.2016 16:14

    А мне вот интересно, один я такой извращенный, что постоянно хочу в подобных программах видеть произвольный набор пользовательских систем категорий?

    Простой пример.

    Есть время на дорогу. Я в дороге, когда еду на работу, когда еду в магазин покупать что-то для своего хобби, когда еду навещать родителей на дачу, когда еду на тренировку в спортзал. Можно, конечно, сделать подкатегории для категории «дорога». Но как тогда быть, если я хочу понять, сколько всего времени тратится на хобби, или на спорт? Значит надо делать в категориях хобби, спорт, работа, семья и прочих подкатегорию «дорога»? А как тогда понять, сколько всего времени уходит на разнообразные разъезды? Ортогональные классификаторы элементарно решают эту задачу, но их ни где нет!

    В некоторых трекерах (например, расходов) есть зачаток системы независимых категорий под названием «проект». Это, конечно, уже кое-что, но по хорошему в проектах тоже нужны подкатегории. И главное, я ни где не видел просто нескольких независимых классификаторов, по которым можно было бы рассовывать затраты времени, денег и т.п.

    А если бы еще можно было поменяв классификатор по каким-то кастомным правилам пересортировать «старые» записи в новые категории…

    Я, конечно, не надеюсь на имплементацию такой фичи, но хотелось бы понять, неужели это такое странное и не очевидое желание?


    1. BlackRaven86
      26.05.2016 16:23

      Мысль интересная, не сказал бы, что неочевидная. У меня сделано так, что показывает распределение времени по категориям. Т.е. смотрим график за месяц и у нас не будет суммарно больше времени, чем месяц. И если посмотреть отдельно по категориям статистику и сложить, то получится тот же месяц. А если одна и та же запись будет "Хобби > Дорога" и "Дорога > Хобби", то тут уже цифры могут не сходиться. Конечно, если пользователь ожидает такое поведение, то все нормально.


      Я думал над тем, чтобы добавить тэги, которых можно навесить на запись и сделать поиск и статистику не только по категориям, но и по тэгам.


      1. ProstoUser
        26.05.2016 20:36

        Вот и я о том, что вроде как совершенно очевидная штука, но не имплементят. Наверное есть какой-то подвох!

        Да, тэги частично решают эту проблему. И это самое простое.

        Но ортогональные классификации — это несколько другое. Там в рамках каждой классификации тоже сумма времени будет ровно месяц. Надо ведь отнести запись к какой-то категории по каждой из классификаций.

        Тут как раз «проект» — наиболее очевидный вариант классификации. Например: Работа, семья, хобби, жизнеобеспечение (сон, еда), друзья.

        Сейчас подумал и понял, что сделать «правильную» систему классификаций — очень не простое занятие. Наверное потому их и не имплементят. На первый взгляд просто и логично, а как начинаешь думать уже конкретно — не все так очевидно. Но я бы, наверное, все равно подумал.