Node.js Recipes
3.22K subscribers
173 photos
7 videos
1 file
610 links
Download Telegram
Подборка node.recipes за январь 2022
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Что такое WICG?
➡️ Как TC39 предложения внедряются в TypeScript?
➡️ 15 Factor App
👉 Больше 100 share: Какие вопросы задать, чтобы проверить понимание Promise/async/await?
​​➡️ oclif.io – Open CLI Framework
➡️ Когда и как использовать navigator.sendBeacon?
➡️ 2021 JavaScript Rising Stars.
➡️ Как использовать assert для улучшения читабельности кода?
​​➡️ Как запустить Recorder в Chrome?
👉 Больше 100 share: Подборка книг для изучения TypeScript
​​➡️ Обновление Open Machine Learning Course
➡️ Как отследить работу Garbage Collector?
➡️ Как работать с Event Emitter в async/await стиле?
➡️ Подборка книг для изучения JavaScript
➡️ Как просто улучшить работу с git?
➡️ Тонкости работы с npm scripts
➡️ Как узнать является ли текущий файл точкой запуска?
➡️ Какие инструменты упрощают парное программирование?
​​➡️ Что такое RegExp Named Capture Groups?
👉Больше 100 комментариев: Топ-5 заблуждений об работе JavaScript
➡️ List of 1000 JavaScript Interview Questions

Стоит посмотреть:
👀​​Road to production
​​👀Application integration patterns for microservices
👀Advanced TypeScript Playlist by Basarat
👀Create an Application Backend in Clicks with the Amplify Admin UI
👀llhttp - new HTTP 1.1 parser for Node.js
​​👀Testing Pyramid Makes Little Sense, What We Can Use Instead
👀GitHub Actions с GitHub Universe 2021
👀​How many hats should a DevRel wear?
👀Chrome 98 - What’s New in DevTools
👀​What’s Next for the GraphQL Spec?

Стоит послушать или прошедшие Voice chat:
🎤About Best Practices, в гостях Алексей Бобырь
🎤About Software Engineering, в гостях Тимуром Шемсединовым
🎤About Conferences, с Александр Макхомед и Ирина Божик
🎤About Nest.js, с Михаилом Яли

Анонсы конференции:
👍​​Node Congress
👍TheJam.dev
👍33🔥5
В конце сентября я писал о том, что сделал для Foxminded курс по #nodejs. Подход к составлению курсов в компании – фокус на практику без разжевывания теории, которую гуглят только когда больно. Курс окончил бета тестирование и обзавелся лендингом.

После составления курса я сопровождаю менторов и даже вел пару студентов. Отзыв одного из них:
Вообще сейчас твой курс реально выглядит как одна из лучших инвестиций в самообразование за долгое время — разумная порция боли и хорошее ощущение прогресса 🔥

Курс ориентирован на новичков в Node.js. Идеально подходит для Frontend разработчиков, которые хотят стать FullStack.
👉Запись на курс тут
Хороший код это простой код. Хороший код:
– просто читать
– просто повторно использовать
– просто, то есть без опасений, вносить изменения
На английском эти свойства звучат как Readability, Reusability и Refactorability...

Но мне пора остановиться. Иначе я начну пересказывать Ryan McDermott, который предложил реализацию Clean Code в JavaScript. Лучше прочитайте его в оригинале. У него есть два замечательных репозитория, в которых он объясняет зачем и как это делать.

Ссылки:
👉 Clean Code for JavaScript
👉 3 Rs of Software Architecture
🔥29👍92
Что такое Fetch Event Source?
#package #architecture

На канале был рецепт Что такое Race Condition на клиенте? В нем я рекомендовал использовать Server Sent Events. Это однонаправленный протокол от сервера к клиенту. Является отличной альтеранативой websocket-ам, которые являются двунаправленным протоколом.

На сервере все достаточно просто. Например, в Nest.js есть хорошая документация – server-sent-events. На клиенте все не так просто – у нативного браузерного EventSource API есть ряд ограничений: нельзя передавать custom headers, только Get. Правильной альтернативой является пакет @microsoft/fetch-event-source. Он одновременно обладает всеми фишками fetch и Server Sent Events. Рекомендую к использованию и сам протокол SSE, и клиентский пакет от microsoft. Кто знает, вдруг эту реализацию сделают встроенной в браузерные API.
👍12
Я соскучился по оффлайн конференциям. К сожалению, первую Киевскую JS конфу – React fwdays’22 –  я пропускаю. Он пройдет в формате Online+Offline 26 февраля. Также будет несколько дополнительных эфиров в будние дни.

Программа сформирована на 40%. Вот доклады, которые мне было бы интересней всего: 
🎤 Glenn Reyes выступит с докладом “Drawing the line between 3rd party and custom code”
🎤 Виктор Турский будет рассказывать о “Эффективной разработке с React”
🎤 Юлия Потапенко о ”Безопасности криптокошельков”

