среда, 16 декабря 2009 г.

Архивы СБУ

Служба безопасности Украины открыла архивы советской эпохи для своей и мировой общественности, исследователей и просто любопытствующих, которые, без каких либо бюрократических проволочек, могут обратиться в один из 26 центров электронной документации, расположенных в 26 городах страны, пишет Пилар Бонет в испанской El Pais.

"Украина становится Меккой для исследователей из республик бывшего СССР, приезжающих к нам (выделено мной - Валик) вследствие того, что российские архивы либо закрыты, либо становятся все менее доступными"

http://korrespondent.net/worldabus/1028032

Молодцы, конечно, что отсканировали документы. А выложить в Интернет слабо? Ведь это же гораздо проще, чем сканирование и классификация.

А ещё лучше было бы не просто выложить, а сделать API для поиска... Хотя, пожалуй, лучше не надо: боюсь, если этим будут заниматься в Украине, то на создание API из двух функций потратят миллионов 10 :)

MVC vs MVP, или Не болтай

Коллеги обсуждали очередное резюме. "У него тут упомянуто MVC... Чтобы его спросить на эту тему?" Я быстро пробежал страницу глазами: "Смотрите, а ниже ещё есть MVP... Спросите, в чем разница". Моя идея им очень понравилась, и кандидата быстро завалили.

Программисты, которые проводили собеседование, слабо разбираются в вопросах построения фронтенда. Они - специалисты по WCF и прочим серверным технологиям, и разницу между MVC и MVP сами понимают смутно. Если бы кандидат ответил ну хоть что-нибудь, типа: "MVP больше подходит для Windows-приложений, а MVC - для Web" (или даже наоборот), то это бы прокатило. Но он сказал: "Понятия не имею", хотя это было в списке его основных навыков.

Интересно, он тоже хотел минимум 65 тысяч?

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

Сотрудник года

...нет, нет, это не я. Ещё не успел себя зарекомендовать :)

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

Главный приз был материальный, и довольно приличный. Кроме того, каждому финалисту выдали красивый сертификат со списком достижений. Главное, что всё написано от души, незаинтересованными коллегами (голосовать за себя, конечно, нельзя), а не твоим начальником.

Единственное, что мне не понравилось - в финал не вошел ни один программист или администратор БД. Несмотря на то, что нас не так уж мало, и новые технологии играют важную роль в бизнесе компании.

Как мы искали квартиру на Уимблдоне

Давно собирался написать, да никак руки не доходили.

Я вообще не хотел никуда переезжать. Женщины склонны больше думать о хорошем, а я сразу представил технические сложности, например: упаковку и распаковку чемоданов, проблемы с ремонтом (в Баркинге-то мы жили в абсолютно новой квартире, и мало что ломалось), перенаправление почты, расходы на переподключение телефона и Sky, отсутствие консьержа (без этого почти невозможно заказать, к примеру, шкаф с доставкой на дом), выбивание депозита из старого лэндлорда, депозит новому, проверка рекомендаций и многое другое.

Но когда стало ясно, что Марина настроена серьезно, то внезапно стало легко: есть цель, и надо думать над тем, как её достигнуть, а не о том, надо ли это вообще.

Почему именно Уимблдон? Пожалуй, подтолкнуло то, что туда переехали наши друзья. Не могу сказать, чтобы мне этот район прямо безумно нравился. И не могу сказать, чтобы вообще какой-то район Лондона мне безумно нравился :) Было всё равно, лишь бы вырваться из нашего длинного коридора, где вечно стоит запах китайской или индусской еды, потому что жильцы не умеют включать вытяжку.

Марина работает в центре; неважно, на какой окраине жить - добираться одинаково далеко. Мы немного поискали в центре, но быстро поняли, что ещё не дошли до того уровня. Например, такая квартирка возле BT Tower за 1500 (в два раза больше, чем мы платили в Баркинге): внизу бар, шум, вонь от fish & chips, узкая винтовая лестница с проволокой вместо перил, без света. Квартира на чердаке, с потолка течет вода. Спальня - буквально заходишь в комнату и попадаешь на кровать, больше ничего нет. Не могу понять, как они затащили эту кровать по такой узкой лестнице? Может, краном через окно?

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

Нам нравится Docklands. Большинство квартир - новые, с человеческими смесителями, посудомойками, с двойным стеклопакетом. Часто есть парковка. Но район тоже, так сказать, мультинациональный, и цены по мере приближения к Canary Wharf резко растут. А Марине как раз была нужна Jubilee Line. Переплачивать втридорога имело бы смысл, если бы она была банкиром и ходила пешком на работу, а так как-то жалко.

Поиски в основном проходили в оффлайне. Т.е. приезжали, гуляли по улицам, заходили в агентства. Сейчас полно сайтов для поисков жилья, но часто бывает, что на сайте всё написано красиво, а ты только пройдешься по улице, и понимаешь, что жить там не хочешь. Немного помогает Google Street View, но всё равно чувствовать район начинаешь только после личного посещения.

На GumTree много мошенников. Типичный текст, который мы видели раз десять: "сдаю однушку в Челси, с ремонтом и посудомойкой, за 500 в месяц. Сдаю дешево, потому что сам живу в Испании (Австралии, Канаде), но вот как раз на следующих выходных приеду в Лондон и могу взять задаток. Пожалуйста, хорошо следите за моей квартирой и пр."

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

Всего я посмотрел около 15, а Марина - около 8 квартир. Я внезапно понял, почему не мог найти работу после кучи собеседований. Это как с квартирами: вроде нормальная, но вот если бы она была чуть ближе к метро... или если бы была посудомойка... или размеры чуть больше... или всё устраивает, но хотелось бы цену чуть меньше... и в принципе, не горит, можно вообще не переезжать. Вот точно так же рассуждает и работодатель, глядя на список из десятков кандидатов.

Я осуществлял предварительный отсев, а потом на повторный осмотр приезжала Марина. Многие агентства закрываются в 18:00, самое позднее - в 20:30, поэтому ей надо было бегом бежать с работы. По субботам работают не всё, или закрываются раньше. Однажды получился прикол: я посмотрел квартиру, рассказал Марине; решили, что, наверное, она не будет тратить время. Но потом в ту же самую квартиру нас повел уже другой агент. Причем оба раза хозяйка была дома. Я не знал, как себя вести в таких случаях. Должен ли я честно сказать: "Извините, меня уже сюда водил другой?" Хозяйка тоже растерялась и сделала вид, что мы незнакомы.

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

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

Перевожу некоторые выражения с "агентского языка" на русский:
"10 минут до метро" = "10 минут езды на машине до метро".
"Уютная" = "крошечная".
"Квартира со своим характером и духом" = "плесневелая викторианская халупа".
"Динамичный, космополитичный район" = "бабайский район, где не ступала нога белого человека".

Однажды в объявлении было сказано: "прямо рядом с линией метро". И действительно, рельсы проходили близко... только вот сама станция была очень далеко. Это мне напомнило, как я когда-то в Киеве спросил, как пройти к ближайшему метро. Женщина странно на меня посмотрела, показала. И действительно, там была станция метро... но ещё не достроенная!

Гуляя по Kingston Road, Марина заметила:

- Фи, всего в 15 минутах от метро, а уже так много негров.
- Ну, в твоей любимой Атланте их ещё больше!
- Там не такие негры, там хорошие.
- Хорошо, но обрати внимание, что они делают: вся община приехала в церковь. А что в это время происходит на Бродвее? Там белые целые выходные глушат пиво в пабах и смотрят футбол. Ну, и с кем же безопаснее жить рядом - с белыми или с черными?

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

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

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

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

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

Twitter

Вообще я сам им не пользуюсь. Но сейчас в Feedburner добавили новую фичу Socialize, так что за 10 минут я завел аккаунт на Твиттере и подключил его к блогу. Кто интересуется, прошу сюда: twitter.com/valikicom

Программист-секретарь

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

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

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

Холод и старение

Дедушка-architect стал жаловаться на холод. Он сидит в углу, возле двух внешних стен. Не задумываясь ни на секунду, я ляпнул:

- Ничего, зато холод замедляет процесс старения.
- Да? Правда?
- Конечно. Неcпроста в холодильнике не портятся продукты.

Пожалуй, неудачно пошутил...

понедельник, 14 декабря 2009 г.

Кошмар о хвостах

Уже почти 10 лет назад как закончил институт, но по-прежнему иногда снится один и тот же кошмар: что когда-то давно я забыл сдать один зачёт, и теперь из-за этого неприятности.

Нет, всё-таки работать лучше, чем учиться...

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

