А вот есть программка похитрее: arbtt. Пользоваться ей, правда, легче. Она полностью автоматическая. Достаточно запустить
arbtt-capture и заниматься своими делами*. arbtt-capture будет записывать когда и какие программы были запущены и какие у окон были заголовки.* Авторarbttрекомендует сразу добавитьarbtt-captureв автоматически запускаемые приложения.
Чтобы увидеть необработанные сырые данные, можно выполнить
arbtt-dump, но это не очень полезно. Для просмотра статистики удобнее использовать использовать утилитку arbtt-stats.Чтобы
arbtt-stats могла выдавать осмысленные результаты, нужно вначале задать свою классификацию запущенных программ. Эти правила вписываются в файл ~/.arbtt/categorize.cfg. Пример и описание формата правил есть в документации. Приведу свой (сокращённый) пример с комментариями по-русски:-- правила имеют вид:
-- [условие ==>] tag [категория_тега:]тег,
-- в условиях и тегах можно использовать несколько специальных переменных,
-- почти все они встречаются в примерах ниже
-- Не учитывать время простоя
$idle > 60 ==> tag inactive,
-- Все записи за последние 24 часа пометить тегом last-day
$sampleage <= 24:00 ==> tag last-day,
-- Пометить тегом last-hour все записи за последний час
$sampleage <= 1:00 ==> tag last-hour,
-- Все типы окон Firefox учитывать в одном теге program:web (program — это категория тега)
current window $program == "Navigator" ==> tag program:web,
current window $program == "firefox-bin" ==> tag program:web,
current window $program == "gecko" ==> tag program:web,
-- Общий тег для всех видов терминалов (на будущее)
current window $program == "gnome-terminal" ==> tag program:terminal,
-- Пометить все остальные программы пометить тегами вида program:имя_программы
tag program:$current.program,
-- Классифицировать заголовки Firefox с помощью регулярных выражений. Тут у каждого будут свои шаблоны.
-- Присваивать теги категории web.
current window ($program == "Navigator" && $title =~ /^Gmail.*/) ==> tag web:Gmail,
current window ($program == "Navigator" && $title =~ /.*Google Search.*/) ==> tag web:Google,
current window ($program == "Navigator" && $title =~ /^Twitter.*/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /.* on Twitter - Iceweasel$/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /^Springer.*/) ==> tag web:Papers,
current window ($program == "Navigator" && $title =~ /^Wiki - Editing.*/) ==> tag web:Papers,
-- ...
--
current window $program == "Navigator" ==> tag web:$current.title,
-- Теги категории time-of-day для классификации по времени суток
$time >= 2:00 && $time < 8:00 ==> tag time-of-day:night,
$time >= 8:00 && $time < 12:00 ==> tag time-of-day:morning,
$time >= 12:00 && $time < 14:00 ==> tag time-of-day:lunchtime,
$time >= 14:00 && $time < 18:00 ==> tag time-of-day:afternoon,
$time >= 18:00 && $time < 22:00 ==> tag time-of-day:evening,
$time >= 22:00 || $time < 2:00 ==> tag time-of-day:late-evening,
-- Помечать над каким проектом работаю судя по заголовку окна.
-- Присваивать теги категории project.
current window $title =~ m!~/work/projectA! ==> tag project:projectA,
current window $title =~ m!~/work/projectB! ==> tag project:projectB,
-- ...
--
-- Помечать, какой тип текста я редактирую судя по заголовку окна.
-- Присваивать теги категории edit.
current window ($title =~ /^[^ ]+\.c .* - G?VIM.*$/) ==> tag edit:c,
current window ($title =~ /^[^ ]+\.py .* - G?VIM.*$/) ==> tag edit:python,
current window ($title =~ /^[^ ]+\.hs .* - G?VIM.*$/) ==> tag edit:haskell,
-- Когда использую suduedit
current window ($title =~ m!.*\(/var/tmp\) - G?VIM.*$!) ==> tag edit:config,
-- Когда редактирую что-то онлайн в Its All Text
current window ($title =~ m!.*/itsalltext\) - G?VIM.*!) ==> tag edit:itsalltext,
Для отчёта по определённой категории:
$ arbtt-stats -c имя_категорииДля просмотра отчётов по всем категориям:
$ arbtt-stats --each-categoryДля ограничения выборки только записями с определённым тегом, например,
last-hour, есть опция -o. Всё вместе: $ arbtt-stats -o last-hour -c program -c editВ последнем примере я показал примерный вывод программы. Сразу видно, сколько времени за последний час я что-то редактировал и что именно и какие программы использовал. Писал эту заметку, в общем.
Statistics for category program
===============================
_____________Tag_|___Time_|_Percentage_
program:terminal | 29m00s | 48.33
program:gvim | 17m00s | 28.33
program:web | 13m00s | 21.67
program:Pidgin | 1m00s | 1.67
Statistics for category edit
============================
_____________Tag_|___Time_|_Percentage_
edit:itsalltext | 17m00s | 28.33
edit:haskell | 4m00s | 6.67
(unmatched time) | 39m00s | 65.00
Кстати,
arbtt есть не только в линуксовых репозиториях, но в скором времени (а может и уже) будет доступна и пользователям Windows.Некоторые замеченные изъяны:
arbtt-stats при печати портит заголовки окон с уникодом (патчем на 20 строк исправляется, должно быть ОК при сборке новым GHC), пока нельзя классифицировать по дням недели или по месяцам, сообщения о синтаксических ошибках в правилах очень невнятныДополнение: замеченные недостатки, не без моего скромного участия, исправлены во время Хакатона в Цюрихе; используйте GHC 6.12 и устанавливайте новую версию 0.5; там всё ОК.
Приятных всем выходных!



