Node.js Recipes
2.19K subscribers
53 photos
1 file
268 links
По будням заметки по #Nodejs разработке, по выходным обзоры конференций и докладов (с) @galkin_nikita
Сотрудничество https://telegra.ph/node-recipes-01-19
Download Telegram
to view and join the conversation
​​Есть такой проект Best of JS. Его автор каждый год делает топ OpenSource JS библиотек набравшие за год наибольшее количество звезд на GitHub. Топ разбит на категории. В категории #nodejs frameworks картина такова:
1. Next.js – находиться в категории из-за позиционирования как фулстэк фреймворк.
2. Nest.js – top-1 для BE разработки
3. Strapi – вложено очень много в маркетинг, осваивают инвесторские деньги.

Посмотреть итоги года можно тут: 2021 JavaScript Rising Stars.
Как использовать assert для улучшения читабельности кода?
#typescript

В javascript разработки мы обычно используем assert в коде тестов, но не в коде приложения. Мой опыт работы с koa читабельность кода с assert получается выше.

Пример из библиотеки koa:
ctx.assert(ctx.state.user, 401, 'User not found. Please login!');
Т.е. если пользователь не найден, будет выкинута ошибка с указанным текстом и статусом 401. Дальше по коду вы можете быть уверены, что ctx.state.user определен. Для этого используется пакет http-assert.

Причем TypeScript автоматически изменит тип выражения. Это достигается за счет использования Assertion Functions, который появились с версии 3.7. Пример такой функции:
function assertIsString(val: any): asserts val is string {
if (typeof val !== "string") {
throw new AssertionError("Not a string!");
}
}

К сожалению, Nest.js и Fastify из коробки не имеют встроенного assert, поэтому приходиться писать свой маленький хелпер. Оставлю его вам на самостоятельную реализацию.
​​Как запустить Recorder в Chrome?

В 97-й версии Google Chrome появилась возможность записывать действия. Для этого добавили Recorder. С его помощью можно записывать клики в сценарий. Сценарий можно запускать и экспортировать как js файл для puppeteer.

Собственно запуск: Открываем DevTools, в правом верхнем углу жмем , потом More tools > Recorder.

Фича пока находиться в статусе preview. Надеюсь ее допилят, чтобы можно было импортировать файлы. Мечтаю работать на проекте, где QA используют что-то похожее для баг-репортов.

Подробней в Chrome DevTools.
Audio
#voice_chat About Software Engineering Education с Тимуром Шемсединовым

Агенда:
- Проблема некачественных курсов по программированию
- Кому нужно системное программирование
- Полное разрушение высшего образования
- Программирование в школах
- Особый путь для свитчеров
- Подготовка лоукод-специалистов
- Как подготовить: постановщики задач, архитекторы, бизнес-аналитики
- Новые профессии
Подборка книг для изучения TypeScript
#list #typescript

В сегодняшней подборке все книги на английском языке. Читайте на английском. Это позволит вам изучать устоявшуюся терминологию. Вы ведь не ходите называть Promise Обещанием, а Tuple Кортежем?

📕The TypeScript Handbook. В марте 2021 команда переписала руководство и держит его актуальным после каждого релиза. Поэтому обучение начинайте именно с него. Книгу можно скачать бесплатно, в конце странице grab a copy in Epub or PDF form.

📕Effective TypeScript. Книга от O'Reilly в формате принципов языка с объяснением почему стоит делать именно так. Например: Prefer Type Declarations to Type Assertions

📕Programming TypeScript by Boris Cherny. Еще одна книга от O'Reilly с фокусом на реальной практике применения. Каждая глава заканчивается упражнениями для закрепления теории.

📕TypeScript 4 Design Patterns and Best Practices Свежая книга, которая не только показывает фичи языка, но и паттерны их использования.
llhttp - new HTTP 1.1 parser for Node.js
#worth_seeing #typescript

На этой неделе в войс чате с Тимуром мы поднимали вопрос о системном программирование, т.е. создание инструментов для создания продуктов. Сегодняшний доклад как раз об этом.

В докладе Федор рассказывает как и зачем был переписан http_parser. Произошло это в 2019. Кодовая база http_parser на чистом С перестала быть поддерживаемой. Ее переписали на С + TypeScript и назвали llparse. Его исходный код стоит изучить с целью улучшения как своих навыков работы с TypeScript, так и понимания принципов работы http в целом.

Ссылки:
👀 Видео
📕 Сайт
⚙️ GitHub
​​Testing Pyramid Makes Little Sense, What We Can Use Instead
#worth_seeing

Сегодняшнее видео предлагает переосмыслить концепт пирамиды тестирования. Глеб Бахмутов и Роман Сандлер разбирают различные подходы в тестирования JS проектов. Они вводят матрице Compromise VS Effort, предлагают список вопросов, которые стоит задать себе и команде для выбора подходов.