Конференция пройдет в гибридном формате с тремя вариантами участия:
1️⃣FREE ONLINE – просмотр докладов в free online треке (26 февраля)
2️⃣FULL ONLINE – просмотр докладов во всех треках (26 февраля) и дополнительных форматах, доступ к записям всех эфиров
3️⃣OFFLINE & ONLINE – все пункты, которые есть в пакете full online, а так же offline участие 26 февраля

👉Регистрируйтесь бесплатно или используйте промокод на скидку 7% - 66BD1D1B54.
👉Детали по ссылке https://bit.ly/3J58VKB
👍6😢1
#announcement

На этой неделе #voice_chat будет с Виктором Турским, Senior Software Engineer at Google, Non-Executive Director at WebbyLab, автором @jabascript.
Когда: в четверг, 10 февраля, в 21:00 по Киеву
Где: https://xn--r1a.website/node_recipes?voicechat

Агенда будет составлена на основание ваших вопросов из комментариев к этому посту.

До встречи в эфире!
👍152
Live stream scheduled for
#announcement

В этот четверг, 10 февраля, я буду на стриме у Сергея Немчинского. Будем обсуждать Cloud Native и Node.js.

Начало в 15:00 по Киеву.
👉 Смотреть тут
👍16🔥11
Что нового в Nodejs 16.14.0?

Вчера вышел минорный патч для LTS версии. Основным заявленным изменением является обязательное использование Import Assertions (stage 3) с JSON-модулями. Это решение было принято для сохранения совместимости с веб-платформой. Т.е. это изменение важно для FE разработчиков.

В релизе есть новые важные фичи для #nodejs разработчиков, которые упрощают разработку. Обратите внимание, что они имеют Experimental индекс стабильности. Т.е. вы их можете использовать в проде только на свой страх и риск.

👉 Улучшение работы Readable Streams
Добавленые filter и map, а так же helper isReadable. Удобство работы со встроенными стримами становиться сопостовимо с rxjs.
👉 Улучшение работы AbortSignal
Добавили abortSignal.reason и AbortSignal.timeout(delay)
👉 process.getActiveResourcesInfo
Раньше чтобы посмотреть, что держит активным EventLoop необходимо было использовать недокументированные process._getActiveResources().
👉 Scheduler в promise timers
Является Node.js реализацией предложения Prioritized Task Scheduling. Позволяет писать:
import { scheduler } from 'timers/promises';
await scheduler.wait(1000);
Очевидно, улучшает синтаксис setTimeout из timers/promises.

Официальные release notes тут
🔥35👍1
Стартуем стрим у Сергея Немчинского. Будем обсуждать Cloud Native и Node.js.

👉 Смотреть тут
👍18🔥9
Audio
#voice_chat About Work at Google c Виктором Турским, Senior Software Engineer at Google, Non-Executive Director at WebbyLab, автором @jabascript.

Ссылки упомянутый в ходе дискуссии:
🔗 Эффективная разработка NodeJS приложений
🔗 Node.js starter от Виктора
🔗 my-talks.net – сервис где можно подписаться на докладчиков, сделанный Виктором
🔗 www.algoexpert.io – платный сервис для подготовки к интервью
🔥18👍111🥰1
Что такое npm overrides?
#cli #npm

Делая обзор Nodejs 16.14.0, я не рассказал об обновление версии npm с 8.1.2 до 8.3.1. Основной фичей обновления является overrides, т.е. переопределение версий пакетов в зависимостях второго+ уровня. Это аналог resolutions в yarn. Чаще всего это нужно, чтобы заменить версию зависимости с известной проблемой безопасности. Реже, чтобы везде использовать одна и ту же версия пакета. Теперь npm догнал yarn не только по скорости, но и по необходимым фичам.

Подробней в ссылках:
🔗 npm overrides
🔗 yarn resolutions
👍24🎉3
Напоминаю #conference nodecongress.com уже завтра!
🔥10👍2
В прошлом году я делал рецепт Как документировать логику? в котором рекомендовал использовать в коде и документации PlantUML. Его наиболее близкий конкурентом является Mermaid, который тоже позволяет описывать диаграммы в текстовом виде.

На этой неделе GitHub объявил о поддержке mermaid код блоков. Теперь вы можете использовать диаграммы в вашей документации и GitHub issues. Пример на картинке или по ссылке в GitHub блоге.
👍31🔥14
Какие вопросы задать, чтобы проверить понимание Nodejs perfomance?
#list

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

1. Какие метрики Node.js процесса вы используете? Как их собираете?
2. Что такое Еvent Loop Latency? Как он рассчитывается?
3. Покажите в вашем коде где вы конфигурируете database connection pool? Как он работает и за что отвечает?
4. Какие способы измерения latency http ответов вы знаете?
5. Каким образом вы определяете bottleneck в вашей системе в целом? А в коде?
6. DevOps команда выдвинула гипотезу, что приложение тормозит из-за логирования. Каким образом вы будете проверять эту гипотезу?
7. Назовите способы ускорения Node.js приложения, которые вы использовали.
👍30😱3🔥1🥰1
Куда развивается Reactive Programming в Node.js?

