среда, 23 декабря 2015 г.

Гонг за стенкой

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

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

Пальцы в туалете

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

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

Будут менять замки. А с виду всё такое стильное - наверняка модные дизайнеры делали под заказ.

вторник, 22 декабря 2015 г.

Птичка - к деньгам

Приснилось: сообщаю Марине, что ей на куртку накакала птичка. И тут же другая птичка какает ей прямо на лоб.


Примета работает! Утром получаю письмо от бухгалтера: Марине должны вернуть переплаченные налоги. Целых £1.75 :)

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

Павлик у нас


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


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


Как же так? Я же предупреждал? Да, но как я писал, своего телефона у нас не было, поэтому я не умел "правильно" по нему разговаривать. Трубку подняла бабушка Павлика, и я ей просто сказал: "Павлик у нас". Положил трубку. Она же знает мой голос.


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


В общем, развивайте communication skills :)

пятница, 4 декабря 2015 г.

Beer pong

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

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

Всё же просто так брать деньги за вход в Провал им было неудобно, поэтому для посетителей организовали игру в beer pong ("литрбол"). Две команды. Два стола поставили в длину. С каждой стороны по шесть стаканов треугольником. У них наливают немного пива. Задача - попасть шариком для пинг-понга в стакан противника. Если попадаешь - противник выпивает пиво и убирает стакан. Два раза за игру каждая команда имеет право перегруппировать стаканы противника (когда они рядом, то попасть легче).

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

Поначалу у меня ничего не получалось, но, после принятия на грудь, точность бросков стала рости. Первую партию мы проиграли с минимальным отрывом в один стакан, зато потом разгромили студентов (у нас ещё осталось аж четыре стакана).

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

Неожиданный талант к игре обнаружился у нашего тихого индуса-тестировщика. Хотя на мои проводы пришло всего четыре человека, два из которых к тому же довольно свалили домой, остался доволен. Потом, правда, была "головка вава". Утром на scrum meeting скаламбурил: "today - handover and hangover" ("сегодня - передача дел и бодун").

Динамо

Жителям Крыма предлагают новое имя для детей – "Генератор". С такой инициативой на внеочередной сессии 4 декабря выступил глава Госсовета Крыма Владимир Константинов, сообщает Крым.Реалии.
Предлагаю аналогичное имя для девочек: "Динамо" :)

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

RHS Hampton Court Palace Flower Show

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

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

Несмотря на высокие потолки в закрытых помещениях, через пару часов я начал задыхаться, заболела голова: жара и куча запахов вместе. Много чего купили. Цены хорошие, даже по сравнению с Costco или распродажами в B&Q. Особенно в последний день перед самым закрытием. Да и просто много таких экзотических вещей, которых мы в магазинах никогда и не видели. Но проблема в том, как это всё дотащить до машины: очень далеко, да и назад не пустят, если не купишь новый билет. Поэтому большим спросом пользовались складные тележки.

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

Бодун авансом

В понедельник на новую работу. При этом заранее, уже в пятницу, иду к ним на корпоратив. Замечательная возможность спьяну подраться с начальством, даже не приступив к работе :)

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

Сила defaultValue в rewriteMap

Бывают ситуации, когда элемент <rewriteMap> в настройках IIS URL Rewrite на самом деле используется не как map (или dictionary), а просто как hash set. Т.е. когда достаточно проверить, что ключ есть в списке, а никакое value доставать не надо.

Пример. У каждого офиса корпорации раньше была своя личная страничка с адресом вроде /our-office-in-Donetsk/. А теперь надо их всех перенаправить на полный список всех офисов: /contact-us/. Это легко:

<rule name="Redirect all offices to the main Contact page">
  <match url="^our-office-in-([a-z]+)/$" />
  <action type="Redirect" url="contact-us/"/>
</rule>


Усложняем задачу: а что, если только некоторые страницы (допустим, с закрывшимися офисами) надо перенаправить, а остальные, вроде /our-office-in-Kyiv/ - оставить, как есть? Если список большой, то желательно использовать <rewriteMap>:

<rewriteMap name="ClosedOffices">
  <add key="Donetsk" value="closed" />
  <add key="Luhansk" value="closed" />
  <add key="Sevastopol" value="closed" />
</rewriteMap>

Тогда наше правило перенаправления может быть таким:

<rule name="Redirect closed offices to the main Contact page">
  <match url="^our-office-in-([a-z]+)/$" />
  <conditions>
    <add input="{ClosedOffices:{R:1}}" pattern="^closed$"/>
  </conditions>
  <action type="Redirect" url="contact-us/"/>
</rule>

Неплохо, но для каждой строчки в карте приходится повторять одно и то же value="closed". Это добавляет шум в код, и ошибиться легче (написал в одном месте close вместо closed, и работать уже не будет).

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

<rewriteMap name="ClosedOffices" defaultValue="open">
  <add key="Donetsk" />
  <add key="Luhansk" />
  <add key="Sevastopol"/>
</rewriteMap>

<rule name="Redirect closed offices to the main Contact page">
  <match url="^our-office-in-([a-z]+)/$" />
  <conditions>
    <add input="{ClosedOffices:{R:1}}" pattern="^open$" negate="true" />
  </conditions>
  <action type="Redirect" url="contact-us/"/>
</rule>

вторник, 1 декабря 2015 г.

Полубольничный

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

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

The Gherkin

Пару месяцев назад побывал почти на самом верху "Огурца" (здание в Сити весьма необычной формы). Здорово! Но когда за спиной докладчика окна от пола до потолка с видом на весь Лондон, трудно сосредоточиться на презентации :)

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

Ремень

Потерял в Хитроу ремень. Жаль, хороший был.

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

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

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

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

Завалил HR interview! Ну, вернее, моим собеседником была не кадровичка, а тоже айтишница, но с большим уклоном в менеджмент. Вот её feeback:

1. Говорил не о ценности своего программного обеспечения, а только о деньгах.
2. На вопрос, как убеждал других в своей правоте, сказал, что просто долго повторял одно и то же. А надо было приводить другие аргументы.

А вот что было на самом деле. Попросила рассказать о каком-нибудь своем достижении. Ну, достижений у меня много. Рассказал о самом свежем, да ещё и связанным с AWS. Есть продукт стороннего разработчика. Чтобы перенести его в AWS, надо было заплатить 50 тысяч фунтов. В принципе, подъемные деньги для фирмы. Но я говорю, что он ведь нам теперь почти не будет нужен; а маленький кусочек, который таки нужен, я сам перепишу. И вот эту идею пришлось повторить начальнику много, много раз. Он был убежден, что AWS уже и так делает всё это автоматически. Приходилось объяснять: нет, он делает, но немного другое. Начальник соглашался... а потом через месяц забывал, и опять начинали сначала. Нет, начальник у меня хороший, умный, просто очень затурканный.

Потом у неё вопросы закончили, а новый собеседник задерживался. Я тоже вроде спросил всё, что хотел. Наступила неловкая тишина. Рассказал ей про ремень. Посмеялись, начали травить всякие дорожные байки. Смеялась, зараза, а сама уже поставила напротив меня жирную чёрную пометку :)

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

