Как мы ломали систему учета времени

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

Для нас, представителей дешевой оффшорной рабочей силы, в банке существует система учета рабочего времени. Придя на работу, сотрудник должен зайти на соответствующую веб-страничку под своим логином/паролем и нажать на кнопочку "я пришел". В конце рабочего дня еще раз нажать на нее же: "я ушел". Разница во времени между этими двумя моментами заносится в базу данных, и впоследствии на основании этих данных банку выставляется счет за каждого из нас.

О том, что это надо делать, мне сообщили на втором месяце моего пребывания в Лондоне, но это так, мелочи :-) И к письму прилагалась просьба информировать обо всех случаях когда я забыл нажать кнопку, дабы наверху могли это поправить.

Так вот. Первым фактором послужило то, что мне сделали замечание, что я слишком часто забываю нажать на кнопочку, и что, мол, я один такой. Вот в это я, извините, не поверю никогда в жизни - мне слишком хорошо известна роль человеческого фактора в автоматизированных системах. Я скорее поверю в то, что я единственный, кто сообщает о том, что забыл нажать, и не ленится написать письмо об этом. А вторым фактором был приезд в Лондон [info]barateli (aka dimachertov), который искренне и всей душой ненавидит эту систему и считает, что она глупа и порочна.

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

(Оказалось, что задача и правда не из простых, но мы ее решили)

А мораль тут, кстати, довольно неожиданная. Мы с [info]barateli на собственной шкуре ощутили эффективность "парного программирования" - методики из арсенала Extreme Programming. Никто из нас по отдельности не решил бы эту задачу: я без него уперся бы в какой-то один безнадежный подход, а он без меня не довел бы до логического завершения ни одну из своих идей. А в паре мы идеально дополняли друг друга: он беспрестанно генерировал идеи, а я либо сходу отфильтровывал совсем уж безумные, либо цеплялся за них и реализовывал. Он, в свою очередь, не давал мне закопаться в ненужные детали, не имеющие на данный момент практического значения.

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

В этот день я впервые за долгое время возвращался с работы довольный. А спустя еще пару вечеров я написал первую тестовую версию программы, которая отметила мой приход на работу ровно в 9:00, несмотря на то, что на самом деле я с утра был на встрече, проходившей в другом здании, и к компьютеру пришел только в без четверти 10.

P.S. Сегодня пришло в голову, что если, следуя маджентовской традиции, придумывать для проекта имя из греческой мифологии, то лучше, чем Prometheus, не найти :-) И не надо сарказма, я прекрасно помню, чем кончил Прометей!

Current Music: Ozzy Osbourne - S.I.N.
Tags: job, prank, technology

From: [info]injir Date: 05/22/2008 04:28:36  

/с широко открытым ртом и округлившимися глазами/

Гениально!
From: [info]spiteful_zoomer Date: 05/22/2008 10:47:17  

Круто, но я бы пошел другим путем ;) дотнетовским и сваял бы прожку с использованием библиотечки Watin. Она отлично работает на всяких там страничках с авторизацией.
From: [info]vittt Date: 05/22/2008 12:33:44  

кстати да, или Selenium'ом
From: [info]spiteful_zoomer Date: 05/22/2008 12:36:35  

Ага, это ближе Владу :) жаба всетаке.
From: [info]_myx Date: 05/22/2008 13:28:32  

Согласен, эти пути были бы идеологически правильнее - но, к сожалению, здесь даже на установку OpenSource-софта требуется разрешение. Поэтому мы пытались использовать по возможности только подручные, штатные средства :-)
From: [info]xbald Date: 05/22/2008 19:13:53  

Со сторонним софтом косяк, у меня бы вообще такой проблемы не возникло. Rational Functional Test и скрипт грудного уровня сложности, запускающийся по шедулеру.

А подход красивый, это твердая 5. Голыми руками можно сказать. Снимаю шляпу.
From: [info]_myx Date: 05/23/2008 03:27:31  

