вторник, 23 августа 2011 г.

Капитан спешит на помощь.


Навеяно вот этим:


 В Яндексе используются протоколы маршрутизации – внутренний протокол OSPF и внешний протокол BGP. Из-за ошибки информация обо всех внешних маршрутах оказалась во внутренних таблицах маршрутизации. Это примерно на три порядка больше маршрутов, чем обычно. Протокол OSPF не рассчитан на такое количество. В результате у всех маршрутизаторов кончилась память, и они перестали работать. Нарушилась работа сети, и через несколько минут Яндекс стал полностью недоступен.


Текст новости.

четверг, 4 августа 2011 г.

WTF на WTFе сидит и WTFом погоняет

Вот в таком приходится копаться.

Виртуальные функции -- это для девочек.
class A{
        public:
                 void f() {/* code */}
};

class B: public A{
        public:
                void f() {/* code */}

};

// a is a pointer to A

B* b = dynamic_cast<B*>(a);
b->f();

Father, I need your help.
class A{
        public:
                 void a() {/* code */}
                 void b() {/* code */}
                 // c, d, e
                 void f() {/* code */}

};

class FeaturedA: public A{
        public:
                void a() {A::a()}
                void b() {A::b()}
                // c, d, e
                void f() {A::f()}

                void feature_1() {/* code */}
                void feature_2() {/* code */}
                void feature_3() {/* code */}


};
Очень дружелюбные.

 У класса много друзей (в среднем 9-10) и все они ведут себя по-свински вот так:
class Plant{
        FlowerBed bed;
        Flowers flowers;
    public:
        void plant(){
            // ...
             Flowers toPlant =  chooseFlowers(bed.size, bed.type) 
            // ...   
        }
        
};
class FlowerBed{
    Size size; 
    Type type;     
    // Time to make friends;
    friend class Plant;    
};
    

Не паниковать!
  /*
   * Part of a library
   */
  int A::someGreateMethod(){
        // code
        if (condition)
             return value;
        else{
            // OOPS something wrong
            abort(); // Time to start panick
            return  0; // Original comment for this line is: 
                       // "This line add to avoid compiler warning".
                       // Hm, after this he cares about warnings 0_o
         }
  }
А платят нам за строчки.
   // in class definition
   vector< vector<int> > index (6);
   // in constructor of this class
   for (int i = 0; i < 6; i++)
        index[i].resize(3);
    index[0][0] = -1;
    index[0][1] = 0;
    index[0][2] = 0;
    index[1][0] = 1;
    index[1][1] = 0;
    index[1][2] = 0;
    index[2][0] = 0;
    index[2][1] = -1;
    index[2][2] = 0;
    index[3][0] = 0;
    index[3][1] = 1;
    index[3][2] = 0;
    index[4][0] = 0;
    index[4][1] = 0;
    index[4][2] = -1;
    index[5][0] = 0;
    index[5][1] = 0;
    index[5][2] = 1;

Страшно выглядит? Это нормали к граням кубика. Связка "for-resize", меня добила.
Нам преподаватель по програмированнию рассказывал, что когда програмистам платят в зависимости от количества написанных строк, то они ставят фигурные скобки  на следующей строчке :). Так что если написать, например, вот так:
vector <vector <int> > index (6, vector<int> (3, 0));
то заплатят меньше.

Для наглядности?
Мотивы к использованию такой конструкции мне совсем не понятны:
class A{
        void someFunction(){
            A* a = this;
        }    
};

Что такое жидкость?
bool isFluid(int color) {
    if (color == 0 || color > 80)
        return false;
    return true;
}



Разноцветные.
Цитата из документации:
In config file you can set colors of compounds. If you do not want to do it, then this color will be generate automatically.
Ага, автоматически и без участия мозга человека:
color of voxel-compound is 8.59771e+08


P.S. Код подсвечивался при помощи Pygments.
P.P.S.  Спасибо Hades за картинку в тему.