Для меня это самое полезное видео с ноябрського TestJsSummit 2021. Возможно, для вас будет полезнее другой доклад, поэтому прикрепляю весь плейлист. Он стоит того, чтобы уделить ему вечер.

Ссылки
👀Видео
📕Слайды
🔗Сайт конференции
👉Плелист всех видео с конференции
26-27 января состоится #conference TheJam.dev 2022. Это двух дневная бесплатная онлайн конференция посвященная JAM стэку.
👉Регистрация

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

Ссылки в тему:
🔗 jamstack.org
🔗 jamstack.wtf
​​Обновление Open Machine Learning Course

Yorko (Юрий Кашницкий) зарелизил обновленную версию mlcourse.ai. Раньше он проходился в когортах, теперь его можно пройти в self-paced режиме. Я сам проходил этот курс. Знания из курса помогли построение процессов с Data Science инженерами.

Почему я его рекомендую для ознакомления #nodejs разработчикам? Во-первых, для прокачки эрудиции и T-shaped экспертизы. Во-вторых, все чаще API должны забирать данные из Machine Learning моделей, а значит понимание как они работают упрощают интеграцию.

Рецепты по теме:
Как технологии будут востребованы для Node.js разработки в 2022?
​​Читатели из Украины знают об зарплатной аналитики DOU. Ее сегодня обновили по итогам декабрьского опроса.

🔗 Ссылка: https://dou.ua/lenta/articles/salary-report-devs-winter-2022/

Вопрос к читателям из других стран: РФ, Европа и т.д. А где вы смотрите аналитику зарплат?
Как отследить работу Garbage Collector?
#web_api #nodejs_api

Плохая организация JavaScript кода может привести к утечке памяти. Для отслеживания утечки ресурсов в ES2021 появился FinalizationRegistry. Так можно вызвать callback после отработки Garbage Collector по указанному ресурсу:
const registry = new FinalizationRegistry((startTime) => {
const delay = ((Date.now() - startTime) / 1000).toFixed(1);
console.log(`foo was garbage collected after ${delay}s`);
});
let foo = {};
registry.register(foo, Date.now());
foo = undefined; // Clear strong reference

⚠️Пример максимально упрощен. При запуске без массового создания новых объектов ждать сборки мусора придется долго.

Авторы не рекомендует использовать для построение бизнес логики, реализация сборки мусора, зависит от реализации любого конкретного движка JavaScript.

Работает в #nodejs 14.6.0 и новее. Для работы в TypeScript необходимо включить es2021.weakref.

Ссылки:
🔗 пример для запуска в браузере
🔗 MDN
🔗 TC39
🔗 Can I use
Как работать с Event Emitter в async/await стиле?
#nodejs_api

В 2022 году асинхронных #nodejs код строиться на async/await. Однако важный модуль Event Emitter построен на callback-ах. Начиная с 12.16 версии в нем есть встроенный функционал для упрощения работы с Promise. За это отвечают две функции:
events.on(emitter, eventName[, options]) – возвращает AsyncIterator, который легко итерировать конструкцией for await
events.once(emitter, name[, options]) – возвращает Promise, который будет разрешен по событию.
В 16 Node.js добавили options для передачи AbortController.

Упрощенный пример кода демонстрирующий обе функции:
const events = require('events');
const { setTimeout } = require('timers/promises');
const server = require('http').createServer();

async function handle(req, res) {
await setTimeout(200);
res.end('Hello World');
}

async function bootstrap() {
server.listen(8080);
await events.once(server, 'listening')
for await (const [req, res] of events.on(server, 'request')) {
await handle(req, res);
}
}

bootstrap();

⚠️В пример await handle, сделано для демонстрации работы AsyncIterator. В результате такой конструкции HttpServer будет обрабатывать запросы не параллельно, а последовательно. Чтобы это исправить можно убрать await на этой строке.

Ссылки:
⚙️ Код на runkit
📕 Документация events
👩‍🍳 Обзор AbortController
Подборка книг для изучения JavaScript
#list

Сегодня у нас в рекомендация свежие книги от Axel Rauschmayer. Он ведет блог 2ality.com с обзором новинок в JavaScript. На его сайте exploringjs.com можно прочитать его книги:
📕JavaScript for impatient programmers (ES1–ES2021), книга освещает новые фичи языка включая ES2022. Есть упражнения для закрепления.
📕Deep JavaScript: Theory and techniques (ES1–ES2021) углубление использование языка.
📕Tackling TypeScript: Upgrading from JavaScript альтернатива The TypeScript Handbook для изучения TypeScript.

