TGViewer
Channel Public Channel
Node.js Recipes

Node.js Recipes

@node_recipes

Subscribers
3.1K
Photos
173
Videos
7
Links
610

Showing posts older than #377 · Back to latest

Older Posts 20 shown
Post #374 2.49K
Audio
#voice_chat About Software Engineering Education с Тимуром Шемсединовым

Агенда:
- Проблема некачественных курсов по программированию
- Кому нужно системное программирование
- Полное разрушение высшего образования
- Программирование в школах
- Особый путь для свитчеров
- Подготовка лоукод-специалистов
- Как подготовить: постановщики задач, архитекторы, бизнес-аналитики
- Новые профессии
  • 🔥 19
  • 👍 2
  • 💩 2
Post #373 2.65K
​​Как запустить Recorder в Chrome?

В 97-й версии Google Chrome появилась возможность записывать действия. Для этого добавили Recorder. С его помощью можно записывать клики в сценарий. Сценарий можно запускать и экспортировать как js файл для puppeteer.

Собственно запуск: Открываем DevTools, в правом верхнем углу жмем ⋮, потом More tools > Recorder.

Фича пока находиться в статусе preview. Надеюсь ее допилят, чтобы можно было импортировать файлы. Мечтаю работать на проекте, где QA используют что-то похожее для баг-репортов.

Подробней в Chrome DevTools.
  • 🔥 36
Post #371 2.17K
Как использовать assert для улучшения читабельности кода?
#typescript

В javascript разработки мы обычно используем assert в коде тестов, но не в коде приложения. Мой опыт работы с koa читабельность кода с assert получается выше.

Пример из библиотеки koa:
ctx.assert(ctx.state.user, 401, 'User not found. Please login!');
Т.е. если пользователь не найден, будет выкинута ошибка с указанным текстом и статусом 401. Дальше по коду вы можете быть уверены, что ctx.state.user определен. Для этого используется пакет http-assert.

Причем TypeScript автоматически изменит тип выражения. Это достигается за счет использования Assertion Functions, который появились с версии 3.7. Пример такой функции:
function assertIsString(val: any): asserts val is string {
if (typeof val !== "string") {
throw new AssertionError("Not a string!");
}
}

К сожалению, Nest.js и Fastify из коробки не имеют встроенного assert, поэтому приходиться писать свой маленький хелпер. Оставлю его вам на самостоятельную реализацию.
  • 🔥 11
  • 👍 1
Post #369 2.14K
​​Есть такой проект Best of JS. Его автор каждый год делает топ OpenSource JS библиотек набравшие за год наибольшее количество звезд на GitHub. Топ разбит на категории. В категории #nodejs frameworks картина такова:
1. Next.js – находиться в категории из-за позиционирования как фулстэк фреймворк.
2. Nest.js – top-1 для BE разработки
3. Strapi – вложено очень много в маркетинг, осваивают инвесторские деньги.

Посмотреть итоги года можно тут: 2021 JavaScript Rising Stars.
  • 👍 9
Post #368
Live stream scheduled for Jan 13, 2022 at 19:00
Post #367 4.9K
#announcement

На этой неделе #voice_chat будет About Software Engineering Education с Тимуром Шемсединовым
Когда: в четверг, 13 января, в 21:00
Где: https://t.me/node_recipes?voicechat

Агенда, которую мы вряд ли успеем покрыть:
- Проблема некачественных курсов по программированию
- Обучение на основе чтения кода и исправления ошибок
- Обучение на нескольких языках и через переводы
- Полное разрушение высшего образования
- Программирование в школах
- Особый путь для свитчеров
- Кому нужно системное программирование
- Подготовка лоукод-специалистов
- Как подготовить: постановщики задач, архитекторы, бизнес-аналитики
- Новые профессии

До встречи в эфире!
  • 👍 19
  • 🤩 10
  • 💩 6
  • 🔥 5
  • 🎉 3
Post #366 2.13K
Когда и как использовать navigator.sendBeacon?
#web_api

Сегодня обсудим Web API navigator.sendBeacon. Beacon API используется для отправки асинхронного и неблокирующего запроса на веб-сервер. Запрос не ожидает ответа. В отличие от XMLHttpRequest или Fetch-based запросов, браузер гарантирует отправку запрос до закрытия страницы или перехода на другую. Поэтому данный API рекомендованный способ для отправки аналитических данных. Его синтаксис:
navigator.sendBeacon(url);
navigator.sendBeacon(url, data);
На данный url будет отправлен POST запрос. Его Content-Type будет зависит от аргумента data. По умолчанию это 'text/plain; charset=UTF-8'. Чтобы #nodejs код мог работать с таким типом контента необходимо включить соотвествующий парсер. В express это app.use(bodyParser.text());. Данные необходимо будет десерилизовать из текста.

Чтобы работать с application/json, клиент должен использовать такой код:
const blob = new Blob([JSON.stringify(data)], { type: 'application/json' });
navigator.sendBeacon(url, blob);
Тогда на сервере мы сразу получаем JSON, с которым удобно работать.