BNF о приеме гормонов

Одна из основных причин переезда в Уимблдон была надежда заполучить более хорошего участкового доктора. Частично надежда сбылась. Марине выписали гормоны на три месяца вперед, и в аптеке их исправно выдают раз в месяц, а не со скандалами, как раньше. В регистратуре работают чинные английский бабушки учительской наружности. Наша врачиха очень приятная, с американской улыбкой до ушей. Все белые - после жизни в Баркинге это поначалу было даже как-то дико: белый участковый врач? Это почти как белый баскетболист. Прием до 19:45 - это тоже очень удобно, не нужно отпрашиваться с работы. Правда, анализы сдавать можно только утром, причем не рано утром, а часов в 10, т.е. опрашиваться всё равно приходится.

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

Однажды Марина пожаловалась на боль в животе:

- А Вы какие-то лекарства пьете на голодный желудок?
- Да, я пью с утра гормоны, за 40 минут до еды.
- О, бинго! Пейте их после еды.
- Но мне же говорили, что надо до.
- Кто говорил?
- Мой американский врач.
- Хм... не знаю... никогда не слышала такого - принимать гормоны до еды... Ну, давай я на всякий случай проверю по BNF...

BNF - это British National Formulary, местный аналог Машковского, протокол назначения препаратов. На наших глазах она полистала и торжественно ткнула куда-то пальцем: "Вот, как я и говорила! Пейте после еды, и живот не будет болеть! Не знаю, почему в Америке Вам так сказали... Может, у них в Америке другие гормоны..." А я думал, скажет, как доктор Рашид, что американцы идиоты, мало ли что они там назначили.

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

В Челси, что ли переезжать, чтобы найти нормального врача? На аренду маленькой комнатки наших зарплат хватит, наверное :)

валикИ

Познакомился с ещё одним читателем моего блога. Так вот он думал, что блог называется "Валики", с ударением на последний слог. Мне никогда не приходило в голову, что здесь могут быть разночтения... хотя почему бы и нет, так тоже красиво...

пятница, 11 декабря 2009 г.

XML-RPC

Сегодня пишу на айтишные темы.

Наши партнеры предоставляют XML-RPC API. Это нечто среднее по сложности между SOAP и "простым" (plain) XML. В отличие от plain XML, не нужно вручную парсить ответ сервера - по идее, этим должна заниматься некоторая библиотека. Она же должна формировать XML с твоим запросом.

Я почему-то был уверен, что поддержка XML-RPC есть в стандартной поставке WCF. Хм, нет. Быстрое гугление привело меня на блог Клеменса Вастерса, который такую библитеку написал. Выглядит вроде прилично. Прекрасно - скачал, стал пробовать вызывать сервис нашего партнера. Вывалился exception. Я не сразу врубился, думал, что это я что-то не так делаю.

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

Конечно, я мог бы и сам дописать этот кусочек (а возможно, потом прославить свое имя, выложив его в Интернет). Но, во-первых, это как-то дико. Я понимаю, если бы мне, скажем, пришлось своими руками написать поддержку WCF для ССП НБУ (Системы Срочных Переводов Нацбанка Украины), которая никому в мире не известна. Но XML-RPC уже лет 10, он и широко использовался. Почему я должен тратить свое время на такое? Во-вторых, я как-то очень расстроился: кто знает, может там внутри ещё запрятана куча менее очевидных глюков?

Поэтому я скачал другую библиотеку с сайта Cook Computing. Она не такая гламурная (не WCF), но работает нормально.

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

- К сожалению, по юридическим причинам мы не можем давать примеры исходного кода (а то вдруг там ошибка, а Вы его будете использовать, потеряете миллионы и будете с нами судиться).
- Погодите... Я же не прошу у вас примеры кода на C# или PHP. Я просто просил пример вызова API. С моей точки зрения, это неотъемлимая часть документации...
- А мы считаем, что это пример кода. И именно поэтому по юридическим причинам я не могу прислать тебе вот такое (пример XML) и вот такое (пример его генерации на PHP). О, чуть не забыл - и вот такое (пример на Perl) я тоже абсолютно не имею права посылать. Но если бы я тебе это послал, то ты бы использовал это на свой страх и риск, наша фирма не несет никакой ответственности...
- Спасибо, теперь всё стало ясно!

Row Test в MbUnit

Когда я впервые увидел MbUnit в одном из проектов, то расстроился: "Ну вот, и в этой фирме тоже зоопарк фреймворков. Мало людям MSTest и NUnit, зачем-то нашли ещё один." Но потом MbUnit стал мне нравится. Документация, правда, неполная. Синтаксис стандартный, но с некоторыми дополнениями. Например, атрибут Rollback2 или сравнение коллекций. Вообще много чего там есть, но моя любимая фича - это Row Test.

Мне нужно протестировать всего-навсего три функции. Но, чтобы быть уверенным в результате, на вход нужно подавать сотни различных комбинаций параметров. Row Test - как раз то, что нужно. Я не пишу сотни Test-функций, а просто использую атрибуты, вот так:

[Test]
[Row("Barking", "Waterloo", RateType.Peak, 3.00, 4.00, 2.70 )]
[Row("Barking", "Waterloo", RateType.OffPeak, 3.00, 4.00, 2.50 )]
[Row("Bank", "Waterloo", RateType.OffPeak, 2.50, 2.00, 1.00 )]
[Row("Bank", "Waterloo", RateType.Peak, 2.50, 2.00, 1.50 )]
public void JourneyPrice(string origin, string destination, RateType rateType, decimal weeklyTravelCardPrice, decimal cashFare, decimal oysterPaygFare)
{
var journey = new Journey(origin, destination, rateType);


Assert.AreEqual(journey.WeeklyTravelCardPrice, weeklyTravelCardPrice);
Assert.AreEqual(journey.CashFare, cashFare);
Assert.AreEqual(journey.OysterPaygFare, oysterPaygFare);
}

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

С помощью атрибутов Row я передаю и входные параметры (станции отправления и прибытия, тип тарифа), и ожидаемые результаты (цена недельного проездного, который бы покрыл поездку, цена одноразового билета и цена с Oyster Pay As You Go). Не придирайтесь к цифрам, я их не проверял :) И ещё здесь daily cap не учитывается.

Отлично - мне не пришлось писать десяток почти одинаковых методов со странными названиями вроде JourneyPrice_from_Barking_to_Waterloo_OffPeak(). Но возникает другая проблема: допустим, у меня есть несколько сотен тестов, а класс Journey работает достаточно медленно. У меня нет никакой возможности выбрать, какую группу тестов запускать. Да и не только в этом дело. Даже если все тесты прогоняются быстро, в test runner не сразу понятно, что именно провалилось, они же все относятся к одному методу и классу.

Чтобы решить эту проблему, я создал абстрактный класс JourneyTestBase. В нем находятся атрибуты [TextFixture], [SetUp], [TearDown] и [Test]. В [SetUp] я один раз создаю экземпляр Journey (потому что он долго инициализируется). Кроме того, у меня есть свойство

public string Origin { get; set; }

и реализация теста JourneyPrice()

[Test]
public virtual JourneyPrice(string destination, RateType rateType, decimal weeklyTravelCardPrice, decimal cashFare, decimal oysterPaygFare)
{
var journey = new Journey(this.Origin, destination, rateType);

// здесь может быть ещё какой-то длинный код

Assert.AreEqual(journey.WeeklyTravelCardPrice, weeklyTravelCardPrice);
Assert.AreEqual(journey.CashFare, cashFare);
Assert.AreEqual(journey.OysterPaygFare, oysterPaygFare);
}

Обратите внимание, что origin теперь не передается как аргумент, вместо этого я использую this.Origin.

Наследую десяток классов, вроде такого:

public class Barking : JourneyTestBase
{
public Barking()
{
this.Origin = "Barking";
}


[Row("Waterloo", RateType.Peak, 3.00, 4.00, 2.70 )]
[Row("Waterloo", RateType.OffPeak, 3.00, 4.00, 2.50 )]
public void JourneyPrice(string destination, RateType rateType, decimal weeklyTravelCardPrice, decimal cashFare, decimal oysterPaygFare)
{
base.JourneyPrice(destination, rateType, weeklyTravelCardPrice, cashFare, oysterPaygFare);
}
}

Я разбил все тесты по станциям отправления. Конечно, в зависимости от задачи, можно это сделать по какому-то другому признаку. Например, по типу оплаты (проездной, одноразовый билет, Ойстер), по тарифу (час пик, выходные, студент, пенсионер) или по комбинации станции отправления и прибытия (тогда бы класс назывался Barking_Waterloo ).

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

