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

Для постоянных читателей рубрики не будет новостью, что AWS предлагает serverless websockets. Я делился соответствующим видео с OpenJS World 2020.

Сегодня у нас более подробное видео от Ryan Lewis. Доклад сделан в рамках youtube-канала, а не конференции. Формат – live coding . В нем докладчик не только рассказывает что, но и показывает как. В рамках конференций это самый сложный формат. В записи его делать проще, что однако не умоляет ценность рекомендуемого видео.

Расскажу о докладчике. Райан делает материалы по AWS, serverless и JavaScript. Для начинающего #nodejs разработчика будет полезна его бесплатная книга "The Cloud Developer Workbook", где собранны 100 базовых упражнений для изучения AWS.
Подборка node.recipes за июль 2021
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Top mistakes that Node.js developers make
➡️ Как использовать ARG и ENV внутри Dockerfile?
➡️ boardgame.io движок для пошаговых игр
➡️ Что такое JSONPath?
➡️ Any problem must be solved at the right level
➡️ Как и зачем обновить aws-sdk с v2 на v3?
➡️ Что такое AssemblyScript?
➡️ Какие вещи должны быть в техническом стэке для поддержки проекта?
➡️ Как я провожу собеседования?
➡️ Почему вам нужны знания Promise-ов в async/await коде?
➡️ Как писать меньше TypeScript интерфейсов?
➡️ Какие вопросы необходимо решить при внедрение WebSockets?
➡️ Как документировать асинхронное API?
➡️ Как следить за устареванием кода?
➡️ Стоит знать Node Best Practice
➡️ Подборка книг для прокачки, когда ты уже Senior
➡️ Подборка задач для прокачки, когда ты уже Middle

Доклады, которые стоит посмотреть:
👀 Play it Right with CodeceptJS
👀 Stream-oriented Architecture with Nest
👀 Refactoring: Second Edition
👀 Hello Quantum Developers World - Yet Another Frontier for JavaScript
👀 No Way, JOSE
👀 Microservices in the Cloud with Kubernetes and Istio
👀 WebTransport

Voice Chats:
🎤 About Career Development, в гостях Андрей Кучеренко
🎤 About Education, в гостях Сергей Немчинский
Real-time communication with WebRTC: Google I/O 2013
#worth_seeing

Сегодня в рекомендациях видео об технологии WebRTC. Технология уже давно обкатана, но вопрос как бы вы создавали аналог google meet ставит в тупик большинство #nodejs разработчиков.
Для получения практических навыков по теме предлагаю пройти Real time communication with WebRTC
Что такое Breaking Change в Web API?
#architecture

Обратная совместимость (backward compatibility) одно из ключевых требований при выборе инструментов, библиотек, API и т.д. Нарушение обратной совместимости называет Breaking Change.

Примеры Breaking Change:
Переименование полей. Добавьте новое, но оставьте старое.
Изменение типа поля.
Изменение http-кода ответа, например с 400 на 404. В REST приложениях клиент должен строит логику на основание этих кодов.
Изменение значений по умолчанию. Например, раньше API отдавало все записи, а теперь только первые 50 элементов.

Команда разработки может игнорировать обратную совместимость, только если проект состоит из API и Single Page Application, которые доставляются одновременно. Если среди клиентов есть мобильное, десктоп приложение, то функциональность будет сломана пока пользователь не обновить приложение.

Хорошими практиками является версионирование API и пометка как deprecated для полей и endpoints. Если клиент использует версию старше, чем предоставляет сервер, то он может уведомить пользователя об необходимости обновления ПО.
Почем нынче Node.js разработчики?

➡️ Зарплати українських розробників — літо 2021 Традиционная аналитика от Dou. #nodejs в явном виде нет. Строиться на основание текущих зарплат.
Candidates' Salary Analytics Аналитика от рекрутинг агенства Виктории Придатко. Строиться на основание пожеланий кандидатов. Node.js Senior 5.5к.
🔥 10k новый потолок, где Max Ischenko делиться о трех наймах через Джини за июль 2021 с зарплатой в 10к. Один из наймов это Node.js разработчик. Есть к чему стремиться.
Обзор Node.js v16: Префикс для Core modules
#nodejs_api

