Node.js Recipes
3.22K subscribers
173 photos
7 videos
1 file
610 links
Download Telegram
Стартуем стрим у Сергея Немчинского. Будем обсуждать 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
Я тільки вчора додався у waitlist, а сьогодні вже прилетіло запрошення на бета-тест. У кінці місяця поділюся враженнями.
GitHub Copilot це плагін для IDE (WebStorm/VSCode/etc) який за допомогою AI перетворю англомовні коментарі у код. Більше інформації та реєстрація на бета-тест за посиланням
👉 https://copilot.github.com/
🔥25🤔7👎2👍1
​​Сьогодні порекомендую чудовий інструмент для візуалізації процесів. Називається BPMN (Business Process Model and Notation). Можна використовувати як для опису бізнес-процесів, так і flow в мікросервісній архітектурі. Добре допомагає побачити проблемні місця – не правильне місце виконання, послідовність тощо.

посилання:
– https://bpmn.io/
https://www.bpmn.org/
https://github.com/bpmn-io/bpmn-js
👍308
​​Node.js development in 2022: trends and techniques
#worth_seeing

Команда Fwdays викладають у публічний доступ відео з грудневої конференції. Серед них і моя доповідь про "Розробка на Node.js у 2022: тренди та прийоми". Я роблю такі доповіді щороку після релізу нової версії, щоб розповісти:
⚙️ нові фічі Node.js v16,
⚙️ нові мовні конструкції JavaScript/TypeScript
⚙️ фреймворки та підходи
Але головне в цьому огляді це відповіді на питання, як, коли і головне навіщо використовувати ці новинки.

Мова виступу російська

👀відео
📕Слайди
🔥48👍14
Конференції цього тижня:
#conferences

OpenJs World конференція від Linux Foundation. Пройде 7-8 червня. Багато доповідей різного рівня та тематики. Вважається найважливішою оффлайн тусовкою серед Core Node.js Contributers.
MongoDB World вендор конференція. Пройде 7-9 червня. Для конференції, присвяченої одному вендору, кількість контенту просто лякає.
WWDC 2022 конференція для розробників від Apple. Пройде 6-10 червня. Актуальність контенту для Backend розробників низька, але конференція в цілком важлива для індустрії.
👍14🔥8
Сьогоднішній рецепт присвячений #npm scripts
Щоб побачити їхній список треба запустити npm run. Так, без вказівки імені скрипту. Це дуже зручно у новому проєкт, коли ти ще не пам'ятаєш усіх скриптів.

А ось скрипти, які я рекомендую мати у кожному проєкті:
- watch чи start – запускає додаток для розробника, тобто зміни у коді рестартуют додаток
- format – виправлення помилок код-стайла за допомогаю prettier та eslint
- lint – перевірка код-стайлу за допомогаю prettier та eslint
- typing – перевірка за допомогаю typescript
- build – створює artifact (bundle у SPA)

Багато скриптів не потрібні, якщо знати про -- -argument. Наприклад,
замість debug, я використовую npm run watch -- -debug. Докладніше у
рецепті Тонкости работы с npm scripts
👍30🔥10
В рамках JS + React fwdays'22 яку з моїх тем вам було б найцікавіше послухати?
Final Results
33%
Protocols comparison for React App: Rest, GraphQL, WS, SSE, Binary
20%
How Design System can speedup delivery?
36%
Monorepo structure for Node.js + React app
10%
TypeScript for React Developers
👍7
Що таке Parameterized query у PostgreSQL?
#database

Використання template string під час створення SQL запитів може стати причиною SQL ін'єкції. Нехай у нас є такий код:
client.query(`INSERT INTO users(name, email) VALUES('${name}', '${email}') RETURNING *`);
Наприклад, порівняйте результати його виконання з
const name = 'Homer';
const email = 'homer@simpson.com';
та
const name = 'Hacker';
const email = "hacker@simpson.com'); DELETE FROM users --";
Звичайно, валідація вхідних даних може запобігти ін'єкції SQL. Однак правильно не використовувати у запитах JS змінні, а параметри.
Виправлений код виглядає так:
client.query('INSERT INTO users(name, email) VALUES($1, $2) RETURNING *', [name, email]);
Усі query builders генерують такі запити, а DB клієнти вміють із ними працювати.
👍40💯4
​​Can You Change the Behavior of a Running Node.js Process From the Outside?
#worth_seeing

Доповідач Vladimir de Turckheim показує як за допомогою дебаг протоколу змінити поведінку Node.js процесу. Так це hacking. Саме тому, деякі компанії для продакшену компілюють Node.js без модуля inspector.

👀відео
🔥10👍1
#list

Сьогодні у рекомендаціях добірка посилань You don't (may not) need. Якщо у вас на проєкті ще використовується moment.js, то я рекомендую почати з You don't (may not) need Moment.js. Для React розробників буде цікаво прочитати, чому їм може бути не потрібні Redux та React Router. Для Node.js розробників як завжди я рекомендую краще знати CLI.
🔥10👍93