среда, 27 января 2010 г.

Back to school

С опозданием на месяц состоялась формальная встреча с начальником: подведение итогов испытательного срока, согласование целей на следующие полгода. Хотя на работе всё в порядке, но после двух увольнений меня бросает в дрожь от словосочетания "формальная встреча".

На прошлой работе мне приходилось заполнять "форму самооценки". Там, в частности, была пара десятков моих качеств и навыков, которые я должен был оценить и дать как минимум два примера для каждого! Многие из качеств звучали почти одинаково. Например, чем отличается "коммуникабельность" от "умения эффективно общаться с коллегами и клиентами"? Я спросил тогда своего англоязычного коллегу: "Наверное, я недосточно хорошо понимаю английский язык. Объясните мне, в чем разница?" Он почухал репу и сказал: "Вот поэтому я всегда работаю по контракту: не приходится страдать всей этой херней!"

Тут всё было гораздо проще. Начальник всё за меня заполнил. Многие свои цели я не достиг, потому что планы поменялись, и на самом деле я занимался чем-то другим. Но начальник написал отчет обтекаемо, и получилось, что вроде как всё сделано. Кроме того, он должен был оценить мои личные и деловые качества по пятибальной системе: F, M-, M, M+, E (Failed - провалил, Met - соответствовал ожиданиям, Exeeded - превзошел). Я "закончил четверть" на M и M+. Как он объяснил, E почти никогда не ставят. Такую оценку может получить, к примеру, сотрудник отдела продаж после заключения многомиллионного контракта, или программист, который стал Microsoft MVP.

По мнению начальника, моими главными достоинствами являются: коммуникабельность, инициатива, умение быстро решать проблемы. Ironically, это именно те качества, за недостаток которых меня выгнали с прошлой работы!!!

Нерезиновск

Как-то заговорили с коллегой - коренным лондонцем о Москве. Я рассказал, что кровавая гэбня заставляет регистрироваться гостей столицы, причем это относится даже к гражданам РФ; и что для коротких визитов с собой надо постоянно носить не только паспорт, но и билет, по которому приехал.

А он, вместо того, чтобы ужаснуться такому издевательству над правами человека, сказал: "Очень правильно. И нам давно надо такое сделать, а то понаехало всякое быдло с севера Англии!"

Скотт Гу и Иан Купер: Webforms vs. MVC

Скотт Гу со своей американской политкорректностью пытается помирить сторонников Webforms и MVC. Оно и понятно: как вице-президент Microsoft он старается убедить пользователей, что волноваться не надо, их инвестиции в Webforms в полной безопасности, и что "все профессии важны, выбирай на вкус". Пост, как обычно, написан хорошо и убедительно.

А вот что в ответ написал другой уважаемый человек, Иан Купер (умный мужик, я много раз ходил на его семинары). Он на Microsoft не работает, поэтому может говорить всё, что думает: время server-side controls прошло. Они помогли сделать карьеры, создать компании компании и заработать состояния, но теперь это пережиток прошлого. Спор "Webforms против MVC" уже бессмыслен. Более важный вопрос - это кто победит в войне Silverlight против JavaScript...

понедельник, 25 января 2010 г.

Юрий

Поздравляем наших друзей из солнечной Атланты с рождением сына Юрия!

Уходя, не навреди

Мне дали новый проект. А он не собирается. В чем проблема, понятно: мой предшественник забыл закоммитить один новый файл в TFS. Написал ему емейл, а он, оказывается, уже уволился. И билд сломал в свой последний рабочий день. Причем уволился аж неделю назад, поэтому вполне возможно, что его рабочий комп уже успели почистить и передать другому. Лучше бы он в последний день спокойно читал анекдоты или занимался бы чем-то безопасным: написанием документации или передачей дел.

Коллеги, а поделитесь воспоминаниями о том, как проходили ваши последний рабочий день перед уходом или увольнением. Вот как было у меня:

1. "Бедная, Но Гордая Научно-Исследовательская Фирма": ну, я работал на них из дома, поэтому увольнение не было драматичным.

2. "Бедное, Но Гордое Учебное Заведение": вначале работал по вечерам, потом всё чаще из дома, потом просто заходил раз в несколько месяцев за зарплатой, потом зарплату перестали платить, но меня ещё числили какое-то время. Потом узнал, что уволили.

3. "Банк, Где Я Был Начальником Отдела": пытался рассказать коллегам, о том, что я хотел бы сделать, но так и не успел за пять лет. Рассказ занял минут 20, а остаток дня бухал.

4. "Маленькая, Но Прикольная Американская Фирма": с утра читал прощальные письма от коллег, потом написал им душевное письмо, где лично поблагодарил почти каждого из них. После этого пошла вторая волна прощальных писем: "Вал, ну ты, блин, меня расстрогал, я сижу и плачу..." Потом ели торт. Стер личную инфу и историю из Internet Explorer... и тут вспомнил, что я не заполнил timesheet за последний месяц, а без этого мне не начислят последнюю зарплату. А пароль-то я не помню! Ввел его давным-давно и поставил галочку "больше не спрашивать". Но после того, как стер историю, пришлось его как-то вспоминать... Потом пили какое-то прикольное зеленое пиво, и на следующее утро я был весь зеленый.

