Event Loop NodeJS: Part 1

Event Loop NodeJS

NodeJS отличается от других платформ тем, как обрабатываются события ввода/вывода, или проще I/O. NodeJS рекламируют как “Не блокирующая, событийно управляемая платформа на базе движка JavaScript V8” (да, именно от V-образного 8-цилиндрового двигателя название и было взято).

Что все это значит? Что значит “не блокирующий” и “событийно управляемый”? Ответы на все эти вопросы лежат в основе ядра NodeJS - цикле событий (Event Loop). Это первая статья из серии где будет объяснено что такое Event Loop, как он работает и как это влияет на разработка.

LAMP сервер для разработки (без PHP на хосте)

В этой статье я расскажу как можно быстро поднять связку PHP + MySql используя Docker на компьютере без установки чего-либо на хост (docker, конечно, уже должен быть установлен)

Требования

  • легкость в использовании
  • возможность запуска нескольких сайтов
  • легкость развертывания нового сайта
  • общий сервер базы данных для всех сайтов
  • запуск одной строкой
  • доступ к исходному коду сайта
  • возможность использования разных версий PHP

В результате потребуется запустить общие для всех сайтов сервисы (это можно поставить в автозапуск)

Монорепозиторий с Lerna для Angular

Последовательность действий

Создаем приложение для ng new monorepo --createApplication=false

npx lerna init

ng g lib first

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

1
2
3
4
5
6
{
  "packages": [
    "projects/*"
  ],
  ...
}

Теперь папку packages, автоматически созданную lerna, можно удалить rm -r packages

И создадим пару библиотек ng g lib first ng g lib second

Если требуется, меняем имена пакетов в библиотеках

Паттерны проектирования

Паттерны проектирования или шаблоны проектирования — это типичные способы решения некоторых типичных проблем.

Википедия описывает их следующим образом:

Шаблон проектирования, или паттерн, в разработке программного обеспечения — повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования, в рамках некоторого часто возникающего контекста.

Не стоит преувеличивать значение паттернов и применять везде и в обязательном порядке. Однако и приуменьшать их значение тоже не стоит. Это методы решение частых задач и эти методы являются опытом других разработчиков.

Установка скрытой reCaptcha от Google

Google предоставляет замечательное средство для борьбы со спамом — reCaptcha

Обычно это просто галочка «Я не робот»

Однако есть возможность не делать даже этого — Invisible reCAPTCHA проверяет пользователя в фоне и только если возникли сомнения отображает окно с дополнительным подтверждением

Подключить невидимую рекапчу очень просто:

Создаем контейнер и подключаем скрипт

1
2
3
<div id="recaptcha"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadReCaptchaInvisible&render=explicit"
        async defer></script>

Настраиваем и пару функций для удобной работы

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var g_cfg = {
  'sitekey': 'your-api-code',
  'theme': 'dark',
  'size': 'invisible',
  'callback': 'grecaptcha_callback',
};

// храним идентификатор
var recaptcha_id;

// функция которую мы вызовим что бы проверить
function gcaptcha_check(callback) {
  window.grecaptcha_callback = callback;
  window.grecaptcha.execute(recaptcha_id);
}

// если требуется обновить рекапчу, например для еще одной проверки пользователя
function gcaptcha_reset() {
  window.grecaptcha.reset(recaptcha_id);
}

// колбек для самой рекапчи
window.onloadReCaptchaInvisible = function () {
  recaptcha_id = grecaptcha.render('recaptcha', g_cfg)
};

Изначально reCaptcha отображает свой логотип в правом нижнем углу страницы