Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Чем отличаются операционные ошибки от ошибок программиста?
#code_pattern

Ошибки в ходе выполнения можно разделить на операционные ошибки (база данных не доступна, внешний API не вернул ответ и т.д.) и на ошибки программиста, т.е. баги в коде. Типичная ошибка #nodejs программиста TypeError: Cannot read property '...' of undefined. TypeScript снижает количество таких ошибок, но не убирает их полностью.

С точки зрения REST API отмечу, что необходимо использовать валидацию входящих данных и использовать 400 код, если она не прошла. А вот 500-ый http код создан именно для ошибок программиста.

Ошибки обоих типов должны быть залогированы, но уровень для операционных ошибок info/error, а ошибок программиста – error/fatal.

Операционные ошибки могут и должны быть обработаны. Ошибки же программиста не могут быть обработаны, так как приводят программу в неизвестное состояние. По хорошему приложение необходимо перезапустить.

Подробней по теме:
🔗Distinguish operational vs programmer errors
🔗Error Handling in Node.js
Live stream scheduled for
#announcement #voice_chat

9 сентября в 21:00 поговорим о команде разработки, ее составе и создании.
Гость: Виталий Ратушный, Tech Enthusiast, Interviewer, Architect. Trying to get to the bottom of things. First principles thinker. Passionate ‘bout neuropsychology and perception development.

Вопросы:
 Какие роли могут быть в команде?
 Как UX/UI дизайнер участвует в разработке?
 Кто такой продукт овнер и откуда он берет требования?
 Кто такой техлид/архитектор? Что такое право на push-back?
 Какой состав Dream Team?

Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Cloud Development
DOU #Tech
Аудіозапис технічного войсчату від 3.09.2021

Спікери:
🗣 Нікіта Галкін, Cloud Architect at Formelife, автор @node_recipes, організатор GDG Cloud Kyiv

🗣 Антон Бойко, Senior Solution Architect в BoykoAnt.PRO, засновник Ukrainian Microsoft Azure Community, Microsoft Azure Technical Expert, Microsoft Azure MVP з 2014

🗣 Руслан Кусов, AWS Cloud COE Lead at SoftServe, APN Ambassador (AWS)
В чем различие таймеров в Node.js и browser?
#nodejs_api

Сегодня обсудим setTimeout и setInterval. На обоих платформах данные функции доступны глобально и предназначены для запуска отложенного кода.

Первым аргументом должен быть TimerHandler. В #nodejs это может быть только функция, но в браузере это может быть еще и строка. К ней будет применен eval. Что безусловно является плохой практикой, так как может привести к проблемам с безопасностью. Используйте eslint правило no-implied-eval, чтобы следить за кодом.

Вторым аргументом является количество миллисекунд, а дальнейшие параметры будут переданы в качестве аргументов внутрь TimerHandler. Тут различий нет. Различие есть в возвращаемом значение. В браузере это будет число, а в Node.js объект типа NodeJS.Timeout.

NodeJS.Timeout имеет такие методы публичные методы:
- unref – отметить таймаут как не активный, т.е. он не будет удерживать EventLoop. Аналогичные вещи есть у сокетов, воркеров и т.д.
- ref – отменяет unref
- hasRef – дает текущее значение активности таймера.
- refresh – перезапускает таймер.
- close – аналогичен вызову clearInterval на таймере.

Чтобы отменить выполнение таймера используется clearInterval/clearTimeout. Они полностью заменяемы и в браузере, и в Node.js – по сути являются алиасами. Node.js в качестве аргумента принимает как число, так и NodeJS.Timeout объект.

На этом пора остановиться, хотя в рецепт не попали setImmediate, не публичные апи, особенности поведения в браузере в зависимости от активности таба, связь async_hooks и таймеров, event loop delay и прочее.
Как обнаружить синхронные операции в Node.js коде?
#nodejs_api

Каждый #nodejs разработчик знает, что блокировать Event Loop-а плохо. Блокировка может быть по двум причинам:
– cpu intensive операции, т.е. с большим количеством вычислений. Примеры: трансформация JSON объекта на 2 мегабайта, обход большого массива, подсчеты хешей.
– синхронные операции, т.е. операции которые до своего завершения блокируют Event Loop, читай дальнейшее выполнение JavaScript. Пример – все синхронные файловые операции.

Ваш код может использовать синхронные операции неявно. Кто его знает, что там в node_modules. Именно о том, как быстро найти такие места этот рецепт.