Отказывая, сказали: "Позвони нам через годик, поговорим ещё раз".

вторник, 17 ноября 2015 г.

Адреналин напоследок

"Любой дошлый аварийщик знает, что в его распоряжении есть ещё минута, когда эти паникеры у себя там, наверху, говорят, что время истекло."
Артур Хейли, "Аэропорт"
Последние три недели на старой работе. Большой релиз, который активно готовили последние полгода. Все встали в 5 утра, работаем из дома.  Несмотря на долгое тестирование, всё же натыкаемся на некоторые проблемки; устраняем. Часам к 9 утра вроде кажется, что всё хорошо... А тут как раз срочно понадобилось подвезти Марину (сама она нашу машину водить не научилась, да и парковаться там негде). Думаю, не смыться ли на 15-20 минут.

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

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

P.S. А подвел мой любимый IIS URL Rewrite. По умолчанию action="rewrite" добавляет к новой URL оригинальную query string. А мы забыли про это и в одном месте добавили query string вручную. Т.е. всё параметры приходят в пункт назначения в дублированном виде. Но, как правило, всё равно работает отлично - многичисленные тесты проходили . Проблема проявляется, ткогда query string очень длинная; если её ещё продублировать, она обрезается, и значение последнего параметра повреждается. Мораль: когда делаешь rewrite, обычно нужно использовать server variable {URL} (просто путь), а не {HTTP_URL} (который путь плюс query string). 

Чужая улица

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

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


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

Количество - один

Дедушка в первый раз отводит внука в английский садик:

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

На самом деле "один" - это был номер группы :)

Приложение один

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

- А где же само приложение? Я должен знать, что можно рассказывать, а что нет.
- Вот ничего и не рассказывай. Если что-то разгласишь, тогда мы это приложение тебе и покажем.

Не те голубые

Вчера Рада завалила поправку о недискриминации секс-меньшинств на рабочем месте. Ну, с оппозицией понятно, а что же евромайдановские активисты? Хотите получить европейские зарплаты, а права человека замять?

Мой отец, не задумываясь, объяснил: "Да они просто не разобрались: решили, что речь шла о защите прав "голубых", т.е. Партии Регионов".

четверг, 5 ноября 2015 г.

Хедж-спринт

Позвонил рекрутер по поводу вакансии в хежд-фонде. Зарплата огромная.

Задает пять технических вопросов по SQL вроде "что такое декартово произведение" (даже не институтская, а школьная программа) или "что такое group by". Я, конечно, ответил, и крепко задумался о несправедливости жизни: вроде такие простые вопросы, а в то же время и мне, и большинству моих друзей было тяжело найти работу в новой стране...

Впрочем, это был просто рекрутер. Наверное, работодатель спросит что-то посложнее? Но телефонное собеседование было ненамного сложнее. Ну, попросил по телефону продиктовать SQL-запрос с одним join и group by; и примерно такой же Linq. И ещё пара вопросов такого же уровня. Единственное, что немного непривычно диктовать код по телефону.

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

Но нет - пригласили в офис на технический тест. А там...

Дается час. Задачки разной сложности - от последовательности Фибоначчи до более серьезных: реализовать сортировку таким-то методом, не используя стандартных функций; написать SQL-запрос средней сложности, запустить из C# кода, что-то ещё там сделать с результатом и при этом понять финансовый слэнг, на котором описаны требования... К каждой задачке готовые unit tests. Как минимум, они должны быть зелеными. Кроме того, интервьювер вручную проверить стиль твоего кода.

В принципе, нормально, если бы не одно "но": на каждую задачу дается в среднем всего по 5 минут. Давали бы 15-20 - я бы всё сделал. А так полностью справился только с половиной. Доступ в Интернет есть, а что толку: на это нет времени.

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

Всего-то пинту

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

Завалил. Просидел всё время, замкнувшись, скрестив руки на груди. "All I wanted him was to drink one pint for me!" А я-то думал, что это только мы в Харькове не очень корректно спрашивали кандидатов, пьют ли они водку, и, как правило, отказывали непьющим...

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

Ненавижу голосовую почту

У многих рекрутеров просто патологическая любовь к телефону. Я понимаю, что часто так быстрее, плюс голосом легче заинтересовать и додавить кандидата. Но всё же в 21-м веке живем. Ну, позвонил, не дозвонился - пошли емейл или хотя бы SMS. Нет - продолжают трезвонить, пока ты в метро или на совещании. Потом оставляют голосовое сообщение, где неразборчиво произносят свое длинное индусское имя и номер телефона (номер часто скрыт, т.е. не остается в истории). Хорошо, когда сообщение одно, а если их 3-4... сначала всё прослушать, записать на бумажку. Потом сравнить с емейлами, разобраться, кому ты уже ответил раньше. У меня ещё на телефоне стоит приложение TU Go, поэтому часто голосовая почта приходит в двух экземплярах.

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

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

Аттестат

В интитуте был уверен, что красный диплом программисту не нужен. Но в Англии с удивлением узнал, что в некоторых крутых финансовых структурах интересуются средним баллом. Иногде требуют диплом от "a red-brick university". А чё, харьковский Политех тоже был из красного кирпича - вроде подходит :)

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

Хорошо, про детский садик пока не вспоминают. Это не шутка: когда я заполнял анкету на работу в киевский "Квазар-Микро", там спрашивали адрес детского сада и имя директора!

Оффер заранее

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

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

Сглазил он, правда: ту работу Марина не получила.

Рекрутёрский секстинг

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

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

Видимо, речь шла не о работе :)

Снова в дурке

Марина опять работает по специальности: короткий контракт в психушке.

Подвозил её раз на работу - очень понравилось. Расположено между станциями Earlsfield и Tooting Bec, т.е. не так уж далеко от центра. Но просторы огромные. Вечером я там даже заблудился. Удивляюсь, как до сих пор у них не отобрали землю - это ж сколько квартир можно было налепить! Старые здания, много деревьев. Парковка для посетителей стоит всего 1 фунт в сутки, а абонемент для сотрудников ещё дешевле.

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

Задница в тепле

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

пятница, 30 октября 2015 г.

Перед прочтением сжечь

Рекрутерша рассказала: у них есть настолько засекреченная финансовая контора, что перед собеседованием кандидат подписывает NDA (соглашение о неразглашении). Поэтому после он не может предоставить рекрутеру никакой feedback (что за вопросы, что понравилось или беспокоит, что за технологии и проекты, какой обещают бонус и пр.), потому что могут засудить.

Рекурсия: интересно, не разгласил ли кандидаты конфиденциальную информацию, сообщив о том, что ему запрещено разглашать какую-либо информацию?

четверг, 29 октября 2015 г.

Страх полетов

Новость: "Россия до сих пор не заплатила штраф за полеты в оккупированный Крым, - Мининфраструктуры". Конечно, Россия никогда (в обозримом будущем) и не заплатит. Дело не в деньгах, а в принципе. Это как гордые кубинцы, которые каждый год исправно возвращают американцам чек за аренду Гуантанамо. А американцы, в свою очередь, продолжают платить согласно какому-то дореволюционному договору. Или как американские и российские дипломаты, задолжавшие Лондону миллионы за congestion charge, потому что они считает его налогом, а не услугой.

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

