en
Feedback
Node.js Recipes

Node.js Recipes

Open in Telegram
3 195
Subscribers
No data24 hours
-47 days
-230 days
Posts Archive
Топ-5 заблуждений об работе JavaScript #nodejs_api На календаре пятница, а значит пора сбавить градус практичности. Сегодня поделюсь "перлам" с собеседований. Цель поста – ликвидация безграмотность. 👎Все логические операторы (&&, ||, !) возвращают булевы значения. Вообще-то только ! возвращает Boolean. Вопрос для выявления заблуждения, что будет выведено: console.log('0' && 3) 👎Расчет возвращаемого Promise-ом значения будет запущен при await. Нет, он будет запущен в момент создания, т.е. как только мы создали Promise мы сразу запустили цепочку (promise chain). Где вы ставите await, и ставите ли, не имеет значения. 👎Все аргументы в функциях работают одинаково. Как и в других языках программирования примитивные и ссылочные типы ведут себя по разному. Вопрос для выявления заблуждения, что плохо в коде: function getTomorrow(d) { d.setDate(d.getDate() + 1); return d; } 👎Обработка событий происходит асинхронно. Ошибка характерна и для Node.js с Event Emitter, и для FE разработчиков с Browser Events. Event handler-ы работают синхронно, причем их порядок вызова зависит от порядка добавления. 👎JavaScript обладает идеальной точностью арифметики. Уже столько раз писали, о том что 0.1 + 0.2 == 0.3 это false, что многие это зазубрили. Однако, об этом забывают в доменах, где ошибка округления критична (финансы и т.п.). В таких случаях стоит использовать BigInt или подобные решения.

#voice_chat About Nest.js. В гостях Михаил Яли, Software Architect в компании Trilon, автор библиотеки nestjsx/crud. Агенда: – Как связаны Trilon и Nest.js – Лучшие Nest.js практики – Обучение Nest.js: с чего начать – Nest.js экосистема Ссылки, о которых говорили во время чата: - https://github.com/nestjsx/crud - https://discord.com/invite/nestjs - https://marmelab.com/react-admin/ - https://refine.dev/

В начале 2015 я приехал из Донецка в Киев. В то время я работал фрилансером. План был за месяц подготовиться к переезду в Черногорию: снять деньги, поменять ноут увидеться с друзьями. Один из них задал вопрос, а почему не поменять фриланс на работу в галере. Устав от ежедневного поиска клиентов я поменял удаленку на офисную стабильность и задержался в Киеве на 6 лет. В прошлом году я наконец-то отправился на зимовку в теплые страны. Сейчас у меня идет вторая зимовка в Доминикане. Если бы жизнь сложилась по моему первоначальному плану, уверен я бы познакомился с Рубеном, чей проект я вам хочу пропиарить. Да это #реклама. Он разработчик, который живет в Черногории больше 7 лет. За это время помощь друзьям с onboarding-ом в эту страну превратилась в бизнес. Рубен создал в Черногории IT HUB. Миссия Хаба помогать разработчикам и компаниям осваивать Черногорию, предоставить как место и возможность для коллег, куда можно приехать сменить обстановку, отдохнуть или даже релокейтнуться. Если мне было удобней работать по европейской таймзоне, я бы обязательно воспользовался услугами хаба. Опыт самостоятельной организации зимовки в Доминикане показал, что выгоднее заплатить за опыт деньгами, чем нервничать от собственного незнания и сделанных ошибок. Узнать подробности: – @codeforgesHubBothub.codeforges.com - в Инстаграм https://www.instagram.com/p/CZM0YZzNvPy/ – или задать вопросы в комментариях. Рубен обещал туда заглянуть.

​​Что такое RegExp Named Capture Groups? Регулярные выражения это сложно. Их чтение требует больших когнитивных усилий. Чтобы это упростить созданны Named Capture Groups. Сравните две регулярки: 1️⃣/(\d{4})-(\d{2})-(\d{2})/ 2️⃣/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/ Блоки внутри круглых скобок называются capture groups. Во второй регулярке они именованные. Работают они одинаково, но после у второй после вызова exec будет поле groups, смотри картинку или пример на runkit. Еще именнованные группы можно использовать в replace. Пример: "prefix-example".replace(/prefix-(?<value>.*)/, '$<value>') В eslint-plugin-regexp существует правило regexp/prefer-named-capture-group, которое форсирует использование именнованых груп.

#announcement Завтра #voice_chat будет About Nest.js. В гостях Михаил Яли, Software Architect в компании Trilon, автор библио
#announcement Завтра #voice_chat будет About Nest.js. В гостях Михаил Яли, Software Architect в компании Trilon, автор библиотеки nestjsx/crud. Когда: в четверг, 27 января, в 21:00 по Киеву Где: https://t.me/node_recipes?voicechat Агенда: – Как связаны Trilon и Nest.js – Лучшие Nest.js практики – Обучение Nest.js: с чего начать – Nest.js экосистема До встречи в эфире!