У Node.js есть специальный флаг --trace-sync-io. При его использование в консоль будут выводить trace для первого вызова любого синхронного вызова. Запускаем с этим флагом или c переменной окружения NODE_OPTIONS=--trace-sync-io и анализируем результаты. На своем проекте я так обнаружил, что пора выкинуть module-alias и переконфигурировать pino.

Рецепты по теме:
- Как запускать Node.js с доп. аргументами?
About Team Setup.mp4
56.6 MB
#voice_chat About Team Setup
Гость: Виталий Ратушный, Tech Enthusiast, Interviewer, Architect. Trying to get to the bottom of things. First principles thinker. Passionate ‘bout neuropsychology and perception development.

Вопросы:
 Какие роли могут быть в команде?
 Как UX/UI дизайнер участвует в разработке?
 Кто такой продукт овнер и откуда он берет требования?
 Кто такой техлид/архитектор? Что такое право на push-back?
 Какой состав Dream Team?

Задавайте вопросы в комментариях и подключайтесь в эфир!
Вышел Prettier v.2.4.0

Если вы не обновляли TypeScript до 4.4, то теперь ну точно пора. В новой версии Prettier завезли поддержку новых фич из TS. Подробней в блоге
Forwarded from Nikita
Через 2 часа начинаем Cloud Study Jam!

Ссылка для подключения: https://gdg.community.dev/e/mrkfg2/ Будет доступна за 15 минут до начала
Чат для обсуждений во время и после: https://xn--r1a.website/GDGCloudKyiv_chat

Как получить аккаунт:

1. Откройте в режиме инкогнито https://go.qwiklabs.com/cloud-study-jams-2021
2. Нажмите Enroll под Deploy to Kubernetes
3. Введите код 1s-kyiv-6969, он будет работать ближайшие 24 часа
4. Нажмите Join to Enroll in this Quest
5. Если аккаунт уже есть, то нажмите Sign in instead или создайте новый аккаунт на Qwikilabs. Если емейл долго не приходит воспользуйтесь www.qwiklabs.com/users/confirmation/new
6. После авторизации нажмите Enroll Quest.
7. Начните первую лабораторную. Пожалуйста, не нажимайте окончить раньше чем через 5 минут после старта. Это необходимо, чтобы получить ваш первый месяц бесплатного пользования платформой.
8. Окончите все лабораторные. Получите ваш бейдж и еще один месяц пользования платформой.

Агенда:
11:00 - 11:30 Welcome
11:30 - 13:30 Совместное прохождение квеста
13:30 - 14:00 Обсуждение ресурсов для обучения GCP, Cloud Native и Kubernetes
Free Oracle Cloud Training and Certificates
#freebies

Конкуренция среди Cloud Provider-ов идет не только за клиентов, но и за разработчиков, которые начинают свой путь в облачные технологии. Большая тройка AWS, GCP и Azure являются безусловными фаворитами. Компаниям, которые с ними конкурируют приходиться давать лучше условия – бесплатные обучения/сертификации, больше бесплатных ресурсов во free tier.

Такой компанией является Oracle. Да у них есть свой Cloud. До конца года можно пройти бесплатное self-paced обучение с возможностью сдать сертификацию. Есть ветки развития как для разработчиков, так и для архитекторов.

🔗 Oracle University
🔗 free tier
Обзор Node.js v16: Что такое corepack и как он работает?
#nodejs_api

В Node.js v16.9 добавили corepack. Данный инструмент является экспериментальным и упрощать работу с альтернативными менеджеров зависимостей. При обращение к yarn или pnpm (поддерживаемые менеджеры) будет происходит вызов установленных corepack-ом так называемые глобальных binary proxies. Данные прокси смотрят поле packageManager в package.json и вызывает соответствующую версию yarn/pnpm. При необходимости происходит установка отсутствующего менеджера. Если package.json нет, то используется LTS версия менеджера. Поддержки npm нет, так как npm устанавливается глобально вместе с Node.js. Инструмент улучшает Repeatability и решает проблему отсутствия аналогов nvm для yarn/pnp.

Мое личное отношение к альтернативным менеджерам – они расслаивают экосистему и комьюнити. Я стараюсь избегать таких вещей. В разработке хватает инструментов и проблем вызванных их обилием. Однако я понимаю почему данный инструмент необходим комьюнити. Уверен и вы поймете, если вспомните что в марте 2020 GitHub/Microsoft поглотили компанию npm. Именно в марте 2020 был написан первый коммит corepack, который тогда назывался pmm. Поэтому я считаю, что corepack это правильный шаг без которого слишком легко оказаться в тупике развития моностэка технологий.
#announcement #voice_chat