Теперь, когда я запускаю всё это, то сразу вижу: Barking красный, Waterloo зеленый... Кстати, именно для удобства запуска в test runner (в моем случае Gallio) я не стал давать классам длинные имена, вроде BarkingOriginTestFixture - их тяжело читать.

Маленькое неудобство: базовый класс тоже показывается в Gallio, хотя он и абстрактный. Но это не вызывает ошибку, он всегда показывается зеленым.

Вы скажите, а зачем я вообще связался с наследованием? Ведь можно было сделать один класс с вспомогательным методом JourneyPrice(), и кучу тестовых методов вроде Barking() и Waterloo(). Да, это так, но представьте, что кроме цены, наш класс Journey умеет выдавать ещё что-нибудь. Например, минимальную и среднюю продолжительность поездки, количество пересадок, расстояние, список достопримечательностей по пути... Наследование помогает сгруппировать тесты. И в test runner ты их видишь так:

Barking: Price, Duration, Distance
Waterloo: Price, Duration, Distance

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

P.S. В версии 3 поменялся синтаксис, он стал более аккуратным и простым. Например, вместо атрибута [RowTest] теперь используется обычный [Test]. Так же, как и раньше, данные для такого теста передаются через атрибут [Row]. Сравнение коллекций и прочие навороты теперь делаются через обыкновенный класс Assert, например: Assert.AreElementsEqualIgnoringOrder(....) Если у Вас уже есть много тестов, написанных с использованием старого синтаксиса, то надо подключить MbUnit.Compatibility.dll

четверг, 10 декабря 2009 г.

Минус шесть

Но однажды к нам в дверь постучалась совсем другая Америка: у меня заболел зуб.

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

- А почему это, если болит один зуб, - вскинулся я, - нужно удалять восемь?!
- Потому что они мертвы, - скорбно сказал дантист.
- Но у меня никогда не болели зубы...
- Это беда всех эмигрантов. Перемена образа жизни, пищи, воды - стресс...

Научная дискуссия кончилась.

Владимир Лобас, "Жёлтые короли"


Марине вырвали зуб. Его лечили в Украине, Америке, Англии, потом снова в Украине. В Англии сделали перфорацию, т.е. пробили ложный канал. Это очень плохо, но украинский врач всё же попытался спасти зуб. На полгода хватило. Но когда у Марины десна распухла от гноя, то стало ясно - битва проиграна.

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

Всего не хватает шести зубов. Приходится питаться в основном пюре, кашами и супами.

Увольнение через две недели

Уволили Маринину коллегу. Она приехала из Австралии специально на эту работу. Открыла счет, подписала договор на аренду квартиру, купила контрактный телефон и т.д. Проработала две недели, и вдруг говорят: "В понедельник не приходи". Всё, никакого объяснения (поскольку работа по контракту, то они имели право так сделать). Поехала домой.

Один начальник говорит, что делегация из дружественного американского университета назвала всё проекты департамента проеданием денег (кроме Марининого), поэтому понадобилась жертва для показательного увольнения. А по другой версии, американской делегации просто не понравились бутерброды, которыми их кормила австралийка.


У другой коллеги-медсестры тоже был неприятный случай. Пришла на смену рано утром и обнаружила, что пациенту по ошибке ночью дали какое-то лекарство. А надо было его давать после операции. Причем если дать до, то это довольно опасно. Она позвонила врачу, разбудила. Вместо благодарности врач стал на неё орать: "Вы, медсестры, просто идиотки! Для него же сегодня зарезервировано время в операционной! Теперь иди в операционную и сама извиняйся".

Рассказала всё старшей медсестре, а та ответила: "Так тебе и надо, вот в следущий раз не будешь умничать". После этого случая она сама уволилась: "Я, возможно, спасла жизнь этого пациента, а меня ещё с грязью смешали".

I'll be back!

Друзья продают старые книги на Amazon, штук по 60 в день. Меньше нет смысла, потому что книги дешевые, иначе не заработаешь. Вначале они всё делали сами - выставляли на сайт, паковали, относили на почту. Это довольно утомительно. Во-первых ничего не перепутать; потом дотащить на почту.

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

Наконец, друг отошел от окошка. Раздались аплодисменты, и он сказал голосом Шварцнеггера: "I'll be back!"

P.S. Теперь друзья завели бизнес-аккаунт на почте, да и сами уже не занимаются отправкой, так что жизнь налаживается.

среда, 9 декабря 2009 г.

Музыка против Дотнета

Как и многих фирм, у нас есть стандартное задание для кандидатов-программистов. Что-то типа "отсортировать массив, не пользуясь стандартными функциями". Я, кстати, в свое время сделал его не очень хорошо. Код у меня был аккуратный и красивый, правильно работающий, с юнит тестами, но не совсем оптимальный. Но я чувствовал, что оптимизировать не успеваю.

Сегодня один кандидат официально был признан худшим за всю историю компании. Длинная, страшная функция... а в её глубине он замаскировал то самое использование стандартной функции, которое строго запрещено правилами. Надеялся, что не увидим? Т.е. реальную работу делает та сама одна запрещенная строчка, а остальной код просто для красоты. Но всё равно не работает, и это видно даже без компиляции. Кроме того, некоторые куски явно бездумно содраны из Гугля. Например, мы просим сделать Windows-приложение, а у него какой-то код, связанный с ASP.NET. К сожалению, по юридическим причинам не могу выложить его код на блог, а то бы вместе посмеялись.

Очевидно, кандидат и сам чувствует, что "не совсем" справился. И вот как он это объясняет: "В свободное время я пишу музыку, и оказалось, что .NET Framework конфликтует с моим музыкальным редактором. Поэтому я снес .NET Framework, и Ваше задание пришлось делать в Блокноте". Резюме тоже слабенькое. Т.е. много написано, но нигде не уточняется, что лично делал кандидат. Желаемая зарплата: от 65 тысяч в год и выше. Хм, желаю творческих успехов...

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

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

вторник, 8 декабря 2009 г.

Iron Mountain

В студенческие годы я подрабатывал в фирме, которая занималась дистанционным обучением. Нет-нет, не онлайн, а по переписке, вроде Ешко. Я обратил внимание, что директор регулярно, примерно раз в неделю записывал базу на дискеты и относил копию домой. 10-15 дискет - это было долго и нудно, а CD recorders тогда ещё были редкостью. Однажды я спросил, зачем он это делает? Неужели прямо каждые выходные разворачивает базу дома и строит какие-то отчеты? "Нет, Валентин, дело не в этом. Когда-то в моем столярном цеху был пожар. Копии я делаю прежде всего не для работы дома, а чтобы в случае пожара у нашей фирмы хоть что-то осталось."

Для меня тогда резервное копирование означало страховку от вирусов и сломаных винчестеров, но о физической безопасности данных я не задумывался. К сожалению, в Украине мало кто об этом думает и сейчас. Достаточно хлопотное и дорогое дело - создать электронный архив где-то за городом, и регулярно его пополнять. В развитых странах это аутсорсится. Пожалуй, самая известная фирма такого рода в Британии - Iron Mountain. Раз в день или раз в неделю приходит их сотрудник с таким портативных сейфом. Ему вручают бэкап на магнитооптике или DVD. Он отмечает на своем наладоннике, кто сдал данные. Диски вывозят куда-то за город - там и складские помещения дешевые, и меньше риски терактов или техногенных катастроф. Если вдруг понадобилось затребовать какой-то диск, то за это надо немного заплатить. Такая же система и с бумажными документами.

Конечно, нужно время чтобы такое прижилось в Украине. "Как это я буду давать свою секретную финансовую информацию какой-то посторонней фирме? Её же сразу начнут продавать на Балке!"

понедельник, 7 декабря 2009 г.

Вокруг света

Мы завершим удачный рейс,
И я женюсь на Блинде Мейз!
Нас ждет победа, Паспарту!!!


Один из наших сотрудников путешествовал почти два года по Африке и Азии. Изначально он собирался объехать вокруг света за полгода. Купил специальный кругосветный билет с открытой датой. Но как-то увлекся: в полгода не уложился, мир не объехал и чуть было не женился. В основном он ездил на велосипеде, хотя раньше никто серьезно не занимался велоспортом. Он делал презентацию - фотографии, конечно, обалденные. Всякие там Гималаи и прочие. За эти два года он практически не работал - говорит, что тратил очень мало. Жил в палатке, продукты покупал в деревнях.

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

А другой мой коллега таки объехал весь мир за год (более цивилизованным способом). Говорит, потому было очень тяжело искать работу. Психологически. На собеседовании надо изображать радостное лицо: "Я в восторге от идеи потрудиться на благо Вашей замечательной фирмы!", а в памяти ещё свежи всё прекрасные, беззаботные воспоминания, и хочется кричать: "Блин, да видал я этот пыльный офис знаете где... На волю! В пампасы!"

The Tube

Смотрели передачу The Tube про лондонское метро.

Хвалили решительные действия сотрудников метрополитена во время терактов 7/7. Но у меня сложилось впечатление, что на самом деле никто толком не знал, что делать. Да и вообще не сразу поняли, что это теракт. Впрочем, трудно их осуждать, ведь такое случилось в метро в первый раз (и хочется надеяться, что в последний).

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

Время от времени начальник станции берет радар, меряет скорость и ловит лихачей-машинистов. Прям как гаишник, разве что в кустах не прячется. Excuse me? Выходит, в 21-м веке диспетчер по-прежнему не может на большом красивом мониторе посмотреть скорость поезда, а потом нажать кнопку "Напечатать список машинистов, которые превысили скорость больше чем на 5 миль"...

Круговорот гаджетов

Бывший харьковский коллега просит привезти ему book reader Sony из Лондона. Говорит, тут существенно дешевле.

А наши лондонские друзья просят купить им в Украине какой-то другой book reader украинско-китайского производста.

Там хорошо, где нас нет...

Lord of War

Три раза посмотрел Lord of War (Оружейный барон). Что ж мне так понравилось в этом фильме? Пожалуй, прежде всего то, что роль идеально подходит Николасу Кейджу. Он обычно играет суперменов, спасителей мира. Но лицо слишком грустное. А тут он в роли циничного одесского иммигранта. Уверенный в себе, но в его глазах - грусть Штирлица. И точно так же он выворачивается из самых безвыходных ситуаций... В отличие от Штирлица, резко отрицательный персонаж, но всё же вызывает симпатию.

IE8

Надо сказать, что тема браузеров меня мало интересовала. Давным-давно я пользовался Netscape Navigator. Потом он превратился в тормознутый Netscape Communicator, и я перешел на Internet Explorer. С тех пор друзья много раз соблазняли на FireFox и что-то ещё, но как-то я не проникся. Последнее время стал использовать Google Chrome, но он частенько глючит... ну, или может не он глючит, а неправильные сайты с ним плохо дружат. Самое смешное, когда какой-нибудь сайт, принадлежащий Google, хуже работает с Chrome, чем с IE.

А вообщем, мне было это всё малоинтересно. Работает, и ладно. Браузер - это просто рабочая лошадка.

Но как ни странно, с большим удовольствием послушал презентацию в Microsoft на презентацию по IE8. Докладчик рассказывал о проблемах, которые мне в голову не приходили.

Например, все производители браузеров не смешивают JavaScript и DOM engines друг с другом. Это дает гибкость. Но зато вызовы между этими engines дорого стоят. Он показывал разные методы оптимизации JavaScript, запускал код до и после, и в некоторых случаях производительность вырастала в 2-3 раза. Причем большинство этих методов очень простые. Например, по возможности дописать var перед именем переменной. В IE8 некоторые из этих трюков уже не нужны, оптимизация происходит автоматически.

Другая фишка - встроенный в браузер объект Json. Он поддерживает те же самые методы, что и объект из JavaScript-библиотеки, поэтому старый код переписывать не нужно; но, конечно, работает в разы быстрее. Тут Microsoft немножко врёт, как мне кажется: всё равно в начале страницы нужно определить тип бразуера и отключить эту JavaScript-библиотеку в случае IE8, а иначе выигрыша в скорости не будет. Но всё равно неплохо.

Для проверки соответствия стандарту CSS Microsoft разработала 50 тысяч (!) test cases. На это ушел 1 человеко-год. И всё это добро конкуренты могут брать бесплатно с их сайта. К сожалению, практически все эти тесты нужно делать вручную, потому что надо смотреть глазами на результат.

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

Докладчик напустил Долото на сайт Google Maps, и сразу вывалилась куча проблем. Правда, это ещё не говорит о том, что в Google сидят дураки. Ведь Долото дает хорошие результаты только если дать ему хорошую статистику. Мы просили напустить Долото на Бинг, но господин евангелист скромно воздержался. Сказал только, что там результаты гораздо лучше.

четверг, 3 декабря 2009 г.

Импорт - к нам

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

Больше всего мучений у новичков вызвает актив и пассив. Как ни странно, текущие счета клиентов (2600 и прочие) - это пассив. Потому что эти деньги мы должны когда-то клиентам вернуть. А вот с точки зрения клиента - это актив. Чтобы не путаться, мы старались всегда смотреть с точки зрения банка, а не клиента. Но не всегда это получалось - клиенты пугались, когда видели в выписках, что счет в пассиве.

Ещё была большая проблема с ЕДРПОУ (бывший код ОКПО). Когда клиент брал кредит, мы открывали ссудный счет и счет процентов на имя клиента, и с кодом клиента, а не банка. С нашей точки зрения это было очень удобно: вот клиент, вот у него есть текущий счет, два депозита, три кредита... Это гораздо легче, чем открывать 10 тысяч ссудных счетов, принадлежащих банку.

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

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

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

Вот интересно - никогда такая проблема не возникала с депозитами! Ни разу! Т.е. всё клиенты согласны, что депозитный счет принадлежит именно им, а не банку. Но не ссудный. Как говорится, "берешь чужое, отдаешь своё".

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

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

среда, 2 декабря 2009 г.

Денни

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

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

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

Хозяин увидел, что Денни хорошо справляется с работой. Повысил его в должности. Теперь Денни не просто чинит, а пытается пресечь всё проблемы на корню. Например, он следит, чтобы в комнатах не курили и не пили. Нарушителей заносят в базу и потом не продлевают им аренду. Короче, property manager.

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

Я спросил, пытался ли он бросать курить с помощью NHS. Говорит, ему давали жевать какие-то таблетки, но вкус был отвратительный, как будто ешь сигарету. "В детдоме воспитатель однажды застукал меня с сигаретой и заставил её съесть, поэтому вкус помню отлично".

Тогда я спросил, как он оказался в детдоме. Его бросила мама, когда умер отец. Отец пил спирт, а водка для него была вместо воды. "Наверное, во время вскрытия кровь в спирте не обнаружили?" - пошутил я. Кровь обнаружили, но органов почти не осталось, всё растворилось.

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

После детдома он решил разыскать своих родственников. Сначала нашел бабушку (по отцовской линии), которая его не любила и называла "Волком" (за то, что он много ел). Бабушка внука не узнала:

- Вы кто, молодой человек?
- Я - Волк.

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

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

Новый муж бил маму. Когда Денни спросил, почему она это терпит, то мать его ударила и заплакала. Он встал и ушел. Уже больше 10 лет в контакт с ней не вступал.

Англия ему не очень нравится, он приехал исключительно за деньгами. А деньги нужны на содержание дочки. Дочку он хотел бы забрать к себе, но она пока слишком маленькая. Возникает вопрос, не скучает ли Денни по жене? Нет, не скучает, она в разводе. Жена гулящая, но не это было главной проблемой. Однажды он увидел, что жена бьет дочку. Сильно побил жену, та вызвала полицию. Полиция выписала предупреждение. "Вы мне выписываете? Вы жене должны выписать! Вот, смотрите, у дочки синяки!" И полиция выписала предупреждение обоим.

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



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

Фикус

Программистам поставили Windows 7. Дело добровольное, но все согласились. Пару дней ушло на борьбу с разными проблемами. Справедливости ради надо сказать, что во многом проблемы связаны не с самой операционкой, а с неправильной (как мне кажется) конфигурацией нашей сети. Ну, и кое-какие проблемы из-за 64 битов (например, пока нет Flash).

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

Что интересно - в день перехода на Windows 7 у нас завял огромный фикус. Плохой знак :)

Avaya и Office Communicator

Мне поставили софтину под названием Avaya PhoneManager. Она показывает, например, сколько у меня непрослушанной голосовой почты. И ещё там куча каких-то возможностей, связанных с телефоном. Всё хорошо... но только у меня нет рабочего телефона!

Ещё насчет телефонных программ вспомнил: прикольная фича есть у Office Communicator - когда ты поднимаешь трубку, он автоматически меняет твой статус на "Разговаривает по телефону". Но этот статус видет не весь мир, а только члены твоей команды, или что-то в этом роде. То же самое - когда у тебя в календаре (в Outlook) назначено совещание, то статус становится "Я на совещании". Доверенные люди могут даже видеть, на каком именно.

