en
Feedback
Node.js Recipes

Node.js Recipes

Open in Telegram
3 195
Subscribers
No data24 hours
-47 days
-230 days
Posts Archive
Mo'Problems, Mo'Nads by Kyle Simpson #worth_seeing Кайл Симпсон – автор серии книг "You Don't Know JS". В сегодняшнем докладе он рассказывает о том, что такое монады. Кайл проводит аналогию монад и регулярных выражений. И то, и другое не является популярный при написание коммерческого кода. Такие приемы увеличивает когнитивную сложность кода, а ее следует упрощать. Поэтому Кайл неоднократно предупреждает, что монады могут быть плохим решением в некоторых случаях. Тем не менее знать о существование такого подхода стоит, хотя бы для общей эрудиции. 📕Slides 📕Functional Light JS

Serverless by Stefan Judis #worth_seeing Популярный вопрос среди новичков: "Как отправлять контактную форму с лендинга?". В своем докладе Stefan Judis показывает ответ на этот вопрос. Он использует #nodejs не как сервер, а как функцию. В докладе я первый раз услышал термин JAFM stack, то есть JAM + Functions. Рекомендую его посмотреть, особенно если вы не работали с serverless. 📕Slides

Как работает Readonly в TypeScript? #typescript В чистом JavaScript нельзя запретить изменение объектов и массивов без использования библиотек или просадки производительности. В TypeScript для этого существует: ➡️ ключевое слово readonly в классе, интерфейсе или типе, которое запрещает изменение указанного свойства. ➡️ Readonly<Type> возвращает тип, у которого все свойства будут readonly ➡️ ReadonlyArray<Type> определяет типа массива, у которого запрещено изменение элементов ➡️ as const делает объект или массив неизменяемым Данный синтаксис позволяет контролировать бизнес логику на этапе компиляции и не создает ухудшение перфоманса в run-time. Однока следует помнить, что существует проблема: "Interface with readonly property is assignable to interface with mutable property" Пример: interface MutableValue<T> { value: T; } interface ImmutableValue<T> { readonly value: T; } let i: ImmutableValue<string> = { value: "hi" }; i.value = "Excellent, I can't change it"; // compile-time error let m: MutableValue<string> = i; m.value = "Oh dear, I can change it"; Данная проблема известна уже 4 года и ее не планирую решать.

Voice Chat #2, About testing #voice_chat Гость: Хотемской Александр, независимый SDET контрактор с 10 летним опытом в автоматизации тестирования. Вопросы: ❓ Где граница обязаностей в работе разработчиков и тестировщиков? Кто отвечает за какие виды тестов? ❓ Какие инструменты и для чего использовать? ❓ Документация VS специкация. Кто и как должен ее вести? ❓ Виды проектов и особенности их тестирования, подготовка данных для автотестов? Ссылки, которые были озвучены: 🔗 Сервис для тестирования емейлов 🔗 Node.js митап 🔗 openapi-response-validator 🔗 GDG Cloud Kyiv 🔗 reqover для оценки coverage 🔗 Playlist "How test REST API" от Саши 🔗 playwright.dev модая либа для UI тестов

refactoring.guru #code_pattern #typescript В комментариях к код ревью считается хороший тоном оставлять ссылки на внешние ресурсы. Так коллега сможет быстрее понять, что ему рекомендуют. Помимо ссылок на документацию библиотек или #nodejs я оставляю ссылки на разделы refactoring.guru. Там есть и паттерны проектирования, и советы по рефакторингу. Александр Швец сопровождает их хорошей визуализацией, переводами на разные языки и примерами кода, в том числе на TypeScript.

Запуск GDG Cloud Kyiv #announcement #cloud В конце апреля я проводил Cloud Study Jam. Это был trail event. По его итогу открыли Google Developer Group Cloud Kyiv. Google помогает комьюнити доступом к различным ресурсам. У нас уже была Google Developer Group Kyiv, но там фокус не на Cloud. Комьюнити создано, чтобы помочь инженерам в освоение Cloud Native подходов. Именно инженерам, без разделения на разработчиков и DevOps инженеров. Разработчикам нужно знать облачные инструменты, а DevOps инженерам особенности поддержки и разворачивания языков. Ссылки на комьюнити: 🔗 Платформа: https://gdg.community.dev/gdg-cloud-kyiv/ 🔗 Канал: https://t.me/GDGCloudKyiv 🔗 Чат: https://t.me/GDGCloudKyiv_chat Первое мероприятие через неделю. 🎤 Cloud Study Jam: Build a Website on Google Cloud 📍 26 мая, 18:30-21:00 🔗 Регистрация