среда, 28 октября 2015 г.

Of Missing Persons

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

Рассказ об упущенных шансах. Каждый раз вспомнаю его, когда украинские друзья спрашивают: "Как мне свалить в Англию?" Тем, которые когда-то говорили: "Ну, да, я слышал про HSMP / Tier 1... в принципе, может, и поехал бы... но меня пока и тут неплохо кормят... Как-нибудь потом..." А "потом" оказалось "никогда". Теперь в Англии потребность в беженцах, а не в специалистах...

Укус медведя

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

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

Сейчас первым дело нашел того самого медведя. Уже не кусается.

Искра

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

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

Пропуск улетел

За шесть лет мой служебный пропуск изрядно потерся. Да и дизайн уже менялся несколько раз.

И вот всего за три недели до увольнения я его про...терял. Типа дембель уже скоро - бухаем,  теряем пропуска :)

Вроде за утерю положен штраф, но мне выдали новую карточку бесплатно.

четверг, 22 октября 2015 г.

Domino Pizza

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

Донбасская страховка

Большая украинская компания довольно успешно получает сейчас компенсацию от иностранных страховщиков за ущерб от боевых действий на Донбассе. Ну, не без проблем, конечно - платить никому не хочется, да и полис не покрывает убытки на 100%. Но получает.

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

пятница, 16 октября 2015 г.

Цитаты в Bugzillla

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

Самое популярное - "Генератор дерьма" :) Это неофициальное название сложного сервиса по оптимизации внутренних ссылок для повышения рейтинга в поисковиках.

NancyFx

Говоря о преимуществах Nancy над ASP.NET MVC, фанаты всего упоминают простоту настройки URL: прямо в контроллере, а не где-то отдельно. Да, это удобно для создания API, но для меня как раз огромный недостаток: у нас очень сложная структура URL, и я совершенно не хочу смешивать логику URL routing с логикой контроллера.

Кстати, в ASP.NET MVC тоже есть attribute-based routing для желающих.

четверг, 15 октября 2015 г.

Nashville

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

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

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

Ближнее зарубежье

Когда СССР развалился, и люди ещё не верили, что это всерьез, в ходу долго был термин "ближнее зарубежье".

Интересно, что для Британии таким ближним зарубежьем являются географически как раз очень далекие Австралия и Новая Зеладния. И ещё ЮАР. К иммигрантам оттуда относятся почти как к своим. Да и у многих уже есть британские паспорта: родители уехали за лучшим климатом, а дети вернулись в Лондон за деньгами...

понедельник, 12 октября 2015 г.

Вдвойне беременная

Знакомая сотрудница метрополитена обвешивает свой форменный костюм самыми разнообразными значками, почти как Брежнев. Похоже, вешает всё подряд, что теряют пассажиры.

Сразу два значка "Baby on board" ("Уступите место беременной"), выглядят несколько странно, Особенно учитывая, что ей лет 55. Впрочем, медицина сегодня творит чудеса.

пятница, 9 октября 2015 г.

Public Health England: перезагрузка

Много лет назад нам сделали доступ к своим электронным медицинским карточкам у GP. Но в последнее время у меня доступ вообще пропал, а Марины стал сильно ограниченным. Пожаловалась - а ей сказали, что по приказу Public Health England отключают по всей Англии. То, что ей пока недоотключили - это досадная недоработка, которую скоро исправят.

Когда-нибудь, в прекрасном будущем доступ дадут снова . Но сначала надо у всех отобрать, чтобы начать с чистого листа.

понедельник, 5 октября 2015 г.

Снова в начальники

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

Минусы. Отдела, собственно, ещё не существует - надо самому набирать. Есть четыре программиста, которые занимаются другими вещами, не вебом.  А так весь сайт делали контрактники, и сейчас переделывают. Судя по техническими вопросам, которые задавал мне начальник контрактников, качество их работы будет не очень. Показывать исходники он отказался: "Ты из конкурирующей фирмы". Можно подумать,  все строчки кода запомню и побегу в свой офис перенабирать :) Явно на самом деле не хочет, чтобы я заметил какие-то их индусские ляпы. Формального процесса тестирования и релиза нет - делают, как придется.

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

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

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

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

четверг, 1 октября 2015 г.

Энтузиазм

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

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

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

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

Вот и в этот раз тоже смотрел на них и всё думал: "А чи дійсно у вас є гроші, шановне панство?"

Перезагрузка дыхания

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

Она тоже в полусне, зевая:
- Ну, что там случилось?
- Случайно задел кнопку у себя на груди, и у меня отключилась система дыхания!

Марина смотрит на меня, как на идиота: "Ну, и? Её просто надо нажать ещё раз, и дыхание включится". Нажал на солнечное сплетение.  Действительно, заработало! Задышал нормально. Проснулся.

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

пятница, 25 сентября 2015 г.

50 оттенков жёлтого

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

Full-Stack

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

Раньше обычно негативно реагировали, когда представлялся как "мастер на все руки": типа раз знаешь всего понемногу, то нигде нет глубоких познаний. Теперь же Full-Stack Developer - самая высокооплачиваемая категория. Наверное, потому, что технологии стали меняться ещё быстрее - нужны люди, которые могут адаптироваться.

Включил F# в свое резюме. Просто в список навыков, без подробностей, потому что я ведь его никогда не использовал в коммерческих продуктах. Бинго! Посыпались звонки. Оказывается, функциональные языки сейчас - очень популярный навык, особенно в финансах. Раньше все крутые биржевые алгоритмы были на C++...

Давным-давно самый лучший сайт для ИТ-вакансий был Monster. А сейчас, похоже, CWJobs.co.uk серьезно раскрутился. Мне через три дня просто пришлось убирать оттуда резюме, потому что просто невозможно работать. То, что целый день бегаешь в коридор поговорить - это полбеды. Главная опасность в том, что расслабляешься - уже много раз проходил это. Когда у тебя куча собеседований сразу, начинаешь чувствовать себя крутым и незаменимым, перебираешь харчами ("схожу поговорить, но вообще-то я туда не очень хочу"). А потом, как у Шевченко:

Та й усміхнулася небога,
Прокинулась — нема нічого.

Расслабляешься и в результате не выкладываешься полностью ни на одном собеседовании.

Ну, и ещё, как, обычно бывает - чем больше просишь денег, тем меньше задают дурацких вопросов ("Ваши 25 слабых сторон?").

четверг, 24 сентября 2015 г.

YMCA Club

"Исконно американская" детская организация YMCA на самом деле была создана в Лондоне. Их первый клуб находится рядом возле станции Tottenham Road Station. Это самый большой спортивный клуб в центральном Лондоне. Просто огромный - трудно поверить, что такое есть в 15 минутах ходьбы от Трафальгарской площади. Причем цены более доступные, чем, например, в Virgin Active.  Годовой контракт не навязывают. Кроме бассейна и тренажерки там какие-то кружки для детей, и, конечно, кофе с Wi-Fi.

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

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

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