Ну, я тут как раз освоил QTP, который разрешен к использованию - со скриптом на нем тоже вопросов бы не возникло. Но одна мысль о том, что этого монстра нужно если не держать в памяти постоянно, то как минимум запускать по расписанию два раза в день - немедленно вызывала желание поискать более элегантное решение.
From: [info]greyswan Date: 05/22/2008 22:33:20  

+1, первое о чем подумала
From: [info]vdesyatke Date: 05/23/2008 08:31:08  

1) меня чуть не увольняли и за втрое меньшее :)) и это в России, где распиздяйство - уважаемая национальная черта
2) я надеюсь ты жж пишешь "френдз онли" и только из дома?
3) когда мне было лет 10, у меня были знакомые три брата. так вот один из них, разговаривая во сне при их маме, заложил всех троих: "Костян, оставь покурить, мне еще Диману оставить надо" :))) этот пост закладывает вас обоих :)
4) ты решил задачку про холодильник? хочу тебе сказать, что никто из моих друзей (я выбрал тех семерых, кого считаю самыми умными) эту задачку не решил! но ты явно решишь. потому что очень похоже на постановку задачки с автоотмечалкой прихода на работу :) и решение в 1000 раз проще :)
From: [info]barateli Date: 05/23/2008 08:38:54  

У нас есть, по счастью, одно подспорье - наше начальство не знает русского языка.
From: [info]vdesyatke Date: 05/23/2008 09:03:56  

одна крупная самарская фирма потеряла статус дилера от Intel из-за того, что вдвое-втрое завышала рекламные бюджеты, возмещаемые Интелом. Интел нанял специальную контору, занимающуюся экономической безопасностью, кстати физически находящуюся в Лондоне, в которой работают свободно говорящие по-русски девочки, и те по телефону пробили самарские цены на рекламу. я бы на вашем месте все-таки озаботился пунктом 2.
From: [info]_myx Date: 05/23/2008 12:56:03  

1. Интересно, в чем же заключалось твое "втрое меньшее". Не побоишься написать об этом в открытом источнике? :-)

Мне искренне интересно, что в моем случае может послужить причиной увольнения. Может быть, я создал угрозу безопасности банка? Так я пользовался исключительно штатными средствами. Я еще понимаю, если бы я оставил Прометея крутиться, а сам забил на работу и вообще там не появлялся - так ведь я же на работе провожу времени даже больше, чем положено. Опаздываю максимум на пять минут, а задержаться могу и на полчаса, и на час.

Я уж не говорю о том, что я успешно сделал то, за что мне, собственно, и платят (причем, замечу, сделал это в свободное от работы время). Иными словами, лишний раз подтвердил свою профпригодность. Если меня за это уволят - значит, мне в этой конторе делать нечего.

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

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

3. Имя [info]barateli упоминается с его согласия :-)

4. Письмо так и не дошло, попробуй еще раз.
From: [info]vdesyatke Date: 05/23/2008 13:20:31  

1,2,3. дай Бог чтобы ты оказался прав :) случаев секретных у меня нет, лень писать, ибо ничо особо интересного :) но я подумаю и чонить вспомню смешное, опишу.
4. Задачка на умение находить оптимальное решение по организации работы.
в офисе есть холодильник, в котором сотрудники хранят личные продукты.
регулярно обнаруживается, что какой-то продукт протух, и начал вонять, к
этому моменту провонять успевают все продукты. как сделать так, чтобы
несвежие продукты регулярно выбрасывались, но при этом не выбрасывались
свежие продукты. Фашистские (раз в неделю выбрасывать все) и армейские
(заставить всех строем вечером идти к холодильнику и проверять все продукты)
неприемлемы. Метод должен минимально напрягать (а в идеале вообще не
напрягать) сотрудников, чтобы не отвлекать их от их основной и единственной
задачи - хорошо выполнять свою работу. Народу в офисе много, более 30
человек, так что личное общение "а чья тут колбаса" - не выход.
сразу скажу что эта задачка нашумела в инете, но правильный ответ так и не был опубликован, так что если ты видел решение, знай, что есть лучше :)
From: [info]barateli Date: 05/27/2008 16:13:55  