16 сентября в 21:00 поговорим о инструментах разработчика.
Гость: Старовойт Андрей, Team Lead WebStorm в JetBrains. Последние семь лет работает над поддержкой самых разных технологий в IDE, начиная от простых библиотек вроде classnames, заканчивая React и TypeScript.

Вопросы:
 Что такое инструменты разработчика?
  Где проходит граница между текстовым редактор и средой разработки?
 Какие инструменты помимо того где мы пишем код, имеют значение?
 Как добавляется поддержка для библиотек и фреймворков?
🔥 И конечно извечный холивар JavaScript VS TypeScript

Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Live stream scheduled for
#announcement
Слабые игроки жалуются на то, что рынок труда перегрет, а сильные вкладываются в свои образовательные программы.

20-22 сентября NiX проводит тестирование и набор на внутреннее обучение. Событие пройдет оффлайн в Харькове, Fabrika.space. Перешлите это сообщение вашим харьковским друзьям, которые хотят вайти в айти.

Регистрация и подробности https://nix-education-testing.com/
#voice_chat about Development Tools

Гость: Старовойт Андрей, Team Lead WebStorm в JetBrains. Последние семь лет работает над поддержкой самых разных технологий в IDE, начиная от простых библиотек вроде classnames, заканчивая React и TypeScript.

Вопросы:
 Что такое инструменты разработчика?
  Где проходит граница между текстовым редактор и средой разработки?
 Какие инструменты помимо того где мы пишем код, имеют значение?
 Как добавляется поддержка для библиотек и фреймворков?
🔥 И конечно извечный холивар JavaScript VS TypeScript

PS К сожалению я допустил где-то ошибку и запись не произошла. Возможно это глюк телеграмма. Если кто знает как это решить – прошу в личку.
Live stream started
Live stream finished (1 hour)
14 октября пройдет бесплатная онлайн JS #conference от компании JetBrains. Язык докладов английский. Стриминг платформа – YouTube, так что записи будут доступны сразу. Тем не менее я рекомендую смотреть онлайн и задавать вопросы.

В программе 9 докладов. Лично меня заинтересовали: работа с монорепой и новый подход во фронтенде – htmx.

Регистрация: https://pages.jetbrains.com/javascript-day-2021
#cfp #conference

🔍 Команда Fwdays ищет докладчиков на онлайн конференцию для JS разработчиков - Fwdays: JS is back!, которая пройдет 27 ноября!
Приоритетные тематики докладов:
▪️GraphQL
▪️BFF: Backend for Frontend
▪️Exotic JavaScript: devices, VR/AR, DevOps
▪️Performance
▪️Security
▪️Testing
▪️Switch to JS
▪️Not only JS

Если вы или ваши коллеги желаете выступить, обязательно присылайте заявку до 25 октября👉 https://bit.ly/3zgt9eP 

Есть сомнения в теме или ораторских способностях? Не страшно, Fwdays вместе с программным комитетом конференции помогут подготовиться к выступлению 😉
Что нужно знать об Error stack trace?
#nodejs_api

В JavaScript есть встроенный объект Error, который сохраняет stack trace (на русском трассировка стека). Так называется список методов, которые были вызваны до момента, когда в приложении произошло ошибка. Он доступен как error.stack и выглядит так:
Error: Things keep happening!
at /home/user/file.js:525:2
at Frobnicator.refrobulate (/home/user/business-logic.js:424:21)
at Actor.<anonymous> (/home/user/actors.js:400:8)
at increaseSynergy (/home/user/actors.js:701:6)

Плохой практикой является использование throw c литералами или объектами не наследниками Error. У них не будет stack trace.

По умолчанию длина стэка ограничена 10 методами. Параметр можно изменить на уровне кода через Error.stackTraceLimit. На уровне v8 существует флаг --stack-trace-limit. Его можно передать как аргумент или через переменную окружения NODE_OPTIONS=--stack-trace-limit=10

Начиная с 12-ой версии Node.js у нас есть поддержка Async Stack Traces. Пример stack trace:
Error: Oops
at bar (/workspace/test.js:11:9)
at async run (/workspace/test.js:5:3)
Для поддержки этих stack trace рекомендуется делать await перед return. Подробней в nodebestpractices.

Если код скомпилирован с помощью babel или typescript, то правильным будет показывать stack trace для исходного кода, а не скомпилированного. Для этого использовался пакет source-map-support. Под капотом идет использование Error.prepareStackTrace. Однако сейчас Node.js умеет это делать из коробки с помощью флага --enable-source-maps
👍3