Нам на работе бесплатно дали пропуск туда на неделю. Очень удобно - 10 минут ходьбы от офиса, и даже в перерыв нельзя сказать, чтобы людей было слишком много. А ещё пару лет назад мне давали бесплатный пропуск, когда купил кроссовки в соседнем магазине. Серьезно думаю, не записаться ли туда постоянно, но как-то жаба давит платить и там, в Virgin Active (туда мы ходим с Мариной по вечерам и выходным).

пятница, 18 сентября 2015 г.

WP Super Cache: пользуйтесь mod_rewrite!

В документации к WP Super Cache (популярный плагин для кэширования в Wordpress) сказано, что режим "Mod_Rewrite" самый быстрый, но режим "PHP" почти так же хорош. Идея Mod_Rewrite - добавить кучу правил в .htaccess, чтобы большую часть работы делал напрямую Apache, даже не трогая PHP.

Но они скромничают. Наш стресс-тест на Linux CentOS показал, что Mod_Rewrite быстрее не "немного", а раз в пять! При этом загрузка CPU вообще упала с 90% до 5%. Конечно, у всех блогов разный контент, плагины, сервера и трафик, так что результаты могут отличаться... но очень впечатляет!

среда, 16 сентября 2015 г.

Данные в Россию

Хе-хе... Мне, главному "бандеровцу", поручили перенос персональных данных в Россию :)

Кто не знает, с 1 сентября вступил в силу закон. Facebook на него сразу забил: "У нас нет никаких персональных данных. Только имена, фамилии, дни рождения, фотографии, переписка, девичья фамилия матери. А персонального ничего нет". Но Facebook большой, им можно. А мы маленькие - каждый чиновник может обидеть.

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

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

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

понедельник, 14 сентября 2015 г.

Крокодиловая сумочка

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

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

Метрозавр

В метро развешали рекламу бесплатной газеты "Метро". Одно объявление забавное: "Представьте, что Вы случайно посмотрели в прямо в глаза незнакомому человеку... Какой кошмар! Вот поэтому надо с утра брать нашу газету и всю дорогу в неё пялиться".

Юмор, да, но вообще печально: бесплатную газету, которая валом лежит на всех станциях ещё и приходится рекламировать! Причем газета довольно приличная по содержанию. Но это никого уже не интересует. Газетозавры вымирают, и этот процесс можно только немного замедлить. Смартфоны подешевали, а в метро есть Wi-Fi. Правда, пока только на станциях, и не всегда бесплатно (зависит от оператора).

Кредитка как пропуск

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

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

А ещё лучше прикладывать к ридеру телефон.

воскресенье, 13 сентября 2015 г.

Дед Мазай

Мало кто знает, что имя "МаЗай" - это сокращение: в детстве его звали "мамин зайка"

среда, 2 сентября 2015 г.

Функциональный сон

Делал тестовое задание. Можно было выбрать любой язык программирования. Хотя вакансия C# программиста, но упоминается, что ребята любят экспериментировать с Ruby on Rails, Pyhton и пр. Решил выпендриться и написать на F#. Тем более, что задачка алгоритмическая. Никогда ничего на нем не писал, даже на уровне "Hello, World". Но решил, что есть ещё порох в пороховницах - надо напрячься, чтобы привлечь к себе внимание. Да и для профилактики деменции нужно иногда давать мозгам нестандартные задачи (из-за недостатка солнца в Англии много слабоумных пенсионеров).

Но немного перееоценил свои силы - пришлось просидеть всю ночь напролет. А по пути на работу я отключился в поезде. Снилась ночь на набережной в Монако. Смотрю вверх и вижу гигантские надписи, вроде знаменитого Hollywood. Только они разноцветные, светящиеся, и покрывают весь склон горы аж до французской границы. Примерно вот какая-то такая F#-"лесенка" (взято отсюда):

let f x =
    let f2 y =
        let f3 z =
            x * z
        let f4 z =
            let f5 z =
                y * z
            let f6 () =
                y * x
            f6()
        f4 y
    x * f2 x

Хороший язык, буду учить дальше.

четверг, 27 августа 2015 г.

Снова Garbage Collector

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

И снова, снова обрушивается на меня поток вопросов про алгоритм работы сборщика мусора в .NET. Не просто "что это такое", а глубокие вопросы, достойные Джеффри Рихтера: как оно работает на разных процессорах, что менялось в зависимости от версии фреймворка и т.д. А ведь 11 лет назад, когда я начинал изучать .NET, считалось, что одно из главных преимуществ этой платформы именно в том, что программистам больше не придется думать об очистке памяти. Бери, что надо, а оно потом само очистится. И, тем не менее, редкое собеседование обходится без этих вопросов. И ещё классика: "Чем value types отличаются от reference types?"

Конечно, есть ситуации, когда надо выжимать из компьютера всё. Но в этом случае, возможно, стоит переписать критический код на C++?

четверг, 20 августа 2015 г.

Мыслить плагинами

Судя по моему опыту общения с Wordpress-разработчиками, они представляют собой реинкарнацию Delphi-разработчиков. В том смысле, что, даже не дослушав задачу, бросаются в Интернет искать плагин, который "сделает всё, что нужно" :)

Кофе в жилу

Пару недель назад у нас была бессоница. Может, потому, что целый день купались: жара, перевозбуждение? Но как-то, блин, уж очень сильно: Марина проспала за ночь пару часов, а я вообще минут 20. Да, мы выпили кофе, Да, по большой чашке. Но это было в 7 вечера, не в 12. И латте, т.е. некрепкое.

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

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

Лисички

Купили в Теско лисички - экзотические для наших широт грибы. Тут в основном шампиньоны. А оказалось, они из России.

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


четверг, 13 августа 2015 г.

Забытые плавки

Забыл плавки и шампунь в David Lloyds. Хватился только через два дня. В Virgin Active, куда мы обычно ходим, написано, что забытые мокрые вещи хранят не больше суток, чтоб не гнили. Но в David Lloyds, как оказалось, все гораздо серьезнее: у них есть журнал, где написано, когда, где и что именно найдено ("большие чёрные плавки с красными полосками"). Я думал, таких, как я, два-три человека, а там них целый ящик! Полотенца, купальники, детские игрушки, шампуни... Если несколько вещей найдены вместе, то их кладут в один пакет.

НДС в duty free

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

А сейчас вот журналисты добрались до этой темы. Оказывается, многие магазины сканируют талоны, чтобы на законных основаниях класть НДС себе в карман! Цена для пассажира при этом не уменьшается. Вот как оправдывается WH Smith (крупнейшая сеть по продаже книг и журналов на транспорте): "Практически невозможно использовать двойное ценообразование". Невозможно? Если не ошибаюсь, за окном уже 2015 год нашей эры, когда компьютеров больше, чем людей.

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

среда, 12 августа 2015 г.

Тут не хватает

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

Вспомнился анекдот про Брежнева:

- Леонид Ильич - ну, зачем Вы себе бинди нарисовали? Вы же не индус...
- Потому, что мне Индира Ганди сказала: "Эх, хороший ты мужик, Лёня... только тут [постукивает себя по лбу] не хватает!"

Мысленно посмеялся на глупым Брежневым. И тут заметил, что, отвлекшись, сахар я насыпал в суп, а не в кофе :)

Reverse rewrite host in response headers

