Node.js Recipes – Telegram
Node.js Recipes
3.23K subscribers
167 photos
7 videos
1 file
612 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Что должен уметь написать Senior Node.js разработчик?
#architecture

У меня много идей для докладов. Одна из них "Не только Web API". Большинство #nodejs разработчиков работают в web проектах и не умеют использовать Node.js для чего-то другого.

Для Web API много задач. Выбрать нужный протокол REST, RPC, SSE, GraphQL. Обеспечить нужный latency. Дать документацию. Исключить breaking change, что особенно важно в мобайл проектах. Но стоит добавить что-то не стандартное и разработчик теряется.

Вот мой личный топ-10 фичей или приложений, опыт создания которых помогает прокачать навыки:
➡️ Market-place. Пример: Uber, Airbnb
➡️ Поддержка реал-тайма. Пример: мессенджер, биржевые графики
➡️ Чат-боты. Пример: бот в телеграме, FB
➡️ Поисковая система. Пример: умный поиск по сайту, Google
➡️ Видео стриминг. Пример: Zoom
➡️ Картографический сервис. Пример: Google map
➡️ Collaborative real-time editor. Пример: Google Docs
➡️ CLI. Пример: npm, yarn, @nestjs/cli
➡️ REPL. Пример: Mongo shell
➡️ Game Server как пошаговый, так и реал-тайм. Пример: Монополия
Audio
#voice_chat

Гость: Тимур Шемсединов, CTO at Salucyber, главный архитектор технологического стека Metarhia, автор более 200 видео-лекция по веб-разработке.

Вопросы:
Что такое Metarhia? Какую проблему он решает?
Какие проблемы у тайпскрипта?

Дисклеймер – в комментария говорят, что ничего нового не услышали.
Что такое Custom URL Protocol Scheme?
#architecture

В заметке об конфигурации #nodejs приложений я рекомендую использовать connection string. Пример: postgresql://postgres:password@localhost:5432/database

postgresql тут определяет схему протокола в URI. Общепринятыми схемами являются:
- http
- https
- ws
- mailto
- и так далее. Список в wiki

Схема протокола позволяет выбрать правильное приложение для открытия ресурса. Например ссылка чтобы открыть заметку об конфигурации сразу в телеграмме имеет вид: tg://resolve?domain=node_recipes&post=47

Зачем это знать Node.js разработчику? В BFF (backend for frontend) ваше Web API endpoints должны соответствовать ссылкам для mobile/desktop приложений.
Observing Node.js: Using Metrics to Improve your Application Performance
#worth_seeing

Видео с OpenJS World 2021. Докладчик Guilherme Hermeto работает в Netflix. Первая часть видео это разбор метрик описывающих #nodejs приложение. Вторая же – демонстрация поведения метрик на графиках в зависимости от кода. Рекомендую не только посмотреть, но и попробовать запустить пример кода.

📕 Slides ⚙️ Code
Demystifying Database Performance Issues with sqlcommenter
#worth_seeing

Еще одно видео с OpenJS World 2021. Его можно отнести к категории промо докладов. В нем продвигается библиотека sqlcommenter, заточенная под Google Cloud Platform. В видео есть подробная демонстрация создания DB инстанса и запуск #nodejs под GCP. Эта часть будет полезна разработчикам не работавшим с GCP ранее.

Идея библиотеки использовать в DB-запросах комментарии, чтобы собирать телеметрию. Данная библиотека реализуется идеи заложенные в OpenTelemetry спецификации.

Ссылки:
- sqlcommenter
- OpenTelemetry
MongoDB.live 2021, July 13–14, 2021
#conference

MongoDB самая популярная документная база данных. На подходе 5-ая версия. Узнать об новинках в релизе, посмотреть доклада можно будет уже 13-14 июля в ходе конференции MongoDB.live 2021.

Как обычно для Vendor конференций участие бесплатно, а доклады будут доступны к просмотру сразу после конференции. Чтобы стимулировать участников смотреть доклады онлайн и ходит по виртуальным стендап организаторы вводят систему очков. В последствие эти очки используются для розыгрыша подарков от партнеров.

Напомню, что существует MongoDB University
Что такое Graceful Shutdown и как его реализовать?
#architecture #nodejs_api

Девятый пункт The 12-Factor App Manifesto гласит:
Maximize robustness with fast startup and graceful shutdown , что в переводе означает: "Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы". Таким образом graceful shutdown
это корректное завершение работы. По умолчанию #nodejs выключается не безопасно – существуют риски повреждения работоспособности приложения при последующем запуске.

