Node.js Recipes – Telegram
Node.js Recipes
3.22K subscribers
168 photos
7 videos
1 file
615 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Cloud Native Landscape for Node.js Developers
#worth_seeing #cloud

При просмотре описания докладов на OpenJS World 2021 я подумал, что речь будет идти об Cloud Native Landscape. Это страница где собраны проекты участвующие в Cloud Native Foundation. Я ошибся. Докладчик делает обзор самого подхода, а не инструментов.

Slides
Какие подписки читать Node.js разработчику?
#list

Поделюсь списком моих email подписок:
JavaScript Weekly
Node Weekly
TypeScript Weekly
Web Tools Weekly
GraphQL Weekly
StackShare Weekly Digest

В подписках релизы инструментов, подборки статей и новости. У каждой есть архив, где можно понять качество контента.

Отдельно выделю Adventures in Nodeland by Matteo Collina как авторскую рассылку.
👍1
Как работает query в REST?
#architecture #nestjs

Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:?id=1&id=2"

Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]

В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.

Для передачи массива параметров в query есть такие варианты:
1️⃣?foo=bar&foo=qux
2️⃣?foo[]=bar&foo[]=qux
3️⃣?foo%5B%5D=bar&foo%5B%5D=qux
4️⃣?foo=bar,qux

Какой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает [] при парсинге.
Помогите лучше понимать аудиторию канала.

Junior Software Engineer - 97
👍👍👍👍 20%
Software Engineer - 215
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
Подборка node.recipes за июнь 2021
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Какие директивы есть в TypeScript и зачем их использовать?
➡️ Где брать сниппеты кода?
➡️ Обзор Node.js v16: Timers Promises API
➡️ Что должен знать Junior Node.js Developer?
➡️ На что влияет environment variable EDITOR?
➡️ Как работает ORM?
➡️ Что должен уметь написать Senior Node.js разработчик?
➡️ Что такое Custom URL Protocol Scheme?
➡️ Что такое Graceful Shutdown и как его реализовать?
➡️ Как тестировать Dockerfile?
➡️ Что такое timing attack (атака по времени)?
➡️ Что такое JSON Patch?
➡️ Какие подписки читать Node.js разработчику?
➡️ Как работает query в REST?

Обзор релизов:
🚀 Node.js 14.17.1

Freebies:
🤑 O'Reilly books
🤑 Redis University

Доклады, которые стоит посмотреть:
👀 Consuming Nodejs Observability Features in Kubernetes Environments
👀 Node.js middleware - никогда больше
👀 Observing Node.js: Using Metrics to Improve your Application Performance
👀 Demystifying Database Performance Issues with sqlcommenter
👀 Migration to Google Cloud or How to Train your Pet
👀 DDD, event sourcing and CQRS – theory and practice
👀 NestJS. When patterns matters
👀 Cloud Native Landscape for Node.js Developers

Voice Chats:
🎤 About Cloud Native, в гостях Николай Крещенко
🎤 About Metarhia and Node.js, в гостях Тимур Шемсединов
🎤 About Security, в гостях Анастасия Войтова
Закончил доклад в рамках @mathrandomcommunity:
Deep Dive Into NestJS

Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
👍1
Play it Right with CodeceptJS
#worth_seeing

Сегодня в рекомендациях видео по CodeceptJS. Это BDD фреймворк для создания end-to-end тестов на JavaScript. Докладчик автор фреймворка – Michael Bodnarchuk. Мне кажется недооцененной возможность писать тесты в BDD стиле, т.е. понятном для бизнеса языке. Надеюсь это видео поможет вам задуматься над вашими тестами.
Stream-oriented Architecture with Nest
#worth_seeing #nestjs

Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.

В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.

Слайды
TDD Conference
#conference

На следующих выходных будет бесплатная online конференция с амбициозным названием First International Test Driven Development (TDD) Conference. Организатором является Alex Bunardzic.

Полчаса назад я ничего не знал ни об этом человеке, ни об конференции. Сейчас я улучшаю тесты на основном проекте. Изучение материалов по TDD Manifesto привели меня на сайт конференции. Именно из-за одноименного доклада я на ней зарегистрировался, что предлагаю сделать и вам.

