четверг, 25 февраля 2010 г.

С Новым Гадом!

В Украине сегодня "синие" празднуют долгожданную победу над "оранжевыми". А я прочел в Википедии интересный факт:
Оранжевое демократическое движение (англ. Orange Democratic Movement) - крупнейшая оппозиционная партия Кении... Несмотря на явные параллели с украинской Оранжевой революцией, прямой связи между событиями в Кении и на Украине нет. Дело в том, что во время референдума 2005 года графа «за» для неграмотных избирателей помечалась изображением банана, а "против" - апельсина (англ. Orange)

Достоевский

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

- Мне нужно проехать туда-то...
- Турист? - хищно улыбнулся таксист.
- Да.
- Ну, садись...

Русский-то выучил, но не спросил у брата, какие цены на такси. Расплата была тяжелой - за такие деньги можно было бы взять кэб из Лондона в Кембридж, наверное. "Ну, до свидания... Достоевский, блин!" - попрощался таксист.

"И только потом я узнал, что одно из произведений великого русского писателя Достоевского называлось "Идиот". Теперь я понимаю, почему таксист так меня назвал!"

вторник, 23 февраля 2010 г.

Упаковка таблеток

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

ASMX и private set

Почти целый день убил на дурацкую проблему. Мой веб-сервис перестал возвращать некоторые данные. Постепенно выяснилось, что из WSDL исчезла часть полей. Перезагрузка IIS, удаление старых DLL не помогали. Оказалось, что я объявил пропавшие поля как { get; private set }, а надо было { get; set }. Смутно вспоминаю, что вроде бы раньше было положено, чтобы и геттер, и сеттер были общедоступны, а потом это отменили. В моем случае поля только сериализуются, десериализацию делать не надо, поэтому вроде как общедоступный сеттер не нужен. Вот я его и объявил private.

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

Нашел описание этой проблемы на http://support.microsoft.com/kb/952883/ (правда, они говорят про internal, а не private, но я думаю, что это неважно). Вот что пишут:

You have a computer that has the Microsoft .NET Framework 2.0 Service Pack 2 (SP2) or the .NET Framework 3.5 SP1 installed. You use an ASMX service method that includes a property, and the property has an internal setter. The serialization may fail (здесь и далее курсив мой - Валик).
...
A supported hotfix is now available from Microsoft. However, it is intended to correct only the problem that is described in this article. Apply it only to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next software update that contains this hotfix.

Т.е. проблема проявляется только на некоторых компьютерах, и не факт, что хотфикс ничего не испортит. Ужас. Этот тот самый тип ошибки, которая страшнее всего для программиста.

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

Странный мусорный кулек

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

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

суббота, 20 февраля 2010 г.

Обама и реформа здравоохранения

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

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

пятница, 19 февраля 2010 г.

Surname = Smith

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

Поэтому Маина на него давно плюнула, и SQL-запросы пишет сама (с моей помощью). Кстати, базы данных она носит домой на специальной зашифрованной флэшке.

Но иногда у аналитика начинают приступы активности. Наверное, когда на работе совсем нечем заняться, и все анекдоты давно прочитаны. Недавно позвал Марину: "Давай будем писать запрос". Написал что-то вроде: SELECT * FROM Patient WHERE Surname = Smith .
- Хм, странно, не работает.
- Smith надо писать в кавычках - подсказала Марина.
- Вау! Действительно! А откуда ты знаешь, ты разве учила компьютерные науки?

А получает он 50 тысяч в год.

Иммигранты часто криктикуют UKBA (британское иммиграционное ведомство) за то, что они непонятно куда девают огромные деньги за визовые услуги. Но между прочим, годовой бюджет UKBA всего лишь 2 миллиарда фунтов - это в 50 раз меньше, чем бюджет NHS!

Атака через бумагу

Кажется, SQL Injection - это неиссякаемая тема для семинаров.

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

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

Все присутствующие заохали от восторга. А я вообще-то планировал такую атаку ещё 12 лет назад. То был 1998 год, дефолт. Заказчик затягивал оплату за мою программу. В наши дни для веб-разработчика очень просто организовать "чёрный ход" в свою программу. Но то было Windows-приложение, и не было никакой возможности подключиться к серверу заказчика и заблокировать систему в случае неуплаты. Поэтому мы рассматривали такой вариант: подставное лицо приходит к нему в качестве клиента, заполняет анкету с определенными ключевыми словами, и система блокируется. Но в конце концов мы решили, что это слишком рискованно: блокировка может случайно сработать. Так что я тогда сделал простую временную бомбу. И она пригодилась: как мы и подозревали, заказчик отказался платить. В назначенный момент система продолжала работать, но не давала экспортировать данные (а это была очень важная для них функция). В тот же день нам перечислили деньги, а я послал им маленький скрипт, вроде такого: UPDATE Config SET IsBlocked = 0 :)

среда, 17 февраля 2010 г.

Чужая каша

Изредка я ем на работе кашу с молоком. Видя это, коллеги одобрительно спрашивали:

- О, ты ешь Oatibix?.. (или Optivita)
- Ага...

Я думал, они просто поддерживают разговор. А оказывается, всё это время я ел чужие каши. Но никто не говорил напрямую: "Что ж ты, сукин сын, жрешь мой завтрак!" Всё начинали издалека... Так бы я и ничего не узнал, если бы однажды не съел кашу индуса, который не настолько такой вежливый, как англики...

