1/28/2008 12:48:00 PM

Забавно, обнаружил на диске файл с название "Australia" и расширением ".fbl". Это файл карт, толи к TomTom, толи к iGO, я не знаю точно. Но это я потом вспомнил...

Забавно было увидеть в начале файла следующий текст:

"Nihil est incertius vulgo, nihil obscurius voluntate hominum, nihil fallacius ratione tota comitiorum. Ita mali salvam ac sospitem rem p. sistere in sua sede liceat atque eius rei fructum percipere, quem peto, ut optimi status auctor dicar et moriens ut feram mecum spem, mansura in vestigio suo fundamenta rei p. quae iecero.Nihil est incertius vulgo, nihil obscurius voluntate hominum, nihil fallacius ratione tota comitiorum. Ita mali salvam ac sospitem rem"

Это, как я понимаю, различный набор цитат (крылатых фраз) на латыни. Например, первая принадлежит, вроде, Цицерону и значит, вроде, "Ничего определено больше, чем много". Или как-то так.

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

Tags:

1/24/2008 10:45:00 PM

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

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

Так что, опять ждать, впрочем, без особой надежды :)

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

P.S. Нелегкая это работа - резюме писать. Часа 4, а то и больше, убил на это, и все равно как-то не особо нравится. Спасибо добрым людям - пофиксили ошибки в английском :)

1/23/2008 12:52:55 AM

Интересное письмо пришло от Много.Ру:

Бонусы

Сейчас я могу заказать бонусов, а чуть позже - еще бонусов :)

Такие вот бонусные мечты.

Tags:

1/21/2008 8:26:54 PM

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

Например, я впервые в жизни видел Майбах. Правда, даже не посмотрел на его стоимость, теперь жалею :) Альфа-Ромео, некогда любимая марка Джеймса Бонда, тоже выглядит весьма впечатлительно.

Maybach 57S _DSC7581_sm

Еще там был представлен какой-то, очевидно, какого-то очень высокого класса немецкий автомобиль, со странным названием и не менее странным видом:

 

Кроме того, в этом году было представлено несколько гоночных автомобилей, в частности болиды формулы-1 таких команд, как Хонда, Феррари, Вильямс, Рено.
При этом болид Феррари крутился на постаменте и с ним можно было сфотографироваться, правда, только при участии "местного" фотографа, который потом отсылал фотографии по электронной почте и которого как раз не было на месте, когда мы проходили мимо. А BMW формульный болид своей команды просто приклеили на потолок, видимо, чтобы экспозиционное место не занимал. Так же поступили и в Хонде, к слову.

_DSC7375_sm _DSC7613_sm

А вот команда Рено, кроме того, что выставила свой болид на самом видном месте, еще и в виде мультика объяснили причину своих неудач в прошедшем году:

Приглядитесь, на первом фото - человек с пистолетом. Это явно либо участник прошлогоднего шпионского скандала, собирающийся шуруповертом просверлить шину, либо просто какая-то темная фигура, направившая пистолет прямо в кокпит и угрожающая пилоту... Шучу, конечно, я это увидел только на фотографии. Но все же, символично.

Пежо, ввиду того, что не присутствуют в Формуле-1, представили автомобиль-победитель 2007-го года в серии ЛеМан. Причем, по всему видно, что настоящий: на нем и царапины, и сколы:

Была представлена даже Лада (в позапрошлом году она тоже была), но в виду того, что не впечатлила абсолютно, фотографий не делал.

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

P.S. Когда уходили с салона, было уже темно и Атомиум выглядел гораздо красивее, нежели он есть на самом деле днем (правда, фотографировать было жутко неудобно из-за заборов и фонарей):

Атомиум в ночное время.

1/20/2008 10:23:28 PM

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

Вообще моя "проблема" в том, что многие, даже очень хорошие, машины мне не подходят по росту.

Влез, но...

Но все же удалось найти несколько вариантов, в которых я себя чувствую очень комфортно:

Тойота Королла Версо

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

  1. Садишься на сиденье водителя, устраиваешься там, настраиваешь кресло, руль "под себя". Если все получается и ты чувствуешь себя комфортно, переходишь к пукту 2.
  2. Вылезаешь с переднего сиденья и садишься на заднее, позади водителя. После себя, так сказать. Если чувствуешь себя комфортно, то можно рассматривать этот автомобиль как вариант и переходить к остальным (техническим) критериям и характеристикам.

Вот Verso самую малость подкачал по критерию номер 2. Но - малость. Так что, в принципе, вариант.

Toyota Prius

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

  1. Экологичность.
  2. Малый расход топлива. Производителем заявляется 4.4 литра топлива на 100 километров.
  3. Здесь в Бельгии есть такое понятие, как "пусковой налог". Этот налог платится единожды, когда человек покупает новую машину для того, чтобы иметь "пустить ее на дороги". Обычно этот налог составляет несколько сотен евро (500) и исчисляется из "крутости" машины: лошадиные силы, объем двигателя, что-то еще.. То есть, купив какую-нибудь суперскую дорогую новую машину можно заплатить налог в несколько тысяч евро.
    Так вот, у Prius этот налог составит всего 61-81 евро. Неплохая экономия, однако.

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