В Microsoft показывали прикольные примеры приложений на основе Communicator (точнее, на основе их платформы, которая не помню как называется). Например, корпоративный веб-сайт с фотографиям сотрудником. Каждого сфотографировали и спереди, и сзади, и показывают соответствующее фото в зависимости от того, человек в онлайне или нет.

Магнитики для SketchFlow

Ходил на Silverlight User Group в EMC (владельцы Conchango). Полезного особо ничего не узнал, но зато давали пиво и магнитки, рекламирующие SketchFlow
Точнее, дали один магнитный лист A4, на котором нарисованы (кнопки, карты, выпадающие списки и так далее. Лист можно разломать на элементы и цеплять их на доску, а маркером дорисовывать связи. Интересно придумано - конструктор для взрослых дядь.

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

Кстати, дизайнер сказал, что Adobe по-прежнему на голову выше конкурирующих продуктов Microsoft. Поэтому он сначала рисует в Adobe Illustrator, а потом импортирует дизайн в Blend. Но из Blend обратно в Adobe уже дороги нет, к сожалению.

Мыши

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

Но самих мышей мы долго не видели. Не знаю, то ли просто случайно. То ли они уходили из квартиры, пока никто не жил. И вот свершилось. Раздался истошный крик Марины - я уж думал, что залезли воры! Хотя она мне рассказывала, что совершенно мышей не боиться. Я говорю: "Что ты наделала, теперь она перепугается и пойдет на кухню пить твои капли Зеленина!" Мышь мирно спала на диване. Может, пришла погреться, на полу везде тянет? Но на следующий день Марина застукала её за поеданием нашего печенья.

У кого есть опыт борьбы? Заводить кота наш контракт запрещает.

Consent form

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

И вот в этот момент ей приносят подписать бумажку, которая тут называется consent form, в таком духе: "Мне сообщили о том, что могут быть самые нехорошие осложнения, и мы не за что не отвечаем". А она просто не состоянии прочитать. "Да Вы не волнуйтесь, у нас все подписывают".

Рене

Я был уверен, что мой коллега Рене - это француз. Оказалось, немец.

- А разве "Рене" - это немецкое имя?
- А разве "Валентин" - украинское?

пятница, 27 ноября 2009 г.

Не очень геометрично

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

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

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

Я ничего не понял :) Наверное, "не очень геометрично" означает то же самое, что и "немножко текст по-дебильному написан"? (выражение взято отсюда)

Даже полицейские

Посмотрели фильм "Лох-Несс" (1996). Немного затянутый, но Шотландия там очень красиво показана.

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

четверг, 26 ноября 2009 г.

Канэшна хачу!

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

Чтобы быть первыми, некоторые хитрецы настраивают автоответчик в Outlook. Т.е. на любое письмо из отдела кадров со словом "массаж" немедленно оправляется ответ: "Да". Но однажды девочка-кадровичка сделала опечатку в этом слове, и все роботы оказались в пролете.

Наверное, следующий шаг - это прикрутить к Outlook custom action для нечеткого анализа похожести емейлов, чтобы опечатки не сбивали с толку :) Чего только не сделаешь ради халявы...

CO

Когда-то мы привезли тёще детекторы CO - они там стоили гораздо дешевле. Штук 6. Но в результате они не понадобились. Выкидывать жалко, засунула их куда-то подальше.

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

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

Smugglers Way

В СССР улицам давали какие-то странные имена: шоссе Энтузиастов, проспект Героев Труда, второй тупик Третьей Пятилетки...

Вот в Лондоне названия ближе к чаяниям простых людей: например, есть переулок Контрабандистов (Smugglers Way).

среда, 25 ноября 2009 г.

Фантом

Многие удивляются, почему мне так нравится песня "Фантом". Действительно, ничего в ней такого особенного нет, да и вообще к творчеству Чижа я отношусь сдержанно. Но дело в том, что я её слышал ещё года в трехлетнем возрасте, т.е. примерно в 1980 году.

Конечно, слова я тогда не запомнил и смысл слабо понимал, но фраза "кто же тот пилот, что меня сбил?" въелась накрепко. Теперь это как для меня, как акопунтурная точка. Когда слышу, то сразу из подсознания всплывает костер, речка, гитара, палатка и ещё живые дедушка и бабушка.

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

Библиотечные книги

В Лондоне на платформах часто бывают комнаты ожидания, чтобы греться в ожидании поезда) Мы обратили внимание, что в Уимблдоне в этой комнате лежит куча книг. "Наверное, люди оставляют прочитанные книги, не хотят копить дома барахло", - подумали мы. Решили взять что-нибудь себе. Но с удивлением увидели, что на торцах стоят печати местной библиотеки.

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

Новый опрос (Far vs TC)

По предложению Максима Кожухаря начинаем новый опрос "Чем польуетесь?" Варианты ответа: Проводник, FAR Manager, Total Commander, другое, "мне пофиг (я линуксоид)". Для голосования надо зайти на любую страницу блога.

вторник, 24 ноября 2009 г.

Старый долг

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

И вот, через полтора года, звонок:
- Миссис Марина, Вы знаете, что Вас разыскивают как злостного неплательщика? Royal Mail сообщила нам, что Вы переехали, но всё равно от нас не скрыться! Почему Вы не оплачиваете счет?
- Какой счет? Я никогда не получала счет. Не знаю точную сумму, и куда платить.
- Да, серьезно? Ну, всё равно - надо было самой позвонить в бухалтерию и спросить.
- Да я не знаю телефон Вашей бухгалтерии. И вообще, это Ваша работа. Кроме того, я так и не получала письмо с результатами анализов, и мой GP тоже ничего не получил.
- Ну, извините, мы пришлем счет и анализы (Вам и Вашему GP).

Прекрасно - наконец-то получим анализы полуторалетней давности :) Так, для истории, разве что. Да и GP уже давно поменялся, даже два раза. А письмо они пошлют первому GP. Который, по идее, должен переслать его второму, а тот третьему (это нереально).

Форма P91

Понимаю, что многих это шокирует, но мы не пользуемся торрентами. Вместо этого смотрим лицензионно чистые фильмы с помощью Tesco DVD Rental (это white label LoveFilm). На сайте заказываешь, они присылают диски. Посмотрел, вложил в предоплаченный конверт (марку клеить не надо), они получили, шлют следующий диск.

Но после переезда я что-то долго ничего не получал. С одной стороны, забастовка на почте. В газетах регулярно пишут ужасы: почтальоны в знак протеста против низкой зарплаты просто выбрасывают мешки почты в кусты. Кстати, Уимблдон - сейчас один из худших в стране районов по скорости доставки. Редакция Wimledon Guardian сообщает, что их газета быстрее доходит в Америку и Австралию, чем на соседнюю улицу.

Кроме, я заподозрил, что LoveFilm мог не поменять мой адрес в базе. Поэтому сделать lost disk report (прямо на сайте). Они немедленно прислали такое письмо:

Приносим извинения за доставленные неудобства. Мы немедленно отправим новый диск взамен потерянного. В течение двух месяцев Royal Mail пришлет Вам форму P91. Когда Вы заполните форму, они компенсируют нам 10 фунтов. Если не пришлют, то сообщите нам. А если пришлют, а Вы не заполните, то 10 фунтов вычтем с Вас."

А "потерянный" диск-таки потом дошел. Почта, хоть и медленно, но работает.

понедельник, 23 ноября 2009 г.

Сила привычки

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

Technical Skills:
  • Word, Excel, PowerPoint: 10 years

  • Web Design, HTML, FrontPage, FTP, Far Manager: 10 years

  • Internet Marketing (link submission, mailing lists), Web Analytics, CorelDRAW, FineReader: 8 years

  • Full Software development lifecycle using Microsoft Solution Framework: 4 years

  • AdSense, RSS/Atom feeds: 2 years

  • Владение сотовым телефоном: пока не умею пользоваться.

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

Впрочем, я и сам вот до сих пор пользуюсь Far Manager. Коллеги пугаются и спрашивают, что это. Объясняю, что это "как Norton Commander, но только под Windows". Они понимающе кивают, но совершенно очевидно, что они первый раз слышат и про Norton Commander.

Хурма

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

Белка

Друзья засняли: бесстрашная белка в центре Лондона.

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

HSBC Plus