Немного хитрая задача. HTTP запрос приходит на abc.com/xyz/ . С помощью IIS ARR (Application Request Routing) делаю rewrite на bcd.com/xyz/ (т.е. использую reverse proxy). И уже оттуда делаю 301 redirect на cde.com/something/

Т.е. нужно не просто перенаправить на другой домен, а ещё и поменять путь в процессе. Необходимая логика храниться на сервере bcd.com, и её нельзя переместить сразу на abc.com

Проблема: перенапраление происходит на второй, а не на третий домен (на bcd.com вместо cde.com). В HTTP-заголовке Location bcd.com вместо cde.com. Однако в HTML body вижу правильный текст object moved to cde.com/something/ . Т.е. мое приложение явно пытается сделать правильный 301 redirect, просто ARR портит заголовок в HTTP response.

Решение: в IIS Manager нажимаем на имя сервера, заходим в Application Request Routing Cache -> Server Proxy Settings, и отключаем 'Reverse rewrite host in response headers'.

пятница, 7 августа 2015 г.

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

Последнее время мой pet project (хобби на работе) - это борьба с ошибками 404, т.е. с битые ссылками. Допустим, внутренние ссылки ещё можно держать в порядке. Но как-то только на одну из твоих страниц появилась внешняя ссылка, то это уже навечно. По-хорошему, надо её куда-то перенаправлять. Причем не просто на главную страницу, а в релевантное место. Зачем? Чтобы сохранить SEO equity. Каждая ссылка на тебя - это плюс в твою карму, и жалко его выкидывать. Причем очень желательно избегать double redirects, т.е. вместо A->B->C лучше делать сразу A->C. Зачем, ведь Гугль же железный, он всё сам склеит? Да, склеит, но это будет медленнее. И есть шанс, что рейтинг будет чуть хуже, чем у того, кто делает direct redirect (каламбурчик!). Да, наверное, это почти ни на что не влияет. Но every little helps. Есть шанс, что, повысив свой рейтинг всего на доли проценты, ты сместишься с третьей позиции в Гугле на вторую, а это огромная разница.

Учитывая, что общее число страниц на всех наших сайтах - десятки миллионов, а самому старому сайту 19 (!) лет, и его структура многократно менялась... ну, вы поняли. Задачка "перенаправить все 404" не из легких. И многие скажут, что очень скучная. А мне нравится по нескольким причинам.

Во-первых, это как археология: когда изучаю логи IIS и старые исходники, то на моих глазах проносятся все эти годы развития сайта: static HTML, classic ASP, ASP.NET Web Forms, MVC; десятки людей со своими идеями и их проекты, от которых в какой-то момент отказались; наконец, многичисленные ошибки программистов, из-за которых в какой-то момент опубликовали неправильные ссылки.

Во-вторых, я люблю задачки, которые с виду простые, а на самом деле нет. Мой основной инструмент - IIS URL Rewrite. Вроде бы хорошо известный софт, но сделать что-то для 10 случаев или для 10 миллионов - это две большие разницы.

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

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

Не тот блог из-за WMPL

У нас есть несколько корпоративных блогов, для каждой страны свой. Вернее, физически это один блог на Wordpress, но используется плагин WPML для поддержки разных языков. У каждого языка - свой домен.

Часто бывает, что одна и та же статья публикуются в нескольких странах, иногда с небольшими изменениями (например, меняют спеллинг с британского на американский). Все вроде работало, и вдруг неожиданно начинаются 301 redirects на неправильный домен. Допустим, есть три варианта статьи:

www.example.com/blog/my-article/
www.example.ca/blog/my-article/
www.example.co.uk/blog/my-article/

Первые два начали перенаправляться на, допустим, www.example.co.uk/blog/my-article/. А другие статьи - на другой домен.

Оказалось, все дело в WMPL. Штатный способ работы - это пользоваться функцией "перевода". Т.е. что бы у тебя был как бы один логический "пост", но с "переводами" на другие языкы. А у нас, как оказалось, этой функцией иногда пользовались, а иногда просто создавали копии постов для другого языка. Если один и тот же slug используется для не связанных друг с другом постов, то WPML случайным образом выбирает один (самый старый?) и всё перенаправляет туда.

Но почему раньше не было этой проблемы? Видимо, обновили WPML, а предыдущая версия не была такой жёсткой.

Что делать? Если таких проблемных статьей две-три, то, конечно, легко всё исправить: надо выбрать один, "базовый" пост, вручную добавить туда "переводы", а посты с остальными вариантами стереть. Но у нас, как оказалось, таких постов почти тысяча. Замучаешься вручную делать, и ошибиться легко (ведь для каждого "перевода" надо скопировать не только текст, но и другие параметры),

Есть более простой вариант - поменять slugs, чтобы они были уникальными. Но, во-первых, это означает смену URLs, что очень плохо для SEO. Во-вторых, это решает проблему только частично: по-хорошему, все переводы должны быть связаны друг с другом с помощью мета-тэга hreflang. Если это не сделать, Гугль может сказать: "Так, а что это у вас почти один и тот же текст в пяти вариантах? Спамите, господа?" WMPL берет на себя hreflang, но, опять-таки, для этого нужно связать посты в один логический пост с переводами.

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

Так что сжалился я над юзерами и написал небольшой SQL, который всё починил. Сэкономил им неделю работы. Идея такая: когда мы группируем посты, то физически их остается несколько (записи в таблице wp_posts не трогаем), но просто  в wp_icl_translations нужно им всем присвоить одинаковое значение trid. Неважно, какое - главное, чтобы уникальное. Trid - это как бы id группы переведенных постов.

Энергия космоса

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

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

Приставалы

Иду по парковке. Догоняет женщина: "Помогите, пожалуйста! По-моему, меня преследует этот мужик..." Оглядываюсь - вроде нет никого. Однако через несколько секунд из-за поворота действительно вышел негр. Лет 35, в очках, прилично одетый. Я скептически на него посмотрел - совсем не похож на насильника. Да и вообще как-то светло, и место не такое уж и безлюдное... Однако же, увидев меня, он явно смутился, промямлил "да мне только спросить", развернулся и быстро зашагал в противоположном направлении.

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

понедельник, 3 августа 2015 г.

Роликами вверх

Хотел подъехать к коллеге, который сидит за моей спиной. Как-то сильно оттолкнулся и полетел с креслом вверх ногами. Причем в полете ещё и задел и перевернул ногами тумбочку. Грохот, вся комната вскочила. Мда, лучше бы я ему задал этот вопрос по Скайпу :)

Впрочем, я совсем не пострадал.

Раньше выражение "сделать валентина" у нас в отделе означало "разлить чай на клавиатуру", а теперь, наверное, появится новый смысл :)

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

А все раньше хихикали, когда, подавая заявку на отпуск, в системе надо было ответить на вопрос "связано ли отсутствие с несчастным случаем на работе?" ("Мы же вроде не шахтеры или пожарники".) 

Соседские машины

А из нашего окна
"Ауди ТТ" видна!
А из вашего окошка -
Только "Приусов" немножко.

вторник, 14 июля 2015 г.

X-Robots-Tag: noindex, follow, noarchive