Для завершения работы приложения OS отправляет Unix сигнал Node.js процессу. В зависимости от контекста работы процесса и метода его остановки это могут быть SIGINT, SIGTERM, SIGHUP и прочие. Для обработки такого сигнала существует обработчик process.on('<SIGNAL_NAME>', подробней в документации. Есть библиотеки для этих целей, например death. Во многих фреймворках существуют готовые методы, например в nestjs это enableShutdownHooks.

Вот, что я обычно рекомендую делать для корректного завершения работы:
1. Записать в лог начало выключения.
2. Закрыть входящий поток бизнес-логики. Например: прекратить прием новых задач на обработку из очереди, прекратить обработку новых входящих HTTP-запросов и т.д.
3. Установите принудительный тайм-аут для завершения текущих задач или сохраните их для дальнейшей обработки. Рекомендуемое значение этого таймаута - не более секунды.
4. Уведомить клиентов об отключении в случае постоянного подключения (ws, sse и т.п.). Это называется heartbeat-shutdown.
5. Правильно отключите все соединения. Например: база данных, очереди, кэши.
6. Зарегистрируйте завершение корректного завершения работы и остановите процесс через process.exit().
👍1
#announcement

Сегодня выступаю с докладом об TDD в #nodejs. Это будет совместный доклад с Львовской компанией Sombra.

Доклад начинается с обзора типичной пирамиды тестирования для Node.js проекта. На каждом уровне расскажу лучшие TDD практики и покажу какие npm пакеты использую.

Участие бесплатно.

Расписание
18.30 - 19.15 - Богдан Савшак
19.15 - 19.30 - QA session
19.30 - 20.15 - Нікіта Галкін
20.15 - 20.30 - QA session

Регистрация: https://us02web.zoom.us/meeting/register/tZYvcu6gqzIuG9WgFmZUja4lP-5wlsYraKhu

До встречи в эфире!
Вышла Node.js 14.17.1
#nodejs_api

Вышла патч версия. Изменения:
➡️ Модуль ICU обновлен с 68.1 на 69.1. Этот модуль, International Components for Unicode, отвечает за локализацию, таймзоны и прочее. Пример кода на где они используется new Date().toLocaleString()
Потенциальный breaking change, если ваша бизнес логика использует нативный модуль локализации. Рабочая группа не первый раз делает релиз с новой версией ICU в патч версии. Поэтому на проекта, где используется эта фича я рекомендую использовать собственную сборку Node.js с флагом --with-intl=system-icu Подробней в документации.

➡️ Улучшены вывод errors stacks при использование флага --enable-source-maps
Было
Error: an exception
at branch (*typenoscript-throw.js:20:15)
-> *typenoscript-throw.ts:18:11*
at Object.<anonymous> (*typenoscript-throw.js:26:1)
-> *typenoscript-throw.ts:24:1*
at Module._compile (node:internal/modules/cjs/loader:*)
Стало
Error: an exception
at *typenoscript-throw.ts:18:11*
at *typenoscript-throw.ts:24:1*
at Module._compile (node:internal/modules/cjs/loader:*)
Нативная альтернатива пакету source-map-support
Migration to Google Cloud or How to Train your Pet
#worth_seeing

Сегодня в рекомендованных видео от дружественного комьюнити Math.random(). Его можно описать как case study. Владимир Врещ рассказывает о своем пэт проекте. Сначала о том, как он разворачивал его на Google Cloud, а потом на on premise.

Хорошие моменты на видео:
➡️оптимизация затрат в cloud-native подходе с помощью server-less
➡️ качественные диаграммы архитектуры
➡️ использование реверс индекса для поиска
➡️ отзывы на используемые инструменты
➡️ различие Cloud-native и on premise подходов

Рекомендую к просмотру не только видео, но и сам проект. У него открытый исходный код. Там есть что разобрать и #nodejs, и frontend разработчикам.

Ссылки:
🔗 Личный сайт Владимира https://vreshch.com/
🔗 Проект https://crystallography.io/
🔗 Исходный код https://github.com/chemistry
🔗 Хостинг для on premise https://www.hetzner.com/
DDD, event sourcing and CQRS – theory and practice
#worth_seeing

Возможно, вы были в этот вторник на митапе, где был доклад Богдана Савшака по DDD. Domain-driven design переводиться как предметно-ориентированное проектирование. Сегодня же я рекомендую вам посмотреть лучший доклад для #nodejs разработчиков по данной теме.

Докладчик Golo Roden отлично раскрывает эту тему. В ходе доклада по мимо DDD, он использует концепции CQRS и Event Sourcing. Получается отличная синергия. Стиль доклада написание и объяснение псевдокода, а не работа со слайдами. Это определенно уровень.
#conference #graphql

Hasura упрощает создание GraphQL API. Именно об этой технологии 23-24 июня пройдет конференция Hasura Day. Это Vendor-конференция. В течение двух дней будут доклады, воркшопы и дискуссионные панели. Участие бесплатно.

Напоминаю об том, что прямой конкурент тоже проводить свою конференцию – Prisma Day. Если GraphQL входит в ваш круг интересов рекомендую посетить обе конференции.
Как тестировать Dockerfile?
#package #docker

При анализе проектов я часто вижу, что нет проверки Dockerfile. Так на одном из проектов выяснилось, что сборка Docker image сломана два с половиной месяца.
Поэтому CI должен проверять, что:
➡️ Docker image собирается
➡️ Docker container стартует
➡️ health-check отдает успешный ответ

Если на проекте существуют e2e тесты, то #nodejs необходимо запускать как и в продакшене – как контейнер. Для этого отлично подходит пакет testcontainers. Он позволяет работать с Docker контекстом из кода. Вот пример из документации:

const path = require("path");
const { GenericContainer } = require("testcontainers");
const buildContext = path.resolve(__dirname, "dir-containing-dockerfile");
const container = await GenericContainer.fromDockerfile(buildContext)
.withBuildArg("ARG_KEY", "ARG_VALUE")
.build();
const startedContainer = await container
.withExposedPorts(8080)
.start();
#freebies

В апреле я писал как получить месячную подписку на O'Reilly. Для этого переходим https://learning.oreilly.com/get-learning/ и используем промокод GDGCR20.

O'Reilly продает подписку к своим книгам за 500$ в год. Ее можно получить за 25$ в год. Существует организация ACM – Association for Computing Machinery и для ее членов подписка включена в орг взносы. Для развивающихся стран, куда мы с вами входим, орг. взносы составляют 25$ в год. Никаких обязательств участие в ACM не накладывает.

Кроме подписки на O'Reilly организация ACM дает доступ к Skillsoft и ScienceDirect, подробней.
Для создания учетной записи кликаем сюда и выбираем страну из списка. После регистрации и оплаты будет создан email на домене acm.org. Его необходимо использовать для авторизации на O'Reilly.

Update: От 29 июля. Было изменение цен. Профессиональная 99$, студенческая 19$.
Update 2022: ACM прекратило сотрудничество
👍1
Redis University
#freebies 

Разработчики часто используют Redis как кэш. Чтобы лучше разбираться в этом инструменте я рекомендую пройти Redis University. В нем есть несколько курсов, которые регулярно обновляются.

Для #nodejs разработчиков полезны:
RU101 ➡️ Introduction to Redis Data Structures
RU102JS ➡️ Redis for JavaScript Developers
RU202 ➡️ Redis Streams
RU203 ➡️ Querying, Indexing, and Full-Text Search

Если вы отвечаете за инфраструктуру, то стоит еще пройти:
RU301 ➡️ Running Redis at Scale
RU330 ➡️ Redis Security

По окончания любого курса выдается сертификат, которым можно усилить ваше резюме. Не путайте его с сертификацией, которая стоит 120$ и включает в том числе бейдж. Она называется Redis Certified Developer и проходит под контролем живого человека. Подробней тут
Здравствуйте, друзья!

Хочу пригласить вас на доклад, о перспективном node.js фреймворке NestJS. А расскажет нам о нем Никита Галкин - человек, который знает очень много о бекенде на node.js и охотно делится с миром своими знаниями!

Никита ведет telegram канал - @node_recipes, подписывайтесь и вы найдете большое количество качественных материалов о node.js.

Подробности доклада и регистрация - https://mathrandom.com/webinar01072021

Дата: 1 июля 18:00

#nodejs #nestjs #event #stream #nikitagalkin
Live stream scheduled for
Что такое timing attack (атака по времени)?
#security #package

TL;DR Не используйте сравнение строк через === при проверке равенства секретов или токенов. Используйте безопасные сравнение с фиксированным временем – secure-compare

В веб-разработке мы часто не задумываемся об классической атаке на систему через анализ времени ответа. Исследование 2009 года показывает, что злоумышленник может измерять события с точностью 15–100ms в Интернете и с точностью 0.1ms в локальной сети.

Пример кода уязвимого к данной атаке:
function isAuthenticated(user, token) {
var correctToken = FetchUserTokenFromDB(user);
return token === correctToken;
}

Такое сравнение обрывается на первом же различном символе, поэтому можно по времени ответа подбирать ответ.

Безопасное по времени сравнение выглядит так:
let mismatch = 0;
for (var i = 0; i < a.length; ++i) {
mismatch |= (a.charCodeAt(i) ^ b.charCodeAt(i));
}
return mismatch;

Его можно использовать из пакета secure-compare.

Мне доводилось участвовать в спорах, где оппоненты говорили, что тут нет риска, так как задержка на запрос в базу данных и/или latency ответа не дадут злоумышленнику достаточно информации. Аргументы здравые. Вместо того, чтобы с ними спорить я задаю вопросы:
- есть ли в драйвере кэш запросов? Как он работает?
- Откуда злоумышленник проводить атаку из внешней или внутренней сети?
- Насколько большие затраты делать безопасное сравнение в сравнение с закрываемыми рисками?
Audio
#voice_chat #security

Гость: Анастасия Войтова, секурити инженер в cossacklabs.com. Занимается безопасностью и защитой данных.

Топ 5 security проблем типичного веб-проекта
Управление рисками и угрозами – как понять, какие штуки по безопасности нужны в твоем проекте, а какие нет
SSDLC, SAMM — какие тулы/подходы на каждом этапе разработке софта
Где и как учить основы security? Углублено?
Как выглядит найм security engineer? Карьеры
Что в облаках сделано хорошо для обеспечение security, а что необходимо реализовывать самостоятельно?

Ссылки от Анастасии:
- Личный блог
- Корпоративный блог
- Об интернатуре

OWASP cсылки:
- https://owasp.org/www-project-top-ten/
- https://github.com/OWASP/ASVS
- https://owaspsamm.org/model/
Live stream started
Live stream finished (1 hour)