вторник, 23 февраля 2010 г.
Упаковка таблеток
Оказывается, таблетки очень хорошо звенят на металлоискателе. Даже маленькая упаковка. Хотя, казалось, сколько там той фольги...
ASMX и private set
Почти целый день убил на дурацкую проблему. Мой веб-сервис перестал возвращать некоторые данные. Постепенно выяснилось, что из WSDL исчезла часть полей. Перезагрузка IIS, удаление старых DLL не помогали. Оказалось, что я объявил пропавшие поля как { get; private set }, а надо было { get; set }. Смутно вспоминаю, что вроде бы раньше было положено, чтобы и геттер, и сеттер были общедоступны, а потом это отменили. В моем случае поля только сериализуются, десериализацию делать не надо, поэтому вроде как общедоступный сеттер не нужен. Вот я его и объявил private.
Но что интересно - версия с private отлично работала на моем компьютере, на сервере разработки и на сервере тестировщиков. И только когда её развернули на серверах стресс-теста, то проблема вылезла. Вывод: очень важно не только синхронизировать базы и код перед тестированием, но и убедиться, что все патчи накатили на все сервера. Либо не накатили, но тоже на все (хоть и безобразие, но однообразие). Но я не знаю простого способа, как этого добиться...
Нашел описание этой проблемы на http://support.microsoft.com/kb/952883/ (правда, они говорят про internal, а не private, но я думаю, что это неважно). Вот что пишут:
Т.е. проблема проявляется только на некоторых компьютерах, и не факт, что хотфикс ничего не испортит. Ужас. Этот тот самый тип ошибки, которая страшнее всего для программиста.
Но что интересно - версия с private отлично работала на моем компьютере, на сервере разработки и на сервере тестировщиков. И только когда её развернули на серверах стресс-теста, то проблема вылезла. Вывод: очень важно не только синхронизировать базы и код перед тестированием, но и убедиться, что все патчи накатили на все сервера. Либо не накатили, но тоже на все (хоть и безобразие, но однообразие). Но я не знаю простого способа, как этого добиться...
Нашел описание этой проблемы на http://support.microsoft.com/kb/952883/ (правда, они говорят про internal, а не private, но я думаю, что это неважно). Вот что пишут:
You have a computer that has the Microsoft .NET Framework 2.0 Service Pack 2 (SP2) or the .NET Framework 3.5 SP1 installed. You use an ASMX service method that includes a property, and the property has an internal setter. The serialization may fail (здесь и далее курсив мой - Валик).
...
A supported hotfix is now available from Microsoft. However, it is intended to correct only the problem that is described in this article. Apply it only to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next software update that contains this hotfix.
Т.е. проблема проявляется только на некоторых компьютерах, и не факт, что хотфикс ничего не испортит. Ужас. Этот тот самый тип ошибки, которая страшнее всего для программиста.
понедельник, 22 февраля 2010 г.
Странный мусорный кулек
Возле соседской квартиры стоит большой мусорный кулек. Всё бы ничего, но он стоит там уже пятый месяц! Соседка регулярно выходит гулять с ребенком, но мусор не выносит. Пару месяцев назад к кульку прибавились "Золотые страницы" - их клали всем под дверь. Мы сразу выбросили, а соседи так и оставили лежать под дверью. Теперь спотыкаются.
У нас довольно симпатичный двор и дом, но когда выхожу на лестницу, то всё настроение портится. Много раз порывался выбросить их мусор под покровом ночи, но... вдруг они там что-то нужное хранят, типа картошки?
У нас довольно симпатичный двор и дом, но когда выхожу на лестницу, то всё настроение портится. Много раз порывался выбросить их мусор под покровом ночи, но... вдруг они там что-то нужное хранят, типа картошки?
суббота, 20 февраля 2010 г.
Обама и реформа здравоохранения
Есть такое мнение, что это лично Обама придумал реформировать здравоохранение с использованием британской модели. Что он специально начал это во время кризиса, когда люди теряют работу и не могут себе позволить платную медицину. Потому что когда кризис кончится, американская общественность снова заживет сыто и не поддержит такую социалистическую инициативу.
А между тем ещё в 2004 году, когда Марина училась в Атланте, они разбирали на уроках эту реформу, которая должна была начаться в 2010 году. Так что на самом деле готовить её начал ещё всеми ненавистный империалист Буш во время экономического бума. Кстати, Маринин профессор тогда говорил, что эта реформа будет катастрофой для Штатов. Ну, поживем - увидим...
А между тем ещё в 2004 году, когда Марина училась в Атланте, они разбирали на уроках эту реформу, которая должна была начаться в 2010 году. Так что на самом деле готовить её начал ещё всеми ненавистный империалист Буш во время экономического бума. Кстати, Маринин профессор тогда говорил, что эта реформа будет катастрофой для Штатов. Ну, поживем - увидим...
пятница, 19 февраля 2010 г.
Surname = Smith
У Марины как бы в подчинении есть data analyst - человек, который должен анализировать данные из разных источников. На самом деле делать он ничего не хочет, а когда Марина пытается на него наезжать, то он сразу бежит жаловаться начальству.
Поэтому Маина на него давно плюнула, и SQL-запросы пишет сама (с моей помощью). Кстати, базы данных она носит домой на специальной зашифрованной флэшке.
Но иногда у аналитика начинают приступы активности. Наверное, когда на работе совсем нечем заняться, и все анекдоты давно прочитаны. Недавно позвал Марину: "Давай будем писать запрос". Написал что-то вроде: SELECT * FROM Patient WHERE Surname = Smith .
- Хм, странно, не работает.
- Smith надо писать в кавычках - подсказала Марина.
- Вау! Действительно! А откуда ты знаешь, ты разве учила компьютерные науки?
А получает он 50 тысяч в год.
Иммигранты часто криктикуют UKBA (британское иммиграционное ведомство) за то, что они непонятно куда девают огромные деньги за визовые услуги. Но между прочим, годовой бюджет UKBA всего лишь 2 миллиарда фунтов - это в 50 раз меньше, чем бюджет NHS!
Поэтому Маина на него давно плюнула, и SQL-запросы пишет сама (с моей помощью). Кстати, базы данных она носит домой на специальной зашифрованной флэшке.
Но иногда у аналитика начинают приступы активности. Наверное, когда на работе совсем нечем заняться, и все анекдоты давно прочитаны. Недавно позвал Марину: "Давай будем писать запрос". Написал что-то вроде: SELECT * FROM Patient WHERE Surname = Smith .
- Хм, странно, не работает.
- Smith надо писать в кавычках - подсказала Марина.
- Вау! Действительно! А откуда ты знаешь, ты разве учила компьютерные науки?
А получает он 50 тысяч в год.
Иммигранты часто криктикуют UKBA (британское иммиграционное ведомство) за то, что они непонятно куда девают огромные деньги за визовые услуги. Но между прочим, годовой бюджет UKBA всего лишь 2 миллиарда фунтов - это в 50 раз меньше, чем бюджет NHS!
Атака через бумагу
Кажется, SQL Injection - это неиссякаемая тема для семинаров.
Все серьезные разработчики давно понимают, что данные, приходящие из браузера, могут использоваться для этой атаки. Но что, если вредноносный код заранее поместили в базу данных каким-то законным способом? Допустим, клиент отредактировал свой адрес и включил туда SQL-код. Во время редактирования адреса атака ещё не происходит, приложение спокойно дает сохранить любой текст. А в момент атаки приложение получает вредноносный код из базы, которой оно доверяет; в этом случае программист может и забыть защититься.
А вот развитие этой идеи: кому-то удалось провести атаку через бумажную анкету. Т.е. человек написал от руки некий SQL в анкете, фирма её отсканировала, потом динамически сформировала запрос, в который был внедрен вредноносный код. Правда, я не представляю, как это смог сделать посторонний хакер; с первого раза вряд ли можно угадать всё параметры запроса. Скорее всего, это был человек изнутри.
Все присутствующие заохали от восторга. А я вообще-то планировал такую атаку ещё 12 лет назад. То был 1998 год, дефолт. Заказчик затягивал оплату за мою программу. В наши дни для веб-разработчика очень просто организовать "чёрный ход" в свою программу. Но то было Windows-приложение, и не было никакой возможности подключиться к серверу заказчика и заблокировать систему в случае неуплаты. Поэтому мы рассматривали такой вариант: подставное лицо приходит к нему в качестве клиента, заполняет анкету с определенными ключевыми словами, и система блокируется. Но в конце концов мы решили, что это слишком рискованно: блокировка может случайно сработать. Так что я тогда сделал простую временную бомбу. И она пригодилась: как мы и подозревали, заказчик отказался платить. В назначенный момент система продолжала работать, но не давала экспортировать данные (а это была очень важная для них функция). В тот же день нам перечислили деньги, а я послал им маленький скрипт, вроде такого: UPDATE Config SET IsBlocked = 0 :)
Все серьезные разработчики давно понимают, что данные, приходящие из браузера, могут использоваться для этой атаки. Но что, если вредноносный код заранее поместили в базу данных каким-то законным способом? Допустим, клиент отредактировал свой адрес и включил туда SQL-код. Во время редактирования адреса атака ещё не происходит, приложение спокойно дает сохранить любой текст. А в момент атаки приложение получает вредноносный код из базы, которой оно доверяет; в этом случае программист может и забыть защититься.
А вот развитие этой идеи: кому-то удалось провести атаку через бумажную анкету. Т.е. человек написал от руки некий SQL в анкете, фирма её отсканировала, потом динамически сформировала запрос, в который был внедрен вредноносный код. Правда, я не представляю, как это смог сделать посторонний хакер; с первого раза вряд ли можно угадать всё параметры запроса. Скорее всего, это был человек изнутри.
Все присутствующие заохали от восторга. А я вообще-то планировал такую атаку ещё 12 лет назад. То был 1998 год, дефолт. Заказчик затягивал оплату за мою программу. В наши дни для веб-разработчика очень просто организовать "чёрный ход" в свою программу. Но то было Windows-приложение, и не было никакой возможности подключиться к серверу заказчика и заблокировать систему в случае неуплаты. Поэтому мы рассматривали такой вариант: подставное лицо приходит к нему в качестве клиента, заполняет анкету с определенными ключевыми словами, и система блокируется. Но в конце концов мы решили, что это слишком рискованно: блокировка может случайно сработать. Так что я тогда сделал простую временную бомбу. И она пригодилась: как мы и подозревали, заказчик отказался платить. В назначенный момент система продолжала работать, но не давала экспортировать данные (а это была очень важная для них функция). В тот же день нам перечислили деньги, а я послал им маленький скрипт, вроде такого: UPDATE Config SET IsBlocked = 0 :)
среда, 17 февраля 2010 г.
Чужая каша
Изредка я ем на работе кашу с молоком. Видя это, коллеги одобрительно спрашивали:
- О, ты ешь Oatibix?.. (или Optivita)
- Ага...
Я думал, они просто поддерживают разговор. А оказывается, всё это время я ел чужие каши. Но никто не говорил напрямую: "Что ж ты, сукин сын, жрешь мой завтрак!" Всё начинали издалека... Так бы я и ничего не узнал, если бы однажды не съел кашу индуса, который не настолько такой вежливый, как англики...
А на прошлой работе фирма покупала и молоко, и каши и ещё много чего: хлеб, варенья, печенья. Там работало много молодых восточноевропейских программистов, и фирма следила, чтобы они с голоду не померли. Оказалось, на нынешней работе казенное только молоко (за вредность?)
- О, ты ешь Oatibix?.. (или Optivita)
- Ага...
Я думал, они просто поддерживают разговор. А оказывается, всё это время я ел чужие каши. Но никто не говорил напрямую: "Что ж ты, сукин сын, жрешь мой завтрак!" Всё начинали издалека... Так бы я и ничего не узнал, если бы однажды не съел кашу индуса, который не настолько такой вежливый, как англики...
А на прошлой работе фирма покупала и молоко, и каши и ещё много чего: хлеб, варенья, печенья. Там работало много молодых восточноевропейских программистов, и фирма следила, чтобы они с голоду не померли. Оказалось, на нынешней работе казенное только молоко (за вредность?)
Подписаться на:
Сообщения (Atom)