Какая связь у UUID и MD5? #architecture Вчера был опубликован types/node@14.17.0. Теперь typescript проекты могут использовать crypto.randomUUID, который возвращает 4-ую версию uuid. Отличный повод поговорить, что общего у MD5 и UUID. MD5 это хэш файла и используется для проверки, что файл не был поврежден в ходе загрузки. UUID это случайный идентификатор вида 63f04799-4bc1-4101-be08-263306e7b6ae. UUID имеет длину 128 бит и столь низкий шанс повтора, что его можно считать уникальным. Хеш MD5 тоже имеет длину 128 бит, но и не гарантирует уникальности, а только имеет низкую вероятность коллизии. Из-за наличия коллизий его часто критикуют, ведь он подвержен birthday-атаке. На одном из проектов, с хранением видео файлов использовали MD5 для нахождения дубликатов и случайный UUID как первичный ключ в БД. То есть использовались два 128-ми битных ключа. Один хранился как uuid, второй как строка. Использование MD5 как UUID позволил сохранить структура данных такой же, но убрать информационную избыточность. Вот пример кода: export function md5_to_uuid(md5: string): string { if (typeof md5 !== 'string') throw Error('md5 should be string'); if (!/^[a-f0-9]{32}$/.test(md5)) throw Error('Wrong md5 format'); return `${md5.substring(0, 8)}-${md5.substring(8, 12)}-${md5.substring(12, 16)}-${md5.substring(16, 20)}-${md5.substring(20)}`; } export function uuid_to_md5(uuid: string): string { return uuid.replace(/-/g, ''); } В завершение хочу сказать спасибо @Jek_Rock, за нахождение ошибок в первой версии рецепта.

Voice Chat #2, О тестирование, 20 Мая 21:00-22:00 #announcement #voice_chat В этот четверг в гостях будет Хотемской Александр, независимый SDET контрактор с 10 летним опытом в автоматизации тестирования. Обсудим такие вопросы: ❓ Где граница обязаностей в работе разработчиков и тестировщиков? Кто отвечает за какие виды тестов? ❓ Какие инструменты и для чего использовать? ❓ Документация VS специкация. Кто и как должен ее вести? ❓ Виды проектов и особенности их тестирования, подготовка данных для автотестов?

Как понять запущен ли Node.js внутри Docker? #nodejs_api #docker Docker контейнеры созданы, чтобы запускать только один процесс. У этого процесса id всегда 1. Рекомендуемый запуск #nodejs: ENTRYPOINT ["node", "src/index.js"] Тогда на уровне кода легко проверить const isDocker = process.pid === 1 Кроме айди текущего процесса (process.pid), у нас есть айди родительского процесса – process.ppid. Для стартового процесса он равен 0. Если вы запускаете через npm run ..., то npm будет иметь pid=1 и являться родительским процессом для Node.js. Так делать не следует. Возможные варианты использования: 1️⃣ При локальной разработке использовать человекочитаемые логи, а внутри Docker в формате json: const pino = require('pino'); const logger = pino({ prettyPrint: process.pid !== 1 }); Требует pino-pretty. 2️⃣ Переходить в debug режим по нажатию ctrl+T. if (process.pid !== 1) { process.on('SIGINFO', () => { require('inspector').open(); }); } Это автоматизация для дебага запущенного процесса. Без нее сначала узнаем айди процесса через ctrl+T, а потом делаем kill -SIGUSR1 <pid>

