Данная статья является переводом. Оригинальная статья была выложена на сайте Dev. А вот и сам оригинал.От переводчика