А на прошлой работе фирма покупала и молоко, и каши и ещё много чего: хлеб, варенья, печенья. Там работало много молодых восточноевропейских программистов, и фирма следила, чтобы они с голоду не померли. Оказалось, на нынешней работе казенное только молоко (за вредность?)

Out of the loop

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

Проблема в том, что программисты особо не ставят его в известность о своих планах. Есть начальник отдела разработки - с них консультируются, а про дедушку все забывают. Он единственный, кто прекрасно представляет общую архитектуру системы... но по состоянию двухлетней давности. Поэтому он постоянно дает всем в принципе правильные, но уже давно неактуальные советы... А когда ему говорят: "Это уже неважно, этот сервис мы давно переделали/выкинули", он вздыхает: "Блин, я опять был out of the loop (не в курсах)!"

Может, посоветовать ему хорошие курсы по коммуникабельности? Хе-хе, вот какой я злой :)

А лети-ка ты знаешь куда...

Вот такой вот у нас есть аэропорт:

Humberside Airport
Kirmington
North Lincolnshire
DN39 6YH

IATA (т.е. его международный код): HUY

вторник, 16 февраля 2010 г.

Как вас подстричь

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

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

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

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

Сушилка

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

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

Цитата из "Желтых королей" на тему:
Знаете, как это бывает: абстрактная, совершенно отвлеченная проблема: "Есть ли жизнь на Марсе?", "Существовала ли Атлантида?" -- внезапно становится вашей проблемой: вы должны во что бы то ни стало ее решить!.. Так случилось и с любознательным по натуре Фрэнком, когда он почему-то почувствовал себя обязанным доподлинно установить: носит ли эта рыженькая лифчик или же не носит?..

Забыл кредитку

Вот и со мной это случилось: в Sainsbury платил в кассе самообслуживания и забыл кредитку в терминале. Обычно там есть защита от дурака - пока не вытащишь карточку, чек не печатается. Но в этом терминале не было.

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

В свое оправдание могу сказать, что в тот день сильно болела голова.

суббота, 13 февраля 2010 г.

The Bourne Identity

Посмотрели все три серии: The Bourne Identity, The Bourne Supremacy и The Bourne Ultimatum. Сюжет несколько притянут за уши, но операторская работа потрясающая. Я в детстве немного занимался мультипликацией и кино, поэтому обратил внимание. Множество городов мира, и показаны они как-то очень жизненно, а не так, как на открытках. Хорошо это вижу на примере Лондона.

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

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

Американец Борн говорит на русском, немецком, французском, испанском, без синхронного перевода, только с титрами. С нетерпением ждем четвертую серию (должна выйти в 2011 годы)... может, там он скажет пару слов на державній мові :)

среда, 10 февраля 2010 г.

В поисках идеального программиста

Продолжаю наблюдать изнутри процесс поиска кандидата. Ведущие программисты ругаются почти по каждой кандидатуре.

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

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

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

Глядя на это, я никак не могу понять, как же мне удалось заполучить эту работу. Вроде приходят специалисты и посильнее, но их футболят...

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

- Скажи, а эстонцы и финны - это родственные народы?
- Вроде да.
- А, ну тогда понятно. Он ещё флегматичнее меня! Такое впечатление, что он засыпал после каждого вопроса...

Дела сердечные

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

- Когда Вы последний раз падали в обморок?
- Три года назад.
- Как три года назад, вот тут написано, что падаете каждый день.
- Нет...
- Вы Марина?
- Да.
- Такой-то адрес? Такой-то участковый?
- Да, но не падаю, извините...

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

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

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

Подсластить очередь

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

среда, 3 февраля 2010 г.

33

Только помни, что нас в алфавите
Тридацать три, тридцать три, тридцать три!


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

Оказалось, что теста в два раза больше, чем нужно. Пришлось ещё до двух ночи делать пирожки, чтобы оно не пропадало.

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

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

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

Основным развлечением была игра в "корову". К утру всё так поднаторели, что стали в течение пары минут отгадывать очень сложные слова.

Не льсти себе

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

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

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

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

Ellaone

Прочел про новое средство "пожарной контрацепции" под названием Ellaone. Якобы эффективность 98% даже через 5 дней после секса. Журналист сетует, что поскольку препарат недавно вышел на рынок, то британские женщины его ещё не знают и предпочитают старые, гораздо менее эффективные таблетки.

А по-моему, дело совсем не в этом. В отличие от обычных таблеток, на Ellaone нужен рецепт врача. А пока попадешь к нему на прием, вполне может пройти и 5, и больше дней. Тем более, что по выходным и праздникам (в самое "горячее" время) участковые обычно не работают. Так что эффективность препарата компенсируется неэффективностью системы :)

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

Босфор

Коллега показывал прототип нового приложения. Я обратил внимание, что все namespaces начинаются со слова Hudson.

- А причем тут Гудзон?
- Я всегда использую реки в качестве кодового имени для нового проекта, если официальное название не утверждено. У меня уже есть Миссисипи, Потомак, Темза, Босфор...
- Но ведь Босфор - это не река, а пролив! - воскликнул другой программист.
- Как это не река! Сейчас глянем Википедию... Хм... The name comes from the Greek word Bosporos. Its etymology is from bous and poros ("means of passing a river, ford, ferry" - "способ пересечения реки или брода, паром"), thus meaning "oxen passage". The similar Ancient Greek word for "passage, strait" ("проход, узкий канал") is porthmos. Ну, будем считать, что он достаточно узкий... Не переименовывать же всё!

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

Эти руки ничего не крали

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

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

Ratings by outbrain