Какие инструменты упрощают парное программирование? #list Extreme Programming (XP) предлагает использовать парное программирование для передачи знаний. В традиционном подходе это предполагает работу вдвоем за одним компьютером. С расцветом удаленки правила поменялись. Вот список инструментов, которые упрощают возможность вдвоем запрограммировать новую фичу или пофиксить баг. 1️⃣Main trend: ScreenSharing в любом видео звонке. В некоторых программах (Zoom, Slack) можно подчеркивать места на экране. Не хватает возможности набирать текст второму пилоту. 2️⃣Developer-friendly, т.е. интеграция в IDE. Примеры: Code With Me от JetBrains и Live Sharing для VisualCode. Требует использования одной и той же IDE в команде. 3️⃣Classic: TeamViewer – лучший вариант для решения проблем во время поддержки пользователей. 4️⃣Old school: tmux или tmate для того, чтобы поделиться терминалом, в том числе текстовым редактором vim/nano. Отлично подходит DevOps-ам для поиска проблем. 5️⃣The future is here: То к чему идет индустрия это browser-based IDE. Примеры: GitHub Codespaces, AWS Cloud9, GCP Cloud Shell. Пока у них нет возможности поделиться сеансом, но уверен она появиться.

Как узнать является ли текущий файл точкой запуска? #nodejs_api Точка запуска (entry point) это файл, который указывается в качестве аргумента в команде node file_name.js. Зачем знать является ли текущий файл точкой запуска? Чтобы правильно организовывать код. Например, вы можете стартовать web server или экспортировать его для последующего использования в тестах. Для проверки с CommonJS (стандарт в Node.js) используется require.main или его аналог process.mainModule. Пример, кода: if (require.main === module) { console.log('Entry point'); } else { console.log('Not entry point'); } Для ES модулей код выглядит так: import { fileURLToPath } from 'url'; if (process.argv[1] === fileURLToPath(import.meta.url)) { console.log('Entry point'); } else { console.log('Not entry point'); }

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

Тонкости работы с 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?

​​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

​​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

Middle or Senior Full-Stack Software Engineer for Clearmove #promotion #vacancy #backend #fullstack Компания/проект: Clearmove - это продуктовый стартап (продукт для комфортной релокации сотрудников/глобальная мобильность). Продукт позволяет перевозить сотрудников с одной точки в другую и вся информация по поводу этого релокейта собрана в одном месте. Территориально: Kyiv или remote  Технический стек: JavaScript, TypeScript, React, React Native, Redux, GraphQL, NestJS Команда разработки: 6 Software engineers, 1 DevOps, 1 QA + QAA + Lead QA  Минимальные требования: 3+ года опыта в разработке Зарплата: от 3000-6000$ Прочие подробности вакансии: тут 👉Вопросы@anastasiia_komarova Удаленные из ленты вакансии и как разместить свою: тут.

Как просто улучшить работу с 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?

#voice_chat About Conferences с Alexander Makhomet. Александр co-founder в компании Fwdays которые уже более 10 лет проводят tech events в Украине. Также Александр сотрудничает с компанией Upwork на позиции Engineering Lead, и является кофаундером проекта Ergo.Place. В середине чата к нам присоединилась Ирина Божик, CEO Fwdays. Вопросы: ❓Как организован процесс отбора тем и докладчиков? ❓Отличие организаций онлайн, оффлайн и гибрид конференций? ❓Альтернативные форматы: пубталкс, антиконференции, воркшопы ❓Как организована работа с комьюнити? Интересны ссылки упомянутые в разговоре: - Завирусившийся доклад Саши Соловьева в 2013 - Fwdays Tech Talks

Подборка книг для изучения 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

Senior Node.js Developer for Energi.ai #promotion #vacancy Проект: стартап Energi.ai. Платформа, которая позволяет компаниям понимать и улучшать свой углеродный след путем анализа и рекомендаций по уменьшению выбросов CO2 в атмосферу. Обязанности: Комплексная разработка продукта с нуля: новые функции, интеграции со сторонними системами и т.д. Разработка серверной части решения в Node.js. Формат: Kyiv или remote Технический стек: Node.js, GCP Минимальные требования: 4+ года опыта разработки на Node.js Зарплата: от 6.000 USD/месяц Прочее: Английский B2 👉Вопросы и резюме слать @Lotos_111

Как работать с 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(); Ссылки: ⚙️ Код на runkit 📕 Документация events 👩‍🍳 Обзор AbortController

#announcement На этой неделе #voice_chat будет About Conferences с Alexander Makhomet. Александр co-founder в компании Fwdays
#announcement На этой неделе #voice_chat будет About Conferences с Alexander Makhomet. Александр co-founder в компании Fwdays которые уже более 10 лет проводят tech events в Украине. Также Александр сотрудничает с компанией Upwork на позиции Engineering Lead, и является кофаундером проекта Ergo.Place Когда: в четверг, 20 января, в 21:00 Где: https://t.me/node_recipes?voicechat ❓Как организован процесс отбора тем и докладчиков? ❓Отличие организаций онлайн, оффлайн и гибрид конференций? ❓Альтернативные форматы: пубталкс, антиконференции, воркшопы ❓Как организована работа с комьюнити? До встречи в эфире!

Как отследить работу 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

​​Читатели из Украины знают об зарплатной аналитики DOU. Ее сегодня обновили по итогам декабрьского опроса. 🔗 Ссылка: https://dou.ua/lenta/articles/salary-report-devs-winter-2022/ Вопрос к читателям из других стран: РФ, Европа и т.д. А где вы смотрите аналитику зарплат?