Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Audio
#voice_chat

Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".

Вопросы:
В чем особенность IT-обучения?
Кто такие свитчеры? Как менять основной язык?
Как составлять план обучения?

Книга, о которую рекомендует Сергей это "Цель. Процесс непрерывного совершенствования" Элияху Голдратт

Chrome Extension для удобного контроля скорости видео.
Какие вопросы необходимо решить при внедрение WebSockets?
#architecture

Вот список вопросов, которые я задаю при внедрение WS на проекте.
Какую бизнес задачу решают real-time updates от сервера? Определяет нужны WS, SSE или GraphQL Subscriptions.
Какие клиенты будут использоваться: браузер, мобильные и т.д? Определяет нужен ли fallback, если WS не доступен. Ключевой аргумент в извечном споре socket.io VS ws
Может ли клиент подписываться на конкретный поток сообщений? Определяет механизм создания подписок и поведения в момент пере-подключения.
Какие ACL нужны? Определяет поведения системы в момент подключения, отправки/принятие сообщений и создание подписок.
Где мы разворачиваем? Определяет перечень технологий, которые мы сможем использовать. Например, в AWS есть WS на serverless.
Microservices in the Cloud with Kubernetes and Istio
#worth_seeing

Сегодня в рекомендациях видео трехлетней давности с Google I/O' 18. Докладчик Sandeep Dinesh показывает как в микросервисной архитектуре переложить вопросы маршрутизации, оркестрирования, canary-releases и т.д с уровня кода на уровень инфраструктуры.
WebTransport
#worth_seeing

Два месяца назад я рекомендовал посмотреть интро видео об HTTP/3. Этот протокол открывает возможность для использования WebTransport. Сегодняшнее видео как раз объясняет, что это и какие проблемы решает.

Данная технология не готова к использованию для широкого круга проектов. Рецепт сделан подсветить направление в котором двигается веб-разработка.

Ссылки по теме:
- WebTransport Explainer
- Experimenting with WebTransport
Kafka Summit
#conference

На следущей неделе, 27-28 июля, пройдет бесплатная онлайн конференция Kafka Summit. Целевая аудитория конференции это разработчики использующие Kafka в продакшене. Лишь небольшая часть #nodejs проектов используют данную технологию. Большинство используют Rabbit или очереди от cloud-провайдеров. Тем не менее о данной технологии стоит иметь представление. В этом может помочь не конференция, а bootcamp который обновили в предверии конференции. Подробней по ссылкам:
- https://www.confluent.io/training/learn-confluent/
- https://www.confluent.io/certification/
Как документировать асинхронное API?
#architecture #service

TL;DR Используйте AsynAPI

Упрощенно говоря существует только два способа взаимодействия: Req/Res и Pub/Sub. Еще эти способы называют синхронный и асинхронный.

При Request/Response клиент отправляет запрос на сервер, сервер начинает работу и отправляет ответ клиенту, как только работа будет выполнена. При Publish/Subscribe вместе запроса публикуется событие и ответ не требуется. Некоторые buzzword используемые при PubSub: WebHooks, Event-driven architectures, CQRS.

REST является классическим способом создания Web API и реализует Req/Res взаимодействие. Для его описания традиционно используют OpenApi, старое название Swagger.

Через WebSockets является дву-направленным протоколом, что позволяет создавать на его основе как Req/Res, так и Pub/Sub взаимодействие. Чаще всего WS используют именно для оповещений со стороны сервера, т.е для Pub/Sub. Естественно его следует описывать, использовать Documentation First подход. Для этого и был создан AsynAPI. Он позволяет описывать асинхронное взаимодействия не только по WS, но и по другим протоколам. Рекомендую к использованию.
Как следить за устареванием кода?
#nodejs_api #typescript

В разработке существует жизненный цикл. Вы можете увидеть его этапы в #nodejs документации в виде stability index. Часть методов помечена как Legacy, т.е. их не стоит использовать как прямо, так и через библиотеки. Аналогичный подход можно использовать в своей кодовой базе. Для этого следует использовать JSdoc @deprecated. Пример:
/** @deprecated use newFunction instead **/
function oldFunction() {...}

Проверку использования устаревшего кода можно переложить на eslint. Для javascript проектов для этого используется правило import/no-deprecated.

В typescript есть перегрузка функций и устареть может только часть сигнатур. Пример:
function example(userOrId: User): void
/** @deprecated use with User instead of user_id **/
function example(userOrId: number): void
Поэтому для typescript проектов следует использовать eslint-plugin-deprecation.
В комментариях к одному из рецептов меня спросили, что я думаю по поводу практик описанных в nodebestpractices. Я думаю, что знать об этом отличном репозитории нужно каждому #nodejs разработчику. Собственно эта заметка призывает вас прочитать его содержимое.
👍1
Подборка книг для прокачки, когда ты уже Senior
#list

Начну с хорошей цитаты:
A good book gets better at the second reading. A great book at the third. Any book not worth rereading isn’t worth reading. – Nassim Taleb

Читать и перечитывать книги я предпочитаю на O'Reilly. Рецепт о том как это делать тут.

Собственно вот список книг, которые я рекомендую:
📕Cloud Native ставит парадигму Cloud Native мышления и дает конкретные рецепты реализации.
📕Refactoring: Improving the Design of Existing Code класика от Мартина Фаулера переписанная с JavaScript примерами
📕Web Scalability for Startup Engineers настольная книга, как проектировать и создавать масштабируемые веб-проекты
📕Programming TypeScript на текущий момент лучшая из книг по TypeScript

Как вы видите в списке отсутствуют книги по #nodejs. Дело в том, что пока я не прочитал ни одной книги, сфокусированной именно на Node.js, которую мне хотелось бы перечитать.
Подборка задач для прокачки, когда ты уже Middle
#list

Сегодня в обзоре список типичных задач #nodejs разработчика не связанных с написанием кода. Все задачи носят практический характер, поэтому я формулирую их в виде ACTION с помощью TOOL. Инструмент можно менять в зависимости от проекта и его тех.стека. Кстати о проекте, я предполагаю что у вас есть проект под эти задачи. Это может быть или основной, или ваш pet проект.

Спроектировать REST API с помощью OpenAPI
Настроить CI/CD с помощью GitHub Actions
Описать архитектуру в draw.io
Описать фичу с помощью plantuml
Добавить систему оповещений с помощью бота (telegram, slack, discord)
Добавить внешнюю систему мониторинга uptime с помощью freshping.io (это бесплатный аналог pingdom). Если работает с GCP, то используйте alerts
Добавить продуктовую аналитику с помощью mixpanel
Сделайте отчет с помощью datastudio или любого другого business intelligence tool
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 разработчиков существует отличный репозитарий javascript-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/