Видео: https://www.youtube.com/watch?v=-_noEVCR__I
Как использовать ARG и ENV внутри Dockerfile?
#docker

Сегодня обсудим две инструкции внутри Dockerfile: ARG и ENV.

TL;DR Используйте ARG для определения build-time переменных, а ENV – run-time. Используйте ENV=arg_var_name, чтобы создать образ с переменной определяемой в ходе сборки.

Инструкция ARG определяет build-time variables. Они доступны только во время сборки docker image во всех инструкциях включая FROM. Запущенный контейнер не могут получить к доступ к этим переменным. Это также относится к инструкциям CMD и ENTRYPOINT, которые определяют, что контейнер должен запускать по умолчанию. Если вы не указываете значение по умолчанию для ARG, то при сборке передача аргументов обязательна. Для этого используется --build-arg. Пример:
ARG some_variable_name
# or with a hard-coded default:
#ARG some_variable_name=world
RUN echo "Hello $some_variable_name"

$ docker build --build-arg some_variable_name=a_value

Переменные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.

ENV и ARG можно комбинировать вместе.

Пример из реального проекта:

FROM node:14.17.1-alpine

ARG VERSION=latest
ENV VERSION=$VERSION
ENV PORT=8000
WORKDIR /opt/app/

COPY package.json package-lock.json /opt/app/
RUN npm install --production
COPY src /opt/app/

EXPOSE $PORT
ENTRYPOINT ["node", "/opt/app/index.js"]

Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
boardgame.io движок для пошаговых игр
#tech_stack

Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.

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

Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
Что такое JSONPath?
#package #graphql

Работать с JSON в JavaScript крайне просто. Это подталкивает #nodejs разработчиков отдавать раздутые объекты из API. Упростить работу с такими объектами позволяет JSONPath. У него есть предшественик – Xpath, аналог для XML.

В синтаксисе всего десяток операторов. Чтобы их лучше понять, рекомендую перейти на JSONPath Online Evaluator и протестить разные выражения. Собственно вот синтаксис:
Базовые операторы – интуитивно понятны
$ – корневой элемент
@ – текущий элемент
. или [] – дочерний элемент
* – все элементы
Продвинутые операторы
.. – так называемый рекурсивный спуск. Выбирает дочерние элементы на всех уровнях.
[,] – union оператор
[start:end:step] – slice оператор
Скриптовые операторы?() и () зависят от конкретного языка и библиотеки для работы с JSONPath.

На уровне кода JSONPath полезен во время мутаций сложных JSON структур. Для этого используется одноименный пакет jsonpath. JSONPath встроен в Insomnia, API клиент для работы с GraphQL и REST. Поэтому многие QA выбирают его вместо Postman.
Refactoring: Second Edition
#worth_seeing

С кем из ныне живущих людей вы хотели бы провести час за беседой?

Мой ответ на этот вопрос – Мартин Фаулер. Он автор книги "Рефакторинг". В 2018 году он написал второе издание. В первом издание примеры кода были на Java, а во втором – на JavaScript.

Почему так вышло и как применять идеи из этой #must_read книги в сегодняшнем видео.
Hello Quantum Developers World - Yet Another Frontier for JavaScript
#worth_seeing

Сегодня интро видео в квантовые вычисления. Для нас это новый инструмент. Он не востребован – на рынке нет подходящих типовых бизнес задач.

Почему стоит узнать об q-вычислениях:
- они уже доступны в облаках
- моделируют вероятностные события
- лучший кандидат на следующего техно-хайп, как это было с serverless и blockchain

Ссылка от докладчика: bit.ly/qcon-qjs
Any problem must be solved at the right level
#principles

В роли консультанта моя работа это задавать правильные вопросы. Самый информативный: "Почему данный функционал реализован на этом уровне?". Поделюсь субъективным разделением уровней.