Положить журнал учёта сотрудников, где все подписываются при входе, в холодильник.
From: [info]vdesyatke Date: 05/28/2008 07:58:33  

не понял. как журнал, лежащий в холодильнике, спасет от протухания продукты?
задачка не такая простая, было прислано несколько десятков вариантов решений от примерно 800+ людей, и ни одного правильного.
From: [info]_myx Date: 05/30/2008 03:19:05  

Значит, у нас как раз фашистские методы применяются :-) На холодильнике написано: "если вам дороги ваши продукты, не оставляйте их на выходные, их могут выкинуть!"

Думал я о различных подходах... в итоге решил исходить из следующих предпосылок:
- специально выделенный под это дело ответственный человек все же должен быть;
- все продукты портятся за примерно одинаковое время;
- никто из сотрудников не попытается намеренно саботировать процедуру.

Тогда еда должна каждый день помечаться тем или иным способом. Самый простой способ из пришедших в голову - маркер. Одна пометка - один день. По достижении определенного числа пометок еда выбрасывается.

В интернете честно не копался, поэтому сравнивать не с чем.
From: [info]vdesyatke Date: 05/30/2008 08:26:51  

чувак, ты гений!!! :) я был прав, что верил именно в тебя!
именно из тех же трех предпосылок исходил и я при решении задачи :))
долго ломал голову над тем, чье решение - твое или мое, лучше, но так и не пришел к строгому выводу.
мое такое:
в понедельник рядом с холодильником кладется пачка наклеек цвета цвет0 (красный). Всем сотрудникам предлагается на свои продукты при закладке в холодильник лепить такую наклейку. Они могут и не лепить, это никак не влияет на результат. В следующий понедельник с утра уборщица при мытье холодильника на все продукты без наклеек лепит наклейки цвета цвет0 (красный). Убирает эти наклейки в шкаф, и выкладывает наклейки цвета цвет1 (зеленый). Все сотрудники, положившие в холодильник долгоиграющие продукты (1.5 кг картошки например), и помнящие о них, залепливают цвет0 цветом1 (зеленым). В следующий понедельник уборщица на все продукты без наклеек лепит наклейки цвета1 (зеленый), выбрасывает все продукты с наклейками цвета0 (красный), выкладывает на стол наклейки цвета2 (синий). Далее по циклу.
Длительность такта (1 неделя) можно менять произвольно.
Плюс в том, что продукт с наклейкой определенного цвета опознать проще, чем посчитать количество полосок на каждом продукте.
Минус в том, что лепить наклейки дольше чем чиркнуть полоску :)
Твой способ дешевле - 10 рублей в месяц против 40 рублей у меня :)
есть еще проблема открытого пакета молока - он портится за сутки. Но это решается ежедневной наклейкой на такие открытые пакеты прошлонедельной наклейки и выбрасыванием пакета на следующий день по этой яркой метке.
о! понял в чем минус твоего метода - у тебя решение "выбросить-не выбросить" принимает уборщица, т.е. включает интеллект, а это не есть хорошо :)
если сотрудник хочет хранить какой-то продукт 2 недели, и знает, что он не испортится, то он никак не может помешать уборщице (которой кажется что он портится за неделю) выкинуть его, ведь стереть метки маркера нельзя. общение с уборщицей не выход. я, например, так ни разу и не видел, кто убирается в моем кабинете, я тут уже год работаю.
From: [info]injir Date: 05/30/2008 12:43:21  

На пакете молока написано, что его можно хранить в открытом виде не более 5 дней. Как и соки.
Уборщицу можно заменить на секретаршу или аналогичного сотрудника, в чьей комнате стоит холодильник, и вменить ей (ему) это в обязанности.
Недостаток наклеек - при высокой влажности они отклеиваются. Они также отклеиваются при перемещении продуктов. А закупать специальные наклейки - слишком трудоемкая задача.
Проблема с хранением продукта, который может находиться в холодильнике 2 недели решается просто: этот продукт помещается в дополнительную упаковку, например, пакет.
From: [info]vdesyatke Date: 05/30/2008 13:01:43  