5. "Богатая, Но Скучная Американская Финансовая Компания": на последний день у меня было много личных дел: отправить посылки в Украину, получить справки в отделе кадров (для HSMP), обналичить последний чек и пр. Кроме того, сразу после работы я летел в Вашингтон сдавать IELTS. Как назло, начальник подгрузил работой - хотел, чтобы я разрёб все хвосты. "Давай, давай, это очень строчно и важно..." Уже самолет скоро, а я всё на работе. Его кто-то пристыдил: "Ну, оставь ты его в покое, это же его последний день. Обычно вообще никто в последние дни не работает". Неожиданно шеф согласился: "Да, действительно, хрен с ним... Езжай уже, а то пробки..."

6. "Харьковская Аутсорсинговая Фирма, Где Я Был Тим Лидом": терзался муками совести, что бросаю проект в неважном состоянии перед первым релизом. Расписывал новые таски членам команды, чтобы новый тим лид мог первое время никем особо не руководить.

Один из членов мой команды целый месяц копался в одном из third-party модулей, в конце концов объявил, что готов начинать разработку, и вдруг исчез. Просто исчез. Не отвечал на емейлы, сотовый и городской телефоны. Зарплату не получил. В конце концов кто-то из его знакомых сказал: "Ему пришлось срочно уехать. Может, через пару лет вернется". Не знаю, может, его в тюрьму посадили?

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

7. "Разработчики Видео-Платформ (Для Порнографии и пр.)": мой первый же день был и последним, потому что, как оказалось, они хотели кинуть на бабки.

8. "Работорговцы из Сити": последние два месяца не было никакой работы, занимался своими проектами, читал книжки...

9. "МегаИздательство": я был почти уверен, что меня уволят, но почему-то в последний день вдруг почувствовал вдохновение. Вместо того, чтобы подложить начальнице мышку в сумку, я за полдня написал неплохую документацию.

Fair tear & wear

Прошло больше трёх месяцев, как мы уехали из Баркинга. И вот, наконец, нам вернули часть депозита за квартиру.

Наш агент, Chase Evans, заранее прислал детальную инструкцию по уборке квартиры. Мы обалдели. Там, к примеру, сказано, что мы должны положить чистые мусорные кульки и застелить свежие простыни. Какие простыни? Нам сдавали квартиру без простыней. И мусорных кульков не было, когда мы въезжали. Зато мусора было полно! В унитазе тогда лежала куча гвоздей, мы их вылавливали, чтобы канализация не забилась. Квартира была покрыта слоем пыли. Агент тогда сказал: "Распишитесь, что принимаете чистую квартиру, а мы через час пришлем уборщика". Но на самом деле никто не пришел.

В инструкции также было сказано, что мы обязаны помыть окна с обеих сторон. Oh, man! Это очень тяжело. У нас в спальне полностью открывалось только одно окно. А в гостинной был балкон и огромное неоткрывающееся окно на всю стену. Для того, чтобы полностью их помыть, нужна специальная швабра с очень длинной ручкой, у нас такой не было. Кое-как помыли, при этом грязная вода текла на балкон к нижним соседям-индусам. Они бросали на нас злобные взгляды, потому что у них на балконе сушилось белье. Вода непосредственно на него не лилась, но всё равно соседи злились. Хотя, между прочим, в нашем доме было запрещено сушить белье на балконах.

На уборку мы потратили много времени. Уже после того, как переехали, ещё два раза приезжали и продолжали убирать допоздна. Это вместо того, чтобы разбирать вещи на новой квартире. Потом на последнем поезде тряслись полтора часа до Уимблдона, приезжали к часу ночи. А утром надо вставать пораньше, потому что я только устроился на новую работу...

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

И вот всё готово. Утром я отпросился с работы и поехал на check-out. А инспектора нет! Он опоздал на 20 минут. А я уж думал, что меня опять кинули, так же как и с вэном... Он извинился: "Ничего, я Вас постараюсь не задержать..." Я думал, сейчас быстренько напишет, что всё в порядке, тем более, что он передо мной слегка виноват. Но ничего подобного - инспекция заняла больше часа. Он ходил с диктофоном и планшеткой, весь такой деловой, в дорогом костюме; фотографировал что-то и постоянно делал озабоченное лицо.