TL;DR; С выходом 18-й LTS версии встроенные Node.js Streams станут альтернативой RxJS.

Начну с определения: реактивное программирование – это парадигма программирования ориентированная на потоки данных. Т.е. вместе операций над статическими данными, мы оперируем потоками. Упрощенно говоря, поток данных это массив, где каждый элемент имеет привязку к временной оси.

В javascript комьюнити основной тренд реализации реактивного программирования это RxJS. Основной драйвер это развития Angular. Nest.js, созданный на его основе, работает с RxJS из коробки. Так Interceptors построены именно на RxJS.

Реализовывать подходы реактивное программирования на чистых Node.js Streams требует много самописного кода или использование библиотек, которые не так развиты/поддерживаются как RxJS. Однако в 16.14.0 версии Node.js были добавлены filter и map для работы с Readable Streams. В экспериментальной ветке (17-ой) реактивных методов больше:
– readable.forEach(fn[, options])
– readable.toArray([options])
– readable.some(fn[, options])
– readable.find(fn[, options])
– readable.every(fn[, options])
– readable.flatMap(fn[, options])
– readable.drop(limit[, options])
– readable.take(limit[, options])
– readable.asIndexedPairs([options])
– readable.reduce(fn[, initial[, options]])

До выхода 18-й версии в LTS, что произойдет в октября 2022, их станет больше. Надеюсь, их Stability Index переведут из экспериментального в стабильный.
👍36🔥14👎1🤔1
Вчера в TypeScript блоге появилась заметка A Proposal For Type Syntax in JavaScript. На текущий момент пропосал находиться на Stage-0. Его идея убрать обязательный этап компиляции TS в JS с помощью TypeScript/Babel.

Еще в блоге были Release Notes TypeScript 4.6.
👍69🤔4
Мой коллега Vitalii Ruban, с которым мы вместе были в программном комитете JSFest, делает Free React Course For Beginners. Подробности в канале @reactbeginners.
👍261👎1
6-10 червня запрошуємо долучитися до тижня онлай-мітапів Grammarly Tech Week #StandWithUkraine!

Усі події Grammarly, як завжди, безкоштовні. Ми будемо вдячні учасникам за будь-який внесок до фонду чи організації (кілька варіантів можна знайти за посиланням https://gram.ly/GTWUkraine), які підтримують Україну. 🇺🇦

📢Протягом тижня щовечора експерти з інженерних та продуктових команд ділитимуться досвідом і розповідатимуть більше про підходи до розробки та тестування у Grammarly!

Реєструйтесь і долучайтесь до подій:
🗓7 червня: The Story of Declarative React at Grammarly - Як команді Grammarly Editor вдалося побудувати архітектуру з імплементацією Declarative React компонентів, з якими технічними викликами вона зіткнулася під час реалізації та яким чином сформувала нову UI бібліотеку “Embrace”. Усе це обговоримо на зустрічі з Grammarly Software Engineer Олександром Сугаком.
Реєстрація: https://gram.ly/3LyPYAI

🗓9 червня: How We Test at Grammarly: General Processes and Reactive Code Testing - Grammarly Software Engineers Олексій Левжинський та Денис Кашковський розкажуть про те, як ми тестуємо в Grammarly, для чого потрібні Marble-тести і як вони покращують якість тестування.
Реєстрація: https://gram.ly/3Nu3FlH

Мова доповідей: англійська.

Більше івентів Grammarly Tech Week шукайте за посиланням: https://gram.ly/3wZGCsl.

До зустрічі!
👍18
TL;DR; Помилка у await someAsyncFn().catch() створює Unhandled Promise Rejection, тобто аргумент у catch() є обов'язковим.

Я вже розповідав про Floating Promise. Вони створють Unhandled Promise Rejection. Щоб знаходити такі проблеми я використовую @typescript-eslint/no-floating-promises. Це правило говорить, щоб не було Floating Promise треба зробити одне з:
await цього promise-а
return цього promise-а
– додати до цього promise chain .then() з двома аргументами
– додати до цього promise chain .catch() з одним аргументом

Я вважав, що try catch та catch у promise chain працюють однаково. Тому для мене було несподіванкою, що await someAsyncFn().catch() не перехоплює помилку, що створює Unhandled Promise Rejection. Так само станеться якщо аргумент у catch буде null або undefined. Catch це синтаксичний цукор then(undefined, cb). Змінюючи цей cb ми контролюємо поведінку promise chain, тому cb не є обов'язковим.

Для мене це виглядає, як бага у @typescript-eslint/no-floating-promises. Як тимчасове рішення я додав таке правило:
'no-restricted-syntax': [
'error',
{
selector: "CallExpression[callee.property.name='catch'][arguments.length!=1]",
message: 'Catch should have exactly one argument'
}
],

PS Велика подяка Віктору та Олексію за коментарі.
👍44🤔3