Как оказалось, использование HTTP-заголовка X-Robots-Tag: noindex, follow, noarchive абсолютно не мешают Гуглю пытаться скачивать URL. Наверное, дело в follow.

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

Вы спросите, а зачем вообще использовать X-Robots-Tag, а не meta-тэг? Потому что эта URL используется как exit link на рекламу, и возвращает 302. Т.е. страницы нет как таковой, некуда тэг влепить. 

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

Возвращаем 410 Gone, и потихоньку количество ошибок уменьшается. Почему 410, а не 301 на главную страницу? Потому что ошибок слишком уж много, Гуглю может не понравится, если тупо всё перенаправлять.

понедельник, 6 июля 2015 г.

Проблема с catch-all и rewriteMaps

Задача: используя IIS URL Rewrite, перенаправить всё содержимое старого каталога (clients) в новое место (customers). Например, /clients/Gazprom/ в /customers/.

Это просто:

  <rule name="Сatch-all">
    <match url="^clients/" />
    <action type="Redirect" url="customers/" />
  </rule>

Поскольку в url я не использовал знак $ (конец строки), то отлавливаются все строки, начинающиеся на clients/.

А что, если у нас таких каталогов несколько (clients / partnerts / advertisers)? Пожалуйста: <match url="^(clients|partners|advertisers)/" />

А если их десяток? Причем нужно перенаправлять в разные места.
Тоже несложно - воспользуемся "картами":

<rewriteMaps>
<rewriteMap name="CatchAllRedirects">
  <add key="old1" value="new1" />
  <add key="old2" value="new2" />
  <add key="old3" value="new3" />
  <add key="old4" value="new4" />
</rewriteMap>
</rewriteMaps>

....

  <rule name="Catch-all">
    <match url="^([^/]+)/" />
    <conditions>
      <add input="{CatchAllRedirects:{R:1}}" pattern="(.+)"/>
    </conditions>
    <action type="Redirect" url="{C:1}/" />
  </rule>

Здесь мы перенаправляем /old1/*/ в /news1/ , /old2/*/ в /news1/ и т.д.


Пока что ничего особенного. Сложности возникают, если в старой URL может быть несколько уровней вложенности. Т.е. нужно перепроверить:

/old1/*/
/old1/*/*/
/old1/*/*/*/
/old2/old3/*/
/old2/old3/*/*/*/

Казалось бы, просто меняем ([^/]+) (хоть один символ, но не слэш) на (.+) (хоть один символ, любой):


  <rule name="Catch-all">
    <match url="^(.+)/" />
    <conditions>
      <add input="{CatchAllRedirects:{R:1}}" pattern="(.+)"/>
    </conditions>
    <action type="Redirect" url="{C:1}/" />
  </rule>


И добавляем в карту вложенные каталоги:

<rewriteMap name="CatchAllRedirects">
  <add key="old1" value="new1" />
  <add key="old2/old3" value="new2" />
   ....
</rewriteMap>

И не работает.

Потому что {R:1} (результат регулярного выражения, который используется как ключ для поиска) всегда один и только один. Правило не станет перебирать все возможные варианты (с одним слэшем, двумя, тремя) и пытаться найти соответвующий ключ в карте. Проблема в том, что при использовании карты обработка правила происходит в два шага: сначала регулярное выражение в <match>, и только потом поиск значения в карте.

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

Летучие мыши

С 2008 года в Англии упростили процедуру для loft conversion (перестройка чердака в жилую площадь): для большинства небольших проектов теперь не требуется разрешение.

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

четверг, 2 июля 2015 г.

Батарея за фунт

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

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

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

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

А этот мудак взял и оставил про меня негативный отзыв! Причем договариваться о новой встрече он и не пытался.

среда, 1 июля 2015 г.

Говорить ли Гуглю про перенос сайта

Как известно, при смене домена (например, example.com.ua на example.ua) обычно рекомендуется не только настроить 301 redirects, но и сообщить Гуглю через Webmasters Tools.

Но есть случай, когда это делать не стоит: если вы одновременно со сменой домена меняете и структуру URL. Допустим, раньше у вас были миллионы страниц с адресами вроде example.com.ua/offers/London/. А теперь каждая из них переносится в example.ua/best-offers-in-London/. В этом случае нам нужна грубая сила - Гугль должен переиндесировать каждую из миллиона страниц. Если же сообщить ему про смену домена, он может схалтурить и решить, что просто меняется домен, а все пути остаются старыми.

По этой же причине в такой ситуации не стоит добавлять в robots.txt директиву Host:example.ua (впрочем, она вроде влияет только на Яндекс).

Секция httpErrors в сочетании с IIS URL Rewrite

Столкнулся с ситуацией, которая, похоже, не описана в документации: такое впечатление, что модуль URL Rewrite не всегда срабатывает...

Итак, первое обстоятельство: в web.config есть секция:

    <httpErrors errorMode="Custom" existingResponse="Replace" defaultPath="/Errors/ServerError">
      <clear/>
      <error responseMode="ExecuteURL" statusCode="403" path="/Errors/NotSupported"/>          
      <error responseMode="ExecuteURL" statusCode="404" path="/Errors/PageNotFound"/>
      <error responseMode="ExecuteURL" statusCode="410" path="/Errors/Gone"/>
      <error responseMode="ExecuteURL" statusCode="500" path="/Errors/ServerError"/>
      <error responseMode="ExecuteURL" statusCode="503" path="/Errors/ServiceUnavailable"/>
    </httpErrors>

В MVC-приложении есть ErrorsController с соответвующими actions (ServerError, NotSupported и т.д.) Таким образом, в случае ошибок мы показывает красивые странички с неким динамическим контентом. Вот как оно работает: когда пользователь запрашивает несуществующий адрес http://example.ua:80/some-invalid-URL/ , IIS незаметно подменяет этот адрес на http://example.ua/Errors/PageNotFound?404;http://example.ua:80/some-invalid-URL/ и возвращает клиенту полученный HTML. Код ошибки и проблемный адрес передаются в query string, поэтому MVC приложение может их как-нибудь использовать.


Второе обстоятельство: я использую модуль URL Rewrite. В нем есть довольно сложная логика, которая добавляет к запросу нестандартный заголовок HTTP, который я потом использую в приложении. Этот заголовок для меня очень важен - он проверяется при каждом запросе. Казалось, непробиваемая система - ведь запрос даже не дойдет до приложения, пока не пройдет URL Rewrite. По идее, может сломаться, только если отключить URL Rewrite или неправильно его сконфигурировать?


Но оказывается, что в очень редких случаях это не работает: когда URL ошибочная, и при этом в ней есть точка, или она заканчивается на пробел. Насколько я понимаю, в этой ситуации IIS пересылает запрос в приложение (в ErrorsController) напрямую, минуя URL Rewrite. Возможно, по соображениям безопасности. А может, баг (версия IIS - 8.0.9200.16384).

понедельник, 29 июня 2015 г.

Это я, Старший Брат Печкин...

У знакомого предпринимателя работает человек 15 водителей; доставляют посылки для одной известной логистической фирмы. Много рассказывал, как там кидают с оплатой. Он сам попал на 50 тысяч, и только после вмешательства Би-Би-Си деньги вернули.

Но особенно интересно другое: говорит, что сейчас в момент, когда клиент ставит подпись световым пером на планшете, его автоматически фотографируют. Я очень удивлен: думал, что data protection law не позволяет такое делать без согласия или хотя бы уведомления клиента...

Чалма

У знакомого - небольшая сеть магазинов. Работал у них индус-сикх. Хорошо вроде работал, и со временем ему полностью доверили магазин. Жил он там же - в квартире над магазином, которая принадлежала тому же хозяину.

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

Кнопка "Увести"

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

"Когда они начинали слишком сильно буянить, я нажимала кнопку, и конвой их уводил".

А "обычные" другие учителя могут только мечатать о такой волшебной кнопке :)

пятница, 26 июня 2015 г.

AdSense: 'payment expired'

Необычная проблема с AdSense. Они вроде отправили очередной чек, а через два дня прислали емейл: "Ваш чек отменен, потому что payment method expired". Если бы мы получали деньги на карточку, то было бы понятно - у карточки закончилися срок действия. Но как может закончиться срок действия у почтового адреса?

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

воскресенье, 21 июня 2015 г.

Полив под дождем

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

среда, 17 июня 2015 г.

25 пенсов

Женщина везла четырехлетнюю дочку из садика. Водитель автобуса не захотел брать 25 пенсов монетками в один и два пенса. Она уперлась: "Деньги есть деньги". Водитель вызвал полицию. Оказывается, формально он таки был прав: по закону можно не принимать более 20 пенсов бронзой. Полицейский нашел простой выход: дал пассажирке свою недостающую монетку в 5 пенсов. Автобусная компания извинилась.

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

пятница, 12 июня 2015 г.

HTTP 404.11

Один из популярных хакерских методов - double escape sequence. По умолчанию ASP.NET его отлавливает и выдает сообщение: "A potentially dangerous Request.Path value was detected from the client". Если не делать <requestFiltering allowDoubleEscaping="true"/>, то вроде как опасности нет.

Опасности нет, а неудобства есть. Мы пишем всё ошибки в лог и постоянно его мониторим. Если вдруг идет много ошибок, админы получает емейлы и SMS, всё бегают и кричат: "Что происходит?!" А я что - я говорю: "Ну, нас атакуют. Сделать ничего нельзя. Сидим и ждем, пока перестанут". Кроме неудобств, такие атаки могут ухудшать производительность сайта.

Поэтому хотелось бы, чтобы double escape sequence отлавливалась не на уровне приложения ASP.NET, а раньше. К счастью, есть простой выход. IIS поддерживает не только стандартные статусы HTTP, но и "подстатусы". Например, в случае double escape sequence он генерирует ошибку 404.11 (хотя с точки зрения внешнего мира это просто стандартная 404).

А мы её теперь можем перехватить:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

   ...

  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace" defaultPath="/Errors/ServerError">
      <clear/>
      <!-- The request filtering module is configured to deny a request that contains a double escape sequence.-->
      <error responseMode="File" statusCode="404" subStatusCode="11" path="Static\HackingAttempt.txt"/>
      <error responseMode="ExecuteURL" statusCode="403" path="/Errors/NotSupported"/>          
      <error responseMode="ExecuteURL" statusCode="404" path="/Errors/PageNotFound"/>
      <error responseMode="ExecuteURL" statusCode="410" path="/Errors/Gone"/>
      <error responseMode="ExecuteURL" statusCode="500" path="/Errors/ServerError"/>
      <error responseMode="ExecuteURL" statusCode="503" path="/Errors/ServiceUnavailable"/>
    </httpErrors>

  </system.webServer>

</configuration>

Что тут происходит? ASP.NET-приложение выдает всякие красивые странички для разных видов ошибок (403 / 404 / 410 / 500 / 503). Там есть лототип, "ой, извините, страница не найдена, может предложить вот это и это", "можно сообщить администратору" и т.д. Но для хакеров сильно много чести. Для них я просто возвращаю содержание текстового файла HackingAttempt.txt из каталога Static (можно хранить в другом месте). Обратите внимание, что слэши в другую сторону, потому что это путь к файлу, а не URL. Внутри файла можно написать: "Пожалуйста, не взламывайте нас!" Или что-то нейтральное: "Page not found". Поскольку строка с statusCode="404" subStatusCode="11" идет перед statusCode="404", то "нормальная" страница 404 возвращается только если ошибка не связана с double escape sequence

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

четверг, 11 июня 2015 г.

Не в спринте

На работе создали Running Club: в обед бегают по Regents Park.

Тонкий английский юмор на Scrum meeting (утренней планерке):

- Yesterday I worked on item #123. Today - item #234... and Running Club :)
- Is there an item for Running Club?
- No, it's not in the Sprint.

"Клуб бегунов не входит в Cпринт" ("спринт" - термин для одной итерации процесса разработки ПО).

Третья полоса

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

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

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

Язык птиц

В полчетвёртого начали петь птицы. Мысль спросонья: в отличие от людей, коты понимают язык птиц. На самом деле, в нем всего несколько слов: "Съешь меня! Съешь меня, сэр!"

Аутсорсинг жилья

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

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

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

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

P.S. Кстати, у нас есть знакомая медсестра, которая живет в социальном доме (не квартире!) в центре. У неё даже маленький сад.

среда, 10 июня 2015 г.

Бампер

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

Никак руки не доходили поменять: даже страшненький старый  стоит 250 фунтов (не считая доставки), а за новый вообще просят 500-700. Но пришла пора проходить MoT (техосмотр), и я всё же нашел запчать за приемлимую цену: 160, причем за новый (конечно, не фирменный).

Приехал в Halfords.
- Мне надо техосмотр и бампер поменять.
- Техосмотр можно. А запчасти просто так мы не меняем - не положено. Только устраняем недостатки, выявленные во время осмотра.
- Хорошо, давайте.

Звонок: "Техосмотр Вы завалили, потому что поврежден бампер". Спасибо, а то я сам не знал?

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

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

понедельник, 8 июня 2015 г.

stopProcessing в URL Rewrite

В правилах IIS URL Rewrite есть несколько опасный флаг stopProcessing. По умолчанию он установлен в false, т.е. даже если очередное правило сработало, обработка дальнейших правил продолжается. Т.е. более общие правила, которые расположены в конце файла, могут "поглотить" правильный результат.

Это случится, если, допустим, первое правило должно отлавливать одну конкретную URL /deals/chrismas/ , а второе правило - все остальные типы спецпредложений с URL вида /deals/*/ (где зведочка - что угодно, но не сhristmas).

Коварность флага заключается в том, что он игнорируется, если Вы делаете простое перенаправление (301/302 redirect). Поэтому в Интернете множество примеров кода без этого флага, и многие про него просто не знают. На месте Microsoft я бы по умолчаю установил его в true.

Чтобы не запутаться, я всегда использую stopProcessing="true" для Rewrite. И никогда не использую для Redirect (чтобы не засорять код).


четверг, 4 июня 2015 г.

B&Q на замке

Дедушка пошёл в строительно-хозяйственный магазин B&Q в New Malden. Заметил, что крышка пакетника открыта, провода торчат. Не совсем безопасно.

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