Я беспокоился о нескольких моментах:

  • Большое пятно на ковре в кладовке. Образовалось после течи. Агент считал, что мы сами сломали трубу. Я доказывал, что мы не виноваты, но не знаю, убедил ли их. Пытались чистить ковер разным средствами, но это не помогло.

  • Не до конца отмытые окна.

  • Небольшое пятно на матрасе. Нам не дали mattress protector, а мы не догадались сами купить. Нет, никто не уписялся, просто однажды я вспотел, и краска с моих, пардон, трусов, прошла через простынь и немного окрасила матрас. Мы его перевернули в надежде, что инспектор не заметит. Тем более, что пятно было действительно почти не заметное.

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

  • Плесень в ванной. Мы постоянно боролись с красной плесенью - обрабатывали швы между плиткой специальным средством. Но прям перед самым отъездом в силиконовых швах завелась чёрная плесень. Сначала мы думали просто её счистить. Но оказалось, что она прорасла через весь силикон. Его надо целиком сдирать и делать швы заново. Но, судя по инструкции, после этого силикон должен сохнуть как минимум 24 часа, т.е. всё это время нельзя пользоваться ванной (на самом деле, как я теперь знаю, силикон неплохо засыхает и часов за 12). Это Марину не устраивало.

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


Инспектор нахвалил нас: "Очень редко видишь всё в таком хорошем состоянии. Тем более, вы тут жили больше двух лет... Люди иногда за два месяца там убивают квартиры... А стиральная машина просто блестит! Вы что ей, вообще не пользовались?"

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

С улыбкой он дал мне подписать протокол. Опаньки! "Квартира убрана неплохо, но требуется дополнительная профессиональная уборка:"

  • Ковер не полностью очищен.

  • Немного запачкана штора.

  • Немного запачкана духовка.

  • Грязная плита.

  • Несколько отметок на стенах и дырки от гвоздей.

  • Пятно на матрасе.


Я поспорил с ним. Ковер мы не только пылесосили, но и дважды чистили дорогим средством. Выглядит вполне прилично. Но он говорит, нужно чистить моющим пылесосом (сейчас у нас такой есть). Штора - блин, он нашел какое-то пятнышко за складкой, которое мы никогда не замечали. Видели бы - почистили бы. С духовкой очень обидно. Я дважды драил её мощным вонючим средством, потом была аллергия. Как нам казалось, всё очистилось великолепно. Но он нашел какое-то маленькое пятнышко. Плита действительно была не совсем чистая. Я много раз её мыл, но дело в том, что она стеклянная. Её нельзя мыть жесткой мачалкой или средствами с абразивом, иначе поцарапаешь. Оказывается, для таких плит существуют специальные скребки, но мы об этом не знали.

Стены и потолок я тоже долго мыл "Мистером Мускулом", но кое-какие следы остались. Причем часть их них оставили не мы, а рабочие, которые делали профилактику бойлера. Как я теперь знаю, для мытья стен надо использовать brown sugar. Насчет дырок от гвоздей - это вообще возмутительно. У нас в контракте было написано буквально так: "Не беспокойтесь о мелких дырках, их легко закрасить". Но инспектор аккуратно пересчитал количество дырок. Да если бы я знал, то замазал бы их цементом.

В Атланте вообще не было такой хрени. После того, как съезжаешь с квартиры, бодрые мексиканцы красят стены, убирают кухню и меняют ковры. Именно полностью меняют, а не чистят моющим пылесосом! Это включено в аренду. Инспектор там проверяет не пылинки, а, скажем, не повреждена ли рабочая поверность на кухне; или не оставил ли ты старую мебель (положено всё вывезти или выбросить).

За инспекцию мы заплатили 92 фунта. Торговаться нельзя - инспектора выбирает агентство. Да за эти деньги можно было просто нанять иммигранта-уборщика, который бы вылезал всю квартиру!

После некоторого спора протокол я всё же подписал. Инспектор широко улыбнулся, ещё раз сказал, что мы великолепно убрали квартиру, и в самом худшем случае нас оштрафуют на 50 фунтов. Надо заметить, что он сам не определяют сумму. Он из "независимой" фирмы, типа БТИ. Его задача - написать отчет, а дальше хозяин квартиры принимает решение, сколько денег нам вернуть. "Независимая" я написал в кавычках, потому что инспектор постоянно работает с одними и теми же агентствами. Они дают ему работу. Конечно, в спорных случаях он скорее напишет протокол немного в пользу агентства, а не жильца.

Означает ли это полный беспредел? Нет, не совсем. Дело в том, что наш депозит хранится не у хозяина, а в ещё одной независимой фирме. Наша называлась DPS (The Deposit Protection Service). Все при деле, как видите. После того, как заканчивается договор, они возвращают какую-то часть депозита мне, а какую-то - хозяину. Если мы с хозяином договорились, то всё просто. Но если, к примеру, за одну разбитую тарелку хозяин выставил счет на 100 фунтов, то я могу потребовать независимой экспертизы. Это ввели только два или три года назад, а раньше депозит хранился непосредственно у хозяев, которые под разными предлогами старались его не возвращать.