Используйте данное API для построение своей системы аналитики.

Ссылки:
🔗 MDN
🔗 Can I use
  • 👍 15
  • 🔥 11
Post #365 2.18K
​​Node Congress
#conference

Git Nation проводит несколько конференций в год. Возможно, вы слышали о них:
- TestJS Summit
- Node Congress
- GraphQL Galaxy
- JSNation Live
- React Summit

Первой из них пройдет Node Congress.
Когда: 17-18 Февраля
Формат: онлайн
Регистрация: nodecongress.com
Билеты: бесплатной для просмотра онлайн или 46 euro

Тем на сайте еще нет, но список докладчиков уже выложен. Программный комитет возглавляет Matteo Colina, поэтому уверен программа будет интересной. Рекомендую к регистрации и просмотру.
  • 👍 15
Post #364 2.03K
Create an Application Backend in Clicks with the Amplify Admin UI
#aws #worth_seeing

Сегодняшнее видео – это демо, как с помощью AWS Amplify можно сделать backend для вашего мобильного или веб приложения. Докладчик Ali Spittel, является девелопер адвокатом Amplify.

Видео рекомендуется к просмотру, так как Amplify и его аналог в GCP Firebase является отличным выбором для создания прототипа. Скорость разработки и developer experience действительно радуют. Стоит учесть, что для выхода на рынок на таком тэх стэк необходимо очень внимательно следить за правильной архитектурой и FinOps.

Ссылки:
👀 видео
📕 amplify docs
⚙️ sandbox
  • 👍 7
Post #363 2.44K
Advanced TypeScript Playlist by Basarat
#typescript #worth_seeing

Сегодня в рекомендациях не одно видео, а целый плейлист от Basarat. Вы знаете автора по книге TypeScript Deep Dive. В плейлисте собранны короткие видео уроки по продвинутому использованию typescript. Вот три видео, которые мне стоит пересказать как рецепты в рамках канала:
– TypeScript TYPES vs INTERFACES : Key Differences
– TARGET, LIB and POLYFILL for TypeScript and JavaScript
– TypeScript insane type: DeepReadonly

Ссылки:
👀Advanced TypeScript Playlist
📕TypeScript Deep Dive
  • 🔥 22
  • 👍 1
Post #362 2.34K
​​oclif.io – Open CLI Framework
#package

Вчера на Voice Chat Алексей озвучил своей виденье, что правильная организация кода должна позволять сделать из web приложения CLI утилиту. Как правило CLI утилиты написаны на Python (например AWS, GCP). Но есть примеры и на #nodejs: heroku, salesforce, twilio. Они все написаны на фреймворке oclif. У него отличная документация, возможность сразу делать упаковку в исполняемый файл под нужную операционку, публикация на S3, поддержка typescript и отличное комьюнити. Однозначный выбор для тех.стэка в проект, которому необходима CLI утилита.
  • 👍 9
  • 🔥 5
  • 💩 2
Post #358 2.55K
Audio
Первый #voice_chat в 2022 будет сегодня в 21:00 по Киеву. Тема: "Node.js Best Practices". Мы обсудим, где за ними лучше следить, как и когда применять. И, конечно, ответим на ваши вопросы и комментариях.

В гостях: Алексей Бобырь, Principal Engineer в JOIN, работает с NodeJS с 2013. Энтузиаст хороших практик и правильных подходов. Помнит когда async еще был библиотекой, а не словом из синтаксиса языка.

Ссылки:
- https://github.com/goldbergyoni/nodebestpractices – Best Practices, которые обсуждали
- https://github.com/galkin/workshop – воркшоп с примером трейсинга
  • 👍 18
Post #357 3.65K
Какие вопросы задать, чтобы проверить понимание Promise/async/await?
#list

Сегодня поделюсь подборкой моих вопросов для интервью по Promise/async/await. Естественно без ответов, иначе как мне потом их на собеседованиях спрашивать.

1. Какие методы нативного класса Promise вы знаете?
2. Напишите Promise, который создаст микротаск.
3. Напишите Promise, который создаст макротаск.
4. Приведите пример, когда вам было необходимо использовать Promise.allSettled()
5. Что такое Promise executor и почему он должен быть синхронным?
6. Расскажите, что плохо с вот таким кодом:
new Promise((resolve, reject) => getSomething((err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
}));
7. Что произойдет если мы сделаем await дважды? Пример кода:
let counter = 0;
const increment = new Promise(resolve => {
counter++;
resolve();
});
await increment;
await increment;
console.log(counter); // 1? 2? something else?
8. Какое ваше мнение по твиту James M Snell:
Ok, opinions needed: An existing API that returns a Promise currently throws certain errors synchronously. It's changed to return rejected promises (e.g. changing
foo() { throw new Error(); return Promise.resolve() } to async foo() { throw new Error(); return Promise.resolve() }
9. Как отслеживать в #nodejs коде Promise, которые имеют множественный resolve/reject? В каких случаях это указывает на неправильное поведение кода?
10. Каким образом вы работаете с встроенными #nodejs функциями в async/await стиле, которые callback интерфейс?
  • 🔥 28
  • 👍 17
  • 😢 2
