четверг, 24 июня 2010 г.

Диковинный Гент


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


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


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


Пятиметровая супер-пушка "Чокнутая Грета", калибра 64 см. Внушает если не трепет, то точно уважение.


Просто предзакатная набережная.


Социалистиш воркер-комьюнити, понимаешь...


А теперь давайте утолим жгучий информационный голод:
1. В XI-XVI вв. Гент был вторым после Парижа по величине городом Европы.
2. Карл V Габсгурский, император Священной Римской Империи, был уроженцем Гента.
3. Одно из предместий Гента называется Москва. Это название дали ему квартировавшие здесь офицеры русской армии во время похода русской армии в 1813 году. 
4. С 2009 года каждый четверг в Генте — вегетарианский день: все политики, госслужащие и школьники "добровольно" отказываются от мяса.
5. Город-побратим Гента — Таллинн!

P.S. а еще в Генте мы встретили местного, говорящего по-русски. Им оказался дружелюбный официант-турок Юсуф. Сказал, что выучил в Стамбуле. Круг замкнулся.

вторник, 22 июня 2010 г.

10 фактов о Париже


Из серии "На собственной шкуре":

9. Парижское метро — это бесконечные выложенные белой плиткой многоэтажные лабиринты.


8. На Триумфальной Арке среди мест боевой славы можно высмотреть Аустерлиц. Тот самый, который заботливо забили в наши головы учителя русской литературы.


7. Уличные мусорники — это обычные мусорные пакеты, закрепленные кольцом. Вот только сигареты туда, наверно, не выбрасывают.


6. Дом Инвалидов — вовсе и не дом, а огромный архитектурный комплекс, украшенный золоченым Собором Инвалидов.


5. На надземной ветке метро есть станция "Сталинград".



4. Собор Парижской Богоматери — такой маааленький, а сувенирные гаргульи — такие бооольшие.

 

3. Статую Свободы вблизи сфотографировать можно только сзади, потому что она, как и в Америке, на острове.


2. Сувениры и холодную воду на улицах продают только негры и арабы.



1. Эйфелева башня светится ночью и раз в час сверкает проблесковыми маячками.


0. И последнее, "сосиска" по-французски будет "сосиса". Запоминайте, это хит сезона!

Гоззи


Гоззи завязывает со своим бессмысленным существованим.
Гоззи ищет пути к развитию.
Гоззи пишет письмо Славе Сэ.

Метро-ТВ


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

Внимание, вопрос: придумайте жизнеспособную систему поддержки этого контента: как его заливать/обновлять/синхронизировать?

воскресенье, 20 июня 2010 г.

Тарту до нас




Историю Тарту отсчитывают от 1030 года, когда он впервые упоминается в письменном источнике. В "Повести временных лет" сказано: "В тот же год пошел Ярослав [Мудрый] на чудь, и победил их, и поставил город Юрьев". Уже в начале XIII ст. город был захвачен немецкими рыцарями-меченосцами и получил новое имя — Дорпат, теперь уже надолго, более, чем на 600 лет. Немецко-эстонский город в Средние века входил в состав Ганзейского союза.

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

Ностальгия по городу Юрьеву не унимается до сих пор. "Тарту? Что вы! Это же наш город, это же Юрьев!" (с придыханием). До захвата русскими был поселением чуди — ерунда, шесть столетий был немецким — не важно. Это Наш Юрьев!

Наш Юрьев таки стал Юрьевым по воле русского царя Александра III в 1893 г. (как говорит википедия: "в период русификации"), однако ненадолго.

В 1919 году именно в Тарту подписан мирный договор о взаимном признании суверенитета Советской России и Эстонии. А жители уже эстонского города принимают решение вернуть самое старое имя: Tarpatu — поселение древних эстов. Как-то так получилось нынешнее название — Тарту.

Ну и, конечно же, период советской оккупации 1940-1991, репрессии и унижения. Не будем о грустном. Теперь все позади, свободный эстонский город Тарту приветствует своих гостей!

Продолжение: Мы в Тарту

Кое-что новое


Продолжая тему секретных приемов в C++, знаете, чем отличаются два выражения внизу?

X *x = new X;
X *y = new X();

Если класс X не содержит конструктора по умолчанию, определенного пользователем, для y все члены-данные примитивных типов будут инициализированы нулями, в то время как в x будет мусор.

Проверочный пример



#include <iostream>

class X
{
public:
void print()
{
std::cout << "not_init = " << m_not_init << ", init = " << m_init << std::endl;
}

protected:
int m_not_init;
int m_init;
};

class Y
{
public:
Y()
: m_init(1)
{
}

void print()
{
std::cout << "not_init = " << m_not_init << ", init = " << m_init << std::endl;
}

int notInit() const
{
return m_not_init;
}

int init() const
{
return m_init;
}

private:
int m_not_init;
int m_init;
};

class Z: public Y
{
public:
void print()
{
std::cout << "Y::not_init = " << notInit() << ", Y::init = " << init() << ", own = " << m_own << std::endl;
}

private:
int m_own;
};

int main()
{
{
X *x1 = new X, *x2 = new X();
x1->print(); x2->print();
}
std::cout << std::endl;
{
Y *y1 = new Y, *y2 = new Y();
y1->print(); y2->print();
}
std::cout << std::endl;
{
Z *z1 = new Z, *z2 = new Z();
z1->print(); z2->print();
}
return 0;
}


выдает следующее:


not_init = -1819044973, init = -1819044973
not_init = 0, init = 0

