Слегка потеплело, и я надел свой оранжевый пуховик. И снова начались шуточки коллег:
- О, смотрите! К нам пришел Search & Rescue! (спасатель)
- Ну, так ведь я ж теперь работаю в техподдержке. Разве не этим мы занимаемся - спасением пользователей?
На следующий день я решил, что не так уж и холодно, поэтому надел легкий кожанный плащ. Но это не помогло: "О, смотрите! К нам снова пришел Search & Rescue, только сегодня он маскируется!"
суббота, 28 февраля 2009 г.
Гроздья гнева
I am big – you are small. I am right – you are wrong. There is nothing you can do about it!
Последние месяцы Маринина "хорошая" работа (где платят больше) становилась все невыносимее. В смысле, с работой у нее получалось справляться все лучше и лучше, но как раз это и вызывало проблемы. Во-первых, чем больше делаешь, тем больше на тебя начинают вешать. Во-вторых, она слишком усердно расследовала происшествия в госпитале, задавала некоторым уважаемым людям неудобные вопросы. В ответ начались подставы.
Прежде всего, накалялись отношения с непосредственной начальницей. Раньше она была просто напарница, в такой же должности, что и Марина. Теперь ее слегка повысили, и она от радости начала кровушку пить.
Я не буду утомлять вас подробностями, слишком долго рассказывать. Главная проблема в том, что начальница все реже ходит на работу. Отпуск у нее максимально возможный (полтора месяца), плюс она постоянно на курсах (за них дают NHS points, что со временем позволяет повысить зарплату); или болеет, или у нее поезда не ходят, или маме плохо, или школа у детей закрыта (хотя дети уже большие, могут и сами посидеть дома). Или она (как бы) работает сверхурочно, а потом из этих часов образуется отгул (хотя Марине так делать не разрешает).
В результате Марина работает на полставки, но реально работы выполняет, как целый человек, часто торчит там допоздна. Кроме того, его грузят дополнительными обязанностями, которые вообще не имеют ни малейшего отношения к должностным инструкциям. При этом начальница позиционирует Марину не как менеджера, а как свою секретаршу.
В конце концов, Марина решила пойти к генеральному менеджеру и изложить все свои претензии. С трудом назначила встречу один на один, хотя по идее они и так должны встречаться раз в неделю. Но на самом деле начальница зачем-то постоянно туда ходила вместе с Мариной. Всю ночь Марина готовилась, написала список вопросов, рассортировала по важности...
Только все это было напрасно. Сразу же с порога генеральный сказал: "Если ты пришла, чтобы просить тебя пристроить на новую вакансию в нашем отделе, то я сразу говорю, что не буду это делать." Это было довольно цинично. Дело в том, что там действительно была хорошая вакансия, но в нарушение правил ее удалили с NHS Jobs еще до окончания приема аппликаций. Т.е. явно у них с самого начала был кандидат, и конкурс объявлялся только для вида.
Ну, неважно, Марина ведь не за этим пришла. Генеральный сразу сказал в лоб: "Твоя начальница тут проработала 25 лет, и я ничего не буду слушать, ничего ей не сделаю, она уважаемый человек. А ты приехала в Британию, мы тебя здесь приютили, одели, накормили, а ты качаешь права." Самому генеральному 27 лет.
Предметного обсуждения почти не было. Не успеваешь выполнять работу – оставайся в офисе дольше. Почему начальница прогуливает работу, не твое дело, она по званию старше тебя. Она стерла из Марининого Outlook важный емейл о совещании – ну и что. Емейлы – это собственность госпиталя, а не работника. И вообще они тут и без Марины прекрасно справлялись с работой, и чем Марина занимается – непонятно.
Единственный момент, где Марина кое-как смогла доказать свою правоту – это случай с больничным. Начальница ей тогда написала: "А что, разве иностранцам положены оплачиваемые больничные?"
- Не может быть! Ты что-то неправильно поняла.
- У меня же есть этот емейл.
- Наверное, ты просила больничный на 10 дней.
- Нет, всего на 1 день.
У Марины вообще гибкий рабочий день. На эту тему они тоже спорили. "Мы и так сделали тебе одолжение – позволяем тебе работать на полставки в еще одном госпитале". Так блин, вы же сами отказались дать Марине полную ставку! Поэтому она и работает в двух местах. Кроме того, в контракте прямо сказано, что у всех работающих на полставки рабочий день автоматически становится гибким.
- Нет, теперь не будет у тебя никаких поблажек, и так мы тебя балуем. Будешь с понедельника по среду работать с 9 до 5.
- Между прочим, вы мне платите за 20 часов в неделю, а не за 24. Если уж хотите действовать строго по правилам, то в среду я должна уходить домой в час дня.
Еще Марине припомнили недавний clinical attachment. Это как бы клиническая стажировка, но стажеру не разрешают ничего делать, только смотреть. У Марины уже была одна такая стажировка в Штатах. Она делала это по своей инициативе, из любознательности. Просто неплохо включить такую строчку в резюме, если пытаться становится врачем в Америке или Британии. Ну, и вообще, даже если работать менеджером, то полезно вблизи увидеть, как работают врачи.
Так вот, генеральный стал говорить, что госпиталь заплатил большие деньги, чтобы Марина могла пройти стажировку, да еще и временно освободил ее от работы. Это полная чушь. Во-первых, стажировки не стоят госпиталю ничего, даже иностранцы без проблем приезжают и стажируются, при этом ничего не платят. Если людям с улицы можно, то почему Марине, сотруднице, нельзя? Во-вторых, либо стажировка проходила в нерабочее время, либо Марина потом отрабатывала все потраченные часы.
Еще обсуждали недавний вопиющий случай. Умирает больной, а дежурный врач сказал, что сегодня не придет на работу. И медсестры боялись ему позвонить и спросить совета, лишний раз побеспокоить этого медицинского полубога. Так продолжалось 12 часов, и больной умер. Марина написала врачам довольной резкий емейл, который кончался словами: "Я не понимаю, как такое возможно. В Америке или даже в Украине если человек умирает, то можно поднять с постели любого врача. Объясните же мне, как положено в таких случаях действовать в этом госпитале, в этой стране?" Генеральный ответил: "Следи за языком, Марина! Ты обидела людей. Ты не у себя дома. Не надо нам грузить, что там у вас в Америке. Мы сами разберемся в своих делах!"
Самое забавное, что в лучших советских традициях генеральный сказал, что жалобу положено передать тому, на кого жалуются. Забрал у Марины черновик с ее вопросами. Сказал, что Марина совершила серьзный проступок, придя к нему напрямую, через голову начальницы. Хотя в контракте прописано, что в подобных случаях как раз и надо идти к начальнику начальника.
Марина говорит:
- Я себя некомфортно здесь чувствую, а начальница пригрозила, что не даст мне хорошую рекомендацию.
- Не волнуйся, мы не имеем права давать плохие рекомендации.
Да, это правда, я слышал такую фишку. Если человека не выгнали с работу, он ничего не украл, не пришел пьяным в офис, не побил начальника, не получал выговоры, то на каком основании давать ему плохую рекомендацию? Последнее время работодатели обычно просто пишут: "Работал на такой-то должности с такого-то по такое-то число..." Иначе работники могут судиться.
Марина вернулась к себе в кабинет, поплакала (благо, соседки не было). Видимо, плач услышали секретарши и сказали генеральному. Он зашел и спросил: "Ну, как ты?" Как-как? Конечно, "I am fine", как обычно. Потом Марина читала инструкции и правила (например, насчет гибкого рабочего дня и т.д.) Готовилась спорить дальше; возможно, подключить еще и отдел кадров и т.д. Потом еще поплакала. И почувствовала, что пора ставить точку и достойно уйти. Написала заявление по собственному желанию.
На следующий день злодейка-начальница написала: "Очень жаль, что ты решила уйти. Надеюсь, что у тебя все в порядке." Конечно, ей жаль, теперь самой придется вкалывать. Или найти новую Золушку. Или просто забить на работу, как она и успешно делала последние годы. Кстати, перед увольнением Марине еще нужно отработать три месяца.
Немного неудачный момент – и кризис, и у меня на работе тоже не совсем все гладко... Ну, что ж делать. Журнал "Здоровье" пишет: нервные клетки не восстанавливаются.
Коммуникабельность
Сгустились тучи
Месяц назад у меня было подведение итогов работы за первые три месяца. Правда, на самом деле к тому времени прошло уже пять месяцев с начала, так что начальница делала это задним числом. Ничто не предвещало неприятностей, она широко улыбалась... Спросила, какие у меня впечатления. Я сказал, что в общем нормально, но работа в техподдержке меня достает, хочется побольше заниматься программированием. Но тут неожиданно оказалось, что у меня ужасные communication skills. Что от программирования меня надо держать подальше, а то дров наломаю. Но все-таки она подозревает, что из меня еще может выйти толк, поэтому хочет дать еще один шанс и продлить испытательный срок на три месяца.
Пожалуй, самая обидная из обсуждаемых ситуаций была такая. У меня скоро отпуск, нужно срочно сдавать проект, а я так и не могу понять, что надо делать. Непосредственный заказчик ушел на повышение, ему некогда. На его место пришла другая начальница, которая в вопросе пока разбиралась слабо. Более того, она сломала ногу. Потому вышла на работу на день, и тут же заболела гриппом. Пользователи уровнем поменьше вообще не понимают, что я от них хочу. В лучшем случае говорят: "Обращайся к начальнику". В худшем – обещают подумать, а через неделю-две что-то отвечают невпопад. В техническом задании я нашел не просто неточности, а одну грубейшую ошибку. По идее, все эти вопросы должен решать бизнес-аналитик, но он ничего не знает и знать не хочет. И вот я осмелился побеспокоить менеджера, которая была была на больничном. Причем сделал это не самовольно, а по совету того самого аналитика. Менеджер ответила на мой вопрос, но при этом психанула. Причем злилалась она не на меня, а на аналитика, ведь это была его работа. Но аналитик через неделю уволился, а наказать кого-то все равно нужно... А то, что я успешно закончил проект на две недели раньше срока – это неважно.
Моя первая мысль, конечно, была: "Им нужно иметь в запасе сотрудников, которых можно быстро и безболезненно уволить, если будет такая задача. Тем более недавно намекали на потенциальные сокращения." Я отбивался от всех обвинений, но удар был слишком неожиданный, и я немного растерялся. Начальница пообещала, что изложит все соображения в письменном виде, и потом мы их обсудим перед тем, как посылать в отдел кадров и вышестоящему начальнику.
Ну, вообще не хочется опять вспоминать всю эту мерзость. Я хорошо подготовился, и через неделю снова оспорил все ее замечания, но уже более аргументировано. По всем пунктам обвинения начальница или согласилась, что я прав, или, по-крайней мере, что я не был основной виновный в ситуации... но своего решения все равно не поменяла. И потом я понял, почему. Как выяснилось, она уже давно отправила письмо в отдел кадров, а наша встреча – это просто шоу. Будь я хоть Цицероном, ничего бы не изменилось от моей зажигательной речи – письмо уже послано.
- А может, у тебя еще проблемы с пониманием английской культуры?
- Да, конечно, у меня есть проблемы! В Украине мой начальник просто в матерной форме объяснил бы, что он мной недоволен, и хочет меня уволить. А здесь – какие-то письма, подведения итогов, совещания... не пойму, что у Вас на самом деле на уме...
Мысленно я еще добавил словами Шарикова: "Мучаете себя, как при старом режиме!" Начальница смутилась и сказала, что не все так безнадежно. Что курсы по коммуникабельности еще могут вернуть меня на путь истинный.
Общее впечатление
Курсы продолжались два дня и стоили больше тысячи фунтов. Это в два-три раза дороже, чем хорошие курсы для ИТ-профессионалов. Организаторы переделывали счет-фактуру три раза, да еще и забывали отправить... В общем, я потратил много времени, чтобы добиться оплаты, и все равно деньги не успевали бы прийти к ним на счет до начала курсов. А без предоплаты они обычно не допускают на занятия. Пришлось немного поругаться.
Если коротко, то свои впечатления от курсов я могу выразить одним словом: bullshit. По большому счету, я не услышал ничего такого, о чем бы не рассказывали в школе или институте. Вот, например, "свежая" мысль о том, что во время спора надо стараться поставить себя на место собеседника. No shit, Sherlock? Интересно, зачем отдел кадров рекомендует именно эту фирму – это отмывание денег или просто идиотизм?
Самое ужасное, что теперь я должен отчитаться начальнице, чему научился, и как собираюсь изменить свою жизнь. А так в принципе было весело, и на работу не ходил два дня.
Что было интересного
Зато познакомился с интересными людьми: девушка из полиции, аппаратчица из Палаты Лордов, какой-то серьезный ИТ-консультант и индус-борец с глобальным изменением климата.
Полицейская девушка работает на должности office manager и занимается закупкой и ремонтом машин, а также организаций специальных мероприятий, вроде парадов. Диплом у нее, как ни странно, по английской литературе. За время разговора она три раза повторила, что первая работа у была в магазине Homebase, "но там приходилось носить ужасную униформу". Зато теперь с униформой все в порядке - видимо, девушка пошла в полицию за романтикой. Говорит, что уже прошла кучу похожих курсов (за счет организации, конечно), чтобы найти новую работу. Хочет ловить преступников, а не контролировать смену масла в двигателях.
Женщина из Палаты Лордов тоже оказалась фанатом всяческих курсов. Эту самую Палату стали сейчас прижимать, слегка отодвигать от кормушки. Вот она и надеется развить свою коммуникабельность, чтобы как-то этому противопостоять. Потому что лорды – очень милые, честные и бескорыстные люди, которые думают только об интересах страны, а не о собственном кармане (ха-ха). А еще "Лординя" долго жила в Калифорнии, вышла замуж за мексиканца, родила там троих детей, получила Грин Карту. Потом зачем-то поехала с мужем в Британию. Потом развелась, Грин Карту потеряла. А дети остались в Америке, они теперь граждане США. Вообщем, очень хочет назад в Америку, в Британии ей совсем не нравится. Не ожидал такое услышать от человека, работающего на правительство.
ИТ-консультант сетовал, что он умеет хорошо говорить, но не умеет слушать людей. Очень сильно ругал себя за этот недостаток. Но я обратил внимание, что он носит слуховые аппараты. Наверное, он на самом деле просто плохо слышит, во и все...
А наш учитель раньше был довольно большим начальником в сети супермаркетов Теско, так что он мог рассказать много интересных историй, и не только по теме занятия. Например, исследования показали: чем дальше положить вырезку от входа в магазин, тем вероятнее, что клиент выберет маленький кусок. Объяснение такое: когда у человека уже полная тачка продуктов, его больше пугает высокая цена; кажется, что и так уже набрал еды на большую сумму. Зато сахар как раз надо размещать далеко от кассы, потому что любому покупателю он время от времени нужен. Таким образом, мы заставляем покупателя изучить удаленные части магазина, заодно купить там что-нибудь еще.
Я тоже рассказал историю, которая когда-то вдохновила меня на выбор темы для дипломной работы: аналитики с удивлением обнаружили, что памперсы и пиво часто покупают вместе. Моя первая мысль: мужчины смотрят футбол, пьют пиво, не хотят отрываться от телевизора, поэтому ходят прямо под себя, в памерсы. На самом же деле молодые мамы посылают молодых отцов сбегать в магазин, и мужчины заодно берут себе пиво. Поэтому есть смысл ставить два эти товара рядом. Наш учитель такую историю не слышал.
Все ругали лондонское метро. Ведь каждые выходные чинят, а иногда и в рабочие дни. Вот в Харькове я за всю свою жизнь помню буквально несколько подобных случаев. Например, когда покойный Кушнарев выгонял торговцев с Благбазы на Барабашовку, то примерно месяц поезда не останавливались на Центральном Рынке. Якобы грунтовые воды. Ну, воды, наверное, были, но в тот момент все равно никто ничего не чинил, просто поезда не останавливались. Потом таки станцию укрепили колоннами, но это делалось уже без закрытия. Еще во время Диканевского Дождя затопило несколько станций. Но опять-таки, речь шла не о целых линиях.
Учитель говорит: "Это потому, что лондонское метро очень старое и сложное. Вот у меня знакомый метрополитеновец во время перерыва пошел прогуляться с бутербродом. Забрел в какой-то боковый туннель, а там стоят автоматчики. Они неприятно удивились. Он сказал, что дверь был открыта. Его выставили, дверь закрыли. Что там охраняют – загадка. А еще раньше у Королевской Почты была своя собственная сеть туннелей." Я пошутил, что еще у депутатов, наверное, есть свое секретное метро, чтобы не ездить на работе в давке. Но в каждой шутке есть доля истины. Говорят, на Вестминстере есть специальный выход, по которому можно прямо из метро попасть в парламент.
ИТ-консультант рассказал, как летел отдыхать в Мексику. Заплатил за extra legroom (сиденье с дополнительным местом для ног, обычно рядом с запасным выходом). Тем не менее, зазор между сиденьями был такой узкий, что человек едва мог протиснуться, о комфорте речь вообще не шла. Мягко говоря, неприятно провести в таком положении 8-10 часов. Более того, в случае аварийной посадки просто физически невозможно принять "безопасную позу" (наклониться вперед и руки положить на голову).
После скандала он и еще семь человек отказались лететь. В результате рейс задержали, потому что по правилам в таких случаях надо выгружать багаж "отказников" (вдруг там бомба?) Они извинились перед остающимися за задержку. Потом, уже на курорте другие пассажиры говорили: "Жалеем, что не сделали как вы". FirstChoice отказывалась возвращать деньги за билеты, потому что "пассажиры сошли самовольно." Самолет был чартерный, он не принадлежал непосредственно FirstChoice, но они уверенно говорили:
- Не может быть, что сиденья были узкие, у нас никогда раньше не было таких проблем.
- Хорошо, до встречи в суде! – сказали пассажиры.
Но в Мексике самолет промерили и убедились, что он не соответствует стандартам. Пассажиров отправили другим рейсом и вернули 20% стоимости путевки как компенсацию морального ущерба. Вывод из этой истории: потребителя не интересует, что у вас "никогда раньше не было таких проблем". Проблема есть сейчас, и ее надо решать.
Но и в Мексике все не совсем гладко. В их гостинице было трудно занять место возле бассейна. Так вот, хитрые немцы набирали полотенец (их можно было взять неограниченное количество, под залог) и с вечера занимали полотенцами шезлонги. Причем занимали с запасом, т.е. не просто для себя, а так, чтобы вообще никто рядом с ними не лежал. Но британский ум победил. После 11 вечера купаться запрещалось. Поэтому британцы предложили администрации гостиницы конфисковать все полотенца, оставленные на ночь. В результате немцы влетели на бабки (залог-то отдавать надо) и больше не шалили.
Оказалось, что все считают американцев очень вежливыми. Я тоже так считаю, но не ожидал услышать это от британцев. Учитель рассказывал про свой любимый американский отель, где он уже останавливался два раза. Когда приехал в третий раз, то все изменилось: гостиница была заполнена английскими жлобами, которые шумели, бросали пустые бутылки и недоденные хот-доги в бассейн и пр.
- Я съезжаю отсюда.
- Сэр, но по нашим правилам я не могу вернуть деньги.
- Понимаю, но что ж делать... Я любил ваш отель, но не могу больше смотреть на это британское быдло! (естественно, это было сказано с британским акцентом).
Девушка вдруг широко улыбнулась: "О, как я Вас понимаю, сэр!" И вернула все деньги.
Уже, наверное, в двадцатый раз мне рассказали о том, что только 7% нашего общения завязано на слова, 38% - на голос, а остальные 55% - на язык телодвижений. Не верю! Да, когда знакомишься в баре, то, наверное, слова означают даже меньше 7%, а вся сила – в языке телодвижений. У Чижа есть песня "Руссо матросо", как раз на эту тему. Но когда я иду на семинар, меня мало интересует тон голоса и жесты докладчика. Я никогда не напишу про него восхищенную заметку в блоге, если он несет чушь.
Зато мне понравилась рекомендация "рисовать картину словами" во время разговора по телефону. Часто, когда звонишь в какой-нибудь customer service, тебя развлекают фразами типа: "Сейчас переключусь в другую систему и введу номер Вашего счета... извините, немного медленно работает сегодня система... я вывожу это на экран... и я вижу, что..." Я думал, что это делается, просто чтобы клиент не скучал и не положил трубку. Ну, и чтоб меньше злился, что приходится ждать. Но, оказывается, есть и еще один смысл: усилить ощущение, что ты разговориваешь с живым человеком, а не с роботом; представить, как он выглядит, в каком офисе сидит, какой у него компьютер, как капает дождь в его окне, как тормозит его база данных – точно так же, как у и тебя самого сегодня.
Во время занятия мне кто-то позвонил. Я думал, важный звонок с работы. Оказалось, реклама. Вообще в Англии меня редко беспокоят такими звонками, в Америке было гораздо чаще. Через некоторое время опять звонок:
- Привет, чувак! Ну че, как житуха, как курсы?
- Ну, ничего себе! Рекламщики как-то пронюхали, что я на курсах! Старший Брат смотрит на меня? – подумал я.
А оказалось, что это как раз таки звонил мой коллега с работы.
Разбирали некоторые изысканные староанглийские словечки. Сразу вспомнилось, как мы с Мариной мучались 5-7 лет назад, готовясь к TOEFL, GRE, GMAT... Я с удовлетворением отметил, что британцам было почти также тяжело сделать тест, как и мне. Потом учились переписывать письма разъяренным клиентам так, чтобы использовать только простой, понятный язык, без канцелярита. Опять-таки, британцы мучались не меньше меня. Было одно письмо, смысл которого просто никто не понял. Хотя грамматика в порядке, и слова понятные, а вместе не складывается.
Все делали маленькие презентации. Я настоял, чтобы у доски. Вообще остальные боялись, хотели презентовать пара на пару. Но ведь это очень важно – стоять перед залом, пусть и маленьким. Когда ты рассказываешь что-то одному человеку, это совсем не то. Учитель рассказал о методе PROVE (Proposition, Reason, Objections, Verify, End) и сам сделал минипрезентацию как пример. В общем, это то, чему с детства учат американских школьников. Но все сделали такие круглые глаза, как будто никогда раньше не писали эссе. "Гениально, какая интересная идея!" Я лично показал пример и выступил первым. Лординя выступала минут 15 вместо положенных 2-3, мусолила одно и то же. Мда, думаю, она не добьется успехов в политике, теперь ничто не спасет Палату Лордов от переезда в другое помещение.
Ну, а совсем хорошо я себя почувствовал, когда мы перешли к "анализу аргумента" и похожим вещам. Народ просто не мог понять, что нужно делать. Явно никто из них не сдавал GRE. Например, учитель дал такую тему: "Докажите мне, что запрет на курение в общественных местах – это ошибка". Никто из присутствующих не курил, и запрет все поддерживали. Но в этом и смысл – никого не интересуют твое личное мнение. Тебе дают утверждение – ты должен его аргументировать. Или наоборот – дают аргумент, а ты должен объяснить, почему он слабый (даже если на самом деле ты с ним согласен).
В случае с курением я сразу набросал несколько идей: разоряются пабы, потому что народ перестает туда ходить; люди теперь курят не в пабе, а на улице, на глазах у детей, которые начинают им подражать; зимой выбегают покурить, простужаются, потом государство должно их лечить; падают продажи сигарет, и государство недополучает налоги; нарушаются наши гражданские свободы и т.д.
Учитель предложил, чтобы мы сами выбрали похожую тему. Идей ни у кого не было, и я уверенно и твердо сказал: "Государство не должно поддерживать банки. Пусть разоряются. Burn, baby, burn! Ведь это они довели страну до кризиса." На самом деле я так не считаю, но никто, кроме учителя, не понял, что я просто играю свою роль. Меня горячо начали убеждать, что я не прав, и пришлось уж играть до конца. При этом меня поразило, как бездумно люди повторяют аргументы, вбиваемые в голову через Би-Би-Си.
- Надо поддержать банки, чтобы они начали снова выдавать ипотечные кредиты и спасли рынок жилья.
- Зачем его спасать? Let the bubble burst! Год назад люди жаловались, что цены на жилье неоправданно высокие, правительство ничего не делает. Теперь цены упали (причем не так уж сильно), и люди опять ругают правительство – где же логика?
- Но если разорятся банки, как же мы будем получать зарплату?
- Как-как... Наличными в кассе, как в Украине было всего несколько лет назад.
- А где хранить сбережения?
- В огороде закапывать. А вообще у нас было так хреново, что у подавляющего большинства людей ничего сберегать все равно не получалось.
- Ладно, это работник. А где работодатель хранит деньги?
- Как где, в сейфе, черным налом. И налоги платить не нужно, очень удобно.
- Ну, все равно, нам надо запустить экономику, нужны дешевые кредиты, поэтому надо поддержать банки.
- Послушайте, кризис начался как раз из-за того, что экономика была перегрета. Слишком легко было получить дешевый кредит. И что же правительство делает сейчас? Снова старается дать всем дешевые кредиты. Так поможет ли это? Мне кажется, это все равно, что давать наркотики, чтобы немного облегчить ломку.
- Но если не запустить экономику, то фунт совсем обесценится.
- Ну и хрен с ним. У нас была гиперинфляция, поэтому все пользовались долларами.
- Но ведь сейчас и у Америки тоже проблемы, доллар тоже может рухнуть.
- Значит, храните деньги в евро. Или в юанях. Все сразу не может упасть одновременно.
- А как бы с теми людьми, кто потеряет сбережения в обанкротившихся банках?
- Жаль, конечно, не повезло. У нас тоже после развала СССР вклады пропали куда-то, и до сих пор не нашли. Не привыкнешь – подохнешь, не подохнешь – привыкнешь.
Делегаты в ужасе смотрели на меня и молчали. Каждый с надеждой думал, что Англия – это все-таки не Украина, и что любимая Королева не допустит такого беспредела.
Вообщем, порезвился я на славу. Но что я должен изменить в своей жизни после этих курсов, чтобы начальница осталась довольна – увы, я так и не понял...
Месяц назад у меня было подведение итогов работы за первые три месяца. Правда, на самом деле к тому времени прошло уже пять месяцев с начала, так что начальница делала это задним числом. Ничто не предвещало неприятностей, она широко улыбалась... Спросила, какие у меня впечатления. Я сказал, что в общем нормально, но работа в техподдержке меня достает, хочется побольше заниматься программированием. Но тут неожиданно оказалось, что у меня ужасные communication skills. Что от программирования меня надо держать подальше, а то дров наломаю. Но все-таки она подозревает, что из меня еще может выйти толк, поэтому хочет дать еще один шанс и продлить испытательный срок на три месяца.
Пожалуй, самая обидная из обсуждаемых ситуаций была такая. У меня скоро отпуск, нужно срочно сдавать проект, а я так и не могу понять, что надо делать. Непосредственный заказчик ушел на повышение, ему некогда. На его место пришла другая начальница, которая в вопросе пока разбиралась слабо. Более того, она сломала ногу. Потому вышла на работу на день, и тут же заболела гриппом. Пользователи уровнем поменьше вообще не понимают, что я от них хочу. В лучшем случае говорят: "Обращайся к начальнику". В худшем – обещают подумать, а через неделю-две что-то отвечают невпопад. В техническом задании я нашел не просто неточности, а одну грубейшую ошибку. По идее, все эти вопросы должен решать бизнес-аналитик, но он ничего не знает и знать не хочет. И вот я осмелился побеспокоить менеджера, которая была была на больничном. Причем сделал это не самовольно, а по совету того самого аналитика. Менеджер ответила на мой вопрос, но при этом психанула. Причем злилалась она не на меня, а на аналитика, ведь это была его работа. Но аналитик через неделю уволился, а наказать кого-то все равно нужно... А то, что я успешно закончил проект на две недели раньше срока – это неважно.
Моя первая мысль, конечно, была: "Им нужно иметь в запасе сотрудников, которых можно быстро и безболезненно уволить, если будет такая задача. Тем более недавно намекали на потенциальные сокращения." Я отбивался от всех обвинений, но удар был слишком неожиданный, и я немного растерялся. Начальница пообещала, что изложит все соображения в письменном виде, и потом мы их обсудим перед тем, как посылать в отдел кадров и вышестоящему начальнику.
Ну, вообще не хочется опять вспоминать всю эту мерзость. Я хорошо подготовился, и через неделю снова оспорил все ее замечания, но уже более аргументировано. По всем пунктам обвинения начальница или согласилась, что я прав, или, по-крайней мере, что я не был основной виновный в ситуации... но своего решения все равно не поменяла. И потом я понял, почему. Как выяснилось, она уже давно отправила письмо в отдел кадров, а наша встреча – это просто шоу. Будь я хоть Цицероном, ничего бы не изменилось от моей зажигательной речи – письмо уже послано.
- А может, у тебя еще проблемы с пониманием английской культуры?
- Да, конечно, у меня есть проблемы! В Украине мой начальник просто в матерной форме объяснил бы, что он мной недоволен, и хочет меня уволить. А здесь – какие-то письма, подведения итогов, совещания... не пойму, что у Вас на самом деле на уме...
Мысленно я еще добавил словами Шарикова: "Мучаете себя, как при старом режиме!" Начальница смутилась и сказала, что не все так безнадежно. Что курсы по коммуникабельности еще могут вернуть меня на путь истинный.
Общее впечатление
Курсы продолжались два дня и стоили больше тысячи фунтов. Это в два-три раза дороже, чем хорошие курсы для ИТ-профессионалов. Организаторы переделывали счет-фактуру три раза, да еще и забывали отправить... В общем, я потратил много времени, чтобы добиться оплаты, и все равно деньги не успевали бы прийти к ним на счет до начала курсов. А без предоплаты они обычно не допускают на занятия. Пришлось немного поругаться.
Если коротко, то свои впечатления от курсов я могу выразить одним словом: bullshit. По большому счету, я не услышал ничего такого, о чем бы не рассказывали в школе или институте. Вот, например, "свежая" мысль о том, что во время спора надо стараться поставить себя на место собеседника. No shit, Sherlock? Интересно, зачем отдел кадров рекомендует именно эту фирму – это отмывание денег или просто идиотизм?
Самое ужасное, что теперь я должен отчитаться начальнице, чему научился, и как собираюсь изменить свою жизнь. А так в принципе было весело, и на работу не ходил два дня.
Что было интересного
Зато познакомился с интересными людьми: девушка из полиции, аппаратчица из Палаты Лордов, какой-то серьезный ИТ-консультант и индус-борец с глобальным изменением климата.
Полицейская девушка работает на должности office manager и занимается закупкой и ремонтом машин, а также организаций специальных мероприятий, вроде парадов. Диплом у нее, как ни странно, по английской литературе. За время разговора она три раза повторила, что первая работа у была в магазине Homebase, "но там приходилось носить ужасную униформу". Зато теперь с униформой все в порядке - видимо, девушка пошла в полицию за романтикой. Говорит, что уже прошла кучу похожих курсов (за счет организации, конечно), чтобы найти новую работу. Хочет ловить преступников, а не контролировать смену масла в двигателях.
Женщина из Палаты Лордов тоже оказалась фанатом всяческих курсов. Эту самую Палату стали сейчас прижимать, слегка отодвигать от кормушки. Вот она и надеется развить свою коммуникабельность, чтобы как-то этому противопостоять. Потому что лорды – очень милые, честные и бескорыстные люди, которые думают только об интересах страны, а не о собственном кармане (ха-ха). А еще "Лординя" долго жила в Калифорнии, вышла замуж за мексиканца, родила там троих детей, получила Грин Карту. Потом зачем-то поехала с мужем в Британию. Потом развелась, Грин Карту потеряла. А дети остались в Америке, они теперь граждане США. Вообщем, очень хочет назад в Америку, в Британии ей совсем не нравится. Не ожидал такое услышать от человека, работающего на правительство.
ИТ-консультант сетовал, что он умеет хорошо говорить, но не умеет слушать людей. Очень сильно ругал себя за этот недостаток. Но я обратил внимание, что он носит слуховые аппараты. Наверное, он на самом деле просто плохо слышит, во и все...
А наш учитель раньше был довольно большим начальником в сети супермаркетов Теско, так что он мог рассказать много интересных историй, и не только по теме занятия. Например, исследования показали: чем дальше положить вырезку от входа в магазин, тем вероятнее, что клиент выберет маленький кусок. Объяснение такое: когда у человека уже полная тачка продуктов, его больше пугает высокая цена; кажется, что и так уже набрал еды на большую сумму. Зато сахар как раз надо размещать далеко от кассы, потому что любому покупателю он время от времени нужен. Таким образом, мы заставляем покупателя изучить удаленные части магазина, заодно купить там что-нибудь еще.
Я тоже рассказал историю, которая когда-то вдохновила меня на выбор темы для дипломной работы: аналитики с удивлением обнаружили, что памперсы и пиво часто покупают вместе. Моя первая мысль: мужчины смотрят футбол, пьют пиво, не хотят отрываться от телевизора, поэтому ходят прямо под себя, в памерсы. На самом же деле молодые мамы посылают молодых отцов сбегать в магазин, и мужчины заодно берут себе пиво. Поэтому есть смысл ставить два эти товара рядом. Наш учитель такую историю не слышал.
Все ругали лондонское метро. Ведь каждые выходные чинят, а иногда и в рабочие дни. Вот в Харькове я за всю свою жизнь помню буквально несколько подобных случаев. Например, когда покойный Кушнарев выгонял торговцев с Благбазы на Барабашовку, то примерно месяц поезда не останавливались на Центральном Рынке. Якобы грунтовые воды. Ну, воды, наверное, были, но в тот момент все равно никто ничего не чинил, просто поезда не останавливались. Потом таки станцию укрепили колоннами, но это делалось уже без закрытия. Еще во время Диканевского Дождя затопило несколько станций. Но опять-таки, речь шла не о целых линиях.
Учитель говорит: "Это потому, что лондонское метро очень старое и сложное. Вот у меня знакомый метрополитеновец во время перерыва пошел прогуляться с бутербродом. Забрел в какой-то боковый туннель, а там стоят автоматчики. Они неприятно удивились. Он сказал, что дверь был открыта. Его выставили, дверь закрыли. Что там охраняют – загадка. А еще раньше у Королевской Почты была своя собственная сеть туннелей." Я пошутил, что еще у депутатов, наверное, есть свое секретное метро, чтобы не ездить на работе в давке. Но в каждой шутке есть доля истины. Говорят, на Вестминстере есть специальный выход, по которому можно прямо из метро попасть в парламент.
ИТ-консультант рассказал, как летел отдыхать в Мексику. Заплатил за extra legroom (сиденье с дополнительным местом для ног, обычно рядом с запасным выходом). Тем не менее, зазор между сиденьями был такой узкий, что человек едва мог протиснуться, о комфорте речь вообще не шла. Мягко говоря, неприятно провести в таком положении 8-10 часов. Более того, в случае аварийной посадки просто физически невозможно принять "безопасную позу" (наклониться вперед и руки положить на голову).
После скандала он и еще семь человек отказались лететь. В результате рейс задержали, потому что по правилам в таких случаях надо выгружать багаж "отказников" (вдруг там бомба?) Они извинились перед остающимися за задержку. Потом, уже на курорте другие пассажиры говорили: "Жалеем, что не сделали как вы". FirstChoice отказывалась возвращать деньги за билеты, потому что "пассажиры сошли самовольно." Самолет был чартерный, он не принадлежал непосредственно FirstChoice, но они уверенно говорили:
- Не может быть, что сиденья были узкие, у нас никогда раньше не было таких проблем.
- Хорошо, до встречи в суде! – сказали пассажиры.
Но в Мексике самолет промерили и убедились, что он не соответствует стандартам. Пассажиров отправили другим рейсом и вернули 20% стоимости путевки как компенсацию морального ущерба. Вывод из этой истории: потребителя не интересует, что у вас "никогда раньше не было таких проблем". Проблема есть сейчас, и ее надо решать.
Но и в Мексике все не совсем гладко. В их гостинице было трудно занять место возле бассейна. Так вот, хитрые немцы набирали полотенец (их можно было взять неограниченное количество, под залог) и с вечера занимали полотенцами шезлонги. Причем занимали с запасом, т.е. не просто для себя, а так, чтобы вообще никто рядом с ними не лежал. Но британский ум победил. После 11 вечера купаться запрещалось. Поэтому британцы предложили администрации гостиницы конфисковать все полотенца, оставленные на ночь. В результате немцы влетели на бабки (залог-то отдавать надо) и больше не шалили.
Оказалось, что все считают американцев очень вежливыми. Я тоже так считаю, но не ожидал услышать это от британцев. Учитель рассказывал про свой любимый американский отель, где он уже останавливался два раза. Когда приехал в третий раз, то все изменилось: гостиница была заполнена английскими жлобами, которые шумели, бросали пустые бутылки и недоденные хот-доги в бассейн и пр.
- Я съезжаю отсюда.
- Сэр, но по нашим правилам я не могу вернуть деньги.
- Понимаю, но что ж делать... Я любил ваш отель, но не могу больше смотреть на это британское быдло! (естественно, это было сказано с британским акцентом).
Девушка вдруг широко улыбнулась: "О, как я Вас понимаю, сэр!" И вернула все деньги.
Уже, наверное, в двадцатый раз мне рассказали о том, что только 7% нашего общения завязано на слова, 38% - на голос, а остальные 55% - на язык телодвижений. Не верю! Да, когда знакомишься в баре, то, наверное, слова означают даже меньше 7%, а вся сила – в языке телодвижений. У Чижа есть песня "Руссо матросо", как раз на эту тему. Но когда я иду на семинар, меня мало интересует тон голоса и жесты докладчика. Я никогда не напишу про него восхищенную заметку в блоге, если он несет чушь.
Зато мне понравилась рекомендация "рисовать картину словами" во время разговора по телефону. Часто, когда звонишь в какой-нибудь customer service, тебя развлекают фразами типа: "Сейчас переключусь в другую систему и введу номер Вашего счета... извините, немного медленно работает сегодня система... я вывожу это на экран... и я вижу, что..." Я думал, что это делается, просто чтобы клиент не скучал и не положил трубку. Ну, и чтоб меньше злился, что приходится ждать. Но, оказывается, есть и еще один смысл: усилить ощущение, что ты разговориваешь с живым человеком, а не с роботом; представить, как он выглядит, в каком офисе сидит, какой у него компьютер, как капает дождь в его окне, как тормозит его база данных – точно так же, как у и тебя самого сегодня.
Во время занятия мне кто-то позвонил. Я думал, важный звонок с работы. Оказалось, реклама. Вообще в Англии меня редко беспокоят такими звонками, в Америке было гораздо чаще. Через некоторое время опять звонок:
- Привет, чувак! Ну че, как житуха, как курсы?
- Ну, ничего себе! Рекламщики как-то пронюхали, что я на курсах! Старший Брат смотрит на меня? – подумал я.
А оказалось, что это как раз таки звонил мой коллега с работы.
Разбирали некоторые изысканные староанглийские словечки. Сразу вспомнилось, как мы с Мариной мучались 5-7 лет назад, готовясь к TOEFL, GRE, GMAT... Я с удовлетворением отметил, что британцам было почти также тяжело сделать тест, как и мне. Потом учились переписывать письма разъяренным клиентам так, чтобы использовать только простой, понятный язык, без канцелярита. Опять-таки, британцы мучались не меньше меня. Было одно письмо, смысл которого просто никто не понял. Хотя грамматика в порядке, и слова понятные, а вместе не складывается.
Все делали маленькие презентации. Я настоял, чтобы у доски. Вообще остальные боялись, хотели презентовать пара на пару. Но ведь это очень важно – стоять перед залом, пусть и маленьким. Когда ты рассказываешь что-то одному человеку, это совсем не то. Учитель рассказал о методе PROVE (Proposition, Reason, Objections, Verify, End) и сам сделал минипрезентацию как пример. В общем, это то, чему с детства учат американских школьников. Но все сделали такие круглые глаза, как будто никогда раньше не писали эссе. "Гениально, какая интересная идея!" Я лично показал пример и выступил первым. Лординя выступала минут 15 вместо положенных 2-3, мусолила одно и то же. Мда, думаю, она не добьется успехов в политике, теперь ничто не спасет Палату Лордов от переезда в другое помещение.
Ну, а совсем хорошо я себя почувствовал, когда мы перешли к "анализу аргумента" и похожим вещам. Народ просто не мог понять, что нужно делать. Явно никто из них не сдавал GRE. Например, учитель дал такую тему: "Докажите мне, что запрет на курение в общественных местах – это ошибка". Никто из присутствующих не курил, и запрет все поддерживали. Но в этом и смысл – никого не интересуют твое личное мнение. Тебе дают утверждение – ты должен его аргументировать. Или наоборот – дают аргумент, а ты должен объяснить, почему он слабый (даже если на самом деле ты с ним согласен).
В случае с курением я сразу набросал несколько идей: разоряются пабы, потому что народ перестает туда ходить; люди теперь курят не в пабе, а на улице, на глазах у детей, которые начинают им подражать; зимой выбегают покурить, простужаются, потом государство должно их лечить; падают продажи сигарет, и государство недополучает налоги; нарушаются наши гражданские свободы и т.д.
Учитель предложил, чтобы мы сами выбрали похожую тему. Идей ни у кого не было, и я уверенно и твердо сказал: "Государство не должно поддерживать банки. Пусть разоряются. Burn, baby, burn! Ведь это они довели страну до кризиса." На самом деле я так не считаю, но никто, кроме учителя, не понял, что я просто играю свою роль. Меня горячо начали убеждать, что я не прав, и пришлось уж играть до конца. При этом меня поразило, как бездумно люди повторяют аргументы, вбиваемые в голову через Би-Би-Си.
- Надо поддержать банки, чтобы они начали снова выдавать ипотечные кредиты и спасли рынок жилья.
- Зачем его спасать? Let the bubble burst! Год назад люди жаловались, что цены на жилье неоправданно высокие, правительство ничего не делает. Теперь цены упали (причем не так уж сильно), и люди опять ругают правительство – где же логика?
- Но если разорятся банки, как же мы будем получать зарплату?
- Как-как... Наличными в кассе, как в Украине было всего несколько лет назад.
- А где хранить сбережения?
- В огороде закапывать. А вообще у нас было так хреново, что у подавляющего большинства людей ничего сберегать все равно не получалось.
- Ладно, это работник. А где работодатель хранит деньги?
- Как где, в сейфе, черным налом. И налоги платить не нужно, очень удобно.
- Ну, все равно, нам надо запустить экономику, нужны дешевые кредиты, поэтому надо поддержать банки.
- Послушайте, кризис начался как раз из-за того, что экономика была перегрета. Слишком легко было получить дешевый кредит. И что же правительство делает сейчас? Снова старается дать всем дешевые кредиты. Так поможет ли это? Мне кажется, это все равно, что давать наркотики, чтобы немного облегчить ломку.
- Но если не запустить экономику, то фунт совсем обесценится.
- Ну и хрен с ним. У нас была гиперинфляция, поэтому все пользовались долларами.
- Но ведь сейчас и у Америки тоже проблемы, доллар тоже может рухнуть.
- Значит, храните деньги в евро. Или в юанях. Все сразу не может упасть одновременно.
- А как бы с теми людьми, кто потеряет сбережения в обанкротившихся банках?
- Жаль, конечно, не повезло. У нас тоже после развала СССР вклады пропали куда-то, и до сих пор не нашли. Не привыкнешь – подохнешь, не подохнешь – привыкнешь.
Делегаты в ужасе смотрели на меня и молчали. Каждый с надеждой думал, что Англия – это все-таки не Украина, и что любимая Королева не допустит такого беспредела.
Вообщем, порезвился я на славу. Но что я должен изменить в своей жизни после этих курсов, чтобы начальница осталась довольна – увы, я так и не понял...
четверг, 26 февраля 2009 г.
Outbrain: "Читателям также нравитЬся"
Мне уже не раз делали замечание, что в заголовке "Читателям также нравитЬся" (под постами) не нужен мягкий знак в последнем слове. Я раньше отвечал индивидуально, теперь решил сообщить сразу всем: меня тоже это злит, я тоже не люблю, когда пишут с ошибками. Моя мама - редактор, в конце концов!
Я просто не могу исправить этот заголовок. Он автоматически генерируется скриптом, который мне дал Outbrain для подсчета рейтинга постов. Уже два раза им писал, они обещали, но пока никак...
Я просто не могу исправить этот заголовок. Он автоматически генерируется скриптом, который мне дал Outbrain для подсчета рейтинга постов. Уже два раза им писал, они обещали, но пока никак...
понедельник, 23 февраля 2009 г.
Неприятности с Wizzair и Alitalia
Конечно, 200 гривень (меньше 20 фунтов) - это удивительная цена для билета Киев-Лютон. Потом на проезд по Лондону уйдет больше, даже если использовать общественный транспорт. Правда, обратный билет у Wizzair стоит аж в четыре раза дороже. Я думаю, потому что аэропортные сборы берутся в стране вылета, ведь именно там больше возни (проверка на безопасность, обслуживание самолетов и пр.) В любом случае, меньше чем за 100 фунтов можно слетать из Украины в Англию - это очень заманчиво.
Просто надо быть готовым к неожиданностям. Ехала теща к нам в гости, и меньше чем за час до вылета из Киева рейс задержали... на 2 дня. Гостиница в аэропорту не очень большая, на всех могло не хватить. И вообще они в Киеве недешевые. Компенсировать проживание Wizzair не предлагал. Кроме того, она ехала всего на десять дней, и торчать лишних два дня в Киеве не хотелось.
Марина быстро нашла, что можно полететь через Рим, но надо бежать за билетом прямо сейчас. В кассе сказали: "Нет такого самолета". Марина заставила маму пойти в кассу еще раз. Самолет-таки нашелся, но билет стоил чуть ли не в четыре раза дороже. Принимать оплату карточкой или продать билет только в одну сторону они отказались. Спорить времени не было. Наличных было впритык, пришлось бежать в обменку продавать только что купленные фунты. Кто-то в толпе услышал, о чем теща говорила по телефону, и несчастные тут же бросились в итальянскую кассу. Ее едва не оттеснили. Итальянский самолет немного подождал. И, как выяснилось, не только из альтруизма: если бы не отметили рейс Wizzair, они бы летели практически пустые.
Самолет прилетал в 11 вечера, т.е. пассажиры выходят из аэропорта уже ближе к 12 ночи. Пришлось ехать домой на такси. Вдобавок в тот день у нас как раз были неприятности с трубой. Ну, главное - все позади... или нет?
На следующий день звоним в Wizzair, чтобы вернули деньги. Они говорят: "Вернуть не можем, это противоречит наших правилам. Можем только поменять на другой билет в течение следующих трех месяцев". Во-первых, у нас не было каких определенных планов, что лететь в Украину именно в ближайшие три месяца. Во-вторых, в таком случае нам будет нужен билет Лондон-Киев-Лондон, а они согласны дать только Киев-Лондон-Киев.
Но оказалось достаточным немного повысить голос, и нам тут же пообещали вернуть деньги на карточку. Правда, уже две недели прошло - пока ничего не получили. Они говорят, что это была не их вина - за час до отлета Лютон сказал, что не принимает рейс. Наверное, это правда - два дня была плохая погода, многие рейсы отменяли. Правда, в день вылета там уже была хорошая погода, но, очевидно, накопилась очередь из отмененных самолетов. И конечно, бюджетным авиакомпаниям приходится ждать дольше, чем дорогим. Еще я им написал письмо насчет компенсации ущерба - пришел ответ, что из-за нехватки персонала жалобы рассматриваются в течение месяца.
Опаньки! В обратном билете Alitalia и дата вылета, и дата возвращения указаны с ошибками! Конечно, в суматохе теща не проверила даты. Тем более, что если английского не знаешь, то эти даты не очень бросаются в глаза. Ну, ладно, я еще понимаю, что кассир мог не расслышать или перепутать дату возвращения. Но на первом билете было написано буквально так: "вылет 7 февраля, билет недействителен до 8 февраля". А посадочный талон дали на 6 февраля. Куда смотрят компьютеры? Позвонили в Alitalia. Они долго спрашивали про серийные номера, а потом сказали, что такого билета нет в их базе. Что это paper ticket, а не e-ticket, поэтому надо лично ехать в Хитроу. Я вообще думал, что "бумажные билеты" уже давно не продаются на международных рейсах.
Поперлись в Хитроу - от нас туда ехать 2-3 часа. Доплатили еще полтинник за смену даты вылета. В принципе, можно было и посильнее с ними поругаться, чтобы не доплачивать. Ну а с другой стороны, пассажир ведь тоже должен был проверить правильность выданных документов. В Рим летит два утренних самолета - 6:00 и 7:20 утра. На более поздний самолет мест не было, так что в день возвращения опять-таки пришлось брать такси, чтобы успеть на 6 утра. Ну, или другой вариант был приехать с вечера и ночевать в аэропорту.
Марина хотела заранее выбрать место - обычно это можно сделать на сайте за 24 часа до вылета. Но у сайт стал спрашивать e-ticket number, которого у нас не было. Ну, ладно - раньше никогда не было проблем из-за этого, место просто дадут прямо в аэропорту. В Хитроу нас ждет очередной сюрприз:
- А у нас нет мест!
- Как нет?
- Надо было заранее зарезервировать место.
- Что значит "зарезервировать"? Мы же приезжали в аэропорту, доплачивали... А место мы не могли выбрать, потому что у нас не e-ticket.
Небольшой скандал, после этого тещу соглашаются отправить в Рим следующим рейсом, на 7:20 (на который раньше не было мест!)
- ...кстати, а Вы же отменили свой рейс Рим-Киев.
- Нет, не отменяли!
- 11 февраля позвонили и отменили.
- 7 февраля мы были тут, в аэропорту! После этого мы с Вашей авиакомпанией не общались!
- ...ну, ладно, мы поставим ее на standby.
- В каком смысле?
- Ну, будет сидеть в Риме и ждать. Если в самолете появится место, то ее посадят.
- Моя мама не говорит ни по-английски, ни по-итальянски! Ее нельзя ставить на standby! Немедленно делайте нормальный посадочный талон!
Оптимизм сотрудницы напомнил мне фильм "Гараж": "А если автомобиль найдется, мы сразу же поставим ее в наш резерв!" После скандала и совещания с менеджером место нашлось. Даже не одно, потому что девочка спросила: "Вам возле окна?"
Так что будем теперь писать жалобу еще и в Alitalia. Хотя изначальной причиной неприятностей был Wizzair, но на Alitalia я зол больше. Когда берете за билеты в 4 раза больше денег, то потребитель вправе ожидать лучшего сервиса.
Просто надо быть готовым к неожиданностям. Ехала теща к нам в гости, и меньше чем за час до вылета из Киева рейс задержали... на 2 дня. Гостиница в аэропорту не очень большая, на всех могло не хватить. И вообще они в Киеве недешевые. Компенсировать проживание Wizzair не предлагал. Кроме того, она ехала всего на десять дней, и торчать лишних два дня в Киеве не хотелось.
Марина быстро нашла, что можно полететь через Рим, но надо бежать за билетом прямо сейчас. В кассе сказали: "Нет такого самолета". Марина заставила маму пойти в кассу еще раз. Самолет-таки нашелся, но билет стоил чуть ли не в четыре раза дороже. Принимать оплату карточкой или продать билет только в одну сторону они отказались. Спорить времени не было. Наличных было впритык, пришлось бежать в обменку продавать только что купленные фунты. Кто-то в толпе услышал, о чем теща говорила по телефону, и несчастные тут же бросились в итальянскую кассу. Ее едва не оттеснили. Итальянский самолет немного подождал. И, как выяснилось, не только из альтруизма: если бы не отметили рейс Wizzair, они бы летели практически пустые.
Самолет прилетал в 11 вечера, т.е. пассажиры выходят из аэропорта уже ближе к 12 ночи. Пришлось ехать домой на такси. Вдобавок в тот день у нас как раз были неприятности с трубой. Ну, главное - все позади... или нет?
На следующий день звоним в Wizzair, чтобы вернули деньги. Они говорят: "Вернуть не можем, это противоречит наших правилам. Можем только поменять на другой билет в течение следующих трех месяцев". Во-первых, у нас не было каких определенных планов, что лететь в Украину именно в ближайшие три месяца. Во-вторых, в таком случае нам будет нужен билет Лондон-Киев-Лондон, а они согласны дать только Киев-Лондон-Киев.
Но оказалось достаточным немного повысить голос, и нам тут же пообещали вернуть деньги на карточку. Правда, уже две недели прошло - пока ничего не получили. Они говорят, что это была не их вина - за час до отлета Лютон сказал, что не принимает рейс. Наверное, это правда - два дня была плохая погода, многие рейсы отменяли. Правда, в день вылета там уже была хорошая погода, но, очевидно, накопилась очередь из отмененных самолетов. И конечно, бюджетным авиакомпаниям приходится ждать дольше, чем дорогим. Еще я им написал письмо насчет компенсации ущерба - пришел ответ, что из-за нехватки персонала жалобы рассматриваются в течение месяца.
Опаньки! В обратном билете Alitalia и дата вылета, и дата возвращения указаны с ошибками! Конечно, в суматохе теща не проверила даты. Тем более, что если английского не знаешь, то эти даты не очень бросаются в глаза. Ну, ладно, я еще понимаю, что кассир мог не расслышать или перепутать дату возвращения. Но на первом билете было написано буквально так: "вылет 7 февраля, билет недействителен до 8 февраля". А посадочный талон дали на 6 февраля. Куда смотрят компьютеры? Позвонили в Alitalia. Они долго спрашивали про серийные номера, а потом сказали, что такого билета нет в их базе. Что это paper ticket, а не e-ticket, поэтому надо лично ехать в Хитроу. Я вообще думал, что "бумажные билеты" уже давно не продаются на международных рейсах.
Поперлись в Хитроу - от нас туда ехать 2-3 часа. Доплатили еще полтинник за смену даты вылета. В принципе, можно было и посильнее с ними поругаться, чтобы не доплачивать. Ну а с другой стороны, пассажир ведь тоже должен был проверить правильность выданных документов. В Рим летит два утренних самолета - 6:00 и 7:20 утра. На более поздний самолет мест не было, так что в день возвращения опять-таки пришлось брать такси, чтобы успеть на 6 утра. Ну, или другой вариант был приехать с вечера и ночевать в аэропорту.
Марина хотела заранее выбрать место - обычно это можно сделать на сайте за 24 часа до вылета. Но у сайт стал спрашивать e-ticket number, которого у нас не было. Ну, ладно - раньше никогда не было проблем из-за этого, место просто дадут прямо в аэропорту. В Хитроу нас ждет очередной сюрприз:
- А у нас нет мест!
- Как нет?
- Надо было заранее зарезервировать место.
- Что значит "зарезервировать"? Мы же приезжали в аэропорту, доплачивали... А место мы не могли выбрать, потому что у нас не e-ticket.
Небольшой скандал, после этого тещу соглашаются отправить в Рим следующим рейсом, на 7:20 (на который раньше не было мест!)
- ...кстати, а Вы же отменили свой рейс Рим-Киев.
- Нет, не отменяли!
- 11 февраля позвонили и отменили.
- 7 февраля мы были тут, в аэропорту! После этого мы с Вашей авиакомпанией не общались!
- ...ну, ладно, мы поставим ее на standby.
- В каком смысле?
- Ну, будет сидеть в Риме и ждать. Если в самолете появится место, то ее посадят.
- Моя мама не говорит ни по-английски, ни по-итальянски! Ее нельзя ставить на standby! Немедленно делайте нормальный посадочный талон!
Оптимизм сотрудницы напомнил мне фильм "Гараж": "А если автомобиль найдется, мы сразу же поставим ее в наш резерв!" После скандала и совещания с менеджером место нашлось. Даже не одно, потому что девочка спросила: "Вам возле окна?"
Так что будем теперь писать жалобу еще и в Alitalia. Хотя изначальной причиной неприятностей был Wizzair, но на Alitalia я зол больше. Когда берете за билеты в 4 раза больше денег, то потребитель вправе ожидать лучшего сервиса.
пятница, 20 февраля 2009 г.
Глубокая чистка каналов
И снова у Марины проблема с зубом, который уже лечила английская стоматологиня. Марина уже ей не доверяет, записалась напрямую к хозяину стоматологической практики. Хозяин посмотрел и говорит: "Нет, она хорошо сделала зуб, просто недостаточно глубоко почистила каналы. Могу переделать. Но все равно мы не можем почистить канал очень глубоко, у нас нет таких иголок. Этим занимаются не простые стоматологи, а специалисты по глубокой чистке. У них прием стоит 900 фунтов".
У меня сразу же вопрос: "Так что, неужели нельзя купить эти замечательные иголки?" Или они делаются из редчайшего сплава метеоритного железа по миллиону долларов за грамм? Или, может, с использованием нанотехнологий, как сейчас модно?
У меня сразу же вопрос: "Так что, неужели нельзя купить эти замечательные иголки?" Или они делаются из редчайшего сплава метеоритного железа по миллиону долларов за грамм? Или, может, с использованием нанотехнологий, как сейчас модно?
среда, 18 февраля 2009 г.
Труба-дело
Английские дизайнеры довольно оригинально решили разместить бойлер, канализационные и водопроводные трубы в нашей спальне. Ну, как бы не совсем в спальне - это все находится во встроенном шкафу. Несколько неудобно, потому что если ночью работает стиральная машина или Марина моется, то вода громко шумит и не дает спать. Но вообщем терпимо.
Однажды вечером заметили, что во встроенном шкафу промокло ковровое покрытие. Не очень сильно, но все же... Явной течи мы нигде не заметили. Решили, что из-за резкого похолодания с холодной водопроводной трубы накапал конденсат. Потерли ковровое покрытие бумажными полотенцами, включили dehumidifier (осушитель воздуха)...
А на следующее утро Марина обнаружила, что лужа стало гораздо больше. На бойлере написан телефон аварийной службы. Позвонила, там долго переспрашивали наш адрес (блин, уже второй год, как дом построили, и до сих пор его нет во многих базах!) Пообещали скоро позвонить. Перезвонили только вечером, чтобы спросить, довольны ли мы проделанной работой. Хотя никто от них не приходил.
Марина заранее подозревала, что так и будет, поэтому на всякий случай позвонила нашему лэндлорду (точнее, агентству). Агентство быстро прислало строителей, они устранили проблему, но зато потом написали нам вот такой мерзкий емейл:
"Перелив" - это довольно странная конструкция. Из бойлера выходит труба, затем труба кончается, а под ней на некотором расстоянии висит другая другая труба. Видимо, задумка такая - если бойлер неисправный, то пар и кипяток прямиком попадают в наш шкаф. Ну, а в нормальной ситуации кипяток просто понемногу капает в нижниюю трубу. Чем-то напоминает самогонный аппарат. По версии строителей, мы сдвинули (или сломали?) эти трубы, и излишний кипяток из бойлера капал прямо на пол.
Насчет расходов я не понял. То ли они хотят нас просто оштрафовать за испорченный ковер, то ли еще взять деньги за установку новых труб.
Марина очень разозлилась, но все же взяла себя в руки и написала вежливый ответ, абсолютно без использования матерных слов. Я немного подправил, и вот что у меня вышло:
Ответа на это не последовало.
Однажды вечером заметили, что во встроенном шкафу промокло ковровое покрытие. Не очень сильно, но все же... Явной течи мы нигде не заметили. Решили, что из-за резкого похолодания с холодной водопроводной трубы накапал конденсат. Потерли ковровое покрытие бумажными полотенцами, включили dehumidifier (осушитель воздуха)...
А на следующее утро Марина обнаружила, что лужа стало гораздо больше. На бойлере написан телефон аварийной службы. Позвонила, там долго переспрашивали наш адрес (блин, уже второй год, как дом построили, и до сих пор его нет во многих базах!) Пообещали скоро позвонить. Перезвонили только вечером, чтобы спросить, довольны ли мы проделанной работой. Хотя никто от них не приходил.
Марина заранее подозревала, что так и будет, поэтому на всякий случай позвонила нашему лэндлорду (точнее, агентству). Агентство быстро прислало строителей, они устранили проблему, но зато потом написали нам вот такой мерзкий емейл:
Строители доложили нам, что вы храните вещи во встроенном шкафу. Это нарушило работу перелива и вызвало течь на ковер.
Мой коллега спрашивал, храните ли Вы что-то в шкафу. Вы ответили, что нет, что абсолютно не соответствует действительности. Так что все расходы мы возложим на Вас.
"Перелив" - это довольно странная конструкция. Из бойлера выходит труба, затем труба кончается, а под ней на некотором расстоянии висит другая другая труба. Видимо, задумка такая - если бойлер неисправный, то пар и кипяток прямиком попадают в наш шкаф. Ну, а в нормальной ситуации кипяток просто понемногу капает в нижниюю трубу. Чем-то напоминает самогонный аппарат. По версии строителей, мы сдвинули (или сломали?) эти трубы, и излишний кипяток из бойлера капал прямо на пол.
Насчет расходов я не понял. То ли они хотят нас просто оштрафовать за испорченный ковер, то ли еще взять деньги за установку новых труб.
Марина очень разозлилась, но все же взяла себя в руки и написала вежливый ответ, абсолютно без использования матерных слов. Я немного подправил, и вот что у меня вышло:
Спасибо за то, что Вы быстро устранили проблему с течью.
Прежде всего, произшло недоразумение. Женщина, с которой говорила моя жена, задала лишь один вопрос: "Откуда течет, Вы видите?". Моя жена ответила: "Нет", потому что на тот момент это было непонятно. Затем ее переключили к кому другому, чтобы обсудить, как оставить ключи от квартиры строителям. НИ РАЗУ не возникал вопрос о том, что лежит в нашем шкафу.
Наш контракт не запрещает хранить одежду в шкафу. Вообщем-то, шкафы для того и придуманы, чтобы хранить в них одежду, не правда ли? Мы постараемся быть осторожнее в будущем, но вообщем водопроводные трубы не должны рассыпаться из-за того, что рядом с ними висит пара костюмов или рубашек. Я не думаю, что это была истинная причина. Кстати, за последний месяц точно такая же проблема была у наших ближайших соседей. Приходилось даже выключать воду в доме на один день - вот такое вот странное совпадение!
Мы оба знаем, что качество строительных работ у Ardmore далеко от совершенства. Например, у нас в квартире постоянно проблемы с разводкой для ламп. И лампочки в коридоре меняют каждую неделю. Явно что-то в доме не так с электрикой. А год назад моя жена могла серьезно пострадать или даже погибнуть из-за дефективной стеклянной двери в ванной. К счатью, она вышла из ванны буквально за секунды до того, как дверь рассыпалась на мелкие кусочки. Ardmore едва избежала тогда судебного процесса. Но я помню, первоначально Вы подозревали, что мы сами сломали эту дверь. Только после несколько похожих случаев Ardmore признала, что все стеклянные двери в доме должны быть заменены.
В любом случае, в этот раз проблема была вовремя замечена и быстро ликвидирована. Ковер высушен, и все выглядит нормально.
Ответа на это не последовало.
вторник, 17 февраля 2009 г.
О бюрократии и .NET Remoting
Как и у любой технологии, у .NET Remoting есть свои недостатки, особенно при неправильном использовании.
Систему, которую я сопровождаю, использует всего лишь 50-70 пользователей. Сервер приложений один, failover или load balancing нет, клиентские приложения друг с другом не общаются, все работает в локальной сети... вообщем, мне не очень понятно, зачем вообще разработчики решили использовать Remoting – вроде обычного клиент-сервера бы хватило... Ну, решили, и ладно. Наверное, индусы хотели сделать по-пацански – отделить бизнес-логику от интерфейса. Правда, все равно ни фига не отделили на самом деле, но речь не о том.
Прикол в том, что некоторые серверные объекты кэшируются на клиентской стороне, и если я обновляю сервер приложений, то нужно обязательно обновить и клиенские программы (у всех пользователей)! Иначе они что-то ругаются насчет сериализации. У меня не было времени разобраться - наверное, эту проблему можно решить. Но просто смешно получается – часть бизнес-логики якобы отделена от клиента, но на самом деле клиенты жестко привязаны к серверу, и даже малейшее изменение в серверном коде приводит к ошибке.
А вторая потенциальная проблема с Remoting – это производительность... хотя тут можно поспорить, что вообще-то "все дело в ручках". Итак, вот моя грустная история...
Есть некая форма для конфигурирования системы, она позволяет задавать ключевые даты в производственном цикле (например, "Книга подписана в печать", "Отправлена на склад", "Протестирована на безопасность" и пр.). По идее, пользователи должны регулярно проверять, все ли там настроено правильно. Но то ли кто-то из менеджеров уволился, то ли еще что-то – вообщем, почти год никто ее не контролировал. В результате постепенно накапливалось все больше и больше ошибок в графиках производства соответствующих книг, их приходилось исправлять вручную.
Ну, вроде не беда, потому что форма-то умная. Когда ты исправляешь или вносишь какой-то параметр, то она задним числом пересчитывает все, что нужно. Да только за этот год бездействия уже накопились десятки тысяч несоответствий, и форма просто зависала, не справившись с таким backlog. Мне поставили задачу – улучшить производительность, чтобы пользователи смогли внести изменения за разумное время (не больше нескольких минут ожидания).
Я заглянул в исходники и ужаснулся. Нет, оно вроде как все круто – ООП, паттерны, но для каждой книги делаются десятки вызовов хранимых процедур. Т.е. очень много логики реализовано не на стороне базы данных. Это не проблема, когда мы работаем с одной книгой. Но когда тот же самый код используется для нескольких тысяч книг – вот тут-то начинаются проблемы. Индусы, конечно, об этом не подозревали - ведь когда они разрабатывали систему, база данных была маленькая.
Хотелось все нафиг переписать, но у меня было слишком мало времени. А главное, я не очень понимал, как оно все должно работать. Спецификация написана несколько лет назад, с тех пор систему меняли... Посоветовался со старшим товарищем, и он предложил мне просто кое-что немного оптимизировать, не переделывая по сути. Какая, собственно, разница – ведь мы говорим об одноразовой операции (пересчитать ключевые даты задним числом). А по плану через годик эту систему вообще должны заменить другой, так что нет смысла сильно напрягаться.
Так я и сделал - оптимизировал одну хранимую процедуру, и результат вроде был прекрасный. Производительность выросла в 10-20 раз, я был очень доволен собой. Протестировали, собрали все подписи, внедрили... Менеджер начинает вносить ключевые даты, вроде уже большую часть внес...
И тут у него начинает валить ошибка: Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction. Какая такая distributed transaction? Моя первая мысль - это что-то связанное с two-phase commit. Но у нас же всего лишь одна база данных... Быстрый поиск в Google подсказал идею: на самом деле сообщение об ошибке не несет в себе полезной информации, .NET Remoting ее скрывает; а истинная причина – таймаут.
Во время тестирования у меня такая ситуация не возникала. Во-первых, в большинстве случаев моя процедура отработывает в течение нескольких секунд, но для пары "проблемных" дат требуется минуты. Во-вторых, на тестовом сервере я был один, а рабочем сервере нагрузка больше, там десятки пользователей. Да еще он и виртуализирован к тому же.
Так я и сказал начальнице. Но она подняла панику: "Все пропало, ты все сломал, надо откатывать релиз! Я не верю, что это таймаут." Вообщем, я потратил пару дней на отработку других гипотез, но как часто бывает, первая мысль оказалась самой верной. Это действительно был таймаут. Причем он не имел отношения к распределенной транзакции между двумя базами данных – таймаут был прописан для транзакций COM+.
Главная проблема в том, что на тестовом сервере все работает, не удается воспроизвести ошибку. Я специально вставил задержку в свою процедуру... ага, теперь есть точно такая же ошибка, как у пользователя. Сначала я попросил DBA увеличить таймаут в настройках MSDTC. Хм, не помогает, блин – ровно через 5 минут после запуска валится ошибка. Оказалось, индусы использовали атрибут System.EnterpriseServices.TransactionAttrubute. Эти "5 минут" были тупо забиты в тексте программы, а не вынесены в конфигурационный файл.
Что же теперь делать? Увеличить таймаут просто так не могу, потому для этого надо перекомпилировать мой сервер приложений. А если я это сделаю, то перестанут работать все клиенты (смотри выше, клиенты жестко привязаны к определенной версии сервера). А переставить клиентов – это вообще кошмар: для этого нужно снова собирать разрешения со всяких менеджеров, а потом ждать недели три, пока Desktop Team соизволит выполнить мой заказ.
Первая простая идея: на тестовом сервере процедура работает (успевает завершится до окончания таймаута). Значит, вероятно, она будет работать и на рабочем сервере, но только если нет сильной нагрузки. Давайте я просто на выходных (когда никто не работает) подключусь из дома к нашей сети выполню эту операцию?
Начальница категорически говорит "нет": данные принадлежат пользователям, программисты не имеют право их менять самостоятельно, потому что это противоречит Sarbanes-Oxley и т.д. Я все это понимаю, но в данном случае ситуация доведена до абсурда. Фактически нужно ввести одну дату и нажать кнопку "Сохранить", остальное делается автоматически. Какая разница, кто это сделает? Мне не нужно напрягать мозги, что-то там считать... весь вопрос только в том, кто нажимает кнопку "Сохранить".
Ну ладно, нет так нет. Вторая идея: я увеличиваю таймаут, но устанавливаю новую версию программы только на компьютере пользователя (и то временно). Он нажимает кнопку "Сохранить", и я ему ставлю опять старую версию. Этот вариант начальнице тоже не нравится.
Выход у меня остается один – думать, как оптимизировать какую-нибудь хранимую процедуру или создать новый индекс, чтобы уложиться в эти злосчастные 5 минут. С помощью SQL Profiler выяснил, что одного индекса действительно не хватает.
Создал – производительность улучшилось, укладываюсь в 2 минуты. Но достаточно ли этого? Я ведь не знаю, насколько быстро будет на рабочем сервере; может, там будет 10 минут. Кстати, странно – почему на тестовом сервере 2 минуты, а если и база, и сервер приложений на моем компьютере, то всего 30 секунд? У меня что, компьютер быстрее сервера?
Всего запускалось 11 тысяч запросов. Пытаюсь оптимизировать дальше. И вдруг понимаю удивительную вещь: все эти 11 тысяч запросов выполняются всего лишь за несчастных 8 секунд! Остальное время (почти две минуты) уходит на общение между клиентом и сервером приложений через .NET Remoting! Вот это оказалось узким местом. Вот почему на моем компьютере работает в 4 раза быстрее – не нужно слать всякую ерунду по сети.
Т.е. оптимизировать что-то дальше бесполезно. Даже если все 11 тысяч запросов будут выполнятся мгновенно, это мне почти не поможет. Мне остается только создать индекс и надеятся, что этого будет достаточно.
Но не все так просто! Нельзя просто так взять и создать индекс – "пользователи сначала должны его протестировать". Говорю начальнице – как протестировать? Ввести ту самую злосчастную дату на тестовом сервере, нажать "Сохранить" и убедиться, что заработало быстрее? Но ведь я только что сделал то же самое!
Она краснеет, ей тоже понятно, что это идиотизм, и риск при создании нового индекс близок к нулю, и это вопрос скорее к DBA, а не к пользователям... но правила есть правила. Пытаюсь отловить пользователя, что он "протестировал" и дал добро. А он то занят, то снег в Лондоне пошел, и неделю на работу никто не ходил... за эту неделю накопились еще новые несоответствия в базе, и процедура работает еще медленее. К счастью, после долгих мучений мне повезло. Мы уложились в 4 минуты.
Все хорошо, что хорошо кончается. Были написаны сотни емейлов, большие начальники обсуждали все это на совещаниях, а проблема-то не стоила выеденного яйца. Я понимаю – change control очень важен, но ведь есть же еще и здравый смысл! Бывают ситуации, когда нужно чуть-чуть отойти от правил. Я потратил намного больше времени на политику, чем на техническую сторону.
Кроме описанных здесь проблем с .NET Remoting, был еще один интересный момент: за те полтора месяца, которые прошли между тестированием и внедрением системы, появились тысячи новых несоответствий в базе данных. Просто потому, что тестировали мы перед Рождеством, в тихий период. А к концу января пользователи уже навводили кучу новой информации, и это тоже сильно повлияло на произодительность. Так что я извлек для себя важный урок: бывают случаи, когда ценность проведенных тестов резко уменьшается с течением времени.
Систему, которую я сопровождаю, использует всего лишь 50-70 пользователей. Сервер приложений один, failover или load balancing нет, клиентские приложения друг с другом не общаются, все работает в локальной сети... вообщем, мне не очень понятно, зачем вообще разработчики решили использовать Remoting – вроде обычного клиент-сервера бы хватило... Ну, решили, и ладно. Наверное, индусы хотели сделать по-пацански – отделить бизнес-логику от интерфейса. Правда, все равно ни фига не отделили на самом деле, но речь не о том.
Прикол в том, что некоторые серверные объекты кэшируются на клиентской стороне, и если я обновляю сервер приложений, то нужно обязательно обновить и клиенские программы (у всех пользователей)! Иначе они что-то ругаются насчет сериализации. У меня не было времени разобраться - наверное, эту проблему можно решить. Но просто смешно получается – часть бизнес-логики якобы отделена от клиента, но на самом деле клиенты жестко привязаны к серверу, и даже малейшее изменение в серверном коде приводит к ошибке.
А вторая потенциальная проблема с Remoting – это производительность... хотя тут можно поспорить, что вообще-то "все дело в ручках". Итак, вот моя грустная история...
Есть некая форма для конфигурирования системы, она позволяет задавать ключевые даты в производственном цикле (например, "Книга подписана в печать", "Отправлена на склад", "Протестирована на безопасность" и пр.). По идее, пользователи должны регулярно проверять, все ли там настроено правильно. Но то ли кто-то из менеджеров уволился, то ли еще что-то – вообщем, почти год никто ее не контролировал. В результате постепенно накапливалось все больше и больше ошибок в графиках производства соответствующих книг, их приходилось исправлять вручную.
Ну, вроде не беда, потому что форма-то умная. Когда ты исправляешь или вносишь какой-то параметр, то она задним числом пересчитывает все, что нужно. Да только за этот год бездействия уже накопились десятки тысяч несоответствий, и форма просто зависала, не справившись с таким backlog. Мне поставили задачу – улучшить производительность, чтобы пользователи смогли внести изменения за разумное время (не больше нескольких минут ожидания).
Я заглянул в исходники и ужаснулся. Нет, оно вроде как все круто – ООП, паттерны, но для каждой книги делаются десятки вызовов хранимых процедур. Т.е. очень много логики реализовано не на стороне базы данных. Это не проблема, когда мы работаем с одной книгой. Но когда тот же самый код используется для нескольких тысяч книг – вот тут-то начинаются проблемы. Индусы, конечно, об этом не подозревали - ведь когда они разрабатывали систему, база данных была маленькая.
Хотелось все нафиг переписать, но у меня было слишком мало времени. А главное, я не очень понимал, как оно все должно работать. Спецификация написана несколько лет назад, с тех пор систему меняли... Посоветовался со старшим товарищем, и он предложил мне просто кое-что немного оптимизировать, не переделывая по сути. Какая, собственно, разница – ведь мы говорим об одноразовой операции (пересчитать ключевые даты задним числом). А по плану через годик эту систему вообще должны заменить другой, так что нет смысла сильно напрягаться.
Так я и сделал - оптимизировал одну хранимую процедуру, и результат вроде был прекрасный. Производительность выросла в 10-20 раз, я был очень доволен собой. Протестировали, собрали все подписи, внедрили... Менеджер начинает вносить ключевые даты, вроде уже большую часть внес...
И тут у него начинает валить ошибка: Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction. Какая такая distributed transaction? Моя первая мысль - это что-то связанное с two-phase commit. Но у нас же всего лишь одна база данных... Быстрый поиск в Google подсказал идею: на самом деле сообщение об ошибке не несет в себе полезной информации, .NET Remoting ее скрывает; а истинная причина – таймаут.
Во время тестирования у меня такая ситуация не возникала. Во-первых, в большинстве случаев моя процедура отработывает в течение нескольких секунд, но для пары "проблемных" дат требуется минуты. Во-вторых, на тестовом сервере я был один, а рабочем сервере нагрузка больше, там десятки пользователей. Да еще он и виртуализирован к тому же.
Так я и сказал начальнице. Но она подняла панику: "Все пропало, ты все сломал, надо откатывать релиз! Я не верю, что это таймаут." Вообщем, я потратил пару дней на отработку других гипотез, но как часто бывает, первая мысль оказалась самой верной. Это действительно был таймаут. Причем он не имел отношения к распределенной транзакции между двумя базами данных – таймаут был прописан для транзакций COM+.
Главная проблема в том, что на тестовом сервере все работает, не удается воспроизвести ошибку. Я специально вставил задержку в свою процедуру... ага, теперь есть точно такая же ошибка, как у пользователя. Сначала я попросил DBA увеличить таймаут в настройках MSDTC. Хм, не помогает, блин – ровно через 5 минут после запуска валится ошибка. Оказалось, индусы использовали атрибут System.EnterpriseServices.TransactionAttrubute. Эти "5 минут" были тупо забиты в тексте программы, а не вынесены в конфигурационный файл.
Что же теперь делать? Увеличить таймаут просто так не могу, потому для этого надо перекомпилировать мой сервер приложений. А если я это сделаю, то перестанут работать все клиенты (смотри выше, клиенты жестко привязаны к определенной версии сервера). А переставить клиентов – это вообще кошмар: для этого нужно снова собирать разрешения со всяких менеджеров, а потом ждать недели три, пока Desktop Team соизволит выполнить мой заказ.
Первая простая идея: на тестовом сервере процедура работает (успевает завершится до окончания таймаута). Значит, вероятно, она будет работать и на рабочем сервере, но только если нет сильной нагрузки. Давайте я просто на выходных (когда никто не работает) подключусь из дома к нашей сети выполню эту операцию?
Начальница категорически говорит "нет": данные принадлежат пользователям, программисты не имеют право их менять самостоятельно, потому что это противоречит Sarbanes-Oxley и т.д. Я все это понимаю, но в данном случае ситуация доведена до абсурда. Фактически нужно ввести одну дату и нажать кнопку "Сохранить", остальное делается автоматически. Какая разница, кто это сделает? Мне не нужно напрягать мозги, что-то там считать... весь вопрос только в том, кто нажимает кнопку "Сохранить".
Ну ладно, нет так нет. Вторая идея: я увеличиваю таймаут, но устанавливаю новую версию программы только на компьютере пользователя (и то временно). Он нажимает кнопку "Сохранить", и я ему ставлю опять старую версию. Этот вариант начальнице тоже не нравится.
Выход у меня остается один – думать, как оптимизировать какую-нибудь хранимую процедуру или создать новый индекс, чтобы уложиться в эти злосчастные 5 минут. С помощью SQL Profiler выяснил, что одного индекса действительно не хватает.
Создал – производительность улучшилось, укладываюсь в 2 минуты. Но достаточно ли этого? Я ведь не знаю, насколько быстро будет на рабочем сервере; может, там будет 10 минут. Кстати, странно – почему на тестовом сервере 2 минуты, а если и база, и сервер приложений на моем компьютере, то всего 30 секунд? У меня что, компьютер быстрее сервера?
Всего запускалось 11 тысяч запросов. Пытаюсь оптимизировать дальше. И вдруг понимаю удивительную вещь: все эти 11 тысяч запросов выполняются всего лишь за несчастных 8 секунд! Остальное время (почти две минуты) уходит на общение между клиентом и сервером приложений через .NET Remoting! Вот это оказалось узким местом. Вот почему на моем компьютере работает в 4 раза быстрее – не нужно слать всякую ерунду по сети.
Т.е. оптимизировать что-то дальше бесполезно. Даже если все 11 тысяч запросов будут выполнятся мгновенно, это мне почти не поможет. Мне остается только создать индекс и надеятся, что этого будет достаточно.
Но не все так просто! Нельзя просто так взять и создать индекс – "пользователи сначала должны его протестировать". Говорю начальнице – как протестировать? Ввести ту самую злосчастную дату на тестовом сервере, нажать "Сохранить" и убедиться, что заработало быстрее? Но ведь я только что сделал то же самое!
Она краснеет, ей тоже понятно, что это идиотизм, и риск при создании нового индекс близок к нулю, и это вопрос скорее к DBA, а не к пользователям... но правила есть правила. Пытаюсь отловить пользователя, что он "протестировал" и дал добро. А он то занят, то снег в Лондоне пошел, и неделю на работу никто не ходил... за эту неделю накопились еще новые несоответствия в базе, и процедура работает еще медленее. К счастью, после долгих мучений мне повезло. Мы уложились в 4 минуты.
Все хорошо, что хорошо кончается. Были написаны сотни емейлов, большие начальники обсуждали все это на совещаниях, а проблема-то не стоила выеденного яйца. Я понимаю – change control очень важен, но ведь есть же еще и здравый смысл! Бывают ситуации, когда нужно чуть-чуть отойти от правил. Я потратил намного больше времени на политику, чем на техническую сторону.
Кроме описанных здесь проблем с .NET Remoting, был еще один интересный момент: за те полтора месяца, которые прошли между тестированием и внедрением системы, появились тысячи новых несоответствий в базе данных. Просто потому, что тестировали мы перед Рождеством, в тихий период. А к концу января пользователи уже навводили кучу новой информации, и это тоже сильно повлияло на произодительность. Так что я извлек для себя важный урок: бывают случаи, когда ценность проведенных тестов резко уменьшается с течением времени.
понедельник, 16 февраля 2009 г.
Неразменный Oyster
Я давным-давно зарегистрировал наши карточки Oyster на сайте TfL и сделал auto-top up. Удобно – деньги за проезд автоматически снимаются с кредитки, не нужно держать в голове, сколько у тебя осталось денег на проездном, и где его можно пополнить (автоматы и кассы есть не на всех станциях).
Но у регистрации есть и другие преимущества. Оказывается, в случае утери или кражи карточки ты можешь не только перенести баланс на другой Oyster, но даже попросить, чтобы его бесплатно прислали по почте. Таким образом, экономишь 3 фунта на покупке новой карточки. Интересно, а если по приколу каждый день заявлять о пропаже? Это ж TfL разорится на почтовых расходах. Надеюсь, они отслеживают таких шутников.
А я эту штуку не знал, недавно пошел покупать запасную карточку (для тещи) прямо в кассу. Кстати, кассир мне сказал: "Ну, удачи тебе!" Наверное, решил, что я только что приехал в Лондон – у большинства сторожилов проездные уже есть.
Но у регистрации есть и другие преимущества. Оказывается, в случае утери или кражи карточки ты можешь не только перенести баланс на другой Oyster, но даже попросить, чтобы его бесплатно прислали по почте. Таким образом, экономишь 3 фунта на покупке новой карточки. Интересно, а если по приколу каждый день заявлять о пропаже? Это ж TfL разорится на почтовых расходах. Надеюсь, они отслеживают таких шутников.
А я эту штуку не знал, недавно пошел покупать запасную карточку (для тещи) прямо в кассу. Кстати, кассир мне сказал: "Ну, удачи тебе!" Наверное, решил, что я только что приехал в Лондон – у большинства сторожилов проездные уже есть.
Не думай о секундах свысока
Я написал маленькую, но полезную хранимую процедуру. Она делает определенные проверки, а потом рассылает по емейлу предупреждения о возможных проблемах. Все проверил – работает отлично. С помощью SQL Jobs настроил, чтобы она запускалась три раза в день.
На следующий день вижу, что что-то не то. Емейлы с предупреждениями были разосланы несколько раз ночью. Зато днем, когда они как раз и нужны, ничего нет. Ну, я сразу стал вспоминать, что последнее время у нас по ночам были каким-то странные проблемы то ли с сетью, то ли SQL Server. Может, как-то сервер перезапустился, а вместе с ним и jobs запустились в неправильное время?
А все оказалось намного проще. Заполняя расписания запуска jobs, я набирал "9 утра" как "09:00" (без секунд). Поэтому все запустилось в первом часу ночи - в 00:09:00, 00:16:30, 00:21:00 и т.д.
Вспомнил другой забавный глюк, связанный со временем. Я разрабатывал банковскую часть система клиент-банк. Клиентская часть была покупная. В ней много разных проблем, а сроки уже поджимают. Мы хотели подключить первого клиента в день рождения управляющего банка – сделать такой своеобразный подарок. Так что сидим допоздна, работаем.
Вроде уже почти готово, и вдруг в какой-то момент моя программа отказывается принимать тестовые платежи от клиентов. Как же так, вчера же работало? Что же я изменил со вчерашнего дня? Пробую и то, и это... перегенерировал ключи ЭЦП, переставил клиентскую программу, взял более старую версию своих исходников... В какой-то момент все снова начинает работать. В чем было дело, я не понял. Ну да ладно. На следующий день повторяется. Опять пробую и так, и эдак, и в какой-то момент снова начинает работать. Опять не понял, в чем дело. На третий день – опять то же самое. Уже и Windows переставляю, даже пробую заменить Millenium на 2000 (или наоборот?), удаляю ICQ. Опять починилось.
Я понял, что надо сделать code freeze. Точнее, full freeze. Вечером полностью протестировал систему. Таким образом, утром я знал, что вчера работало, а за ночь никак не изменились ни программы, ни моя Windows. И все равно утром не работает!
Оказалось, меня подвела излишняя аккуратность. В те "темные годы" обмен информацией осуществлялся, конечно же, с помощью файлов фиксированной длины. Разработчик дал спецификацию, согласно которой я пытался отправлять и принимать разные файлы (платежые поручения, квитанции, запросы, выписки, информационные сообщения). В спецификации описывались допустимые типы данных. Например, числа надо дополнять пробелами слева, а обычный текст – справа; время надо записывать в формате "ччмм", при необходимости дополняя часы и минуты лидирующими нулями. Как выяснилось, в одном месте разработчики нарушили свою же спецификацию – вместо лидирующего нуля использовали лидирующий пробел. Т.е. 9 утра они записывали как " 900", а не как "0900". Моя же программа исправно браковала такие файлы, поскольку в каком-то поле использовался недопустимый символ (пробел). Получается, что каждое утро день в 9:59 проблема еще была, а в 10 она уже исчезала.
На следующий день вижу, что что-то не то. Емейлы с предупреждениями были разосланы несколько раз ночью. Зато днем, когда они как раз и нужны, ничего нет. Ну, я сразу стал вспоминать, что последнее время у нас по ночам были каким-то странные проблемы то ли с сетью, то ли SQL Server. Может, как-то сервер перезапустился, а вместе с ним и jobs запустились в неправильное время?
А все оказалось намного проще. Заполняя расписания запуска jobs, я набирал "9 утра" как "09:00" (без секунд). Поэтому все запустилось в первом часу ночи - в 00:09:00, 00:16:30, 00:21:00 и т.д.
Вспомнил другой забавный глюк, связанный со временем. Я разрабатывал банковскую часть система клиент-банк. Клиентская часть была покупная. В ней много разных проблем, а сроки уже поджимают. Мы хотели подключить первого клиента в день рождения управляющего банка – сделать такой своеобразный подарок. Так что сидим допоздна, работаем.
Вроде уже почти готово, и вдруг в какой-то момент моя программа отказывается принимать тестовые платежи от клиентов. Как же так, вчера же работало? Что же я изменил со вчерашнего дня? Пробую и то, и это... перегенерировал ключи ЭЦП, переставил клиентскую программу, взял более старую версию своих исходников... В какой-то момент все снова начинает работать. В чем было дело, я не понял. Ну да ладно. На следующий день повторяется. Опять пробую и так, и эдак, и в какой-то момент снова начинает работать. Опять не понял, в чем дело. На третий день – опять то же самое. Уже и Windows переставляю, даже пробую заменить Millenium на 2000 (или наоборот?), удаляю ICQ. Опять починилось.
Я понял, что надо сделать code freeze. Точнее, full freeze. Вечером полностью протестировал систему. Таким образом, утром я знал, что вчера работало, а за ночь никак не изменились ни программы, ни моя Windows. И все равно утром не работает!
Оказалось, меня подвела излишняя аккуратность. В те "темные годы" обмен информацией осуществлялся, конечно же, с помощью файлов фиксированной длины. Разработчик дал спецификацию, согласно которой я пытался отправлять и принимать разные файлы (платежые поручения, квитанции, запросы, выписки, информационные сообщения). В спецификации описывались допустимые типы данных. Например, числа надо дополнять пробелами слева, а обычный текст – справа; время надо записывать в формате "ччмм", при необходимости дополняя часы и минуты лидирующими нулями. Как выяснилось, в одном месте разработчики нарушили свою же спецификацию – вместо лидирующего нуля использовали лидирующий пробел. Т.е. 9 утра они записывали как " 900", а не как "0900". Моя же программа исправно браковала такие файлы, поскольку в каком-то поле использовался недопустимый символ (пробел). Получается, что каждое утро день в 9:59 проблема еще была, а в 10 она уже исчезала.
понедельник, 9 февраля 2009 г.
Dormant account
Понадобилась мне одна книжка. Но издание редкое, в британских магазинах или на eBay я ее не нашел. Есть она только на сайте американского издательства. А сайт сделан типично по-американски, т.е. вроде как можно выбрать страну, и даже написано, сколько стоит доставка за границу... но в списке стран есть только Америка.
После двух-трех недель переписки я смог получить форму для заказа книги по факсу. Но снять деньги с моей британской карточки они не смогли. Ну, ладно, не беда. У меня есть счет в американском банке, так что я могу послать чек в долларах по почте. Только сначала надо положить денег на американский счет.
Послал свифтовку - она вернулась... причем не полностью, вычли комиссию. Почему вернулись - неясно. Номер счета я точно написал правильно, уже ведь не раз туда слал деньги.
Оказалось, американский банк (Wachovia) перевел мой счет в dormant (дремлющее) состояние, потому что год не было никакой активности. Но что самое интересное: если бы я эту штуку не заметил вовремя, они бы не только закрыли счет, но и перевели бы остаток моих денег в бюджет. А я думал, что в таких случаях банк забирает деньги себе.
После двух-трех недель переписки я смог получить форму для заказа книги по факсу. Но снять деньги с моей британской карточки они не смогли. Ну, ладно, не беда. У меня есть счет в американском банке, так что я могу послать чек в долларах по почте. Только сначала надо положить денег на американский счет.
Послал свифтовку - она вернулась... причем не полностью, вычли комиссию. Почему вернулись - неясно. Номер счета я точно написал правильно, уже ведь не раз туда слал деньги.
Оказалось, американский банк (Wachovia) перевел мой счет в dormant (дремлющее) состояние, потому что год не было никакой активности. Но что самое интересное: если бы я эту штуку не заметил вовремя, они бы не только закрыли счет, но и перевели бы остаток моих денег в бюджет. А я думал, что в таких случаях банк забирает деньги себе.
четверг, 5 февраля 2009 г.
CheckMyFile
Решил запросить кредитные отчеты через CheckMyFile.com. Вроде это выгодно: они дают информацию сразу из всех трех кредитных бюро (Experian, Equifax, Callcredit). Получается и дешевле, да и удобнее, чем запрашивать по отдельности.
Первые впечатления неважные. По их данным, у нас нет карточки American Express, хотя я точно знаю, что непосредственно у кредитных бюро эта информация есть. Кроме того, они показывают, что у нас было ноль "запросов" за год - это тоже неправда.
Но это еще ладно. Я понимаю - могут быть сложности из-за того, что домашний адрес длинный, его можно писать в разных форматах, да и дом новый...
Но я нашел совсем уж грубую ошибку:
Credit score может быть от 0 (наихудший) до 1000 (наилучший). Может, у меня с арифметикой проблемы, но по-моему они перепутали "выше" с "ниже".
Эх, а сайт выглядит вроде вполне красиво и профессионально...
Первые впечатления неважные. По их данным, у нас нет карточки American Express, хотя я точно знаю, что непосредственно у кредитных бюро эта информация есть. Кроме того, они показывают, что у нас было ноль "запросов" за год - это тоже неправда.
Но это еще ладно. Я понимаю - могут быть сложности из-за того, что домашний адрес длинный, его можно писать в разных форматах, да и дом новый...
Но я нашел совсем уж грубую ошибку:
По данным Experian Ваш credit score 568; это выше, чем у 46% жителей UK.
По данным Callcredit Ваш credit score 653; это выше, чем у 43% жителей UK.
Credit score может быть от 0 (наихудший) до 1000 (наилучший). Может, у меня с арифметикой проблемы, но по-моему они перепутали "выше" с "ниже".
Эх, а сайт выглядит вроде вполне красиво и профессионально...
понедельник, 2 февраля 2009 г.
Nikon vs Canon
Мы ходили делать художественное семейное фото. Марина обратила внимание, что фотограф использует Canon. Спросила:
- Почему не Nikon? Что, Canon лучше?
- Что ты! Canon - это мусор, качество отвратительное! Просто он очень надежный, я уже сделал на нем 200 тысяч снимков. Конечно, у Canon тоже есть модели, которые дают отличное качество, но они слишком дорогие.
И еще долго горячий пакистанский фотограф ругал фотоаппарат, которым только что сделал наши недешевые фотографии. Вот британец бы не стал так необдуманно выставлять себя в плохом свете перед клиентами :)
P.S. А вот симпатичные фото ночного Лондона, сделанные с помощью Nikon.
- Почему не Nikon? Что, Canon лучше?
- Что ты! Canon - это мусор, качество отвратительное! Просто он очень надежный, я уже сделал на нем 200 тысяч снимков. Конечно, у Canon тоже есть модели, которые дают отличное качество, но они слишком дорогие.
И еще долго горячий пакистанский фотограф ругал фотоаппарат, которым только что сделал наши недешевые фотографии. Вот британец бы не стал так необдуманно выставлять себя в плохом свете перед клиентами :)
P.S. А вот симпатичные фото ночного Лондона, сделанные с помощью Nikon.
Первый снег
Выпал первый снег. Не в смысле "первый за зиму", а первый за последние две зимы. Раньше бывала только изморозь и иней, ну или совсем маленький снежок. Лондонцы фотографируют невиданное зрелище. Действительно, знакомые улицы выглядят совершенно непривычно.
Я бы не сказал, что тут прямо завалы. Обычный нормальный снег. Но для Англии это прямо стихийное бедствие - половина поездов не ходит из-за экстремальных погодных условий. Мне повезло - добрался почти без проблем. А офис пустой, пришло всего несколько человека. Остальные "работают из дома" или "болеют". Вообще-то мы тоже неважно себя чувствовали из-за резкого похолодания - на выходных еле ноги волочили...
Кто же те герои, которые все же пришли сегодня на работу? Это украинец (я), южноафриканец, немка, француз и китаец. Британцев пока замечено не было.
Многие на улице одеты не по погоде. Например, полицицейский в рубашке с коротким рукавом. Правда, может в бронижилете не холодно?
Интересно, есть ли в окрестностях Лондона лыжные базы? Сомневаюсь, пока это нерентабельно. Хотя кто его знает, что в будущем нам принесут глобальные изменения климата.
Я бы не сказал, что тут прямо завалы. Обычный нормальный снег. Но для Англии это прямо стихийное бедствие - половина поездов не ходит из-за экстремальных погодных условий. Мне повезло - добрался почти без проблем. А офис пустой, пришло всего несколько человека. Остальные "работают из дома" или "болеют". Вообще-то мы тоже неважно себя чувствовали из-за резкого похолодания - на выходных еле ноги волочили...
Кто же те герои, которые все же пришли сегодня на работу? Это украинец (я), южноафриканец, немка, француз и китаец. Британцев пока замечено не было.
Многие на улице одеты не по погоде. Например, полицицейский в рубашке с коротким рукавом. Правда, может в бронижилете не холодно?
Интересно, есть ли в окрестностях Лондона лыжные базы? Сомневаюсь, пока это нерентабельно. Хотя кто его знает, что в будущем нам принесут глобальные изменения климата.
Подписаться на:
Сообщения (Atom)