1️⃣ Уровень бизнес-кода. Реализуется сервисами, моделями, репозиториями, миграциями, шаблонами и т.п. Создает всю бизнес логику, в том числе ее представление на уровне данных. Не может быть перенесен между проектам. Имеет особую коммерческую ценность и защищается NDA.
2️⃣ Уровень кода-приложения. Реализуется контролерами, валидаторами, роутерами, обработчиками ошибок, логгерами и т.д. По сути это код использующий методы фреймворка для вызова бизнес-логики.
3️⃣ Уровень кода-фреймворка. Реализуется набором библиотек и паттернов, с помощью которых команда создает проект. При правильной реализация, этот код может быть переиспользован между проектами. При идеальной реализации: это open-source, качественная тех. документация, 100% покрытие тестами. Именно здесь чаще всего происходит техническая инфляция.
4️⃣ Уровень сервисов и инфраструктуры. Реализуется сторонними API, очередями, базами данных, лоад балансерами, автоскейлерами и т.д. Команда разработки отвечает за выбор и конфигурация, но не за реализацию. Чем больше технических и бизнес задач решено на данном уровне, тем лучше для бизнеса.
5️⃣ Уровень команд и процессов. Реализуется договоренностями между людьми. Отражается прямым образом в архитектуре. Тут важны здравый смысл, дисциплина и умение понять других.

Чем эта философия может быть полезна для #nodejs разработчика? Чтобы определить свое профессиональное развитие! Понимайте где вы хотите находиться. Например, Тимур Шемсединов не любит заниматься прикладным программирование (1️⃣+2️⃣), ему интересно системное программирование(3️⃣+4️⃣)
Как и зачем обновить aws-sdk с v2 на v3?
#package #aws

Два месяца назад я рассказывал как Как уменьшить потребление памяти во время TypeScript компиляции? Там я привел в качестве примера изменения импортов из aws-sdk. Этот пакет является второй версией AWS JS SDK. Я упустил выход третей версии в декабре прошлого года. Третья версия состоит из scoped packages с префиксом @aws-sdk, например @aws-sdk/client-s3.
Вторая версия по-прежнему поддерживается, но переходить на третью уже пора. Вот причины:
➡️ модульная архитектура, т.е. один пакет для работы с одним сервисом. Можно не следить за правильностью import-ов как в примере.
➡️ TypeScript-first поддержка
➡️ короче Stack Trace для ошибок
➡️ оплата технической инфляции раньше ее превращения в тех.долг

Перед обновлением можно рекомендую глянуть workshop v2->v3 для самостоятельного прохождения от AWS.
Что такое AssemblyScript?
#typenoscript

Универсальный способ оптимизации производительности для JavaScript разработчика это перенос вычислений в WebAssembly. Упрощенно говоря это значит написать требуемый код на C++ или его аналогах.

AssemblyScript решает проблему "мне нужен WASM, но нет ресурсов чтобы изучить новый язык". По сути AssemblyScript это тот же TypeScript с WASM типами и уже настроенным компилятором. Это решение хорошо тем, что подойдет и для Node.js, и для браузера.

Для большинства проектов это решение будет over-engineering, но там где есть CPU intensive задачи я рекомендую это решение.
Какие вещи должны быть в техническом стэке для поддержки проекта?
#tech_stack #list

На этапе day 2 происходит поддержка проекта. Вот список из пяти инструментов, которые помогут в этом.

➡️ Система менеджмента инцидентов и оповещения о них. Пример: PagerDuty.
➡️ Система мониторинга. Пример: DataDog
➡️ Система сборки логов. Пример: ELK
➡️ Система сборки ошибок. Пример: Sentry
➡️ Мониторинг производительности – Application Performance Monitoring. Пример: Elastic APM
Live stream scheduled for
Audio
#voice_chat

Гость: Андрей Кучеренко, Chief Software Engineer I в EPAM Systems. Работает в EPAM последние десять лет. Ведет JS комьюнити @mathrandomcommunity

Вопросы
Этапы развития разработчика, система тайтлов и что идет после Senior?
Как выбирать тех.стэк для проекта?
Как качать навык систем дизайна?

Ссылки:
- https://www.npmjs.com/package/jscpd
- https://github.com/kucherenko/awesome-project-questions
- https://www.startupemulator.com/
- https://www.educative.io/courses/grokking-the-system-design-interview
- https://www.facebook.com/InternationalSoftwareArchitectClub