Post #356 2.34K
15 Factor App
#devops

Я часто рассказываю об 12 факторах. Это манифест как делать веб приложения правильно (масштабируемо, переносимо и т.д.). Прелесть этих факторов, что они универсальны:
– работают для любой архитектуры – монолит или микросервисы
– любого языка
– любого облака

Ребята из IBM расширили манифест до 15 факторов. Новые факторы:
– API First, т.е. сначала делаем контракт нового API, а только потом его реализовываем.
– Telemetry. Логи из 12 факторов это поток событий, а телеметрия это time series метрики.
– Authentication and authorization. Снова напоминаем себе и команде об важности безопасности.
  • 👍 33
  • 😱 1
Post #355 2.18K
Как TC39 предложения внедряются в TypeScript?
#typescript

В Node.js v16 появились новые фичи. Одна из них Array.at. К сожалению, использовать ее в TypeScript проектах еще нельзя.

TC39 выделяет такие stages для предложений:
🤷🏻 Stage 0: Strawperson.
💡 Stage 1: Proposal.
✍🏻 Stage 2: Draft.
📝 Stage 3: Candidate.
✅ Stage 4: Finished.
Подробней тут.

Так вот TypeScript внедряет фичи только на стадии Stage 3. Это не быстрый процесс, так как необходимо не только добавить описание в базовые d.ts файлы, но и сделать транспайлинг в ECMAScript версии не поддерживающий данную фичу. По-сути сделать функционал аналогичный babel плагинам.

К сожалению, Array.at перенесли из релиза 4.5 в 4.6.

⚠️Транспайлинг в старые версии идет только для синтаксических конструкций, как пример sync/await. Для новых методов в старых версиях ECMAScript необходимо подключать полифилы (смотри ts-polyfill или core-js). Спасибо Илье за вопросы в комментариях.

Рецепты по теме:
– Обзор Node.js v16: Новые JavaScript конструкции
  • 👍 3
Post #354 2.18K
Что такое WICG?

WICG расшифровывается Web Incubator Community Group. WICG является часть W3 и там делают предложения по расширению браузерного функционала. Не стоит путать с TC39, которые занимаются предложениями по расширению спецификации ECMAScript.

Примеры предложений, за которыми я слежу:
– File System Access, для доступа к локальной файловой системы из браузера
– Get Installed Related Apps, для понимание установлено ли приложение

Что дает WICG для разных типов разработчиков:
– Для FE, очевидно, знание и адаптация нового функционала.
– Для BE консистентности API в браузере и #nodejs. Пример по scheduling apis и timer promises.
– Для архитекторов и тех.лидов определение правильного места для реализации функционала.

WICG занимается не только JS API, но и HTML, CSS, WASM функционалом. Подробней рекомендую ознакомиться по данным ссылкам:
🔗 Сайт: wicg.io
🔗 GitHub: github.com/WICG
🔗 Forum: discourse.wicg.io
  • 👍 16
Post #353 2.16K
​​Application integration patterns for microservices
#worth_seeing #aws #microservices

Сегодня в рекомендациях видео с AWS re:Invent 2021. Докладчик Dirk Fröehner делает доклады об паттернах интеграции микросервисов каждый год. Если вы еще не видели, то обязательно посмотрите. Доклад естественно сделан на базе AWS стэке, но терминология и паттерны универсальны являются базой микросервисной архитектуры.

👀видео
📕cлайды
  • 👍 11
Post #352 2.09K
​​Road to production
#worth_seeing

В мае 2021 компания DevPro проводила онлайн JS конференцию, где я делал доклад "Road to Production". Идея доклада поделиться подходами на каждом из фаз life cycle разработки приложения. В рамках доклада я использовал DevOps концепцию "Day 0/Day 1/Day 2", которая обозначает:
day 0️⃣ – проектирование и создание PoC
day 1️⃣ – разработка и релиз
day 2️⃣ – поддержка и мониторинг

👀видео
🔗my-talks.net
📕Слайды

Схожими идеями в рамках VinnytsiaJS 2021 делился Виталий Ратушный
  • 🔥 20
  • 👍 3
Post #351 1.92K
Дорогие подписчики от всего сердца поздравляю вас с наступающим новым годом. Спасибо вам, что считай каждый пост в канале сопровождается комментариями. Искрене желаю мира, здоровья и профессиональных успехов!
  • 🎉 57
  • 🔥 33
  • 👍 20
  • ❤ 3
  • 🤩 1
Post #350 2.03K
Команда Telegram выкатила обновление:
- нативные реакции (я их включил в чате и на канале)
- спойлеры выглядит вот так
Другие фичи в блоге.

Лично для меня обновление прям новогодний подарок. До этого был выбор или лайки, или комменты.
  • 👍 70
  • 🔥 28
  • 🎉 23
  • 😱 15
  • 🤩 11
  • 😁 4
  • 💩 2
  • 👎 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →