Serialization with boost

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

В процессе работы возникла задача сериализации данных некой структуры с последующим сохранением их в файл. ИМХО, для таких задач просто отлично подходит boost::serialization.

Continue reading

Узел камикадзе ( Kamikaze knot )

узел камикадзе

Этот узел  называют узлом камикадзе. Почему? Объясняю: если вам надо спуститься с горы или еще от куда нибуть, а есть только одна вервка и ее надо сохранить. Если привязать любым узлом веревку допустим к дереву – вы спуститесь но веревка сама не отвяжется и вам придется оставить ее. По этому делают узел камикадзе (рекомендуется делать в крайнем случае) на картинке  показано – какую веревку разрезать. Концы узла подрезаются человек спускается, допустим, с горы. При этом узле он должен держать веревку в натяжении (Это очень ВАЖНО!) когда он спуститься то веревку нужно ослабить и подергать, после чего узел расподется и веревка окажется у вас. Преимущество очевидно – вы остались с веревкой, но очень большая опасность в том что если при спуске вы ослабите веревку то узел может развязаться именно по этому его называют узлом камикадзе.

Видео, как его завязывать Continue reading

Apple’s Three Laws of Developers

  1. A developer may not injure Apple or, through inaction, allow Apple to come to harm.
  2. A developer must obey any orders given to it by Apple, except where such orders would conflict with the First Law.
  3. A developer must protect its own existence as long as such protection does not conflict with the First or Second Law.

    — I. Developer

Clamp variable to interval


#include <iostream>
using namespace std;

float Clamp( float a )
{
 float v = (a<0) ? 0 : (a<1) ? a : 1;
 return v;
}

int main ()
{
 cout<< -3 << "\t" << Clamp(-3) <<endl;
 cout<< 0.5f << "\t" << Clamp(0.5f) <<endl;
 cout<< 3 << "\t" << Clamp(3) <<endl;
}

Output

 -3      0
0.5     0.5
3       1

You can modify function to take interval , or use it as preprocessor directive.