пакета молока под рукой нет, но соки точно хранятся не более суток с момента открытия. молоко по-моему тоже. секретаря занимать работой уборщицы когда в этом нет необходимости - нельзя. наклейки, которые не отклеиваются, существуют, размер 1*2 см, продаются на ленте, стоят копейки, мы такими помечали товары, когда я 9 лет назад работал в Радианте. ее даже специально оторвать нельзя.
идея с дополнительным пакетом не будет работать, так как когда сотрудник забудет про этот продукт, он будет тухнуть в холодильнике месяцами.
From: [info]injir Date: 05/30/2008 13:11:03  

Хорошо, пусть это будет т.н. офис-менеджер. Это не важно.
Можно или нельзя занимать чем-то сотрудника, сначала решает руководитель, а потом уже советуется с сотрудником или просто ставит его перед фактом.
С новой упаковкой начинается новый отсчет времени. Через неделю все равно продукт полетит в помойку, если хозяин про него забудет.
From: [info]vdesyatke Date: 05/30/2008 14:00:57  

зачем использовать офис-менеджера (который есть не во всех офисах), когда можно использовать уборщицу, которая в любом случае регулярно моет холодильник, т.е. выкладывает из него продукты?
про руководителя: именно правильный руководитель и понимает, что нельзя заставлять офис-менеджера выполнять работу, с которой справится уборщица. кстати говоря, мои друзья, работающие руководителями высшего звена, не смогли решить эту задачку. они даже не могут осознать проблему - ну протухают продукты, да и хер с ними. они даже на пол-шага к решению не подошли.
идея с пакетами не будет работать - что если человек хочет хранить 1.5 кг картошки 3 недели? а если 2 месяца? к тому же зачем использовать дорогостоящие и занимающие место пакеты, если можно их не использовать?
From: [info]injir Date: 05/30/2008 15:23:42  

Кого и для чего лучше использовать - сфера ответственности человека, принимающего решение в том пространстве, к которому относится холодильник. Если его, конечно, беспокоит то, что у него в лавке воняет :)
Так и не поняла про пакеты. Если моя картошка лежит в холодильнике и я не хочу/не могу забрать ее из конторы, то это мое право переложить ее в другую тару, чтобы ее никто не выбросил. Какова стоимость тары - моя проблема. Человек, оставляющий метки, наносит их на новую упаковку, не задаваясь вопросом, чье это и что внутри.
Если я забыла про продукт, не переложила в другую упаковку и поэтому его выбросили, это тоже моя проблема. Дежурный по холодильнику (кто угодно - хоть уборщица, хоть директор) не обязан отслеживать состав, количество и цвет продуктов. Он отвечает за их пометку и выбрасывание того, на чем стоит необходимое количество меток.
From: [info]vdesyatke Date: 05/30/2008 15:52:15  

эта задачка как раз и есть тест на умение принимать такие решения.
про пакеты: тебе раз в неделю придется выбрасывать тот пакет что у тебя имеется и класть картошку в новый? может я чего-то не понимаю, но почему это проще чем наклеить наклейку размером 1*2, лежащую рядом с холодильником?
кстати, как быть с пластиковыми коробочками для обедов? наклейка с нее смывается горячей водой, маркер - вряд ли. да и смывать наклейку необязательно, поверх нее будет наклеена свежая.
"Если я забыла про продукт, не переложила в другую упаковку и поэтому его выбросили, это тоже моя проблема". Задача задачи состоит в том, чтобы создавать минимум проблем работнику, чтобы он меньше всего отвлекался от своей основной задачи - хорошо выполнять свою работу.
From: [info]_myx Date: 05/30/2008 16:02:43  

А твой способ - изящное дополнение к изложенному ниже механизму. Если на продукте зеленая наклейка - значит, к нему нужен особый подход. Какой именно - можно обговорить отдельно. Мне все-таки кажется, что человек, неявно заявивший, что его продукт "непортящийся" должен за это как-то отвечать. Например, на таре должна быть ссылка на хозяина, или еще какая особенность, дающая возможность в случае чего легко принять решение, что делать с "неприкосновенной" едой.

