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

Универсальный способ оптимизации производительности для 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
Live stream started
Live stream finished (1 hour)
Как я провожу собеседования?
#principles

Мое обычное собеседование длиться 1 час. В текущих условиях рынка у бизнеса нет возможности просить у кандидата больше времени. За этот час я проверяю, что кандидат умеет писать код и у него есть понимание тех.стэка.

Написание кода !== составление алгоритма
Написание кода это технический навык, который не должен требовать когнитивных усилий. Для его проверки я использую live-coding c однострочными задачками. Если кандидат гуглит как вернуть Promise из функции, то он скорее всего не писал на современном JS.
Составление алгоритма это сознательная работа, требующая когнитивных усилий. Способность составлять алгоритмы проверяют задачками с Leetcode. В ходе интервью и в повседневной жизни люди по-разному выполняют алгоритмизацию, поэтому я не даю задач на алгоритмы.

Понимание !== знание
В ходе интервью задача проверить, что кандидат способен выполнять задачи на проекте. Для этого ему необходимо не знание документации, а понимание и опыт работы с тех.стэка проекта. В этом помогают вопросы "В чем различие ...?", "Зачем/Почему...?", а не "Что такое ...?" или "Дайте определение ...". Обычно, глубина понимания прямо коррелирует с систем дизайном и алгоритмизацией.

Soft-skills работают всегда
За час кандидат показывает не только свои технические навыки, но и то как он общается. Сосредоточившись на тех. составляющий собеседования кандидат показывает свои повседневные навыки активного слушания, ведения тех. дискуссии, умение признать свою ошибку или незнание.

Матрица скилов
По итогам любой работы должен оставаться артефакт. Артефактом собеседования является матрица скилов кандидата. На ее основание бизнес принимает решение о дальнейшем сотрудничестве с кандидатом. У меня это это 4-7 пунктов с пятибальной шкалой и комментариями.
Помогите лучше понимать аудиторию канала.
Через какую юрисдикцию вы получаете оплату?

PS Прошлый опрос по Seniority уровню.

Ukraine - 309
👍👍👍👍👍👍👍👍 65%
Belarus - 25
👍👍 5%
Russia - 91
👍👍👍 19%
Other - 48
👍👍 10%
👥 473 человека уже проголосовало.
#announcement #voice_chat

22 июля в 21:00 поговорим об обучение.

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

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

Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Live stream scheduled for
Почему вам нужны знания Promise-ов в async/await коде?
#code_pattern

Async/await является основным стилем для написания асинхронного кода в современной #nodejs. Стоит помнить, что это синтаксический сахар поверх Promise chain. Поэтому для любого уровня разработчика важно понимать когда и для чего использовать такие конструкции:

➡️ Promise.all – необходимо использовать для получения значений, которые независимы. Будет прерван при первой ошибке.
➡️ Promise.race – необходимо использовать для получения первого значения или ошибки. Классический пример, это выброс ошибки по таймауту.
➡️ Promise.allSettled – необходимо использовать для получения всех значений. Ошибки не вызовут остановку, а будут частью результата.

Что дает использование этих конструкций? Вы можете запускать промисы не последовательно, а параллельно. В результате время ответа становиться быстрее.
Как писать меньше TypeScript интерфейсов?
#typescript

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

TypeScript позволяет писать вложенные интерфейсы. Например:

interface User {
id: number;
name: string;
contacts: {
phone: string;
email: string;
address: {
country: string;
city: string;
street: string;
}
}
}

Необходимо создать функцию updateUserContact. Распространённое решение вынести UserСontact как отдельный интерфейс, или еще хуже продублировать его. Новый интерфейс использовать как тип в функции.
Вместо этого следует использовать  Lookup Types. Это выглядит так:
type UserСontacts = User['contacts']
type UserAddress = User['contacts']['address']

Обратите внимание, что всегда используются квадратные скобки и кавычки, а не точка. Такая нотация позволяет делать union внутри квадратных скобок или использовать keyof. В завершение пример близкий к продакшен коду:

function updateUserContact<T extends keyof User["contacts"]>(
user: User,
contactType: T,
contact: User["contacts"][T]
): void {
// ...
}
Live stream started
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/