en
Feedback
Node.js Recipes

Node.js Recipes

Open in Telegram
3 195
Subscribers
No data24 hours
-47 days
-230 days
Posts Archive
DDD, event sourcing and CQRS – theory and practice #worth_seeing Возможно, вы были в этот вторник на митапе, где был доклад Богдана Савшака по DDD. Domain-driven design переводиться как предметно-ориентированное проектирование. Сегодня же я рекомендую вам посмотреть лучший доклад для #nodejs разработчиков по данной теме. Докладчик Golo Roden отлично раскрывает эту тему. В ходе доклада по мимо DDD, он использует концепции CQRS и Event Sourcing. Получается отличная синергия. Стиль доклада написание и объяснение псевдокода, а не работа со слайдами. Это определенно уровень.

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/

Вышла 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 (*typescript-throw.js:20:15) -> *typescript-throw.ts:18:11* at Object.<anonymous> (*typescript-throw.js:26:1) -> *typescript-throw.ts:24:1* at Module._compile (node:internal/modules/cjs/loader:*) Стало Error: an exception at *typescript-throw.ts:18:11* at *typescript-throw.ts:24:1* at Module._compile (node:internal/modules/cjs/loader:*) Нативная альтернатива пакету source-map-support

#announcement Сегодня выступаю с докладом об TDD в #nodejs. Это будет совместный доклад с Львовской компанией Sombra. Доклад
#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 До встречи в эфире!

Что такое 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().

MongoDB.live 2021, July 13–14, 2021 #conference MongoDB самая популярная документная база данных. На подходе 5-ая версия. Узн
MongoDB.live 2021, July 13–14, 2021 #conference MongoDB самая популярная документная база данных. На подходе 5-ая версия. Узнать об новинках в релизе, посмотреть доклада можно будет уже 13-14 июля в ходе конференции MongoDB.live 2021. Как обычно для Vendor конференций участие бесплатно, а доклады будут доступны к просмотру сразу после конференции. Чтобы стимулировать участников смотреть доклады онлайн и ходит по виртуальным стендап организаторы вводят систему очков. В последствие эти очки используются для розыгрыша подарков от партнеров. Напомню, что существует MongoDB University

Demystifying Database Performance Issues with sqlcommenter #worth_seeing Еще одно видео с OpenJS World 2021. Его можно отнести к категории промо докладов. В нем продвигается библиотека sqlcommenter, заточенная под Google Cloud Platform. В видео есть подробная демонстрация создания DB инстанса и запуск #nodejs под GCP. Эта часть будет полезна разработчикам не работавшим с GCP ранее. Идея библиотеки использовать в DB-запросах комментарии, чтобы собирать телеметрию. Данная библиотека реализуется идеи заложенные в OpenTelemetry спецификации. Ссылки: - sqlcommenter - OpenTelemetry

Observing Node.js: Using Metrics to Improve your Application Performance #worth_seeing Видео с OpenJS World 2021. Докладчик Guilherme Hermeto работает в Netflix. Первая часть видео это разбор метрик описывающих #nodejs приложение. Вторая же – демонстрация поведения метрик на графиках в зависимости от кода. Рекомендую не только посмотреть, но и попробовать запустить пример кода. 📕 Slides ⚙️ Code

Что такое 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 приложений.

#voice_chat Гость: Тимур Шемсединов, CTO at Salucyber, главный архитектор технологического стека Metarhia, автор более 200 видео-лекция по веб-разработке. Вопросы: ❓ Что такое Metarhia? Какую проблему он решает? ❓ Какие проблемы у тайпскрипта? Дисклеймер – в комментария говорят, что ничего нового не услышали.

Что должен уметь написать 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 как пошаговый, так и реал-тайм. Пример: Монополия

Frontend Stars Meetup #announcement Ребята из AllStars-IT завтра проводят offline meetup. Не знаю как лучше написать О-Ф-Ф-Л-
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

#announcement #voice_chat Что: Voice Chat об Node.js подходах и комьюнити С кем: Тимур Шемсединов Когда: завтра, 10 июня, в 2
#announcement #voice_chat Что: Voice Chat об Node.js подходах и комьюнити С кем: Тимур Шемсединов Когда: завтра, 10 июня, в 21-00 Где: https://t.me/node_recipes?voicechat

Как работает 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.

На что влияет 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. Читайте документацию или исходный код конкретного ПО.

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

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

Consuming Nodejs Observability Features in Kubernetes Environments #worth_seeing Сегодняшнее видео приятно рекомендовать по многим причинам. Во-первых, сама тема – мониторинг #nodejs метрик да еще в Kubernetes. На многих проектах нет мониторинга. Разработчики не знают как его сделать, а DevOps инженеры не понимают особенностей Node.js. Во-вторых, докладчики из Red Hat, компании которая много делает для open source в общем, и для Node.js в частности. Во-третьих, подача самого доклада. Ребята подкупают своей простотой и открытостью. Вот вы много видели докладов, где докладчик джун (Alex Alykiotis)? А где докладчик (Luke Holmquist) шутит со своего имени Лукас и показывая йоду из звездных войн? Такое интро настраивает на простоту. Действительно сложная тема раскрывается легко и интересно.

Что должен знать 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 🔗Матрица компетентности от Ильи Климова

#voice_chat Гость: Николай Крещенко, Senior Software Engineer в финтех сфере. Сейчас занят в разработке высокконагруженного бекенда необанка в Дубаях. Вопросы ❓ Чем Cloud Native подходы в разработке отличаются от традиционных ❓ из чата по теме Cloud Native Ссылки: 🔗 книга Cloud Native 🔗 Aviatrix Certified Engineer Multi-Cloud Networking & Security Courses 🔗 7 missing factors from 12 factor application PS Изначально формат должен был быть Q&A, но в последний момент я пригласил Николая и изменил фокус на Cloud Native. Прошу прощения у кого были другие ожидания