В этой статье я хочу рассказать вам об эксперименте, который я поставил на себе.
Уже давно работаю удалённо (outsourcing) и как следствие обязан ежемесячно предоставлять отчёт о проделанной работе, в виде таблицы с наименованием задач, затраченным временем и прочей информацией. Даже при огромном наличии тикет систем, использовать их ежедневно для записи проделанной работы — каторга. В фирме где я работаю нет строгих требований к ведению логов или других ежедневных отчётов, что возможно делает мою проблему отсутствия ежедневных данных единичной, или по крайней мере не такой популярной (или же нет, быть может я не один такой аутсорсер?). Месяц пролетает незаметно и с полным погружением в работу, вместо погружения в бюрократию, поскольку всё строится на доверии. И до недавнего времени я с задачей составления ежемесячных отчётов справлялся, поскольку почти каждый день я как минимум здаровался с коллегами по skype, болтал о том о сём, включая рабочий процесс, обновлял тикеты, получал письма. Но вот же беда, не всегда имеются в наличии сохранившиеся данные на нужный день, в который хоть убейся не можешь вспомнить что делал. И в один такой момент, составляя такой отчёт, меня вдруг осенило, как я, программист, могу сам себе впредь эту проблему решить.
Программисты они ведь как и любые другие специалисты, обладают багажом знаний в своей области и должны им пользоваться не только для работы. Как например врачи имеют дома целую кучу таблеток, шприцов и прочих устройств. У механика всегда целая куча запчастей и инструментов, открутить, прибить, просверлить… Но я видимо попал под классическую фразу «сапожник без сапог». У меня PC собран на столе по кускам из плат и проводов, операционная система не переставлялась уже мильон лет, ну да ладно. Я-то может быть и сапожник без сапог, но проблема по прежнему нуждается в решении, и я решил сапоги-то подлатать свои.
Сформировав в голове идею по решению проблемы я сначала решил обсудить её с друзьями, что они думают о ней. Как оказалось, мне даже кинули пару ссылок на уже готовые решения. Я сначала расстроился, что мою идею уже реализовали, с другой стороны я даже не стал пробывать предложенные мне решения, ибо был убеждён в лёгкости реализации и безопасности именно своего решения. Собственно в чём же сама идея?
Моё решение проблемы ведения логов заключалось в написании программы-шпиона, которая будет делать всю эту работу за меня и висеть постоянно в трее. За пару минут придумал несколько функций для такой программы. Вот некоторые из придуманных функций:
- Снимок экрана
- Съёмка коротких видео роликов экрана
- Сохранение буфера обмена
- Начало шпионажа по расписанию (только в настраиваемые часы и только в рабочие дни)
Речь идёт о периодичности с частотой N секунд/минут/часов (настраивабельно в программе), т.е. при N равном 1 минуте, мы получим 8*60 = 480 снимков за восьмичасовой рабочий день. Один снимок занимает ~700 КБ, округлим до мегабайта, стало быть за 1 рабочий день накопится 480 мегабайт изображений. За месяц это будет 14 гигабайт. Согласен, цифра пугает. Но у меня лично место пока есть, и копить более чем на месяц, плюс минус, необходимости нет. Как вариант, можно использовать облака с неограниченным пространством (вроде бы есть такие, не?), я лично не пользуюсь подобными сервисами, не ведаю. Но теоретически и в вакууме, так можно копить данные о работе за сколь угодно месяцев/лет, при этом иметь доступ до своих же данных отовсюду. Еще вариант оптимизации — уменьшать размер изображения перед сохранением или удлинять период N.
Итак это минимальный набор задач по шпионажу, пришедший мне в голову. Если же обернуть всё в красивый интерфейс, то возможно процесс чтения логов станет даже приятным. Под рукой у меня оказался C#, в котором не так давно я делал какую-то небольшую задачу по работе. Соответственно выбор пал на C#.
Пользуясь свободным временем вечером, я принялся реализовывать первую функцию, поскольку она самая лёгкая, и если откровенно, единственная потенциально полезная в моей задаче. Если кто-то еще не до конца понял суть, то вот она: по снимкам экрана можно понять что ты делал в течении дня. Съёмка видео скорей всего рудиментарная идея, и будет удалена, поскольку не несёт особой пользы. А вот с буфером обмена пока думаю. На данный момент функция не реализована, но предполагается регулярное сохранение буфера обмена (текстового) в базу данных на жёстком диске. Это ни что иное как запись вида
id | datetime | buffer
Собственно чем короче частота N, тем больше данных шпион будет собирать. По содержимому буфера обмена можно будет понять что ты программировал и копипастил в конкретную дату и время.
Первую реализацию я разумеется решил сделать на сколько можно проще и быстрей. Чтобы в заголовке программы было не Form1 я ввёл первое, что пришло в голову Work Spy, так и стало называться моё детище. Вот кстати его первозданный вид, содержащий всего один ящик с богатым текстом (RichTextBox), который в свою очередь являлся ничем иным как просто окном лога куда, когда и что он сохранил:
Написание заняло минут 10. Пару запросов в google и вот нам уже примеры кода того «как сделать снимок экрана на c#». Мой шпион создаёт папку, называя её сегодняшней датой, и соответственно в течение работы программы, используя класс Timer, внутрь кладёт снимки двух моих мониторов (изображение размером 3840х1080), имя которых состоит так же из даты и времени (я решил, что буду использовать такой шаблон 12_03_2012__12_30_36.gif). Формат изображений — gif, с целью экономии места. Несмотря на зернистость изображения, на нём всё разборчиво видно.
Первая версия написана, делает минимум телодвижений, все настройки пока что вшиты в код, вместо удобных элементов на форме для настройки программы. Тестовый дебагинг пройден, пора попробывать запустить программу автономно, а не нажатием F5. С первым запуском меня поздравил avast!, «обратив» внимание на мою программу. Поздравление от антивируса выглядело вот так:
Это остаётся загадкой для меня, как он определил потенциальный вред в этих ~100 строках кода, но с другой стороны приятно, что даже простейшего самописного шпиона сумел заподозрить в неладном. Не найдя достаточных доказательств вреда, avast! извинился
Я вежливо попросил многоуважаемого avast! открыть мою программу как обычно, а не в песочнице, ибо доверяю ей на все 100%.
На данный момент всё работает по-прежнему в ручном тестовом режиме. Ежедневный запуск/закрытие и просмотр сохранённых снимков. Программа отработала пока что неделю. Результат меня уже впечатляет. Если открыть снимки с певого дня запуска, я чётко вижу свой браузер, текстовый редактор, в котором я вижу вкладки и код того проекта, над которым работаю. Иногда попадаются смешные снимки, где я фильм смотрю (видимо перерывчик, ай яй яй, в течении рабочего дня), или пишу сообщение в социальной сети. Именно самописность программы снимает любые волнения и опасения за то, что запечатлено на экране, а ведь запечатлено может быть самое неожиданное и непредсказуемое :) шутка.
Пожалуй и всё, что я хотел повествовать. Эксперимент продолжается, и я уверен, что буду доволен к концу месяца. Осталось договориться с силой воли и доделать-таки ручки да ножки к туловищу, чтобы всё работало вах как удобно. Мораль истории в том, что 10 минут и знания способны решать большие проблемы.
Дабы наделить статью пользой, оставлю ссылки на те решения, которые мне были посоветованы для решения проблем, подобных моей. За адекватность программ не отвечаю, ибо даже не качал их чтобы посмотреть.
www.debugmode.com/wink/
taskwarrior.org/projects/show/taskwarrior
Автор: uglymeta