Лексус

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

Honda FR-V

Honda FR-V. Вот машина - так машина. К сожалению, не догадался сфотографировать салон и багажник.
Долго в ней сидел, ковырялся. Очень удобно. Места немерено. Там даже в переднем ряду три полноценных кресла. Среднее можно сложить, тогда между двумя сидениями получается неслабый такой столик с подставками под стаканчики и т.д.
Задний ряд кресел двигается вперед-назад так же, как и передний. Кроме того их можно сложить, тогда и без того большой багажник становится просто-таки огромным.
Да, машина понравилась очень, очень. Понравилась больше, чем Honda CR-V, которая была представлена тут же и которая была почти в 2 раза дороже.
Однако, есть и существенный минус: топлива она жрет немерено. 11-15 литров на 100 километров. Сравните с Prius.

Еще, просто перечислю: 7-я серия BMW. Это из разряда фантастики. И Ситроен C5. Удобно, комфортно. Правда, это все же ситроен, поэтому все же нет.
BMW x3 разочаровал еще на прошлогоднем салоне, x5 тогда не давали, теперь их было даже несколько. Так себе. Тоже несколько разочаровал. Хотя звукоизоляция там - как нигде. Оговорюсь: оцениваю все с сейчас точки зрения удобства и дизайна исключительно. Можно было взять тест-драйв, но во-первых и так-то времени не хватило, а во-вторых - все равно же покупать не собираемся, зачем людей лишний раз напрягать.

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

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

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

1/20/2008 8:14:47 PM

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

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

В этом году мы попали на автосалон в первые его дни, народу было не так много, как на прошлом салоне (в последние выходные), поэтому нам удалось заснять автомобили, которые традиционно собирают толпы народу, без проблем:

Лотус Феррари

Ламборджини Мерседес SLK 200 K (на номере написано)

Впрочем, почему же не представится? Если кому-то хочется посидеть за рулем Феррари - можно съездить в Монако и всего за 90 евро сделать круг по улицам этого славного города. По тем самым, по которым раз в год проходит гран-при Формулы-1. Конечно, феррари там будет не последней модели, да и "мчаться как ветер" не получится, но все же это будет настоящий феррари.

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

Порадовало наличие концептуальных моделей в этом году:

Концепт гибридной Хонды Концепт Рено Лагуна

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

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

Концепт Ниссан Концепт Ниссан: место водителя

Хотя встречаются и экзотичные варианты:

Впрочем, это не совсем и концепт Концепт от Ситроен

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

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

P.S. Во второй части читайте о более "приземленных" вещах, хотя и не менее интересных.

1/17/2008 9:11:00 PM

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

С сегодняшнего дня это так. Открыт код системных библиотек, код ASP.NET, Windows Forms, WPF, ADO.NET, ASP.NET и XML. Остальные библиотеки, такие, как LINQ, WCF, WWF и CardSpace будут открыты чуть позже.

Кроме того, этот код можно использовать для дебага с помощью Visual Studio 2008 - чрезвычайно полезная штука. То есть, теперь можно просто жать F11 в режиме отладки, студия сама будет подкачивать необходимые файлы и исходным кодом и отладочной информацией.

Для того, чтобы дать студии возможность это делать, нужно:

  1. Установить обновление VS 2008 QFE, с ним у дебаггера появится возможность делать то, что мы от него в данном случае хотим.
  2. В опциях Visual Studio 2008 нужно найти раздел Debugging\General и в предложенном обилии настроек снять галку "Enable Just My Code" и установить галку "Enable source server support".
  3. Там же, в Debugging перейти к подразделу Symbols и добавить адрес, откуда будет скачиваться отладочная информация, вот этот: http://referencesource.microsoft.com/symbols. На этой же вкладке нужно указать каталог, в котором эти самые файлы отладочной информации будут кешироваться (чтобы не грузить каждый раз заново, это занимает существенное время, при первой загрузке увидите, будте готовы), а так же установить галку "Search the above locations only when symbols are loaded manually".
  4. Нажать кнопку ОК :)

Теперь можно дебагить код Microsoft аки свой (что иногда очень удобно).

1/15/2008 7:11:00 PM

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

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

Итак, сделали функцию, которая принимала параметром число и возвращала его произведение самого на себя.
Поместили ее в цикл из 1 600 000 итераций. Использовалась функция так:

long res = Calculate(i);
//чтобы результат типа использовался
if (res < 0) throw new InvalidOperationException();

Этот код мы поместили один раз в Try ... Catch (Catch там сработать не мог, но нам нужно было протестировать влияние самого Try), а второй раз без него. Итого 1 раз 1 600 000 итераций с Try, другой - без. И так 50 раз для чистоты эксперимента.