not_init = -1819044973, init = 1
not_init = -1819044973, init = 1

Y::not_init = -1819044973, Y::init = 1, own = -1819044973
Y::not_init = -1819044973, Y::init = 1, own = -1819044973

Кое-что про ссылки


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

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

Срывая завесу тайны, скажу, что говорить мы будем про присвоение временного объекта константной ссылке:

Obj func();
const Obj &o = func();

Большинство плюсистов со стажем сразу увидят здесь проблему: объект, возвращаемый функций func(), должен быть разрушен, как только выражение полностью вычислено. Однако, ссылка на этот объект продолжает жить на протяжении всей области видимости, потенциально позволяя коду работать с разрушенным объектом. Вы поймете мое удивление, когда увидите, что код выше компилируется и исполняется корректно msvc, gcc и online comeau.

Рассмотрим подробный пример:

#include <iostream>

class A
{
public:
    A(const std::string &name)
    : m_name(name)
    {
        std::cout << "created " << m_name << std::endl;
    }

    ~A()
    {
        std::cout << "deleted " << m_name << std::endl;
    }

    void say_hello() const
    {
        std::cout << "hello from " << m_name << std::endl;
    }

private:
    std::string m_name;
};

int main()
{
    A("nameless").say_hello();

    A a = A("a");
    a.say_hello();

    const A &b = A("b");
    b.say_hello();

    return 0;
}

При исполнении он выведет на консоль следующее:

created nameless
hello from nameless
deleted nameless
created a
hello from a
created b
hello from b
deleted b
deleted a

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

Далее, если попробовать в первичном коде убрать квалификатор const, то код вообще перестанет компилироваться!

Obj func();
Obj &o = func();

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

void incr(int &i) 
    ++i; 

void f() 
    unsigned x = 3; 
    incr(x); 

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

Вот тебе, бабушка, и C++.

суббота, 12 июня 2010 г.

Dura lex


Duro,Dur,Dura (лат.) - твердый, суровый, продолжительный. Производные в английском языке - Duration, During, Duress и т.п.

Lex-Leges (лат.) - закон. Производные в английском - Legal, Legitimacy, College, Delegate, Privilege.

Знаменитое крылатое латинское выражение гласит: "Dura lex, sed lex" - "Закон суров, но это закон".
Встречали людей с длинным ногтем на мизинце?

Если исключить теорию заговора и признак принадлежности к околомасонским орденам, различным сектам и просто извращенческим кругам, то касательно этой странной моды Рунет имеет следующий ряд гипотез:
  1. Во Франции в 17 веке среди знати было принято отращивать ногти на мизинцах. Согласно придворному этикету, прежде чем войти, следовало не стучать, а деликатно поскрести.
  2. В Европе в 18 веке аристократы распечатывали письма ногтем мизинца, когда под рукой не было специального ножа.
  3. В 70-80х годах 20 века в Америке с ногтей-лопаток на мизинцах наркоманы нюхали кокаин. Эта мера "расфасовки" называлась nail.
  4. В 40-50х годах того же 20 века это являлось уголовной традицией. Длинный ноготь был признаком вора, который не работает принципиально.
  5. Длинным ногтем на мизинце пользуются карточные шулеры при выполнении обманного съема.
  6. Использование в качестве отвертки для механиков и медиатора для гитаристов.

Кто же они на самом деле?

Frei zu sein!



Классный клип классной группы по мотивам классного фильма.

четверг, 10 июня 2010 г.

Нас посчитали


Всё. Кранты. Гугл про тебя все знает.

Это волчанка




А вы знали?

А как у вас с барсиками?


Продолжая тему идиотских баннеров, из виденного на хабре:

(раскадровка анимации бай ми)

Кто там ближе к России, позвоните этим имбецилам, пускай своих барсиков выведут.

среда, 9 июня 2010 г.

Пасхальное змеиное


>python
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

вторник, 8 июня 2010 г.

Волнорез


Нам запретили использовать wave в рабочих целях :( Секьюрность, туды ее в качель!

понедельник, 7 июня 2010 г.

Specialist


Specialist (аббревиатура "SPC")  — военное звание рядового состава в армии США. Оно эквивалентно капралу, но в отличие от него специалист не считается военнослужащим сержантского состава.
Хотя "Specialist" в данном случае обычно переводят на русский как "младший сержант".

суббота, 5 июня 2010 г.

Новый гаджет


Есть проблема: ноутбук после часа работы превращается в печь. И это ад. Особенно летом, особенно на коленях. 

Есть решение: столик-трансформер.


Фичи:

  • алюмениевая крышка с множеством отверстий для пассивного охлаждения
  • два вентилятора, питающихся от usb
  • годится для 17" ноутбуков
  • весит 2 килограмма и выдерживает вес до 15 килограмм
  • три степени свободы позволяют не только менять высоту, но и конфигурировать для работы на столе, на кровати, в кресле

 

А еще на нем можно завтракать в постели! Только потом приходится выгребать омлет из вентиляторов.

Не прочитаешь - убью


Новые тенденции гламурного баннеростроения


Каждые 10 секунд на каждой загруженной странице погибает один котёнок. Это может привести к полному исчезновению вида гламурных котят. Куда смотрят защитники животных?

Книжные закладки


Хозяйке на заметку: хорошую закладку для большой книги можно вырезать из футляра Johnnie Walker. Особенно эффектно смотрится Red Label. 


Товарищи, прогрессивные трудящиеся! Вперед на помойки элитных районов!

Empty trash!


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