Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
В комментариях к одному из рецептов меня спросили, что я думаю по поводу практик описанных в 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/
Обзор 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 модулей это синтаксический сахар. А вот для устанавливаемых использование конкретного файла – хорошая практика: typescript компилируется быстрее, уменьшение затраты памяти. По сути это ручной 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. Какие этапы javascript проходит код, прежде чем будет исполнен. Вдумчивый слушатель узнает, почему использование TypeScript улучшает производительность JS приложение.

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

Ссылки:
🔗 Слайды
🔗 Расшифровка доклада в виде статьи на хабр
🔗 ДевШахта