Сказ о том как я свой REST фреймворк с веб-сокетами писал

Для тех, кому интересна эта статья — пожалуйста, заходите под кат.
Искусство создания компьютерных программ
Нейронные сети сейчас в тренде. Каждый день мы читаем про то, как они учатся писать комментарии в интернете, торговаться на рынках, обрабатывать фотографии. Список бесконечен. Когда я впервые посмотрел на масштаб кода, который приводит это в движение, я был напуган и хотел больше не видеть эти исходники.
Но врожденные любознательность и энтузиазм довели меня до того, что я стал одним из разработчиков Synaptic — проекта фреймворка для построения нейронных сетей на JS с 3к+ звезд на GitHub. Сейчас мы с автором фреймворка занимаемся созданием Synaptic 2.0 с ускорением на GPU и WebWorker-ах и с поддержкой почти всех основных фич любого приличного NN-фреймворка.
В итоге оказалось, что нейронные сети — это несложно, они работают на достаточно простых принципах, которые несложно понять и воспроизвести. Самая трудная задача — это обучение, но для этого почти всегда пользуются готовыми алгоритмами, а скопировать их не очень сложно.
Доказать это просто. Ниже в статье реализация нейронной сети с нуля без каких-либо библиотек.
Обзор Swift 3 компилятора и способы его ускорить. Часть 1.
Развенчание существующих мифов. Мнение о проблемах autocompletion в Xcode.
ограниченные контексты
.ограниченного контекста
используется ряд более низкоуровневых тактических шаблонов, которые имеют технический характер, то есть эти шаблоны используются для решения технических задач. Такими шаблонами являются: сущность
, объект-значение
, службы предметной области
, события
, модули
, агрегаты
, фабрики
и хранилища
. Именно о них пойдет речь в этой статье.Про автоматизацию бизнес-процессов (БП) написано много. В литературе, да и в интернете, хорошо описаны преимущества автоматизации повседневных рутинных процессов посредством Business Process Management (BPM), а также Workflow Management Systems (WMS).
Цель этой статьи — пойти дальше и рассмотреть, что же конкретно подразумевает под собой слово "Автоматизация" и почему увеличение требований к моделям процессов непременно приводит к увеличению сложности самой системы, и как с этим бороться.
Гравюра М. Эшера «Вавилонская башня», 1928
Возможно, вы готовы к тому, что ваше приложение будет многоязычным уже на старте проекта. Но скорее всего, новость о необходимости интернационализации, как это однажды уже случилось с человечеством, застанет вас в разгаре строительства Вавилонской башни. В любом случае полезно иметь при себе джентльменский набор средств, дающих шанс завершить стройку века успешно.
Спустя четыре тысячи лет после Вавилонского столпотворения технологии предлагают нам несколько замечательных инструментов. Что же у нас есть?
Во-первых, сборная солянка — абстракция локали (locale). Локаль включает не только язык, но еще и письменность, календарь, правила форматирования чисел, денежных единиц, дат и пр.
Во-вторых, Юникод. Юникод — это не просто таблица кодирования символов. Это еще и различные формы одних и тех же букв, диакритические знаки, порядок сортировки символов, правила изменения регистра, алгоритмы нормализации строк, семейство кодировок UTF и многое другое.
Все это большое подспорье. Такие возможности, как правило, уже встроены в операционные системы и доступны в стандартных библиотеках. Программисты и пользователи во всех уголках планеты благополучно применяют одни и те же операционные системы, средства разработки, базы данных. Но, увы, нет в мире совершенства…
bind SHIFT "+snipe"
alias +snipe "sensitivity 2.5; fov 30"
alias -snipe "fov 90; sensitivity 4"
bind t "superrjr"
bind a "superrjn"
alias superrjr "echo SuperRocketJump enabled; bind a +srj; bind t superrjc"
alias superrjn "echo SuperRocketJump disabled"
alias superrjc "echo SuperRocketJump disabled; bind a superrjn; bind t superrjr"
alias +srj "lookdown1;hand 2;rjump"
alias -srj "lookdown2"
alias lookdown1 "cl_pitchspeed 999999;+lookdown"
alias lookdown2 "-lookdown;cl_pitchspeed 200;-attack;-moveup;wait;wait;wait;centerview;hand 2;cl_maxfps 80"
alias rjump "+moveup;+attack;wait;wait;wait;wait;cl_maxfps 0"
alias +QLD "+lookdown;cl_pitchspeed 999"
alias -QLD "-lookdown;cl_pitchspeed 200"
alias +RocketJump "hand 2;+QLD;wait;wait;+attack;+moveup"
alias -RocketJump "hand 2;-QLD;-attack;-moveup"
alias SuperRocketJump "hand 2;+QLD;wait;wait;wait;wait;+attack;+moveup;wait;cl_maxfps 0;LWX3;cl_maxfps 90;-QLD;-attack;-moveup;hand 2"