Мне позвонили из HSBC. Начали издалека: "Ой, Вы у нас такой хороший и любимый клиент, и мы посчитали, что Вы достойны иметь лучший сервис, чем сейчас..." Оказалось, мне хотят всучить HSBC Plus (платный, более продвинутый текущий счет). Обычно я быстро заканчиваю такие разговоры, но сейчас заколебался. Меня не прельщали roadside assistance (машины нет) и leisure (скидки в дорогие рестораны или тренажерные залы, большинство из которых даже не в Лондоне). "Повышенные проценты по депозиту" - это вообще смешно с нынешней учётной ставкой. Вместо 0.1% годовых получать 0.2%? Пара лишних пенсов в год... Скидки на ипотеку тоже пока не нужны. Страхование жизни - на 3 тысячи максимум; мда, недорого же они ценят мою жизнь... Немного заинтересовало снятие наличных за границей без комиссии (хотя за конвертацию они всё равно берут комиссию).

Главная причина, почему я всё же согласился - это travel insurance (дорожная страховка). Наша старая страховка закончилась, всё равно надо было продлевать. Присылают такой красивый ящик с описанием всех благ. Как я и подозревал, большая часть из них мне на фиг не нужна. Страховка вроде нормальная, но... нет ни одного документа с моим именем и кратким описанием полиса. Ну, и как же я буду получать визы в Европу без такой бумажки (summary of insurance coverage)? Нет, я понимаю, что в принципе я могу принести в посольство выписку с HSBC Plus Account на мое имя и полис, где сказано "это полис для всех владельцев HSBC Plus". Но, блин, это же так сложно! Надо уважать время сотрудников посольства - давать им только минимум бумажек, чтобы было всё просто и понятно. Собственно, эта бумажка и есть основная причина, по которой мы покупаем страховку.

Написал емейл в HSBC: "Не дадите бумагу - я разорву договор" (в течение 14 дней cooling off period это можно делать). Индус отвечает - пожалуйста, позвони по такому-то телефону. Позвонил: "Иди в отделение, они сделают". Пришел в отделение. Тетя никак не могла понять, что я хочу:

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

Интересно, какому проценту англичан хоть раз в жизни приходилось получать какие-нибудь визы? Они просто не понимают, что слово джентельмена (или леди) не всегда достаточно. В конце концов, морщась, она все же сделала мне письмо: "Подтверждаю, что, как владельцы HSBC Plus, Валентин и Марина застрахованы." "Хотя вообще мы такого сервиса не предоставляем..."

Works a treat

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

Меня попросили написать веб-приложение, которое бы позволяло вносить данные в одну табличку. Воспользовался шансом и немного поразбирался с JQuery, а имеено с плагином jqGrid. Прикольная штучка - легко позволяет делать таблицы, похожие на Excel, с сортировкой, поиском, разбивкой на страницы, inline-редактированием и даже с деревьями. Легко интегрируется с ASP.NET MVC. Единственное, что немного сложно с документацией: много разных версий, некоторые слегка устарели. Кое-что чётко не прописано в документации, и надо разбираться на примерах. Но, потратив несколько дней, я почуствовал себя довольно уверенно.

Благодарные заказчики написали моему шефу:
Just to say thanks for Valentin’s time on this data entry screen – it will save us all kinds of grief!
The users are very happy with it and it works a treat – Valentin did a great job :)

Цитирую не для того, чтобы похвастаться (хотя может самую малость и поэтому тоже...), а потому, что прикольно написано: it will save us all kinds of grief и it works a treat.

Oyster на реке

Свершилось! Карточку Oyster теперь можно использовать на некоторых катерах. Обещали это сделать ещё два года назад, между прочим:

We are writing to let you know that Oyster pay as you go can now be used to pay for travel on scheduled River Thames services operated by Thames Clippers.

Boats run every 20 minutes each day between the key piers including:
Blackfriars/London Bridge to Canary Wharf
Embankment/Waterloo/Tower to Greenwich
Woolwich/The O2 to Central London


Правда, когда почитал подробности, то энтузиазм поутих: насколько я понял, всё равно каждый раз нужно покупать обычный бумажный билет, просто тебе дают скидку 10% (или 33%, если есть Travelcard).

пятница, 20 ноября 2009 г.

Jump off the page

Хочу написать о фильме "21". Преподаватель отбирает студентов с хорошими математическими способностями и формирует из них команду для полулегального бизнеса: ездить в Лас Вегас и играть в блэк-джек с помощью counting. В принципе, counting ("считательство") не запрещено законом, но казино отлавливают таких игроков и стараются от них избавится по-хорошему. Или по-плохому. Поэтому команда должна действовать очень осторожно.

Главному герою нужно 300 тысяч долларов на учебу в престижном мединституте, вот он и соглашается временно поработать. Времени на учебу остается мало, но преподаватель его отмазывает. Всё идет хорошо, но однажды студент теряет бдительность, сильно проигрывает, ссорится с преподавателем. Тот из вредности "стучит" в службу безопасности казино, студента бьют. Кроме того, препод крадет у него все деньги и организует отчисление из колледжа. Студент договаривается с казино, чтобы подставить преподавателя, и это удается. Но начальник службы безопасности отбирает всё выигранные деньги, и студент уже во второй раз остается ни с чем.

Захватыващий сюжет. Но я решил написать про фильм по другой причине: они использовали такой же прием, как в "Испанском английском", мне он нравится. А именно: вся история - это эссе для поступления в ВУЗ.

Фильм начинается с собеседования по поводу стипендии на учебу в мединституте. Это престижная стипендия, которая полностью покрывает учебу и все связанные расходы. Начальник приемной комиссии говорит нашему герою примерно следующее: "Ну да, я вижу, у тебя рекомендации от академиков, очень уважаемых людей... да, ты золотой медалист... победы на конкурсах... участие в кружке робототехников... Всё это хорошо, но, понимаешь ли, у меня ещё 20 человек с точно такими же справками. Это очень престижная стипендия, и тут нужен уникальный жизненный опыт... твое эссе должен изумить, ослепить меня, ты должен выпрыгнуть из страницы!" И кончается фильм тоже в том же самом кабинете:
So my senior year of college I joined this team and I learned this new skill. I went to Vegas 17 times to use it. I made hundreds of thousands of dollars counting cards. And then I had it all stolen from me, twice... How's that for life experience professor? Did I dazzle you? Did I jump off the page?

Итак, в мой выпускной год в колледже я вошел в состав этой команды и приобрел этот навык. 17 раз я отправлялся в Вегас, чтобы использовать его. Я выиграл сотни тысяч доллов, считая карты. И затем эти деньги были украдены у меня, дважды... Ну, что, такое пройдет как "жизненный опыт", профессор? Ошеломил ли я Вас? Выпрыгнул ли я из страницы?

Мы с Мариной писали множество эссе, пытаясь получить различные стипендии для учебы. А с моей мамой мы готовили заявки на гранты. И это очень тяжело. Американцев с детства учат писать эссе, а нас не учили. Там есть совершенно чёткая структура и правила написания (например, argument analysis: проблема, аргументы за, против, вывод). Писать надо очень кратко и четко. Но когда большая конкуренция, то мало просто соблюдать эти правила. Недостаточно, чтобы не было ошибок, и чтобы читатель тебя понял. Задайте себе вопрос: "Did I dazzle them? Did I jump off the page?"

Обновление адреса в The Carphone Warehouse

Пошел покупать Марине iPhone. Собственно, её вполне устраивает Blackberry Pearl 8110. Но, похоже, от возвраста он начал глючить. Да и аккумулятора с трудом хватает на день. Купили новый аккумулятор - не помогло, т.е. дело в другом. Пробовал софт переставлять - помогло, но чуть-чуть.

Но речь не об этом. Меня удивило, что их Billing знал о моем переезде (счет уже приходил на новый адрес), а вот Sales - нет. Я говорю продавцу: "Наверное, ваша база обновляется только раз в месяц или раз в квартал?" А он говорит, что нет, Sales никогда не получает сведений о перемене адреса от Billing. Чтобы упростить бизнес-процесс, адрес идет только в одном направлении. Т.е. у тебя был контракт 10 лет назад, ты пришел заключать новый - а в их базе по-прежнему твой старинный адрес. Ну, это ещё ладно, мне больше интересно, получает ли Direct Marketing информацию от Billing, чтобы присылать домой всякий мусор. Если не получает, то это идиотизм.

четверг, 19 ноября 2009 г.

Data.gov

Прочел заметку в Metro. В очередной раз британцы собираются "впервые в мире" сделать нечто, уже успешно работающее в США.

OS Map data could be free on internet