спасибо за линк на арбтт! у меня сразу появилась идея - а что если ети результаты положить в хамстер, прикинь?! :)
ОтветитьУдалитьвот и буг: https://bugzilla.gnome.org/show_bug.cgi?id=608469
P.S. used translit to write, so pardon the spelling. patches are welcome
Автоматически передавать в хамстер будет, наверное, сложно; arbtt собирает только названия программ и заголовки окон, а как их интерпретировать и определять соответствие задачам (тегам) — это очень специфично для каждого пользователя (разные программы, разные определения «задач», могут быть «перекрывающиеся» задачи).
ОтветитьУдалитьВ последней убунте в репозиториях нету :-(
ОтветитьУдалитьНу, значит, будет в следующей, когда они haskell-platform из Debian unstable к себе перетащат.
ОтветитьУдалитьпорт под MAC OS X? ;-)
ОтветитьУдалитьport for MAC OS X ? ;-)
ОтветитьУдалитьgertzog,
ОтветитьУдалитьДумаю, должно работать; во всяком случае в истории изменений программы есть правки сентября 2009, чтобы собиралась под MacOS. Чтобы проверить, наверное, проще всего поставить Haskell Platform и собрать из исходников (cabal update ; cabal install arbtt).
Есть ещё один удобный способ учёта времени - по рабочим столам. К примеру, если текущум рабочим является 1-й или 3-й, то время проведённое за данными столами плюсуется к одной задаче, если за другим столом (или столами) то к другой. По такому принципу работает программа KArm в KDE.
ОтветитьУдалитьЕсли человек долго отсутствовал, то программа заметит это и предложит 3 варианта:
1. промотать назад и сделать вид что работа на самом деле "кипела"
2. промотать назад и отключить таймер (т.е. во время простоя данной задачей я не занимался и сейчас тоже заниматься ей не планирую)
3. продолжать учет времени с момента побуждения. Т.е. во время отсутствия задачей я не занимался, но вот сейчас пришёл и принятся за работу.
Александр,
ОтветитьУдалитьидея учитывать не только имя программы и заголовок окна, но и рабочий стол, обсуждалась на Цюрихаке; очень вероятно, что в ближайшем времени эта возможность будет добавлена.
gertzog, я уточнил у Йоахима, в данный момент arbtt в OS X не работает; однако портировать её в Windows оказалось просто; так что дело за человеком, который знает API OS X, вряд ли это будет сложно.
ОтветитьУдалитьСпасибо за ссылку на arbtt и комментарии к ней. Давно пытаюсь подобрать приемлимый инструмент для учета своего времени, а то все сложнее становится искать 25-ый час в сутках ;) В выходные начну пробовать arbtt :)
ОтветитьУдалитьСергей, в винде программа работает отлично. Радуюсь :) В Ubuntu возникли проблемы с компиляцией связанные с X-ами. Если вам интересно, то могу скинуть лог, например, почтой дабы не загромаждать тут.
ОтветитьУдалитьПрисылайте. Взгляну.
ОтветитьУдалитьПоставил arbtt 0.4.4-1 из репозиториев Ubuntu 10.04. Взял ваш конфиг. Работу в программках прекрасно тегирует, а вот с заголовками ни в какую, даже когда нет кириллицы в заголовке не добавляет теги.
ОтветитьУдалитьВ 0.4 правила по уникодным заголовкам ещё не должны были работать. Попробуйте сделать правило "tag program:$current.title," и посмотреть, как действительно выглядят сохранённые заголовки. Может регулярное выражение из примера к ним просто не подходит.
ОтветитьУдалитьДобавил "tag program:$current.title,". Выдает единственный пустой тег: "program:".
ОтветитьУдалитьПоставил arbtt (0.5-1) с репозиториев дебиана: http://packages.debian.org/sid/arbtt
эффект тот же: "program:". Похоже не видит заголовков вообще.
в 10.04 - есть.
ОтветитьУдалитьarbtt:
Installed: 0.4.4-1
Candidate: 0.4.4-1
Version table:
*** 0.4.4-1 0
500 http://ua.archive.ubuntu.com/ubuntu/ lucid/universe Packages
В версии 0.4 будут проблемы с русским языком (уникодом).
ОтветитьУдалитьТам, где нету, можно поставить через кабал. В последней убунту (10.4) можно поставить ghc6 (6.12.1) и cabal-install. После этого, от обычного пользователя выполнить cabal update, а затем cabal install arbtt. Он скачает и соберёт все зависимости, исполняемые файлы поместит в ~/.cabal/bin (можно добавить в PATH). Для сборки вероятно потребует заголовочные файлы некоторых сишных библиотек.