На следующий день мне присылают подробный отчёт. На целую страницу! Там гораздо больше замечаний, чем я подписывал. Вот часть их них:

  • "Немного поцарапана входная дверь" (снаружи). А что я могу сделать, если бабайские дети играют в коридоре в футбол, катаются на велосипедах, падают и бьются о нашу дверь. А их родители таскают мебель и царапают.

  • "Поцарапана дверь в ванной". Это случилось, когда взорвалось стекло и чуть не убило Марину. И нас же за это ещё и хотят оштрафовать!

  • "Стекло в ванной запачкано". Его запачкали рабочие, когда устанавливали, и мы не смогли оттереть.

  • "Какой-то голубой гель в унитазе". Это я хотел как лучше, приклеил туда средство для дезинфекции. А вот не надо выпендриваться...

  • "На ковре следы от мебели". Ну да, у нас там два года стоял шкаф и продавил ковер. Ну, и что я могу сделать.

  • "Балконный рельс помят". Его помяли рабочие ещё до того, как мы вселились.

  • "Царапины в раковине". Ну да, блин, мы мыли посуду в раковине. И от этого появились слабые царапины. Наверное, если бы раковина была подороже, их бы не было.


Там было много чего ещё, но напротив некоторых пунктов инспектор написал "fair tear & wear" ("амортизация"). Я послал агенту свои комментарии.

Проходит недели две - тишина. Агент не сообщает, когда и сколько денег нам вернут. Я стал читать, что пишут люди про этот процесс. Очень интересно. Пишут, что если только одна из сторон связалась с DPS, то DPS шлет письмо другой стороне, ждет две недели, и если ответа нет, то отдает первым всё, что они попросили. Часто бывает, что лэндлорд требует огромный штраф, а бывшие жильцы, скажем, уехали в отпуск. В течение двух недель не ответили на письмо - и всё, плакали их денежки. Изредка бывает наоборот - когда жилец разгромил всю квартиру, потребовал все деньги назад, а разгильдяй-лэндлорд (или агент) не отвечает вовремя на письмо и лишается всех денег.

Решил попробовать в наглую попросить все деньги назад. Chase Evans - это страшные разгильдяи, они вполне могли бы "проспать" письмо из DPS, и тогда мне бы вернули все денежки. Ну, точнее, не совсем всё: я же не мошенник, я честно готов заплатить 92 фунта за инспекцию. Хоть это и много, как мне кажется, но раз в договоре написано, то что ж делать. А больше мне никакие счета не выставляли. За две недели уже вполне можно было это сделать.

Стыдно ли мне, что я пытался "кинуть" хозяина? Абсолютно нет! Мы были первыми жильцами этого дома, и никто в нем так долго ещё не жил. А хозяевам ведь выгоднее сдавать на длительный срок. Последние месяцы средняя цены аренды в нашем районе прилично упала, но мы продолжали платить старую, докризисную цену. Я прикинул, что за 28 месяцев мы заплатили больше 22 тысяч фунтов арендной платы. Хорошую квартиру в Харькове можно было бы купить за эти деньги! И с нас ещё требуют деньги за пятнышки на стенах?

Но не вышло. Ещё через три недели Chase Evans всё же проснулся и прислал счет. Из наших 1080 фунтов депозита вернуть они хотели меньше половины. 20 фунтов взяли за пятно на матрасе. Ну ладно, хрен с ними. Матрас действительно был очень хороший и дорогой. 100 фунтов - за уборку (хотя инспектор говорил, что "в худшем случае 50"). Почему так много?

Остальное (почти 500 фунтов) - долг за воду. Это было неожиданность. Мы вообще думали, что вода включена в арендную плату. Мы даже не знаем, как называется наша водяная компания. Посмотрел, сколько в среднем в Эссексе люди платят за воду - вроде как у нас получилось раза в полтора больше. Расшифровки нет - какие показания счетчика, какой тариф. Просто сумма, и всё. У меня сразу возникли подозрения, что на самом деле нам начислили большую пеню, потому что долго не оплачивали воду. Я потребовал, чтобы прислали расшифровку счета.

Тишина. Я пригрозил, что если не получу ответа, то напишу жалобу в DPS. Они мне прислали кое-какую расшифровку. Это были все платежи, которые хозяин делал в домоуправление. Там по-прежнему не было ни показаний счетчика, ни тарифов. Просто видно, что счета за воду выставляли четыре раза за всё время, причем совершенно нерегулярно. Даже если верить этим цифрам, то меня обсчитали на несколько фунтов: оказывается, за последние месяцы они высчитывали приблизительную сумму, причем сделали это с ошибкой, сами же это признали. Но непонятно вообще, зачем высчитывать это приблизительно, если можно было бы сделать точно: ведь известны показания счетчика до и после.

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

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

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

Но всё же я грубо прикинул, и оказалось, что сумма в счете похожа на правду. Решил согласиться. Повторно отправил заявку в DPS с согласованной суммой.

