в связи со спорным переносом 1 части поста на geektimes (при том что 2-я часть осталась на хабре) возвращаю 1-ю часть на место.
Первая часть здесь:
habrahabr.ru/post/245631