Ordnance Survey map data could become available free of charge online. The information about electoral and local authority boundaries, postcode areas and mapping would be made available under the government proposals. ' We are determined to be the first government in the world to open up public information in a way that is far more accessible to the general public,' prime minister Gordon Brown said yesterday.


Послал в газету комментарий, но его не напечатали.

In regards to OS Map data could be free on internet (18.11.09):

Mr. Brown says that 'we are determined to be the first government in the world to open up public information in a way that is far more accessible to the general public.' I hate to disappoint him, but he is late: in May 2009 Americans created Data.gov in order to achieve exactly what the prime minister described. Also, Google has launched google.com/publicdata search powered by World Bank data.

So, best case scenario, UK government will be the second in the world to open up public information. But that is fine: it could be much easier and cheaper to be the second, because you can learn on somebody else's mistakes.

понедельник, 16 ноября 2009 г.

Блатной ОКПО

Идентификационный код British Airways Plc: 1777777. Похоже, что красивые коды можно покупать. Точно так же, как красивые номера для автомобилей.

Требуется водитель-ариец :)

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

- Я попрошу своего замечательного литовского водителя проверить перевод, потому что Google Translate неважно работает.
- Рад, что мой пост Вам пригодился. Только я бы убрал фразу про "истинных арийцев, беспощадных к врагам рейха". Это была шутка, цитата из очень популярного советского сериала "17 мгновений весны". Она ничего не говорит тому, кто не смотрел сериал.
- А у меня есть ещё и украинский водитель. Арийца из третьего рейха пока нет, но я бы нанял, если он окажется хорошим работником.

P.S. Теперь надо следить, чтобы не ляпнуть что-нибудь обидное про англичан - Google Translate постепенно стирает границы между языками.

Самое слабое звено

Партнер предоставляет нашей компании некий веб-сервис. И мне надо его протестировать. Чтобы кто попало сервисом не пользовался, партнеры нам логин и пароль. Но кроме того спросили, с какой IP адреса мы будем обращаться к сервису.

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

Вот только одно "но": как я обнаружил, они ограничили доступ только к тестовому серверу, а к живой базе может обращаться кто угодно! Правда, хакерам нужен ещё пароль, но даже и без пароля можно устроить DoS attack.

Я написал вежливое письмо: "Извините, я в этих сетевых делах особо не разбираюсь и не знаю Ваших обстоятельств, но мне кажется, что доступ надо закрыть." Они немедленно так и сделали. Но "спасибо" не сказали. Более того, теперь ко мне относятся с подозрением, как к опасному хакеру.

И это не какой-то мелкий стартапчик в гараже, а огромная контора.

пятница, 13 ноября 2009 г.

Амадеус

Однажды преподаватель спросил нас: "Как вы думаете, в какой индустрии самые большие базы данных и нагрузки на них?" Мы стали гадать: спецслужбы? биотехнологии? банки? атомная энергетика? армия? А правильный ответ был: "системы бронирования гостиниц и авиабилетов".

Прошло 10 лет. Читаю заметку в Information Age про Amadeus. Это одна из семи основных GDS (Global Distribution systems), которая имеет крупнейший гражданский дата-центр в Европе. GDS - это такие мега-системы бронирования, которыми пользуется большинство авиакомпаний и сетей гостиниц. Там есть вся основная информация: аэропорты, рейсы, пассажиры и т.д.

Так вот, что меня поразило: в день Amadeus обрабатывает 470 миллионов транзакций. Это 50-60% от загрузки Google. Конечно, я понимаю, что кроме обработки запросов пользователей Google ещё делает гигансткую работу за кадром - индексирует Интернет. Так что, может, сравнение не совсем корректное. Но всё равно, цифра поражает.

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

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

NewApp

Терпеть не могу, когда программы называют NewStat, NewSite, Redesign и т.д. Конечно, первые месяцы это удобно - всем понятно, где что. Но проходят годы, "новая" программа становится старой, и название начинает раздражать. А потом встает вопрос, как назвать очередной большой релиз: может, NewNewApp? Мои коллеги пошли ещё дальше:
using OurCompanyName.NewWebSite.Models;

Какая гадость...

Перевоз мебели

Перевозчики мебели и прочих вещей называются в Англии removal companies. Другое название - man and van. Это когда хотят подчернуть, что машина с водителем и, возможно, грузчиками, а не когда ты водишь вэн сам.

Я долго думал, какую removal company выбрать. Во-первых, далеко не все работают по воскресеньям, как нам нужно. Во-вторых, начитался всяких ужасов про "левых" перевозчиков.

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

И что же случается с теми, кто заказывает непроверенных польских грузчиков? Пишут, что если повезет, то не убьют и не изнасилуют, а просто поцарапают мебель. Или грузчик приедет в деловом костюме и откажется грузить. "Остерегайтесь подделок! Многие просто копируют дизайн известных сайтов и вставляют свой телефон. Вот, например, такой-то сайт - поддельный (а дальше идет адрес того самого сайта, который я читаю!)" Т.е. они сами содрали откуда-то, и даже не потрудились прочесть!

После долгих размышлений я выбрал Simply Removals. Их рекомендовал Move Me. Сайт приличный, бесплатный телефон, юридический адрес... Они сами позвонили. Потом я позвонил, назначил время. Потом на всякий случай позвонил ещё раз - они подтвердили, что всё в порядке. Правда, меня немного смутило, что они назначили время "с 12 до 2". Ну, с другой стороны, если этот же водитель кого-то перевозит с утра, то точно ведь неизвестно, во сколько закончат.

Возле нашего дома вообще-то запрещено парковаться, место зарезервировано для мусорщиков и пожарников. Но в виде исключения во время переезда разрешается в течение 15-20 минут парковаться возле дома. Поэтому нужно заранее всё разобрать, упаковать, пронести по длинному коридору и спустить на лифте. Ночью почти не спали, паковались. В 8 утра начали выносить вещи, постепенно подтянулись друзья. И в 11:45 мы уже сидели внизу и ждали машину.

Сколько же мы добра нажили за два года! Одних Марининых книг и бумаг на 100 кг. Когда вынесли всё из квартиры, то трудно было понять, как оно там раньше вмещалось. Соседи с трудом могли попасть в лифты - мы заняли большой кусок коридора. И это при том, что основная часть мебели принадлежала хозяину квартира, т.е. перевозить её не нужно было.

А машины нет. Прошло два часа. Искать других перевозчиков вроде стремно - вдруг приедут первые? Свой замечательный бесплатный телефон Simply Removals не берут. С утра не ели. Принесли еду из китайского тейкевея, прямо в коридоре и поели. Крайний срок прошел, а машины нет.

Нашел контору под названием Alloa George. Сайт не совсем внушает доверие, зато есть сотовый телефон. И цена в два раза ниже. Сказали, что могут приехать через час. Мы уже волнуемся - вдруг и эти нас кинут? В начале четвертого, в воскресенье, найти других может быть сложно. Но "кровавый" литовский водитель приехал на 10 минут раньше обещанного. Оплата почасовая, но время он не тянул: с пути не сбился, быстро загружал, быстро выгружал прямо возле машины (а не относил в квартиру, что было бы дольше). И водил хорошо - уверенно протискивался между неправильно запаркованными легковушками.

А Simply Removals даже не извинились.

Защитники Политеха

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

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

четверг, 12 ноября 2009 г.

Мы

При упоминании компании сотрудники говорят "мы". Мы построили этот новый завод, мы (не компания) занимаемся благотворительностью. Я, конечно, не удержался спросить: это так положено или так принято? Сказали, что просто так чувствуется. Ладно. В речи американцев меня тоже всегда удивляло отождествление себя с нацией и страной. Мы признали права черных, мы построили небоскребы, мы боремся с потеплением. Кто-нибудь слышал, чтобы у нас кто-то сказал: "Мы построили ДнепроГЭС" (кроме, может, самих участников строительства)? Еще прикольно американцы говорят "Тот парень и я", "My whife and I", "John and I". У нас всегда: "Я и мой друг Вася", в таком порядке.

Дмитрий Пожаров


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

Правда, есть и другая сторона: бывало неприятно, когда ты один, без посторонней чего-то сделал, а начальник тут же бодро докладывает пользователям: "Мы это сделали..." Но сейчас привык. Тем более, что мой нынешний начальник не такой.

Когда я был начальником отдела в харьковском банке, то обращал внимание, сколько времени нужно новому сотруднику, чтобы начать отождествлять себя с организацией.

Был один программист (как специалист довольно толковый), который проработал в банке 4 года. Но по-прежнему продолжал говорить: "И как это у вас работает? Что вы придумали? Как вы будете выкручиваться из этого?" Причем в некоторых случаях он говорил "ваша программа" про программу, которую сопровождал пару лет и уже наполовину переписал!