Проходит почти два месяца, и ответа нет. Позвонил в DPS. Они говорят, что их правила изменились, и они теперь не производят выплату автоматически, если вторая сторона не ответила. "Попробуйте ещё раз позвонить агенту. Если он будет продолжать Вас игнорировать, мы пришлем Вам специальную форму. Вы пойдете к нотариусу и заверите заявление о том, что не можете связаться с агентом". Я ещё раз написал угрожающий емейл агенту, два дня пытался дозвониться. В конце концов это удалось. Мой емейл никто не ещё читал.

Согласованную сумму вернули. Ещё заплатили несколько фунтов в качестве "процентов по вкладу". Но что интересно, хозяину тоже заплатили проценты, пропорционально той сумме, которую ему вернули. Т.е. получается, что два с чем-то года назад я (не хозяин) отдал свои деньги. На них начислили проценты, но мне отдали меньше половины. Там всё равно копейки, но я просто не пойму их логику.

Одно точно знаю: в следующий раз мы не будем так убиваться, убирая квартиру. Всё равно никто не оценит.

Оранжевый пуховик - 3

Теща советовала не позориться и больше не носить оранжевый пуховик. И на первой, и на второй английской работе он вызывал насмешки коллег.

Но он мне нравится. Заодно решил провести "проверку на вшивость". Надел его, и всё прошло нормально, в этот раз никто не издевался. Я люблю свою новую работу.

четверг, 21 января 2010 г.

Сумка набирает вес

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

Свободное посещение лекций кончилось

Прочёл, что по нынешним правилам после трех пропущенных лекций на иностранного студента стучат в Home Office; а после десяти - отбирают визу. Студенты-архитекторы жалуются: говорят, раньше в их ВУЗе никто не заставлял старшекурсников ходить на лекции, потому что они много ездили по стране и делали какие-то курсовые проекты.

Вроде идея правильная, липовых студентов много развелось. Но боюсь, что это опять в первую очередь ударит по законопослушным иммигрантам. Те, кто учатся на каких-то левых языковых курсах, заплатят, чтобы на них не стучали. Я бы на месте Home Office проверял бы успеваемость, а не посещаемость, и жестче бы боролся с "серыми" учебными заведениями.

А вычислить эти заведения совсем несложно. Берешь любую иммигрантскую газету и сразу наталкиваешься на объявления вроде: "Поможем получить студенческую визу, 100% гарантия". Один мой знакомый случайно попал на такие языковые курсы. У него виза Tier 1, человек на самом деле хотел подтянуть язык. А их ничему не учили. Люди тупо сидят в классе и слушают какие-то байки. Он стал жаловаться. Учительница его послала подальше. Пошел к директору. Та пригрозила:

- Будешь умничать - заложим тебя в Home Office!
- Минуточку... как вы можете меня заложить? У меня есть рабочая виза! Я сам напишу им письмо, что вы - мошенники. А подписываясь, честно перечислю свои регалии: "кандидат технических наук, проректор по науке и т.д."

Они перепугались. Директор отругала подчиненных: "Зачем вы его зачислили на курсы? Вы что, не видели, какая виза?" Дали преподавателя немного получше, но это не помогло учебе: преподаватель слишком боялся моего знакомого.

Гости второго сорта

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

Оказывается, в Англии свадьбы проходят немного иначе: ЗАГС; потом молодые с ближайшими родственниками и друзьями идут в хороший ресторан, а все гости второго сорта уходят на несколько часов погулять. И только потом начинается групповое празднование, где кормят и поят по минимуму.

Однажды, будучи гостем второго сорта, этот англичанин после ЗАГСа пошел на футбольный матч Англия-Португалия. Англия проиграла, и он так расстроился, что решил на саму свадьбу не идти. Несмотря на то, что дело было в другом городе, он уже всё равно потратил время, чтобы туда доехать. Молодые потом на него сильно обиделись.

Тасование интеграционных тестов

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

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

И мне пришло в голову такое решение: надо, чтобы test runner умел запускать тесты в случайном порядке. Если так два-три раза прогнать все тесты, то можно быть уже более-менее уверенным. Вроде очень простая идея, но я не видел, чтобы кто-то её реализовал...

Куда смотрит Терминатор

Лет 12 назад мы ходили на в киноконцертный зал "Украина". Не помню точно, то ли на "Крематорий", то ли на "ДДТ". Во всяком случае, для большинства харьковских неформалов билеты стоили непозволительно дорого. Поэтому вахтеры и милиционеры очень внимательно проверяли билеты на предмет подделок.

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