Как известно #nodejs имеет встроенные модули (в английском Core или Builtin). Они имеют приоритет перед модулями из node_modules. В 16 версии для них добавили префикс node: Пример, const http = require('node:http')
Для обратной совместимости, можно использовать и без префикса.

Отличное изменение! Оно позволит в коде явно разделять встроенные и обычные модули. Сейчас для этого я использую eslint правило import/order. С его помощью идет валидация порядка импортов. У нас это встроенные, установленные, из других файлов проекта с пустой строкой между блоками. Для правила есть автофикс.

В документации пока мало мест, где используется новый require стиль. Поэтому можно поучаствовать в ее улучшение и стать контрибутором в Node.js
Что такое Code With Me от JetBrains?

В этом году в список причин, почему я предпочитаю WebStorm, а не VisualCode для написания #nodejs кода добавилась возможность парного программирования через Code With Me. Если вы его еще не попробовали, рекомендую это сделать.

Update: В комментариях рекомендуют посмотреть Live Sharing для VisualCode
JavaScript Algorithms and Data Structures
#code_pattern

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

Для JavaScript разработчиков существует отличный репозитарий javanoscript-algorithms. В нем разобраны классические алгоритмы и структуры данных. Есть разделение по уровню Beginner/Advanced и переводы, в том числе на русский и украинский языки. Рекомендую к изучению!
Yoni Goldberg on Integration Tests with JavaScript
#worth_seeing

Последние полтора года у нас не много конференций. Сами знаете почему. Поэтому я не нашел свежего видео, в котором Yoni Goldberg рассказывает об подходах в тестирование. Зато есть отличный подкаст от NearForm – OpenHive.js. Один из его выпусков я и предлагаю вам послушать.

Постоянный читатели уже знакомы с Yoni Goldberg. Он автор nodebestpractices. А еще у него есть nodejs-integration-tests-best-practices. Собственно этот вопрос он и обсуждает в подкасте.
Обзор сервиса RunKit
#service

Вчера @node_recipes исполнилось 4 месяца. Телеграм-канал это отличный способ ведение мини-блога. Только делиться кодом в канале это боль. Вставлять код картинкой означает, что люди не смогут его скопировать. А формат рецептов – это короткие заметки читаемые находу, которые тут же можно применять. Вставлять код текстом, даже с таким форматом неудобно.

Для сайта лучшим вариантом является RunKit, который позволяет встраивать запускаемые сниппеты кода. Пример можно увидеть в документации lodash.
Вообще основная задача сервиса помогать майнтейнерам npm-пакетов. Пользователи могут без установки попробовать функционал прямо в браузере. Составить воспроизводимый баг репорт. Для этого используется npm.runkit.com. А еще с его помощью можно делать enpoint-ы (бесплатные лямды с маленьким лимитом).

В сервисе есть notebook, упрощенная версия Jupyter notebook. К сожалению, их нельзя запускать без авторизации. В качестве примера, я сделал функцию с AbortController. Получилось не на много удобней GitHub Gist. Так что я еще в поисках как же удобно делиться кодом в канале.
Forwarded from GDG Cloud Kyiv (Nikita)
#freebies

CKA/CKAD/CKS 50% OFF with FREE participation at the KubeCon + CloudNativeCon North America 2021 (October 11-15)!
To redeem your complimentary All Access virtual pass, use the code KCNA21TR100. The offer is only available until September 27, 11:59 PM PDT at https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/register/
Обзор Node.js v16: Новые JavaScript конструкции
#nodejs_api

Начну с цитаты: V8 - это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C++.

Этот движок выполняет JavaScript код внутри Chrome и #nodejs. Обновление V8 это breaking change. Произойдет это в октябре во время обновления мажорной LTS версии Node.js с 14-ой на 16-ую. V8 обновиться с 8-й на 9-ю версию. А это означает, что у нас должны появятся такие фичи:

➡️ String.prototype.replaceAll, которые заменяет все вхождения в отличие от обычного replace. Подробней: tc39
➡️ Object.hasOwn alias для Object.prototype.hasOwnProperty. Подробней: tc39, v8
➡️ Error causes, добавляет в конструктор Error дополнительный параметр со свойством cause куда передается ошибка причина. Это позволяет создавать цепочки ошибок. Пример:
const parentError = new Error('parent');
const error = new Error('parent', { cause: parentError });
console.log(error.cause === parentError);
Подробней: tc39, v8
➡️ ArrayLike.at упростят доступ к элементам в конце, так как принимают отрицательные значения. Подробней: tc39, v8
➡️ Class static initialization blocks. 🔗tc39 🔗v8
➡️ Private brand checks a.k.a. #foo in obj. Подробней: tc39, v8
Где изучать Kubernetes
#freebies #list

Kubernetes уже стал стандартом де-факто в разворачивание проектов. Его необходимо знать не только DevOps инженерам, но и разработчикам. Материалов по его изучению много. Вот моя личная подборка:
➡️ Официальная документация kubernetes. Для сдачи CKAD необходимо знать ее структуру и уметь быстро находить нужное. В работе вы тоже будет регулярно ей пользоваться. Знайте на какой версии k8s вы работаете и смотреть изменения.
➡️ Документация от вендора где развернут ваш k8s. Основное знание это вендор специфик annotation, которые расширяют функционал.
➡️ container.training сайт с материалами воркшопов по Docker и kubernetes. Есть видео и Self-paced tutorials.
➡️ kube.academy от VMWare. Есть курсы разного уровня.
Обзор Node.js v16: Упрощение доступа к util.types
#nodejs_api

Встроенный модуль util дает возможность проверять типы. Я чаще всего использую такие проверки из util.types:
➡️ isDate
➡️ isMap
➡️ isSet
➡️ isNativeError
➡️ isPromise

До 16-й версии обращение к данным методом было только через require('util').types. В 16-й появляется альтернатива require('util/types'). Для встроенных #nodejs модулей это синтаксический сахар. А вот для устанавливаемых использование конкретного файла – хорошая практика: typenoscript компилируется быстрее, уменьшение затраты памяти. По сути это ручной tree-shaking, т.е. удаление не используемого кода.
This media is not supported in your browser
VIEW IN TELEGRAM
🪄Магия на github! Просто нажмите "." находясь в любом репозитории на github!

🔗 https://twitter.com/github/status/1425505817827151872

#github #shortcut #news
Как и зачем использовать AsyncLocalStorage?
#nodejs_api

С 16.4 версии Node.js AsyncLocalStorage перестал быть экспериментальным, а значит его можно смело использовать в продакшене. Данный класс позволяет сохранять контекст между шагами асинхронного флоу. Он работает и с callback, и с promise chain.

Для получения текущего значения используется asyncLocalStorage.getStore()

Для установки значения есть два способа:
asyncLocalStorage.run(store, callback[, ...args]) – устанавливает значение внутри callback. Для использования скорее всего потребуется внести изменения на верхнем уровне кода.
asyncLocalStorage.enterWith(store) – устанавливает значение до окончания текущего синхронного контекста и всех порождающих асинхронных операций. Проще в использование, но возможность его вызвать несколько раз создает сложности в поддержки. Мутировать стейт это плохо. Поэтому документация рекомендует использовать run.

Возможное использование данного апи – улучшение логгирования. В стейте храниться traceId, который пишется в лог. Так вы легко можете различить логи от нескольких запросов, которые параллельно обрабатываются #nodejs.

Статья с примерами использования из комментариев.
Пример для Nest.js.
👍1
Знай свой JIT: ближе к машине
#worth_seeing

Сегодня видео с FrontendConf'18. В докладе идет очень подробный разбор как работает V8. Какие этапы javanoscript проходит код, прежде чем будет исполнен. Вдумчивый слушатель узнает, почему использование TypeScript улучшает производительность JS приложение.

