Node.js Recipes – Telegram
Node.js Recipes
3.22K subscribers
167 photos
7 videos
1 file
614 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Уже сегодня вечером Jamstack #conference. Традиционно для онлайн событий участие и регистрация бесплатны на сайте.

JavaScript разработчику нужно знать об этом стэке, не зря первая буква в JAM это javanoscript. Node.js разработчику будет полезно иметь опыт работы с какой-либо Headless CMS.

Ссылки в тему:
🔗 jamstack.org
🔗 jamstack.wtf
Как запустить JavaScript код из буфера обмена?
#cli

TL;DR Используйте pbpaste | node

Сразу скажу, что сегодняшний рецепт для unix пользователей, т.е. MacOS и Linux. Под Windows я не проверял.

В unix есть оператор pipe, который выглядит так |. С его помощью можно делать цепочки команд передавая результат выполнения из одной в другую. Вот примеры использования:
ps -ax | grep node
history | grep kubectl

Еще в unix есть две команды pbcopy и pbpaste. С их помощью можно записывать или читать из буфера обмена. Попробуйте:
pbcopy < package.json
pbpaste

Собственно на этом объяснение магии сегодняшнего рецепта окончено. Скопируйте в буфере JS код, который вы хотите запустить и выполните в терминале pbpaste | node
Что не стоит делать в PostgreSQL?
#best_practice #database