Другие подборки книг на канале:
- Подборка книг для изучения TypeScript
- Подборка книг для прокачки, когда ты уже Senior
Live stream scheduled for
Audio
#voice_chat About Conferences с Alexander Makhomet. Александр co-founder в компании Fwdays которые уже более 10 лет проводят tech events в Украине. Также Александр сотрудничает с компанией Upwork на позиции Engineering Lead, и является кофаундером проекта Ergo.Place. В середине чата к нам присоединилась Ирина Божик, CEO Fwdays.

Вопросы:
Как организован процесс отбора тем и докладчиков?
Отличие организаций онлайн, оффлайн и гибрид конференций?
Альтернативные форматы: пубталкс, антиконференции, воркшопы
Как организована работа с комьюнити?

Интересны ссылки упомянутые в разговоре:
- Завирусившийся доклад Саши Соловьева в 2013
- Fwdays Tech Talks
Как просто улучшить работу с git?
#git #cli
TL;DR установите git-extras

Я предпочитаю работать с git через командную строку, а не в IDE. Одна из причин прокачка git с помощью external commands, о которых я уже писал. Лучшим набором таких команд является git-extras.

Мои наиболее часто используемые команды:
git undo – отмена последнего коммита
git undo N  – отмена последних N коммитов
git abort – отмена текущего rebase, merge или cherry-pick.
git browse – аналог вышеназванного git open. Откроет в браузере страницу репозитория (github, gitlab).
git effort --above 5 – узнать какие файлы менялись больше чем в 5 коммитах. Удобно при анализе нового проекта

Начать использовать можно тут.

Рецепты по теме:
- Как автоматизировать работу с git?
- На что влияет environment variable EDITOR?
- Как и что настроить в git?
​​GitHub Actions
#worth_seeing

Сегодня в рекомендациях несколько видео об GitHub Actions с GitHub Universe 2021.

Я активно использую их на своих проектах и считаю, что это отличный инструмент с очень легким порогом входа.

👀GitHub Actions in action – начальный уровень
👀Advanced GitHub Actions – продвинутое использование
👀Deploying to AWS with GitHub Actions – строим законченный pipeline
👀Empathy at scale: Techniques for user automation on one of the most active repos – как работает с GitHub action TypeScript команда.
👀Все видео с GitHub Universe 2021
​​How many hats should a DevRel wear?
#worth_seeing

Существует такое понятие как DevRel (Developer Relations). Упрощено говоря это PR в мире разработки. Инфлюенсирами в DevRel принято называть Developer Advocate.

Сегодняшнее видео с конференции DevRelCon 2021. В нем Zan Markan, Developer Advocate из Circle CI разказывает о ролях в DevRel. Видео отлично позволяет понять, в чем же заключаются ежедневные действия DevRel.

Ссылки:
👀Видео
👀Все видео с DevRelCon 2021
👉What is developer relations? от организатора DevRelCon
Тонкости работы с npm scripts
#cli #npm

1️⃣ pre- post- scripts
Для ежедневной работы JS часто использует автоматизацию с помощью npm scripts. У них есть pre- post- scripts, т.е. скрипты автоматически вызваны до или после скрипта. Например, так можно перекомпилить тайпскрипт перед запуском: "prestart": "npm run build". На канале уже был рецепт об postinstall идет в связки с пакетом patch-package.

Для выключения работы этих скриптов необходимо установить флаг ignore-scripts в .npmrc или командой:
npm config set ignore-scripts true

2️⃣ Использование --
Для добавления аргументов в npm script используется --. Например, в проекте есть команда "test": "jest". Команда npm run test -- -t="Example" запустит jest -t="Example", то есть только тесты с названием Example. Это работает только основной команды, но не для pre-/post-.

3️⃣ Работа с PATH
В npm скриптах не нужно прописывать путь к исполняемым файлам, хранимых в ./node_modules/.bin. Npm в момент запуска скрипта расширяет переменную PATH. Это идею можно расширить и в другую сторону, то есть сделать:
export PATH="$PATH:./node_modules/.bin"
После чего можно запускать установленный npm пакеты как из скриптов. Удобно для редких команд, которые не имеет смысла тащить в npm scripts.

Рецепты по теме:
​​Что такое .npmrc и почему его стоит добавить?
Как исправить код в node_modules?
Senior Full Stack for Formelife
#promotion #vacancy

Проект: Home Fitness Startup, сайт
Обязанности: Создание внутренних инструментов компании
Формат: full remote онлайн с 21:00 по 03:00 по Киеву
Требуемый опыт: 4+ года разработки
Технически стэк: Nest.js, React, Google Cloud, Microservice, PostgreSQL
Зарплата: 8.000-10.000 USD/month
Прочее: Английский B2
👉Вопросы и резюме слать @galkin_nikita