Разница в этом случае ни разу не превысила 00:00:00.0023953, кроме того, примерно в 1/10 случае она оказывалась отрицательной. То есть, будем считать, что разницы-то никакой и нету :)

Теперь о вреде Catch.
Здесь я сделал такой же тест, но вместо умножения чисел я внутри цикла парсил число из строки. Int32.Parse в одном случае и Int32.TryParse в другом. Строка всегда была "неправильной", то есть Int32.Parse всегда возбуждала исключение, которое я перехватывал и возвращал 0. Int32.TryParse никогда не возбуждает исключения, поэтому в блок Catch в этом случае мы не попадаем.
Здесь я сделал всего 1600 итераций, так как иначе пришлось бы слишком долго ждать.

Выводы следующие:

With Catch: 00:00:04.2675105
Without Catch: 00:00:00.0012498
Diff: 00:00:04.2662607

Итак, рекомендации:

  1. Используйте Try ... Catch и Try ... Finally конструкции без страха повредить производительности своего приложения до тех пор, пока это не противоречит пункту "2".
  2. Не используйте Try ... Catch конструкции для того, чтобы проверить формат данных или преобразовать что-то во что-то, как было в указанном примере с числами. Иными словами, не используйте Try ... Catch для обработки штатных ситуаций.
  3. Используйте Try ... Catch для работы именно с исключительными ситуациями; не выбрасывайте исключение только для того, чтобы выше его перехватить и обработать как штатную ситуацию. Исключение должно возбуждаться только тогда когда с точки зрения подсистемы произошла действительно исключительная ситуация и подсистема просто не в состоянии разрулить ее самостоятельно. В противном случае пользуйтесь возвращаемыми значениями.

Вот и все.

P.S. Весь код собирался и тестировался в режиме Release.

 

 

Tags:

1/14/2008 9:03:00 PM

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

Не успел. Он сам сообщил, что уже поговорил и с руководством нашего подразделения (в рамках которого работает наша команда) и даже с руководством всего намюрского бранча.

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

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

Опять буду ждать.

1/9/2008 3:52:00 PM

Некоторые классы .NET Framework ведут себя при сериализации с помощью XmlSerializer достаточно странно. Некоторые не сериализуются вообще, некоторые, например тот же System.Drawing.Color, сериализуют только поле, но игнорируют его значение. То есть, сериализация объекта со свойством:

[XmlElement("backgroundColor")]
public Color BgColor
{
    get { return _bgColor; }
    set { _bgColor = value; }
}

приведет к тому, что будет сериализована пустая нода <backgroundColor />, значение же сериализоваться не будет, как бы мы его не присваивали.
К слову, этого я вообще не понимаю. Ну не умеешь ты сериализовать класс - ну выкинь ты исключение, зачем такую ерунду делать... Впрочем, если же возникнет желание сериализовать цвет xml-атрибутом, то, действительно, получится исключение.
Но не об этом речь.

Иногда все же нужно сериализовать несериализуемое, а делать для этого в классах дополнительные свойства, которые будут использоваться только для сериализации (например, можно было бы сделать string StringBgColor, пометить его как Browsable(false), чтобы его никто не видел, а само свойство Color BgColor поменить как XmlIgnore).
Но этот подход мне не нравится, так как в интерфейсе объекта плодятся ненужные свойства, которые, в общем-то, логически дублируют друг друга.

На мой взгляд грамотнее написать свой тип Color точнее, "обертку" для него (назовем ее XmlColor), которая с одной стороны будет нормально сериализоваться, с другой стороны будет "прозрачной" для использования совместно со "стандартным" Color.
То есть, чтобы можно было написать Color myColor = myXmlColor и наоборот, а приведение типов производилось бы автоматически. Тогда введение нового типа никак не будет мешать ни логике работы программы, ни разработчикам.

Вот пример такого типа:

public struct XmlColor : System.Xml.Serialization.IXmlSerializable
{
    private Color _color;

    public XmlColor(Color c)
    {
        _color = c;
    }

    public Color Color
    {
        get { return _color; }
    }

    public static implicit operator Color(XmlColor c)
    {
        return c.Color;
    }

    public static implicit operator XmlColor(Color c)
    {
        return new XmlColor(c);
    }

    System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
    {
        return null;
    }

    void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
    {
        _color = ColorTranslator.FromHtml(reader.ReadString());
    }

    void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
    {
        writer.WriteString(ColorTranslator.ToHtml(this.Color));
    }
}

Он инкапсулирует в себе "нормальный" Color, "умеет" приводиться к нему и из него, а так же может быть сериализован в качестве xml-элемента. Естественно, вместе со значением :) Таким образом, вместо свойства Color BgColor {get; set;} мы сможем определить свойство XmlColor BgColor {get; set;} и все будет работать так, как планировалось, а благодаря возможности неявного приведения замена одного типа другим пройдет незаметно и безболезненно.

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

Powered by BlogEngine.NET 1.6.0.0

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010

Sign in