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

Вчера во время Voice Chat Андрей задал вопрос: "Какие необходимые навыки/знания ты бы выделил для junior nodejs разработчика?". Вопрос можно брать для отдельного часового обсуждения и все равно не будет раскрыт полностью.

Обратите внимание, что в русском языке Junior переводиться младший специалист. Это означает способность самостоятельно решать задачу. Уровень Middle – тоже самое плюс немного проектировать фичи, Senior – проектировать фичи, Lead – строить процессы.

Вот мой список для Junior:
➡️Знание JavaScript/TypeScript, чтобы по примеру из другого файла сделать схожую фичу и покрыть ее тестами
➡️Знание работы с GIT, достаточные для открытия Merge Request
➡️Знание Docker и CLI, достаточные чтобы по хорошей документации проекта развернуть локальное окружение.
➡️Прочитана и понята документация по Node.js и фреймворку, что бы бы знать как и что в ней искать.

Завершу двумя полезными ссылками:
🔗Building Modern Node.js Applications on AWS хороший обзорный курс, для тех кто не работал с Cloud Native
🔗Матрица компетентности от Ильи Климова
Consuming Nodejs Observability Features in Kubernetes Environments
#worth_seeing

Сегодняшнее видео приятно рекомендовать по многим причинам.

Во-первых, сама тема – мониторинг #nodejs метрик да еще в Kubernetes. На многих проектах нет мониторинга. Разработчики не знают как его сделать, а DevOps инженеры не понимают особенностей Node.js.

Во-вторых, докладчики из Red Hat, компании которая много делает для open source в общем, и для Node.js в частности.

Во-третьих, подача самого доклада. Ребята подкупают своей простотой и открытостью. Вот вы много видели докладов, где докладчик джун (Alex Alykiotis)? А где докладчик (Luke Holmquist) шутит со своего имени Лукас и показывая йоду из звездных войн? Такое интро настраивает на простоту. Действительно сложная тема раскрывается легко и интересно.
Node.js middleware - никогда больше!
#worth_seeing

Вряд ли среди русскоязычных веб-разработчиков есть те, кто не знают Тимура Шемсединова. Он один из топ докладчиков по #nodejs. Не все идеи из его докладов я разделяю, но точно могу рекомендовать их к ознакомлению. Докладов у Тимура много. Конкретно этот знаменателен тем, что в конце идет обсуждение Ильей Климовым.
Prisma Day
#conference

Я люблю Vendor-конференции. На них можно послушать доклады и для новичков, и для тех кто глубоко освоил технологию. Есть возможность познакомиться с командой разработки и задать им вопросы.

Сегодня речь именно о такой конференции: Prisma Day пройдет 29-30 июня. Если вы не знакомы с этой технологией, то на конференции самое время составить свое мнение о ней.
На что влияет environment variable EDITOR?
#cli

Переменная окружения EDITOR определяет, какой текстовый редактор использовать при многострочном пользовательском вводе или редактирование файла. По умолчанию в Unix системах это vim, в Windows – notepad.exe.
Я предпочитаю его переопределять на Visual Code.
export EDITOR='code'
В зависимости от того, какой shell вы используете это строчку необходимо внести в ~/.profile, ~/.bashrc, ~.zshrc, то есть в конфигурационный файл вашего shell.

Примеры, когда будет вызван редактор:
➡️ npm config edit
➡️ git commit
➡️ при клике по строчке ошибки в браузере вашего React приложения.

Есть быть более точным, то многое программное обеспечение использует EDITOR, если не задан SOMETHING_EDITOR. Например, можно использовать REACT_EDITOR и GIT_EDITOR, но не NPM_EDITOR. Читайте документацию или исходный код конкретного ПО.
Как работает ORM?
#architecture #orm

Существует извечный спор ORM или SQL-запросы в коде. Я предпочитаю не спорить, а использовать и то, и другое.

Начнем с определений. ORM (Object-Relational Mapping) – это слой между базой данных и приложением, который занимается созданием, обновлением, чтением и удалением записей в базе данных. ORM упрощает работу с базой данных генерируя запросы из кода. Для этого необходимо описать модели, т.е. структуры таблиц. #nodejs разработчики делают это или через схему, или через TypeScript декораторы. Примеры:

// schema approach
import { Sequelize, DataTypes } from 'sequelize';
class User extends Model {}
User.init({
 username: DataTypes.STRING,
 birthday: DataTypes.DATE
});
// decorator approach
import { Entity, Column } from 'typeorm';
@Entity()
class User {
 @Column() username: string;
 @Column('date') birthday: string;
}

Модели используются для генерации запросов и правильной cериализации/деcериализации данных, т.е. мэпинга записей из БД в JS объекты.

Существует практика использования getter/setter в моделях. Например, на основание birthday можно сделать getter age. Если по этому полю необходимо будет строить запросы, то getter/setter не позволит это делать. В этом случае правильней будет сделать вычисляемое поле на уровне базы данных. В Postgres для этого используется Generated Columns.
Live stream scheduled for
#announcement #voice_chat

Что: Voice Chat об Node.js подходах и комьюнити
С кем: Тимур Шемсединов
Когда: завтра, 10 июня, в 21-00
Где: https://news.1rj.ru/str/node_recipes?voicechat
Frontend Stars Meetup
#announcement

Ребята из AllStars-IT завтра проводят offline meetup.
Не знаю как лучше написать О-Ф-Ф-Л-А-Й-Н! или Offline is the new luxury.

Программа:
➡️ Michael Hladky (Google Developer Expert, Microsoft MVP) с докладом Angular Performance Tuning with Zone-Flags. Доклад уже есть в интернете. Для #nodejs разработчиков будет полезна часть связанная с анализом flame-graph. Доклад будет на английском, а докладчик онлайн.
➡️ Александр Головатый (Senior Full-Stack-разработчик с 15-ти летним опытом) с докладом Chrome Extension With React. Александр делал первый доклад по данной теме еще 3 года назад. Ему действительно есть чем поделиться. Доклад будет на английском, а докладчик оффлайн.
➡️ Q&A и after-party.

Формат: оффлайн и онлайн
Участие: бесплатно
Регистрация: http://bit.ly/FrontendMeetup
Дисклеймер: мероприятие проводиться в рамках HR-брендинга компании AllStars-IT
👍1
Что должен уметь написать 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. Получается отличная синергия. Стиль доклада написание и объяснение псевдокода, а не работа со слайдами. Это определенно уровень.