Тут вступает в действие второй рубеж обороны. Прежде чем пойти в туалет, зритель должен получить у кассира "пропуск". Это какой-то календарик, но каждый раз разный. Возвращаясь из туалета, возвращаешь пропуск вахтеру. Почему такие сложности, ведь у всех законных зрителей уже есть билеты? Во-первых, так проще - календарик тяжелее подделать, чем билет; тем более, что заранее никто не знает, как он выглядит. Во-вторых, даже с настоящими билетами можно схитрить: представьте, что внутри есть десять человек. Один собирает со всех билеты, идет в туалет, отдает девять билетов друзьям-"зайцам", а один билет использует сам, чтобы вернуться. Календарики в этом смысле лучше, потому что их можно отбирать на входе, а билеты - нельзя.

Лично я честно заплатил. Но наши менее богатые друзья потом рассказали интересную историю. В тот день использовались календарики с Терминатором. У одного из ребят совершенно случайно дома лежало штук 20 похожих календариков - не знаю, откуда он их взял. Парень сбегал домой, принес, всем раздал. Вахтер их строго спросил:

- А почему у вас Терминатор смотрит вправо, а не влево?
- Откуда мы знаем! Наверное, типографский брак...

Лондон тесен

Познакомились с двумя "русскими". "Здравствуйте! А Вы случайно не были на конференции в Рединге? Когда приезжал Скотт Гафри?" - спросила меня Анжела. Да, я был, но не один - всего тогда пришло 230 человек. Я тихо сидел в зале, никого не трогал; банкета потом не было. Но она меня всё же как-то запомнила. Ну ладно, бывает.

А потом Денис спросил:
- Кстати, а тебя нет блога?
- Есть, а что?
- "Валики"?
- Да... а что, у меня на лбу написано?
- Ну, как же: ты - Валик... в Лондоне... из Харькова... Всё сходится!

среда, 20 января 2010 г.

Стада коров

Читал статью в MSDN Magazine. О том, как программисты в спешке оставляют всё больше "хомутов", что усиливаются зависимости между разным компонентами, и сопровождать код становится всё труднее.

Типичная статья, всё правильно, но на эту тему я читал уже раз сто, поэтому собрался было перевернуть страницу... И вдруг наткнулся на слова, от которых запахло домом: "Я живу в Атланте, штат Джорджия..." Стал читать дальше...

Автору нравится его утопающий в зелени город, но не нравятся беспорядочно петляющие дороги, где тяжело ориентироваться без GPS. Почему же это так сложно в Атланте, и так легко на Манхэттене? Потому, что в Нью-Йорке руководство взяло на себя ответственность, потратило некоторое время и придумало простое правило нумерования улиц, в котором почти нет исключений. А в Атланте никто ничего не планировал. Улицы построены там, где когда-то были тропинки. А тропинки протоптали стада коров.

Прекрасная аналогия. Т.е. те, кто решал, где проложить дороги в Атланте, не были не то что специалистами - они даже не были людьми. Пастухи отдали всё на откуп коровам. То же самое часто случается в программировании: слабый руководитель даже не пытается что-то планировать, а отдает все технические вопросы на откуп кодерам.

Последнее путешествие кота Каспера

В городе Плимуте жил-был всеобщий любимец - кот Каспер. Ему было 12 лет, и последние 5 из них он любил кататься на автобусе. Каждое утро в 10 часов Каспер садился в автобус номер 3 и один раз проезжал по всему маршруту. Путь его лежал через исторические доки, морскую базу и квартал красных фонарей. Всего 11 миль, примерно 1 час.

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

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

P.S. Я прочитал это в "Метро". Сейчас, после землетрясения на Гаити, может казаться кощунственным тратить целую страницу газеты на кота, но меня это заметка тронула.

Смена PIN

Когда я подписался на HSBC Plus, нам пообещали прислать новые дебитные карточки с "плюсовым" дизайном.

Два странных момента:

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

  • Марине сменили PIN, а мне нет.

вторник, 19 января 2010 г.

Время собирать базы

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

Дальше - больше. В какой-то момент решили разбить всё по странам. Не потому, что базы очень большие; и не потому, что в базе нет флага "код страны". А просто так, чтобы было спокойнее. Типа что можно было для разных стран накатывать патчи не одновременно; чтобы если ломать, то не всё сразу. Итак, количество баз пришлось умножить ещё на количество стран, в которых мы ведем бизнес.

А потом у нашей компании появился ещё один сайт. Т.е. совсем другой сайт, но работающий на том же движке. И опять решили для этого нового сайта сделать отдельные копии большинства баз. Ну, просто так, чтобы было спокойнее. И баз стало ещё в два раза больше.

Теперь у нас несколько сотен баз. Админы, наконец, взвыли и решили их объединить. Чтобы на один сервис была одна база, как, вообщем-то, архитекторы изначально и задумали. Конечно, оказалось, что всё out-of-sync, хотя как бы не должно было быть. Так что мучаемся.

Что сделать нашу жизнь ещё веселее, админы ввели правило: запрещено делать breaking changes хранимых процедур. Т.е. если ты добавил новый параметер, или хранимая процедура стала возвращать новое поле, то нельзя делать ALTER. Вместо этого надо создать новую версию: CREATE PROCEDURE MyProc_Version02. Кроме того, запрещено добавлять поля NOT NULL в существующие таблицы (иначе INSERT может не пройти).