Докладчик Андрей Мелихов известен благодаря своему подкасту девШахта. За последний год подкаст превратился в ютубканал.

Ссылки:
🔗 Слайды
🔗 Расшифровка доклада в виде статьи на хабр
🔗 ДевШахта
Build Better Workloads with the AWS Well-Architected Framework and Tool
#worth_seeing #aws #cloud_native

Сегодня в рекомендациях видео об AWS Well-Architected Framework. Данный фреймворк помогает разворачивать приложения в AWS правильно. Вот ссылки, которые помогут лучше разобраться:
- общая инфо
- white paper, по своей сути является манифестом. Стоит знать, даже если вы не работает с AWS.
- labs, лабораторные для применения идей на практике.
- Well-Architected Tool, инструмент для проверки.

Данное рецепт являет логическим продолжением для тех, кто уже выполнил 100 базовых упражнений для изучения AWS.
Как автоматизировать 2FA?
#package #security

Данный рецепт не о том, как реализовать в своем приложение 2FA (Two-factor authentication). Для этого существуют готовые сервисы, о которых я рассказывал на React fwdays’21. Сегодня кейс из сотрудничества с QA автоматизаторами.

Для проверки приложения необходимо произвести логин пользователя. Это происходит через gmail. Переодически gmail говорит необходима дополнительная проверка – неизвестное устройство. Варианты решения отправка смс или отправка емейл не подходят, так как требуют дождаться этих смс/емейлов, способа их получения, парсинга и т.п.

В данном кейсе правильно использовать google authenticator. Данный 2FA способ виден, только если вы добавили номер телефона. В момент настройке будет показан QR code, который содержит текст вида:
otpauth://totp/Google:<EMAIL>?secret=<SECRET>&issuer=Google
Для того, чтобы генерировать token валидные 30 секунд вам достаточно знания secret. В этом поможет пакет otplib. Пакет позволяет генерировать и проверять не только для authenticator, но One Time Passwords, но как я уже говорил, для этого лучше использовать готовые решения.
Как подтянуть TypeScript?
#typenoscript #code_pattern

Лучший способ тренировки паттернов кодирование это решений задач. Для этого отлично подойдет проект type-challenges. Каждая из задач предлагает написать свой тип. Есть встроенная проверка. Как это работает можно глянуть на Hello World примере.

В Readme проекта задачи отсортированы по темам и уровням сложности. Некоторые задачи начального уровня предлагают реализовать built-in тип, т.е. который уже есть в TypeScript.
Зачем нужен Symbol в JavaScript?
#code_pattern

В ECMAScript2015 (ES6) появился примитивный тип Symbol. Он используется, чтобы создавать уникальные идентификаторы. Пример:
const first = Symbol('example')
const second = Symbol('example')
first === first // true
first === second // false
Т.е. создать второй раз тот же самый идентификатор нельзя. Их используют для определения свойств объектов, т.е. обращения к его ключам.

Основное назначение Symbol это работа со встроенными фичами языка. Для этого существуют Well-known Symbols, такие как:
- Symbol.iterator
- Symbol.hasInstance
- Symbol.toStringTag
- и т.д., подробней об встроенных символах смотри typenoscript doc или на habr.

Well-known Symbols, используются на системном уровне программирования, т.е. на уровне библиотек и фреймворков. На прикладном уровне, т.е. на уровне написания кода приложения, а не библиотек, устоявшейся практикой является использование Symbol в декораторах на TypeScript. Пример:
import { SetMetadata } from '@nestjs/common';
export const isPublic = Symbol('isPublic');
export function Public() {
return SetMetadata(isPublic, true);
}
Таким образом можно вы можете гарантировать, что не произойдет коллизии в чтение/записи метаданных из ваших объектов.

Стоит еще знать об Symbol.for и Symbol.keyFor, которые позволяют работать с shared Symbol. По своей сути это глобальные переменные в shared Symbol scope, поэтому опытные программисты стараются их избегать.
👍2