Кстати, я только что осознал, что на мне до сих пор лежит "печать CQG", где по умолчанию все продукты, не завернутые в пакет, считались общими - вот я и мыслю исходя из того, что у всех продуктов есть заменяемая тара :-)
From: [info]_myx Date: 05/30/2008 15:55:49  

В общем, резюмирую :-) Концепция следующая:

- с момента положения в холодильник продукт перестает быть индивидуальностью и становится рядовым объектом; каждый сотрудник может опознать только свой продукт, больше никто ничего ни о чем не знает;
- дежурный, ничего таким образом не зная о продуктах, руководствуется только метками на таре, которые сам же и обновляет;
- по достижении окончания "срока жизни", о чем свидетельствуют метки, объект уничтожается.
- сотрудник имеет возможность в любой момент заменить тару, если понимает, что "срок жизни" продукта истекает и это расходится с его интересами. Не успел - сам себе Буратино.

Такой подход вроде всех устраивает?

Понятие TTL
Представьте себе, что вам 5 лет и вы хотите кушать. Вы идете к папе и говорите: «Папа, я хочу кушать». Ваш папа смотрит телевизор, согласно таблице маршрутизации о посылает вас к маме. Вы идете к ней и просите «Мамааа, я хочу кушать». Мама болтает с подругой по телефону и согласно своей таблице маршрутизации посылает вас к папе. И так вы ходите как дурак от папы к маме и обратно, туда-сюда, туда-сюда, а все потому что криворукие админы (родители папы и мамы) неправильно настроили таблицу маршрутизации. Чтобы защититься от таких ситуаций придумали понятие TTL (Time To Live), что применительно к нашей ситуации означает количество терпения у мальчика, пока он не скажет «заебало» и не упадет перед ногами мамы или папы в беспомощном состоянии. Последний, по правилам (стандарты – это «так заведено в семье»), обязан послать короткий нелестный отзыв адрес того, кто послал мальчика кушать. Это так называемый icmp-пакет «мальчик издох».

(C) не мой :-)
From: [info]injir Date: 05/30/2008 16:10:52  

ЗачОт! :)
From: [info]aterekhov Date: 05/30/2008 19:26:03  

Не думаю, что Владислава Александровича уволят за эту невинную шалость. Хотя, среди менеджеров встречаются люди ну совершенно без чувства юмора.
From: [info]_myx Date: 05/30/2008 22:58:14  

Вот и я тоже не думаю. А если бояться людей без чувства юмора, то надо дома сидеть и не высовываться. И в зеркало не смотреть :-)

Кратенько проглядел журнал, заинтересовался. Будет время - ознакомлюсь поближе, а пока зафрендил.
From: [info]spiteful_zoomer Date: 05/23/2008 10:30:02  

Забыл внести преложение :) Надо чтобы отмечалка ставила время не ровно в 9, а с небольшим случайным разбросом в меньшую сторону ;), а то так и запалиться несложно.
From: [info]barateli Date: 05/23/2008 12:43:06  

Мы думали про это, но потом стали склоняться в сторону демонстративного проставления 9-00 - 18-00.
From: [info]ksch Date: 05/25/2008 00:19:57  

В ГЗ меня эта система долбала ужасно.
Молодцы, хвалю и жму руки :-)
From: [info]_shvetka_ Date: 05/30/2008 04:36:17  

вот оно как применять подручные средства)))
малацы
From: [info]cxell Date: 06/04/2008 23:22:04  

В Опере javascript:(alert('Hello, World!')) тоже работает.
From: [info]_myx Date: 06/05/2008 10:57:28  

Ну, это не показатель. alert() не требует доступа к модели документа.

С другой стороны, javascript:document.write("Hello world"); тоже работает :-)

Комментарии

Изображение Николай Лигастаев

В фаере тоже работает.

Изображение myx

И это таки тоже не показатель :)