В чем проектировать структуру базы данных? #service #database Как известно, исправлять ошибки на этапе проектирование проще в
В чем проектировать структуру базы данных? #service #database Как известно, исправлять ошибки на этапе проектирование проще всего. Поэтому делайте дизайн структуры базы данных. Вот подборка онлайн сервисов с удобной визуализацией и кодогенераций. Все они платные, но бесплатного тарифа хватает для фича дизайна. ➡️ SqlDBM – лучший функционал, активно развивается. Легко переключается режим просмотра. ➡️ drawsql.app – Очень простой и приятный интерфейс. Бесплатный план отлично подойдет для проекта до 15 таблиц. ➡️ dbdiagram.io – есть свой DSL, так называемый Database Markup Language. К сожалению, проект не развивается уже год. Альтернативы, про которые не стоит забывать: ➡️ Дизайнить в SQL с последующей визуализацией в DataGrip или его аналоге. ➡️ Бумага и карандаш

10 Things I Regret About Node.js by Ryan Dahl  #worth_seeing Сегодня доклад, у которого полмиллиона просмотров. Это неудивительно, ведь докладчик создатель Node.js Ryan Dahl. Первая половина доклада анализ допущенных ошибок во время создания #nodejs, вторая – продвижение Deno. 📕Slides

Product 360: Payments by Wix 26-28 мая #conference #freebies ➡️ 26-28 мая | 18:00-20:00 ➡️ Онлайн, бесплатно ➡️ Регистрация �
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+ версий продукта.

HTTP/3 by Daniel Stenberg #worth_seeing Даниэль Стенберг известен как создатель CURL. В своем докладе он рассказывает о том, что такое HTTP/3 и какие проблемы он решает. 📕 http/3 explained 📕 Slides

Вышла Node.js 14.17 #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 раза.

"Что там на рынке?" с Алесей Кулаковой #voice_chat

Через 50 минут будет Voice Chat #1, "Что там на рынке?" c Кулаковой Алесей. Пожалуйста используйте комментарии к этому сообщению для вопросов и обсуждения. До связи в эфире! #voice_chat

Как определить не используемые зависимости? #package #cli На картинке популярный мем про node_modules. Одной из причин раздут
Как определить не используемые зависимости? #package #cli На картинке популярный мем про node_modules. Одной из причин раздутия данной папки являются неиспользуемые зависимости. Для облегчения их нахождения существует пакет depcheck. Устанавливать его в приложения не нужно, достаточно запустить npx depcheck . Данная команда покажет неиспользуемые и забытые зависимости. Работает как с javascript, так и с typescript. Верить результатам на 100% не стоит, особенно, если вы используете в коде магию🪄🎩. Проверьте свой проект. Вдруг в package.json пора навести порядок.

​​Что такое .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=error fund=false update-notifier=false audit=false В yarn-based проектах необходимо использовать .yarnnc. Он не заменяет, а дополняет .npmrc. Посмотреть результат конфигурации yarn config list

MongoDB University #freebies Начинающие #nodejs разработчики обычно выбирают первой базой данных MongoDB. Упростить ее изучен
MongoDB University #freebies Начинающие #nodejs разработчики обычно выбирают первой базой данных MongoDB. Упростить ее изучение позволяют MongoDB University. В настоящий момент в каталоге 14 курсов. 6 из них объединены в Developer Learning Path. Курсы регулярно обновляются, устаревший закрываются, а прохождение организовано по когортам, как в coursera. По окончанию выдается бесплатный сертификат. Не путайте его с MongoDB сертификацией, которая стоит 150$ и включает в том числе бейдж. Платформа отлично подходит для обучения и я смело могу рекомендовать ее в план развития.

Voice Chat #1, Что там на рынке? 13 Мая 21:00-22:00 #announcement #voice_chat В этот четверг состоится Voice Chat c Кулаковой Алесей, Business Development & Account Manager в рекрутинговом агентстве Indigo Tech Recruiters. Мнение с обоих стороны – и кандидата, и агенства на вопросы: ❓ Какая сейчас ситуация на рынке #nodejs разработки? ❓ Как и почему меняется рынок, что на это влияет? ❓ На что смотрят клиенты и за что платят? ❓ Почему все интервью с рекрутерами такие одинаковые? Готовьте вопросы и подключайтесь, потому что Алеся шарит.