Сегодня у нас в рекомендациях ссылка Don't Do This из википедии PostgreSQL. Каждый из пунктов выдержан в стиле что не стоит делать, почему и в каких случаях все же стоит нарушить эту рекомендацию. Отлично подходит, чтобы отправить коллеге который таки решил сделать что-нибудь плохое.
#conference
На следующей неделе, с 12 по 14 октября пройдет Google Cloud Next`21. В программе столько докладов, что в них просто потеряться. Поэтому нам предлагают создать свой плейлист или воспользоваться готовым.
Для #nodejs разработчиков самым полезным будет плейлист Advanced app dev for developers! В него входят такие доклады:
- Building and managing GraphQL APIs
- Applying Kubernetes app development best practices
- What’s new in serverless?
Обзор Node.js v16: какая версия npm пойдет в LTS?
#npm

В npm документации еще 7-ая версия, но оказывается в 16-ую версию Node.js пойдет а 8-ая. На прошлой неделе команда npm еще раз обновила мажорную версию. Они внесли несколько breaking changes:
– убрать поддержку require('npm') (ни разу этим не пользовался)
– убрать поддержку не поддерживаемых версий Node.js 10 и 11 (хорошая практика).

До перехода на 16-й версию Node.js, как LTS, еще две недели. Для меня не ясно это оплата npm тех долга в последний момент – лишь бы успеть – или продуманная стратегия, чтобы подчистить весь тех долг сразу, когда он уже ясен. В любом случае круто, что им управляют.

Рецептики по теме:
Обзор Node.js v16: Что нового в npm v7?
👍1
У меня в планах до конца года провести один, два мастер-класса. Цена участия в мастер-классе будет 40-75$. Формат записанные видео лекции, лайфкодинг и ответы на вопросы в эфире. Так же поддержка через закрытый телеграм чат. Целевая аудитория – Middle JavaScript разработчики. Задача мастер-класса сэкономить вам время на погружение в конкретную технологию.

Какая из тем вам актуальней всего

Kubernetes для Node.js разработчиков - 50
👍👍👍👍👍 19%
Nest.js tips and tricks – примеры кода, которые упрощают разработку - 89
👍👍👍👍👍👍👍👍 34%
Node.js troubleshooting: логирование, дебаггинг и профайлинг - 59
👍👍👍👍👍👍 23%
GitHub Action или сам себе DevOps: от прогонки тестов до деплоя вашего monorepo - 15
👍👍 6%
Real-time updates: WebSocket, Server Side Event and Push notifications - 49
👍👍👍👍👍 19%
👥 262 человека уже проголосовало.
Скидки на Cloud сертификации

Данная заметка сделана, чтобы поделиться об актуальных акциях и промокодах по Cloud. Если вы не успели или у вас есть ненужный промокод, то приглашаю вас в комментарии к этой заметке.

Сегодня стартует KubeCon. Всем участникам с билетами Virtual All Access будет предоставлена 50% скидка на k8s сертификации – CKAD/CKA/CKS. Подробней можно почитать тут. Для Node.js разработчиков я рекомендую брать CKAD. Сейчас билеты уже по 75$ и, к сожалению, промокод о котором я писал уже не работает. Но опыт прошлых лет показывает, что на сайтах партнеров бывают freebies, включая промокоды на бесплатный доступ. Пример тут.

Напомню, что AWS дает 50% скидку на любую сертификацию, если у вас есть уже любая другая. Т.е. сдали Cloud Practitioner за полную стоимость, а потом всегда сдаете последующие за 50%. Для тех, кто еще не имеет ни одной сертификации будет актуальна одна из этих двух акций:
– До 15 октября Get AWS Certified: Solutions Architect Challenge – подойдет если вы уже имеет опыт и хотите сдать Certified Solutions Architect – Associate (SAA-C02)
– 13 октября AWSome Day Online Conference – для Cloud новичков, который хотят сдать AWS Certified Cloud Practitioner.
Обе акции дают 50% скидку и не суммируются с обычной ссылкой участников сертификационной программы.

Microsoft предлагает 50% скидку на одну из своих Azure сертификаций в рамках 30 Days to Learn It.

Я не знаю об скидках от Google Cloud Platform, но в рамках Google Cloud Next'21, который стартует завтра, объявлено об бесплатном месяце обучения GCP на Coursera.
VSCodium – правильная версия VisualCode

Исходный код vscode является open-source c MIT, которая не распространяется на скачиваемые исполняемые файлы. Поэтому Visual Studio Code собирает телеметрию, т.е. большой брат следит за тобой даже когда ты пишешь код.

Вы можете скачать исходный код и скомпилировать свою версию VisualCode без слежения. Проект VSCodium делает это за вас. По сути это не fork, а pipeline чтобы сделать чистый билд.

Поэтому снесите VisualCode и установите его правильно, без трекинга и через пакетный менеджер.
Во вчерашнем опросе по мастер-классам нет возможности оставлять комментарии. Вот ответы на вопросы из лички:
Почему нельзя проголосовать сразу за несколько?
Потому что я буду готовить их по одному.
А можно мастер-класс на тему ...?
Добро пожаловать в обсуждения под этим постом.

Буду обновлять на основание ваших вопросов.
Вчера в рамках KubeCon анонсировали новую сертификацию KCNA – Kubernetes and Cloud Native Associate. Пока она находиться в бета-тесте, релиз будет до конца года.

Сертификация предназначена для начинающих Cloud разработчиков. Ее рекомендуют как часть обучения перед CKA/CKAD/CKS. Отличие от вышеназванных сертификаций в заданиях: вместо практических задач, будут тесты.

– Анонс в блоге
– Ссылка на сертификацию
Как и что настроить в git?
#git #cli

1️⃣Указать имя и емейл
Зачем? Чтобы комиты были залинкованы с вашей учеткой в github/gitlab.
git config --global user.name "Your Name"
git config --global user.email you@example.com
Можно настроить для каждого репозитория отдельно. Важно, если вы overemployed.
2️⃣Подключить ssh ключ
Зачем? Чтобы не вводить логин и пароль каждый раз
1. Generating a new SSH key
2. Add your SSH key to the ssh-agent
3. Adding a new SSH key to your GitHub account
или полная документация
3️⃣Изменить текстовый редактор
Зачем? Чтобы использовать привычный редактор, а не vim.
git config --global core.editor "code --wait"
Данный пример установить visual code как git редактор. Проверить можно git commit без флага -m.
4️⃣Автогенерация .gitignore
Зачем? Чтобы экономить время во время старта нового репозитория
1. Откройте gitignore.io.
2. Выберите node, операционку, IDE и т.д.
3. Сохраните в .gitignore вашего репозитория
4. Добавляйте специфичные для вашего проекта файлы, а не для тех. стэка.
5️⃣Использование глобального .gitignore
Зачем? Чтобы не закинуть в git вещи специфичные для вашего окружения.
Сохраните вещи из 4️⃣ в ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
Хорошая практика держать там .env файл

Из комментариев:
Начинающему техлиду стоит использовать .gitattributes для выставления конца строки на уровне репозитория с помощью core.autocrlf. Тогда джуны сидящие на Windows не буду страдать.
👍1
Что прокачивать, если вы Team Lead?
#principles

Ребята в @tlbootcamp сделали отличную карту навыков и компетенций для тимлидов – tlroadmap.io. Карта представлена в виде mindmap-а. Каждая ветка имеет теорию, практику и обоснование, почему этот блок важен. Работа над картой происходит коллективно через GitHub.

PS На прошлой неделе не было заметок. Я был полностью погружен в изменения структуры на основном проекте. Мне добавили обязанностей Engineering Manager-а. Так что мне снова нужны инженеры. Пост с вакансией будет чуть позже.
Node.js Developer Wanted!

Чтобы пользователи не пропускали тренировки, а в их телефонах раздавались оповещения об новых ачивках мне в команду нужен Cloud/Node.js инженер. Команда часть HomeFitness стартапа Formelife.

Детали:
👎 созвон в конце дня с Кремневой долиной
👎 нельзя разводить холивары о технологиях, политике или ковиде
👍 крутой тэхстек (GCP, Node.js)
👍 зарплата реально выше рынка
👍 адекватный менеджмент

На фото MacBook M1/16GB для инженера, у которого сегодня первый день. Увы, не в моей команде. Помогите найти инженера, чтобы у меня было время на канал и сон.
Как и зачем настраивать healthchecks/probes?
#kubernetes #cloud

В реальных проектах трафик, который идет на Node.js приложение сначала проходит через какой-то из инфраструктурных элементов. Это могут быть load balancer, API Gateway, оркестратор (kubernetes/Docker Swarm) и т.д. Кроме маршрутизации трафика инфраструктура отвечает за перезапуск и масштабирование приложения. Для этого ей необходимо сообщить, что приложение работает с помощью healthcheck. Инструментов много, поэтому рецепт рассматривает healthcheck только для kubernetes. В остальных инструментах принципы и реализация аналогичны.

Как правило healthcheck это конкретный http endpoint, который отдает 200 если приложение работает. Он может проверять доступность зависимостей, памяти, процессора и т.п. В Nest.js для этого используется terminus. В kubernetes помимо http healtcheck можно настроить tcp или bash команду – может быть полезно для worker-ов без http.

Kubernetes позволяет сконфигурировать несколько видов healthcheck. В документации они еще называются probes. Рассмотрим каждый из них:
– Liveness показывает, что контейнер работает. Если не будет 200 ответа, то Kubernetes перезапустит контейнер.
– Readiness показывает, что контейнер доступен для трафика. Если не будет 200 ответа, то Kubernetes не будет отправлять на него запросы. Пример из реального проекта – WS сервер отдавал 200 ответ пока не количество подключений не превышало лимит.
– Startup показывает, что контейнер успешно запустился. Редко используется для Node.js приложений, так как спроектирован для долго запускающихся контейнеров.

Ссылки по теме:
🔗 The Twelve-Factor App
🔗 Configure Liveness, Readiness and Startup Probes
🔗 Kubernetes Liveness and Readiness Probes: How to Avoid Shooting Yourself in the Foot
🔗 Liveness probes в Kubernetes могут быть опасны
Какие вопросы задать, чтобы проверить уровень TypeScript?
#typenoscript

Сегодня поделюсь подборкой моих вопросов для интервью по TypeScript. Естественно без ответов, иначе как мне потом их на собеседованиях спрашивать.

1. Как используется тип unknown?
2. Что такое генерики?
3. Какая последняя новинки в TypeScript вам больше всего понравилась и почему?
4. Чем ключевое слово type отличается от interface?
5. Когда и как используется тип never?
6. Что такое директивы в typenoscript? Какие и зачем вы используете?
7. Расскажите о пространствах имен типов и пространстве имен переменных на примере выражения class User implements Person {...
8. Как используется tsconfig.json?
9. Что такое guard и как они используются?
10. Как вы дебажите typenoscript код?

В ходе собеседования я не только задаю вопросы, но и отправляю примеры кода для обсуждения. Для этого лучше всего подходит share на TypeScript Playground. Вот пример.
👍2
Что такое стоимость владения софтом и из чего она состоит?
#principles

На прошлых выходных у меня был запрос на консалтинг от CEO одной украинской продуктовой компании. Ключевой вопрос был: "На какой архитектуре нам стоит начинать новые проекты в компании – на микросервисах или монолите?" Боль как представителей украинского бизнеса, так и разработчиков не умение брать на себя ownership. Эта концепция хорошо расписана в Amazon Leadership Principles.

Для софта его стоимость владения (ownership cost) состоит из стоимости создания (development cost) и стоимости поддержки (maintenance costs). В outsource компаниях не принято следит за этими параметрами. Новый проект нужно запилить как можно быстрее, т.е. уменьшаем development cost за счет увеличения стоимости поддержки. А в легаси не дай бог тебе уменьшить maintenance cost – это будет означать меньше работы и денег от заказчика. В продукте же один из главных вопросов от разработчиков: "Как мы будет поддерживать то что разработали?"

Приведу конкретные примеры. Далее OC – Ownership Cost, DC – development cost, MC – maintenance costs.
– Тесты или TypeScript уменьшают OC, за счет уменьшение MC, но увеличения DC. Почему: вносить изменения в код можно с меньшими рисками, что-либо поломать.
– Линтинг, код-стайл уменьшает MC. Почему: читать становиться проще!
– Внутренний, легаси или экзотический фреймворк увеличивает OC и MC. DC как правило тоже увеличивается. Почему: находить и онбоардить новых разработчиков сложней.
– DevOps процессы – уменьшают OC, причем существенно. Почему: автоматизация деплоя, разворачивание и мониторинг инфраструктуры все это уменьшает MC и требует сравнительно не больших затрат в DC.

В завершение дам ответ на вопрос из начала рецепта: "микросервисы VS монолит". Ownership cost для микросервисов дороже пока не появилась проблема масштабирования нагрузок (железо не справляется) и/или команды разработки (больше 20 человек).
Топ 10 ошибок в Nest.js проектах.
#nestjs

У Nest.js отличная документация, понятная архитектура кода и декларативных подход. Это позволяет начинать писать реальный код разработчикам переходящих в #nodejs с других языков. Приведу список типичных ошибок на уровне кода. Сокращение MS обозначает microservices.

1. Забыть добавить enableShutdownHooks, поэтому приложение не может корректно завершать свою работу.
2. Использование Hybrid application (http + ms) вместо разделения по процессам. В результате возникают проблемы в фильтрах ошибок.
3. Выкидывание наследников HttpException в MS. Аналогично в другую сторону. А добавьте сюда еще GraphQL/WS/custom контексты. В результате трансформация ошибок происходит не правильно.
4. Смешание входящих и исходящих DTO и/или моделей data-layer. В результате код получается короче, но сильнее связанный.
5. Наличие только одного уровня тестов из unit/e2e пары. В результате тестировать сложнее.
6. Не понимание работы export/import Nest.js модулей и провайдеров. В результате происходят ошибки в DI.
7. Не использование custom decorator-в и pipe. В результате код теряет свою декларативность.
8. Расширение сторонних интерфейсов (например Request) в ts, а не d.ts файле. В результате какой-то из процессов не делает его import.
9. Цикличные связи без forwardRef. В результате код просто не стартует.
10. Отсутствие логирования (в том числе запросов в БД). В результате troubleshooting очень затруднен.

В завершение скажу, что ошибки на уровне проектирования и архитектуры приложения проектозависимы.
Вот так выглядит пирамида тестирования с точки зрения #Nodejs разработчика.
- Linting обеспечивает соблюдения код-стайла и отлавливает возможные ошибки синтаксиса. Используеться eslint.
- Type checking проверяет типы или js doc c помощью TypeScript.
- Unit tests не требуют запуска отдельного Node.js процесса. Тестируют отдельные функции или методы с помощью Jest. Активно используют моки. Позволяет мерять уровень покрытия кода тестами. Использует подходы white box testing.
- Integration tests требуют запуска Node.js процесса. Проверяют бизнесу логику c помощью Jest и различных библиотек по работе с API/Bus/etc. Моки если и используются, то только на уровне 3rd-pary. Использует подходы gray box testing.
- e2e требуют запуска не только Node.js процесса, но и клиентского кода. Т.е. запускает все приложения BE+FE. Имитирует поведение пользователя, проверяя бизнесу логику всего приложения. Использует подходы black box testing. Зона отвественности QA-ев.
На следущей неделе конференция Fwdays: JS is back! ​​

В течение основного дня (27 ноября) будет мой доклад "Разработка на Node.js в 2022: тренды и приемы". Его можно послушать бесплатной в рамках Free Ticket

В дополнительный день (1 декабря) будет мой воркшоп Nest.js tips and tricks. Для просмотра нужен Full Ticket. Промокод для его покупки 👉 node_recipes_fwdays

Программа: https://bit.ly/3DCco0E

До встречи в эфире!
Как сделать object deep clone?
#nodejs_api

Как вы знаете объекты в отличие от примитивов передаются по ссылке, а не по значению. Поэтому, когда вам нужна копия объекта, приходиться прибегать к определенным ухищрениям.

Native JavaScript предлагает два варианта копирования:
– Через spread оператор const copied = { ...original }
– Через Object.assign const copied = Object.assign({}, original)

Эти варианты работают только на первом уровне объекта. Для глубокого копирования необходимо использовать рекурсию или пакеты (см lodash.cloneDeep). В простых случаях можно использовать JSON.parse(JSON.stringify(obj)), но имейте ввиду так можно потерять данные.

Текущий способ для Node.js это использование модуля v8:
const v8 = require('v8');
const copied = v8.deserialize(v8.serialize(original))

Но через год это измениться. Задача настолько часто встречается, что разработчики JS движков придумали structuredClone. Пока внедрено только в Firefox 94 и Node.js v17.
👍2
Как технологии будут востребованы для Node.js разработки в 2022?
#tech_stack #list

Попробую предсказать тренды 2022.

Будут экспоненциально расти, т.е. стоит учить на опережение:
OpenTelemetry для метрик разработки
Headless CMS (нужны для JAMstack)
– Интеграция, использование и/или переход с NoCode решений (бизнес делает на них прототипы, которые нужно развивать или переписывать с 0)

Будут продолжать расти, т.е. стоит учить чтобы быть в тренде:
– API поверх AI или data-science моделей. Продолжение роста за счет персонализаций. Гуглить Internet Of Behavior
– Crypto, всякие смарт контракты, NFT – да-да в мире слишко много денег
– Internet of Things. Для начала попробуйте сделать свой Smart Home

Будут по-прежнему востребованы, т.е. учить не поздно:
– TypeScript как основной язык для сложных проектов
– DevOps практики CI/CD с помощью Gitlab или GitHub Actions, 12 factor
– Cloud инструменты в любом на ваш выбор провайдере AWS, GSP, Azure
– GraphQL на базе Apollo Server