Распределенная программа для учета времени

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


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



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


    Идея


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


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


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


    Требования


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


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

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


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


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


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


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


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


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


    G-TimeTracker


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


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


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



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


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

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

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


    Статистика


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



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


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


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


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


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


    Оценки


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


    Разное


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


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


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


    Ссылки



    Заключение


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


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

    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 22

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

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


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

              0
              Ну, лично мне приятно видеть, что я трачу время с эффективностью большей 100%, что могу делать несколько дел одновременно :)
            0
            А вообще, по-моему, будущее (до создания сильного ИИ) за полуавтоматическими треккерами, которые будут фиксировать объективную активность, а квалифицировать её предоставят пользователю. Явно или с помощью правил. Без подсказок или с подсказками на базе истории.
              0
              Что будет если в офлайне сделать две записи на двух разных устройствах, а потом они начнут синхронизацию? Одна из версий будет перезапишет другую?
                0
                Нет, будет две записи. В это фишка, что можно делать записи на разных устройствах и они потом сольются.
                  0
                  Каким образом это реализовано?
                    0

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

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

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

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

                0
                Собственно, какой-то трекер — это лишь малая часть того (при этом и не обязательная, можно всё это просто в голове учитывать, а в идеале просто контролировать использование времени, чтобы не было бесполезных трат), что нужно для эффективного управления распределением собственного времени.
                Могу посоветовать пару книжек:
                1. Алан Лакейн. Исскуство успевать (Alan Lakein «How to get control of your time and your life» ) — каждый из неё найдёт для себя что-то полезное. Перевод есть в сети.
                2. Томас Лимончелли. Тайм-менеджмент для системных администраторов (Thomas A.Limoncelli. «Time Management for System Administrators») — ну, тут конкретно для ИТ специалистов (не для всех). Книгу в электронном виде покупал на books.ru по свободной цене.
                  0

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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

                      Only users with full accounts can post comments. Log in, please.