А другой парень уже через неделю-две стал говорить "мы" не только про ИТ-отдел, но и про банк в целом. "На обмене валют мы неплохо заработали за этот квартал", "мы открыли филиал", "вот гады, не отдали нам кредит".

And guess what? Первый уволился, причем, как я понимаю, не совсем добровольно. Второй после моего отъезда в Америку заслуженно занял кресло начальника отдела, в нем и сидит уже четыре года.

Pro ASP.NET MVC Framework by Steven Sanderson

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

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

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

Читаю с большим удовольствием. Конечно, всем известно, что главный специалист по ASP.NET MVC - это Скотт Гу. Его NerdDinner - это уже классика. Но Скотт - сотрудник Microsoft и один из создателей ASP.NET MVC. А всегда интересно услышать мнение независимого эксперта, вроде Стива. Стив пишет о вещах, которые не совсем четко описаны в документации; о недостатках нынешней версии и том, как их обходить, а также о планах разработчиков на будущее. Некоторые разделы (DDD, TDD) непосредственно не связаны с MVC, но читать их всё равно интересно. Кроме того, книжка Скотта уже слегка устарела.

Интересно, что узнал про ASP.NET MVC я случайно. Просто искал хороший инструмент для создания friendly urls. В том время меня мало интересовали unit tests и separation of concerns. Я считал, что хорошо спроектированная база данных - это 80% успеха, а на чем писать UI - не так уж и важно. Но прошло полтора года, и я проникся. Если в сайте больше одной веб страницы, то пишу его на MVC. Правда, пока пишу простые unit tests, почти не делаю TDD, как Стив (очевидно, я ещё не достиг нужной стадии просветления).

среда, 11 ноября 2009 г.

The Japaneese Canteen

Зашел в "аутентичное" японское кафе. Все продавщицы и повара - болгары. А за столом сидят русские студенты и матом разговаривают.

Подвиг официантки

Смотрел UK Border Force. Они задержали украинскую официантку. Девочка вначале не кололась, они стали угрожать: "Своим враньем ты делаешь только хуже; не скажешь правду - придется тебя арестовать." В конце концов она заплакала и сказала правду: въехала по липовым документам. И, конечно, её тут же арестовали.

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

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

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

Проблемы с почерком

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

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

Цели

Наконец-то у меня появились goals. В Англии приятно устанавливать, чего работник должен достигнуть за определенный период. Обычно это год, но в нашей фирме - квартал. По окончании периода менеджер проверяет, что получилось выполнить и перевыполнить, а что - нет. Если всё хорошо, то могут повысить зарплату. Если плохо, то могут отправить на курсы или уволить.

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

Когда нынешний начальник назначил мне встречу по поводу целей, то я вздрогнул. Совещания, так или иначе связанные с отделом кадров, теперь вызывают у меня беспокойство. Но всё прошло нормально. Он совершенно конкретно расписал, чем я должен заниматься, и какие приоритеты у задач. Не было никакого бреда типа "повысить коммуникабельность на 57%" или "улучшить навыки работы с людьми на 31.2%".

понедельник, 9 ноября 2009 г.

Привалов

Когда мне хорошо, я вспоминаю программиста Привалова ("Понедельник начинается в субботу"):
Но, несмотря на все маленькие помехи и неприятности, несмотря на то, что одушевленный теперь "Алдан" иногда печатал теперь на выходе: "Думаю. Прошу не мешать", несмотря на недостаток запасных блоков и на чувство беспомощности, которое охватывало меня, когда требовалось произвести логический анализ "неконгруэнтной трансгрессии в пси-поле инкуб-преобразования", несмотря на все это, работать здесь было необычайно интересно, и я гордился своей очевидной нужностью. Я провел все расчеты в работе Ойры-Ойры о механизме наследственности биполярных гомункулусов. Я составил для Витьки Корнеева таблицы напряженности М-поля дивана-транслятора в девятимерном магопространстве. Я вел рабочую калькуляцию для подшефного рыбзавода. Я рассчитал схему для наиболее экономного транспортирования эликсира Детского Смеха. Я даже сосчитал вероятности решения пасьянсов "Большой слон", "Государственная дума" и "Могила Наполеона" для забавников из группы пасьянсов и проделал все квадратуры численного метода Кристобаля Хозевича, за что тот научил меня впадать в нирвану. Я был доволен, дней мне не хватало, и жизнь моя была полна смысла.

Чего и вам желаю! Между прочим, это написано в 1965 году (почти 45 лет назад). Да-да, программисты были уже тогда.

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

суббота, 7 ноября 2009 г.

Tracesmart

Equifax прислал мне предупреждение: "по Вашему кредитному файлу сделала запрос компания Tracesmart, специализирующаяся на выбивании долгов". Ну, ничего себе! Вроде я никому не должен...

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

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

пятница, 6 ноября 2009 г.

В Харьков на Новый Год

Всем заинтересованным лицам сообщаем, что мы купили билеты, будем в Харькове с 22 декабря по 2 января.


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

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

Но вот неприятный сюрприз: прочел в газете, что сотрудники BA собрались бастовать. Надеюсь, до декабря там всё утрясется.

А вообще за время существования British Airways миль накопилось столько, что можно было бы долететь до конца Солнечной системы. Просто по разным причинам люди их не расходуют, а иначе бы компания разорилась.

RSS в Outlook 2007

Дома я пользуюсь Google Reader, а на работе решил попробовать читать фиды через Outlook 2007. Удобно - можно работать с постами, как с обычными емейлами: отмечать как непрочитанный, переслать коллеге, удалить... Microsoft Search, соответственно, ищет не только в емейлах, но и в постах.

Но заметил глюк (или фичу): когда я удаляю не интересный или уже прочитанный пост, то в течение дня Outlook снова его скачивает. Хотя, если фид сделан правильно, то у каждого поста должен быть абсолютно уникальный ID, пользуясь которым, можно предотвратить повторное скачивание (по-крайней мере, до тех пор, пока удаленный пост лежит в моей Корзине, т.е. его ID ещё известен).

И ещё - пора бы уже им переименовать RSS Feeds в просто Feeds. Ведь Atom становится всё популярнее...

Хауз поет рэп

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

Я прочитал интервью какого-то украинского врача, который пишет, что "Хауз" и "Анатомия Грейс" - это чушь, голливудские выдумки. Что на самом деле не бывает госпиталей с таким прекрасным оборудованием, и не бывает врачей с такими широкими познаниями.

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

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

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

Ха-ха, помню, раз мы всучили одному преподу фальшивые 20 долларов. Но именно взятки брали довольно редко. Гораздо ценнее были звонки от важных людей. Ты мне - я тебе. По принципу "за меня позвонили - не позвонили" студенты так и делились - на "позвоночных" и "безпозвоночных".

Много было дерьма в мединституте, но это я отвлекся. Хотел сказать, что, конечно, кино - это кино, и где-то есть преувеличения, но фантастикой этот фильм явно не назовешь. Единственное, что как-то они очень мало интересуются страховкой, и легко назначают самые дорогие процедуры. Правда, создатели фильма объясняют - это потому, что госпиталь учебный. Не знаю, насколько это реально.

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

Бывали необычные эпизоды - например, самолет с аквалангистом, болезнь Формана, или когда Хауза подстрелили. Но всё равно, обычно правильность диагноза легко проверить по часам: "Так-с, прошло только 30 минут... наверняка диагноз неверный..."

На этом фоне открытие шестого сезона (Хауз на лечении в психушке) смотрится очень свежо и трогательно. Интересно будет послушать, как переведут на украинский сцену, когда Хауз импровизирует на сцене вместе с сумаcшедшим рэппером. Тут дословным переводом не обойдешься, надо адаптировать текст...

Хеллоувин

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

Когда уже расходились по домам, я столкнулся с парнем в маске Смерти. У него были такие длинные зубы, что я не удержался и сунул ему в рот палец. Не ожидал, что парень так перепугается и броситься бежать...

Пронесло

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

- Сэр, Вы знаете, за что я Вас остановил?
- Нет, не знаю (вытирая пот со лба)...
- Вы разговаривали по сотовому телефону.
- Да что Вы такое говорите, офицер - мой вообще телефон сдох на днях. Вот, смотрите - он у меня даже не включен!
- Да? Ну, тогда извините, счастливого пути...

Видимо, мой знакомый просто как-то поднял руку таким образом, что офицеру привиделся телефон.

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

Ratings by outbrain