Если соблюдать эти правила, то необязательно одновременно менять приложение и базу: старое приложение может работать с новой базой, или наоборот. Другое дело, будет ли оно работать так, как ожидалось? Я лично считаю, что админы просто хотят замаскировать возможные проблемы. Лучше бы ночью на выходных на полчаса просто вырубать всё сайты и менять одновременно и код, и базу. Но, видимо, никому неохота работать по ночам...

P.S. Ещё одно правило, которое мне не нравится: мало того, что нельзя обращаться к таблицам напрямую, но даже через view нельзя. Если я сделал view, то надо создать хранимую процедуру, которая будет его возвращать в приложение. Это загадка для меня. Ну, я понимаю, что напрямую к таблицам обращаться небезопасно, но почему нельзя через view?

понедельник, 18 января 2010 г.

Дайте две

Уже месяца два мой начальник никак не может найти нового C#-программиста. Сегодня спросил: "Валентин, а через какого рекрутера ты к нам попал? Через Марка? Ага, надо ему позвонить..."

Хороший признак: наверное, позвонит и спросит: "Скажите, Марк, не завалялся ли у Вас часом ещё один замечательный специалист вроде Валентина? Мы прям не нарадуемся на него, нужен второй точно такой же..."

P.S. А может, как раз наоборот: "Пожалуйста, таких дармоедов, как Валентин, нам больше не присылайте!" :)

Перегруппировка в Linq

Я уже два года пользуюсь Linq, и думал, что знаю его неплохо... Но вдруг спотнулся на, казалось бы, очень простой задачке. Может, кто подскажет?

У меня есть словарь, в котором ключ - это строка, а значение является списком строк (на самом деле это могут быть и не строки, суть не меняется). Пример. Имеется список товаров, заказанных каждым клиентом. Фамилия клиента является ключом (это плохая практика, но допустим). Для каждого запоминаем список кодов товаров (SKU).

var itemsByCustomer = new Dictionary<string, List<string>>();

itemsByCustomer.Add("Ivanov", new List<string>() { "Sony123", "Toshiba5454" });
itemsByCustomer.Add("Petrov", new List<string>() { "Kodak_4e34_d", "Toshiba5454", "Dell_456g" });
и так далее.

Задача: вывести список, отсортированный по коду товара. Т.е. сгруппировать наоборот - сначала получить список клиентов, которые заказали каждый конкретный товар. Вот примерно такой:

var сustomersByItem = new Dictionary<string, List<string>>();

сustomersByItem.Add("Toshiba5454", new List<string>() { "Ivanov", "Petrov" });
сustomersByItem.Add("Kodak_4e34_d", new List<string>() { "Petrov" });
и так далее. А потом отсортировать этот словарь по ключу.

Я не смог. В результате сделал без Linq, т.е. в цикле перебираю клиентов, и вручную добавляю записи в новый словарь. Единственное Linq-решение, которое пришло в голову - это опять-таки в цикле пройтись по клиентам и добавить .Union() для каждого из них. Но клиентов у меня тысячи, и думаю, что производительность будет ужасная (expression tree разрастется).

Спросил коллег - говорят: "О, это очень сложно". Но ведь с использованием обычного SQL всё бы решилась в два счета! Допустим, у нас были бы таблицы Customer(CustomerCode) и CustomerItem(CustomerCode, SKU). Для моей задачи достаточно было бы написать SELECT * FROM CustomerItem ORDER BY SKU .

Неужели и правда наткнулся на ограничение Linq? Или же, как говорится, проблема в ДНК? :)

Игорь Корхов подсказал ответ. Как я и подозревал, всё просто:

var customersByItem =
from ic in itemsByCustomer
from v in ic.Value
orderby v
select new { Value = v, ic.Key };

суббота, 16 января 2010 г.

Seven Pounds

Мощный фильм. Подробности не хочу писать, чтобы не портить просмотр. Там весь смысл в том, чтобы не знать весь сюжет заранее. Могу только намекнуть, что главный герой решил применить к себе рекомендацию из "Кавказской пленницы": "Ошибки надо не признавать, их надо смывать... кровью".

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

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

P.S. В российском прокате название перевели как "Семь жизней" - по-моему, неудачно.

четверг, 7 января 2010 г.

Мигание экономных лампочек

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

Марина заказала по почте экономную мегалампочку: она кушает 85 Ватт, а светит аж на 425. Здоровая такая, стоит 18 фунтов. Лампочку прислали, но под неправильный патрон: нам был нужен байонет, а не обычная резьба. Написали жалобу. Они прислали правильную лампочку, но старую возвращать не попросили.

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

Коллеги, я в электротехнике не силен... как вы думаете, в чем дело? Может, как-то влияет температура (в Харькове было намного холоднее)? Или хуже заизолирована проводка, и это какие-то наводки? Радиоволны? Высота над уровнем моря?