Тот немного обалдел и отправил жалобу в штаб-квартиру B&Q. И те... извинились за идиота-менеджера? Нет, запретили жалобщику вход во всё магазины сети. Он обалдел ещё больше и переспросил, на какой срок? "Пожизненно".

Очень нетипичная история для Англии.




Private GP

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

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

К счастью, в Уимблдоне сейчас открылась частная практика. Они работают по выходным и до 9 вечера в рабочие дни. Можно приходить без назначенного визита. А по предварительной договоренности можно даже в 6 утра.

Цены доступные. Визит стоил 35 фунтов. Сейчас, правда, раскрутились немного, и подняли до 45 фунтов. Для сравнения, визит к частному специалисту в среднем 150-250 фунтов. 45 фунтов - это за 10-ти минутную консультацию, но реально с нами говорили по полчаса, и денег дополнительных не брали. Повторная консультация была бесплатной. Анализы тоже делали, насколько я понимаю, практически по себестоимости (как и большинство других практик, они пользуются The Doctors Laboratory; самому туда идти нельзя, нужно направление доктора).

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

Недостатки:

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

2. Частный участковый не может, насколько я понимаю, направить к бесплатному специалисту.

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

Allied Surgical

Обращались в медицинскую страховку PruHealth. Похоже, сервис улучшается. Три-четыре года назад получать авторизацию приходилось со скандалами, многочисленными походами к участковому, потерянными факсами и емейлами. Теперь это страховка это всё аутсорсит в Alliance Surgical. Хватило 10 минут общения по телефону. Они сами выбрали  специалиста и назначили визит. Причем в субботу - это вообще большая редкость даже для частных врачей. Уточнили, конечно, можем ли мы в это время.

Все хорошо, но на сайте больницы мы нашли другого специалиста, который больше подходит к нашему случаю. Alliance Surgical говорит: "К сожалению, мы с ним не работаем, хоть он и в той же больнице. Спросите PruHealth, оплатят ли". Сам PruHealth тоже говорит, что этот врач у них не зарегистрирован.

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

четверг, 28 мая 2015 г.

Кирбулычёвск

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

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

Или, если так уж нравится Св. Елисавета, то давайте назовем его (её?) "Элис". Очень по-европейски звучит.

среда, 13 мая 2015 г.

Амет-Хан Султан

Верховна Рада собирается переименовать аэропорт Симферополь в Амет-Хан Султан. По-моему, гениальная идея. С одной стороны, как бы и не обвинишь депутатов в заигрывании перед крымскими татарами ("23 года ничего делали, а теперь поздно пить боржоми"). Ведь вопрос начали обсуждать ещё в 2010 году, а тут как раз круглая дата - 70 лет Великой Победы. А у России теперь патовая ситуация: возражать нехорошо - что вы имеете против героя Великой Отечественной, самого известного крымского авиатора? Но и согласиться и провести "синхронное переименование" по федеральныму законодательству тоже нельзя - ведь тогда получится, что Украина продолжает командовать в Крыму...

И ещё аэропорт - это не город. Если Рада бы переименовала какие-нибудь другие крымские топонимы, это вызывало бы только жалость - физически менять вывески украинцев никто  не пустит. А вот аэропорт есть в базах международных базах IATA и ICAO, где он принадлежит, конечно, Украине. Политический хакинг :) Как если бы украли лаптоп, а ты к нему удаленно подключаешься и включаешь камеру, чтобы сфотографировать вора :)

P.S. Я бы только сократил название просто в Амет-Хан, а то иностранцам будет тяжело выговорить.


четверг, 7 мая 2015 г.

So what?

Украинское посольство в Лондоне. Прием заканчивается в 12:30. Что означало бы такое время в любом другом посольстве или в Home Office? Что в 12:30 прекращают запускать новых посетителей. Но с теми, кто уже внутри, работают "до последнего клиента".

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

Но он решил не рисковать, ведь для этого пришлось бы ещё постоять в очереди без гарантированного результата. Подошел и спросил консула:
- Может, примите? Я же стою 45 минут!
- So what?

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

Кстати, почему новозеландцам и австралицам вообще нужны гостевые визы в Украину? Видели вы там хоть одного нелегала из Австралии? Я считаю, лучшее решение Ющенко на посту президента было разрешить американцам и европейцам приезжать без виз. Да, слегка обидно, что это ассиметричное решение, но польза для бизнеса и туризма огромная.

Зато большой шаг вперед: теперь за консульские услуги можно платить кредиткой прямо на месте. А раньше было по-совковски: дают квитанцию и отправляют в банк. Причем не в ближайший, а вот именно, блин, в конкретный Lloyds - 15 минут ходьбы. Более того: в том отделении принимали к оплате только наличные - это вообще что-то неслыханное. Но и на этом маразм не кончался. Однажды у консульства закончились бланки квитанций. Казалось бы, что за проблема - возьмите и наделайте копий. Бланк самый обычный - простая бумага, никаких печатаей и водянных знаков. Но нет. Мне дали последний бланк, и консул попросил передать в банк записку: "Дайте ещё бланков!" А в отделении говорят: "А у нас их тоже нет!" Как это нет? Просто надо ведь напечатать вордовский файл? С грустной новостью я вернулся в консульство. И знаете, что они сделали? Нет, ксерокопии делать они всё равно не стали. Вместо этого брали старые, уже использованные квитанции и замазывали старые данные корректором. Но поскольку торопились, то не давали корректору нормально высохнуть, и операцию иногда приходилось повторять.

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

P.S. Оказывается, для того, чтобы голосовать, необязательно стоять на консульском учете и даже иметь долгосрочную визу. Даже находясь в турпоездке, гражданин Украины может проголосовать в посольстве. Правда, при условии, что заранее подаст заявление.

Островки электронных архивов

Новости disaster recovery.

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

А вот Яника в Харькове рассказала, что и эстонское правительство делает нечто похожее. Даже если миролюбивый восточный сосед снова оккупируют всю территорию Эстонии, электронные архивы правительства не пропадут. Налоговые декларации, земельные кадастры, водительские права и все прочее, связанное с e-government, архивируется во всех уголках мира. И когда очередная оккупация закончится, то не будет, например, таких проблем с реституцией, как в 1990 году, потому что останется вся информация по законным владельцам недвижимости.

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

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

На лошади на выборы

Я уже писал о том, что на британских выборах документы не проверяют - верят на слово. А вот ещё интересные факты на сайте Би-Би-Си.

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

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

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

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

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

Последний шанс передумать, если ещё не успел опустить бюллетень в урну: подходишь и говоришь, что ошибся. Они дадут новый бюллетень, а старый аннулируют.

В Британии нет "дня тишины". Точнее, он есть, но как бы добровольный. Наказания за агитацию нет (кроме агитации непосредственно на участке). Я думаю, это правильно. И в Украине, и в России ведь всё равно это правило постоянно нарушается. Допустим, поехал президент в день выборов открыть новую станцию метро, и его показывают по всем каналам - это агитация или нет? И никто не снимает все предвыборные плакаты. Бигборды, может, снимают, но коммунальные службы физически не могут ровно в полночь содрать тысячи листовок...

Ratings by outbrain