Что такое Floating Promise и почему это опасно?
#code_pattern #nodejs_api
TL;DR Используйте
Floating (не отловленный, плавающий) promise как правило указывает на ошибку в коде. Если внутри Floating promise произойдет ошибка, то #nodejs процесс аварийно завершит работу. Для отлавливания таких событий существует
Отлавливать Floating promise лучше не в run time, а с помощью линтера. Для этого существуют правила:
➡️ в eslint
➡️ в typenoscript-eslint
➡️ тут мог бы быть tslint, но его уже нельзя использовать.
В определенных случаях, бизнес логика не требует ожидания завершения промиса. Тогда необходимо использовать комментарий в коде, указывающий линтеру игнорировать ошибку. Вот пример, когда REST не дожидается отправки емейла новому пользователю.
#code_pattern #nodejs_api
TL;DR Используйте
no-floating-promises и unhandledRejectionFloating (не отловленный, плавающий) promise как правило указывает на ошибку в коде. Если внутри Floating promise произойдет ошибка, то #nodejs процесс аварийно завершит работу. Для отлавливания таких событий существует
unhandledRejection. Пример из документации:process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason);});Отлавливать Floating promise лучше не в run time, а с помощью линтера. Для этого существуют правила:
➡️ в eslint
➡️ в typenoscript-eslint
➡️ тут мог бы быть tslint, но его уже нельзя использовать.
В определенных случаях, бизнес логика не требует ожидания завершения промиса. Тогда необходимо использовать комментарий в коде, указывающий линтеру игнорировать ошибку. Вот пример, когда REST не дожидается отправки емейла новому пользователю.
import { usersRepository } from '~/repositories';import { sendConfirmationEmail } from '~/services/notifications';import logger from '~/logger';// pseudo route handlerexport async function registerUser(data: newUserDTO): { const user = await usersRepository.create(data); // eslint-disable-next-line @typenoscript-eslint/no-floating-promises sendConfirmationEmail(user) .catch(err => logger({err, user}, 'Error during sending confirmation email'); return user;}42 WebStorm Tips and Tricks
#worth_seeing
Сегодняшнее видео не доклад с конференции, а с вебинара. Оно полностью посвящено тому, как использовать WebStorm на полную мощность.
Вот hotkey к функционалу, который реально ускоряет разработку:
⌥T – refactor for selected text
⌥⌘T – surround with
⌥⌘L – reformat Code
⇧⏎ – smart new line
⌥⌘⏎ – new line before current one
⌥↑ or ⌥↓ – change selection
⇧⌥↑ or ⇧⌥↓ – move lines
Полезные ссылки по WebStorm:
➡️ ShortcutMapper
➡️ WebStorm Guide
➡️ Key Promoter X
PS На холиварный вопрос "WebStorm или VisualStudioCode?" я отвечаю "не или, а и". Для DevOps задач – VS, для разработки – WebStorm.
#worth_seeing
Сегодняшнее видео не доклад с конференции, а с вебинара. Оно полностью посвящено тому, как использовать WebStorm на полную мощность.
Вот hotkey к функционалу, который реально ускоряет разработку:
⌥T – refactor for selected text
⌥⌘T – surround with
⌥⌘L – reformat Code
⇧⏎ – smart new line
⌥⌘⏎ – new line before current one
⌥↑ or ⌥↓ – change selection
⇧⌥↑ or ⇧⌥↓ – move lines
Полезные ссылки по WebStorm:
➡️ ShortcutMapper
➡️ WebStorm Guide
➡️ Key Promoter X
PS На холиварный вопрос "WebStorm или VisualStudioCode?" я отвечаю "не или, а и". Для DevOps задач – VS, для разработки – WebStorm.
YouTube
42 WebStorm Tips and Tricks
#WebStorm brings a bunch of IDE features to professional #JavaScript and web development. Want to "level up" and learn #productivity boosters? This hands-on, fast-paced workshop covers tips across all the major product features.
Many of these tips come…
Many of these tips come…
Dev.Pro JS Conference
#conference #raffle
22-23 мая будет онлайн-конференция, где я буду выступать с докладом
Содержание доклада: ответы на вопросы, о которых нужно задумываться на разных этапах развития #nodejs проекта.
Из докладов для себя я выделил:
👀 Minko Genchev,
👀 Hannes Obweger,
доклад от того, кто реально понимает на личном опыте эту сложную тему.
Так же будет два воркшопа:
⚙️ Тимур Шемсединов
⚙️ Елена Жукова
🎤 Формат: онлайн с использование spatial.chat, лучшим инструментом для онлайн нетворкинга.
➡️ Регистрация: jsconf.dev.pro
💵 Цена: 450грн, промокод на 10% – NodeRecipes
До встречи на конференции!
#conference #raffle
22-23 мая будет онлайн-конференция, где я буду выступать с докладом
The Road to production.Содержание доклада: ответы на вопросы, о которых нужно задумываться на разных этапах развития #nodejs проекта.
Из докладов для себя я выделил:
👀 Minko Genchev,
Tools for Fast Angular Applications, даже если вы не пишете на Angular этот докладчик стоит внимания.👀 Hannes Obweger,
Frontend Engineering at a Scale, доклад от того, кто реально понимает на личном опыте эту сложную тему.
Так же будет два воркшопа:
⚙️ Тимур Шемсединов
Node.js for Enterprise, часть контента уже была в рамках FWdays.⚙️ Елена Жукова
Stunning Performance Workshop, об оптимизации загрузки фронтенда.🎤 Формат: онлайн с использование spatial.chat, лучшим инструментом для онлайн нетворкинга.
➡️ Регистрация: jsconf.dev.pro
💵 Цена: 450грн, промокод на 10% – NodeRecipes
До встречи на конференции!
Среди 80 участников розыгрыша удача улыбнулась: @Vlod_R, @habiiev, @ShGKme!
🎉🎉🎉 Поздравляем!
В ближайшее время с вами свяжется менеджер конференции и поможет оформить ваши билеты.
🎉🎉🎉 Поздравляем!
В ближайшее время с вами свяжется менеджер конференции и поможет оформить ваши билеты.
Зачем нужен тип "true" в TypeScript?
#typenoscript #worth_seeing
Докладчик сегодняшнего видео, Андрей Старовойт делает поддержку TypeScript в продуктах JetBrains. За что ему низкий поклон. Лучше него как работает TypeScript понимают только инженеры из Microsoft, которые собственно делают TypeScript.
В своем докладе Андрей рассказывает как работает литеральные типы, показывает некоторые TS паттерны и объясняет почему стоит явно указывать тип возвращаемого значения функции.
#typenoscript #worth_seeing
Докладчик сегодняшнего видео, Андрей Старовойт делает поддержку TypeScript в продуктах JetBrains. За что ему низкий поклон. Лучше него как работает TypeScript понимают только инженеры из Microsoft, которые собственно делают TypeScript.
В своем докладе Андрей рассказывает как работает литеральные типы, показывает некоторые TS паттерны и объясняет почему стоит явно указывать тип возвращаемого значения функции.
YouTube
Зачем нужен тип "true" в TypeScript?. Андрей Старовойт. JS Fest 2019 Autumn
The talk from JS Fest conference 2019 Autumn in Kyiv, Ukraine.
Литеральные типы в TypeScript, которые появились несколько лет назад, на самом деле произвели мини-революцию в языке, которую многие не заметили. Сегодня сложно представить себе TypeScript без…
Литеральные типы в TypeScript, которые появились несколько лет назад, на самом деле произвели мини-революцию в языке, которую многие не заметили. Сегодня сложно представить себе TypeScript без…
Как уменьшить потребление памяти во время TypeScript компиляции?
#typenoscript #nestjs
TL;DR Используйте skipLibCheck и понимайте import
В чате @nest_ru задали вопрос "
Расскажу об оптимизации из реального проекта с подобной проблемой. На каждом этапе оптимизации удалялся папка build как при сборке Docker-а потом запускалась команда
0️⃣ Начальное состояние:
Memory used: 1006023K Total time: 17.70s
1️⃣ Проверяем в tsconfig.json включенный флага skipLibCheck. Его нет, это типичная ошибка. После включения:
Memory used: 858580K Total time: 15.08s
2️⃣ Смотрим какие импорты библиотек можно упростить. Например,
Memory used: 432743K Total time: 9.67s
Таким образом мы сократили запуск затраты памяти в 2.3 раза и ускорили билд на 8 секунд.
#typenoscript #nestjs
TL;DR Используйте skipLibCheck и понимайте import
В чате @nest_ru задали вопрос "
Сталкнулся с такой проблемой, nest не может сбилдить проект внутри докера на слабой машине с 1gb памяти". По умолчанию Nest.js использует TypeScript для сборки. При неправильной конфигурации он может требовать больше 1GB памяти.Расскажу об оптимизации из реального проекта с подобной проблемой. На каждом этапе оптимизации удалялся папка build как при сборке Docker-а потом запускалась команда
tsc --diagnostics --project tsconfig.build.json, чтобы отследить метрики.0️⃣ Начальное состояние:
Memory used: 1006023K Total time: 17.70s
1️⃣ Проверяем в tsconfig.json включенный флага skipLibCheck. Его нет, это типичная ошибка. После включения:
Memory used: 858580K Total time: 15.08s
2️⃣ Смотрим какие импорты библиотек можно упростить. Например,
aws-sdk стоит 400Mb. На проекте она используется в одном файле. Делаем вот такой рефакторинг:import KinesisVideo from 'aws-sdk/clients/kinesisvideo';import KinesisVideoSignalingChannels from 'aws-sdk/clients/kinesisvideosignalingchannels';import type { AWSError } from 'aws-sdk/lib/error';// import { AWSError, KinesisVideo, KinesisVideoSignalingChannels } from 'aws-sdk';Memory used: 432743K Total time: 9.67s
Таким образом мы сократили запуск затраты памяти в 2.3 раза и ускорили билд на 8 секунд.
👍1
Voice Chat #1, Что там на рынке? 13 Мая 21:00-22:00
#announcement #voice_chat
В этот четверг состоится Voice Chat c Кулаковой Алесей, Business Development & Account Manager в рекрутинговом агентстве Indigo Tech Recruiters.
Мнение с обоих стороны – и кандидата, и агенства на вопросы:
❓ Какая сейчас ситуация на рынке #nodejs разработки?
❓ Как и почему меняется рынок, что на это влияет?
❓ На что смотрят клиенты и за что платят?
❓ Почему все интервью с рекрутерами такие одинаковые?
Готовьте вопросы и подключайтесь, потому что Алеся шарит.
#announcement #voice_chat
В этот четверг состоится Voice Chat c Кулаковой Алесей, Business Development & Account Manager в рекрутинговом агентстве Indigo Tech Recruiters.
Мнение с обоих стороны – и кандидата, и агенства на вопросы:
❓ Какая сейчас ситуация на рынке #nodejs разработки?
❓ Как и почему меняется рынок, что на это влияет?
❓ На что смотрят клиенты и за что платят?
❓ Почему все интервью с рекрутерами такие одинаковые?
Готовьте вопросы и подключайтесь, потому что Алеся шарит.
Node.js Recipes pinned «Voice Chat #1, Что там на рынке? 13 Мая 21:00-22:00 #announcement #voice_chat В этот четверг состоится Voice Chat c Кулаковой Алесей, Business Development & Account Manager в рекрутинговом агентстве Indigo Tech Recruiters. Мнение с обоих стороны – и кандидата…»
MongoDB University
#freebies
Начинающие #nodejs разработчики обычно выбирают первой базой данных MongoDB. Упростить ее изучение позволяют MongoDB University. В настоящий момент в каталоге 14 курсов. 6 из них объединены в Developer Learning Path.
Курсы регулярно обновляются, устаревший закрываются, а прохождение организовано по когортам, как в coursera. По окончанию выдается бесплатный сертификат. Не путайте его с MongoDB сертификацией, которая стоит 150$ и включает в том числе бейдж. Платформа отлично подходит для обучения и я смело могу рекомендовать ее в план развития.
#freebies
Начинающие #nodejs разработчики обычно выбирают первой базой данных MongoDB. Упростить ее изучение позволяют MongoDB University. В настоящий момент в каталоге 14 курсов. 6 из них объединены в Developer Learning Path.
Курсы регулярно обновляются, устаревший закрываются, а прохождение организовано по когортам, как в coursera. По окончанию выдается бесплатный сертификат. Не путайте его с MongoDB сертификацией, которая стоит 150$ и включает в том числе бейдж. Платформа отлично подходит для обучения и я смело могу рекомендовать ее в план развития.
Что такое .npmrc и почему его стоит добавить?
#cli
У npm как и других #nodejs инструментов есть конфигурация через rc файл. Вы можете разместить
Полный перечень параметров в приведен документации. Рассмотрим те, которые стоит отключить:
➡️ update-notifier – регулярно показывает сообщение, что пора обновиться. Делать этого не стоит.
➡️ fund, выводит xx packages are looking for funding. Поддержите opensource и смело выключайте.
➡️ audit, после каждого npm install показывает сжатый security audit. После добавления
Выключение всех этих параметров уменьшит количество бесполезных логов. Осталось изменить уровень loglevel с notice на error и получим
В yarn-based проектах необходимо использовать .yarnnc. Он не заменяет, а дополняет .npmrc. Посмотреть результат конфигурации
#cli
У npm как и других #nodejs инструментов есть конфигурация через rc файл. Вы можете разместить
.npmrc в папке проекта или в папке $HOME . Используйте npm config list, чтобы увидеть итоговую конфигурацию.Полный перечень параметров в приведен документации. Рассмотрим те, которые стоит отключить:
➡️ update-notifier – регулярно показывает сообщение, что пора обновиться. Делать этого не стоит.
➡️ fund, выводит xx packages are looking for funding. Поддержите opensource и смело выключайте.
➡️ audit, после каждого npm install показывает сжатый security audit. После добавления
npm audit в CI можно смело выключать.Выключение всех этих параметров уменьшит количество бесполезных логов. Осталось изменить уровень loglevel с notice на error и получим
.npmrc, который выводит в CI только важную информацию:loglevel=errorfund=falseupdate-notifier=falseaudit=falseВ yarn-based проектах необходимо использовать .yarnnc. Он не заменяет, а дополняет .npmrc. Посмотреть результат конфигурации
yarn config list👍4
Как определить не используемые зависимости?
#package #cli
На картинке популярный мем про
Проверьте свой проект. Вдруг в
#package #cli
На картинке популярный мем про
node_modules. Одной из причин раздутия данной папки являются неиспользуемые зависимости. Для облегчения их нахождения существует пакет depcheck. Устанавливать его в приложения не нужно, достаточно запустить npx depcheck . Данная команда покажет неиспользуемые и забытые зависимости. Работает как с javanoscript, так и с typenoscript. Верить результатам на 100% не стоит, особенно, если вы используете в коде магию🪄🎩.Проверьте свой проект. Вдруг в
package.json пора навести порядок.👍1
Через 50 минут будет Voice Chat #1, "Что там на рынке?" c Кулаковой Алесей.
Пожалуйста используйте комментарии к этому сообщению для вопросов и обсуждения.
До связи в эфире!
#voice_chat
Пожалуйста используйте комментарии к этому сообщению для вопросов и обсуждения.
До связи в эфире!
#voice_chat
Вышла Node.js 14.17
#nodejs_api
Вышло минорное обновление текущий LTS версии.
В нем добавлены:
➡️ Diagnostics channel, экспериментальный модуль портированый из 16-ой версии. Не годиться для коммерческой разработки. Может быть интересен для создателей библиотек.
➡️ AbortController, так же портированы из 16-ой версии. Требуют флага. Не буду повторяться.
🔥 crypto.randomUUID() добавляет нативную генерацию UUID:
После этого обновления можно смело выбрасывать пакет uuid. Нативный вариант быстрее в 3 раза.
#nodejs_api
Вышло минорное обновление текущий LTS версии.
В нем добавлены:
➡️ Diagnostics channel, экспериментальный модуль портированый из 16-ой версии. Не годиться для коммерческой разработки. Может быть интересен для создателей библиотек.
➡️ AbortController, так же портированы из 16-ой версии. Требуют флага. Не буду повторяться.
🔥 crypto.randomUUID() добавляет нативную генерацию UUID:
const { randomUUID } = require('crypto');console.log(randomUUID());// 'aa7c91a1-f8fc-4339-b9db-f93fc7233429'После этого обновления можно смело выбрасывать пакет uuid. Нативный вариант быстрее в 3 раза.
HTTP/3 by Daniel Stenberg
#worth_seeing
Даниэль Стенберг известен как создатель CURL. В своем докладе он рассказывает о том, что такое HTTP/3 и какие проблемы он решает.
📕 http/3 explained
📕 Slides
#worth_seeing
Даниэль Стенберг известен как создатель CURL. В своем докладе он рассказывает о том, что такое HTTP/3 и какие проблемы он решает.
📕 http/3 explained
📕 Slides
YouTube
HTTP/3 is next Generation HTTP. Is it QUIC enough? • Daniel Stenberg • GOTO 2019
This presentation was recorded at GOTO Copenhagen 2019. #GOTOcon #GOTOcph
http://gotocph.com
Daniel Stenberg - Creator of curl and Receiver of the Polhem Prize
ABSTRACT
HTTP/3 is the designated name for the coming next version of the protocol that…
http://gotocph.com
Daniel Stenberg - Creator of curl and Receiver of the Polhem Prize
ABSTRACT
HTTP/3 is the designated name for the coming next version of the protocol that…
Product 360: Payments by Wix 26-28 мая
#conference #freebies
➡️ 26-28 мая | 18:00-20:00
➡️ Онлайн, бесплатно
➡️ Регистрация 👉 https://bit.ly/Wix-Product-360
Компания WIX входит в топ-10 брендов IT-работодателей Украины. Внутри компании классная инженерная культура. В конце месяца будет эвент, где можно будет к ней приобщиться.
Программа:
∙ 26 мая — Разработка продукта по правилам Wix: от проблем пользователей к их решению;
∙ 27 мая — Разработка многостороннего продукта в стремительно меняющейся среде;
∙ 28 мая — A/B-тестирование: ешь, тестируй, люби - и так по кругу!
#nodejs разработчикам особенно будет интересен второй день, 27 мая. Инженеры Wix расскажут как они одновременно поддерживают большие нагрузки и 10+ версий продукта.
#conference #freebies
➡️ 26-28 мая | 18:00-20:00
➡️ Онлайн, бесплатно
➡️ Регистрация 👉 https://bit.ly/Wix-Product-360
Компания WIX входит в топ-10 брендов IT-работодателей Украины. Внутри компании классная инженерная культура. В конце месяца будет эвент, где можно будет к ней приобщиться.
Программа:
∙ 26 мая — Разработка продукта по правилам Wix: от проблем пользователей к их решению;
∙ 27 мая — Разработка многостороннего продукта в стремительно меняющейся среде;
∙ 28 мая — A/B-тестирование: ешь, тестируй, люби - и так по кругу!
#nodejs разработчикам особенно будет интересен второй день, 27 мая. Инженеры Wix расскажут как они одновременно поддерживают большие нагрузки и 10+ версий продукта.
10 Things I Regret About Node.js by Ryan Dahl
#worth_seeing
Сегодня доклад, у которого полмиллиона просмотров. Это неудивительно, ведь докладчик создатель Node.js Ryan Dahl. Первая половина доклада анализ допущенных ошибок во время создания #nodejs, вторая – продвижение Deno.
📕Slides
#worth_seeing
Сегодня доклад, у которого полмиллиона просмотров. Это неудивительно, ведь докладчик создатель Node.js Ryan Dahl. Первая половина доклада анализ допущенных ошибок во время создания #nodejs, вторая – продвижение Deno.
📕Slides
YouTube
10 Things I Regret About Node.js - Ryan Dahl - JSConf EU
See also https://github.com/ry/deno
JSConf EU is coming back in 2019 https://2019.jsconf.eu/
JSConf EU is coming back in 2019 https://2019.jsconf.eu/
В чем проектировать структуру базы данных?
#service #database
Как известно, исправлять ошибки на этапе проектирование проще всего. Поэтому делайте дизайн структуры базы данных.
Вот подборка онлайн сервисов с удобной визуализацией и кодогенераций. Все они платные, но бесплатного тарифа хватает для фича дизайна.
➡️ SqlDBM – лучший функционал, активно развивается. Легко переключается режим просмотра.
➡️ drawsql.app – Очень простой и приятный интерфейс. Бесплатный план отлично подойдет для проекта до 15 таблиц.
➡️ dbdiagram.io – есть свой DSL, так называемый Database Markup Language. К сожалению, проект не развивается уже год.
Альтернативы, про которые не стоит забывать:
➡️ Дизайнить в SQL с последующей визуализацией в DataGrip или его аналоге.
➡️ Бумага и карандаш
#service #database
Как известно, исправлять ошибки на этапе проектирование проще всего. Поэтому делайте дизайн структуры базы данных.
Вот подборка онлайн сервисов с удобной визуализацией и кодогенераций. Все они платные, но бесплатного тарифа хватает для фича дизайна.
➡️ SqlDBM – лучший функционал, активно развивается. Легко переключается режим просмотра.
➡️ drawsql.app – Очень простой и приятный интерфейс. Бесплатный план отлично подойдет для проекта до 15 таблиц.
➡️ dbdiagram.io – есть свой DSL, так называемый Database Markup Language. К сожалению, проект не развивается уже год.
Альтернативы, про которые не стоит забывать:
➡️ Дизайнить в SQL с последующей визуализацией в DataGrip или его аналоге.
➡️ Бумага и карандаш
👍1