P.S. Прикольно - в Лондоне я не разу не видел такие большие лампочки в магазинах. Только онлайн. А в Харькове продается и на базаре, и в магазине "Будмен", причем немного дешевле, чем у нас (правда, другая модель).

среда, 6 января 2010 г.

Выблядон

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

СССР. Народ бегает за импортными шмотками, но почти никто не может прочесть иностранный лейбл. Одна простоватая сотрудница приходит на работу в новой импортной кофточке. Её все разглядывают, а дядя Вова взволнованно говорит:

- Слушай, а ты знаешь, что тут написано?
- Неа...
- "Выблядон"!
- Ааа! Я ж её у сестры купила, аж за 25 рублей! Да я ей, суке, все косы поотрываю... как я теперь домой по улице пойду?

P.S. На лейбле было написано "Wimbledon".

Всем валить домой

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

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

А на улице тем временем около нуля. С утра действительно было немного снега, но он уже давно расстаял. И смех, и грех...

вторник, 5 января 2010 г.

FAR победил

По результатам опроса читателей блога побеждает FAR Manager (с минимальным отрывом от Total Commander):

FAR Manager 39 (43%)
Total Commander 38 (42%)
Windows Explorer (Проводник) 28 (31%)
Я линуксоид, мне пофиг 12 (13%)
Другое (под Виндой) 8 (8%)

Я тоже голосовал за FAR. Но не думал, что нас, старперов-консерваторов, окажется так много :)

Мыши победили

Я проиграл первый раунд борьбы с мышами.

Пробовал отпугиватель (30 фунтов в Argos), который издает неслышимые для человека звуки. Кроме того, он якобы что-то делает с электричеством, и вроде как вся проводка в доме начинает бороться с грызунами. Эффект действительно был, но всего на неделю. Очевидно, потом мыши поняли, что в этих звуках нет ничего страшного.

Покупал яд (тоже недешевый, в Robert Dyas). Написано, что якобы они обожают вкус, и даже приманка не нужна. Для верности пробовал класть сверху приманку. Её тут же съедают, но яд не трогают.

Ставил две мышеловки. Приманку аккуратно вытаскивают лапками, и мышеловки не срабатывают. Посыпал их тертым сыром, который (как мне казалось), будет не так легко вытащить. Вернулись из Харькова - ни одной крупинки сыра не осталось, все сожрали. Обе мышеловки захлопнуты, но никого в них нет. Наверное, мои мышеловки слишком добрые. У них рабочая поверность покрыта резиной, чтобы человека не покалечить, надо найти что-то более жестокое.

Зато в Харькове Марина поймала одну мышь. Мы жили в частном доме, мышей много, и они ей спать не давали, шумели ночью. Марина даже пыталась мяукать, чтоб их отпугнуть. Однажды в три часа ночи я проснулся от криков: "Умри, тварь!" Оказывается, мышь попалась одной лапкой, но пыталась убежать вместе с мышеловкой. Это могло ей удалось, потому что доме ещё идет стройка, валяется много вещей и стройматериалов. Удивительнее всего, что на бегу она продолжала есть приманку. Марина поймала её (вместе с мышеловкой) в банку, но не знала, что делать дальше. Можно выкинуть на улицу, но там -18, надо одеваться. И потом, она может тут же вернуться домой. Так что, с моей помощью, утопили мышь в тазу.

Друзья - 2009

Year-end summary:

  • Prison stays, one.

  • Lesbian kisses, one.

  • Pounds lost, minus one.

  • Boyfriends lost but then regained following major diplomatic incident, one.

  • Marriage proposals, one.


An excellent year's progress.

Bridget Jones: The Edge Of Reason


Итоги года:

  • Пребывания в тюрьме: одно.

  • Лесбийские поцелуи: один.

  • Сброшено фунтов веса: минус один.

  • Потеряно бойфрендов, но найдено снова после серьезного дипломатического индцидента: один.

  • Предложение выйти замуж: одно


Отличные достижения за год.

Бриджит Джонс: грани разумного


Мысленно набрасывал итоги прошедшего года: один переезд на новую квартиру, три увольнения на семью (насильно, добровольно и наполовину добровольно), две новые работы, пять поездок за границу (из них две в Украину). Какой-то скучноватый список получился.

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

Все эти люди либо нашли меня через блог, либо это друзья читателей. Ни одного знакомства в оффлайне. На рекламе в блоге я заработал - смешно сказать - 30 фунтов за два года (минус расходы на доменное имя). Но считаю, что всё писательские усилия окупились с лихвой, просто другим способом.

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

P.S. Хочу извиниться, что в эту поездку мы в Харькове почти ни с кем не общались. Мы вас тоже любим, но как-то сильно устали; решили в этот раз поменьше бухать и побольше побыть с родителями.

Ratings by outbrain