Huginn: простая интеграционная платформа


Искусство создания компьютерных программ



В предыдущей статье Нативные ECMAScript модули — первый обзор я рассказал историю JavaScript модулей и текущее состояние дел реализации нативных EcmaScript модулей.
Сейчас доступны две реализации, которые мы попробуем сравнить с бандлерами модулей.


Прошёл второй день РИТ++, и по горячим следам мы хотим рассказать о том, как всем миром пытались сломать нашу голосовалку. Под катом — код, метрики, имена победителей и самых активных участников, и прочие грязные подробности.

Большинство Node-объектов — вроде HTTP-запросов, ответов и потоков (streams) — реализуют модуль EventEmitter, благодаря которому они могут генерировать и прослушивать события.
const EventEmitter = require('events')Простейшая форма управления по событиям — это callback-стиль некоторых популярных Node.js-функций, к примеру fs.readFile. По этой аналогии событие генерируется однократно (когда Node готов к вызову коллбэка), а коллбэк действует как обработчик события. Давайте сначала разберём эту базовую форму событийно-управляемой архитектуры.
В апреле в Минске прошла большая IT-конференция United Dev Conf, организованная Frontend Dev Conf, Highload Dev Conf и Mobicode. 


{ _id: 'burik666@...', count: 577979174 },
{ _id: 'ivan@...', count: 513559731 },
{ _id: 'alarkin@...', count: 222891322 },
{ _id: 'i@...', count: 216486374 },
{ _id: 'odn@...', count: 145072331 },
{ _id: 'A1977494@...', count: 55572517 },
{ _id: 'elena@...', count: 44642302 },
{ _id: 'hack@...', count: 15686298 },
{ _id: 'alexey.tsikov@...', count: 12685075 },
{ _id: 'minkin.andrew@...', count: 8200540 },
{ _id: 'perminoff@...', count: 5428646 },
{ _id: '256@...', count: 5030088 },
{ _id: 'v@...', count: 2163356 },
{ _id: 'pen<ОЙ>is@...', count: 2100855 },
{ _id: 'lebedevcommerical@...', count: 1605961 },
{ _id: 'serg_sokolov@...', count: 1600238 },
{ _id: 'msalnikov@...', count: 1499220 },
{ _id: 'ghostlyfox@...', count: 1473142 },
{ _id: 'alex21021991@...', count: 1437472 },
{ _id: 'nikita.shapovalov@...', count: 1007977 },
{ _id: 'evgen300@...', count: 652291 },
{ _id: 'malchenko.dmitriy.by@...', count: 611410 },
{ _id: 'dzmitry_t@...', count: 279287 },
{ _id: 'maniaque.ru@...', count: 262446 },
{ _id: 'e.tabatsky@...', count: 190766 }
361K RPS Голосуй за свой ЯП? #ritfest2017 high load голосование https://t.co/CbbDhHJKNj @IngramCloud pic.twitter.com/mT6jfI9L4G
— Alex Hayorov (@hayorov) June 6, 2017


Всем привет! Это уже десятый выпуск дайджеста на Хабрахабр о новостях из мира Python. | Итоговая таблица для тех кто не хочет много читать | |||
| Результат | Ошибка компиляции | False | True |
| Языки | C++ Pascal FORTRAN-95 Java C# Go Rust Haskel |
C Lisp Python Lua Ruby |
JavaScript PHP Perl |
Каждый, кто когда-либо разрабатывал приложения, использующие базу данных, наверняка сталкивался с проблемой обновления структуры БД при разворачивании и обновлении приложения.
Чаще всего используется простой подход — создание набора SQL-скриптов для модификации структуры БД от версии к версии. Конечно, есть такой мощный инструмент, как Red gate, но он во-первых небесплатный, во-вторых не решает проблему полной автоматизации обновления.
Технология migrations, впервые появившаяся в ОРМ Hibernate и реализованная в Linq, очень хороша и удобна, но подразумевает стратегию разработки структуры БД code first, что весьма трудоемко для уже существующих проектов, а использование в БД триггеров, хранимых процедур и функций делает задачу перехода на code first практически невыполнимой.
В данной статье предлагается альтернативный подход к решению этой задачи, использующий хранение эталонной структуры БД в XML-файле и автоматическую генерацию SQL-скрипта на основе сравнения эталонной и существующей структуры. Итак, начнем...

Так вышло, что для получение автомата по программированию бедным первокурам задали одну интересную задачу: написать программу, которая ищет по дереву методом Монте-Карло.
