Node.js Recipes – Telegram
Node.js Recipes
3.22K subscribers
167 photos
7 videos
1 file
614 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Как TC39 предложения внедряются в TypeScript?
#typenoscript

В 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
15 Factor App
#devops

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

Ребята из IBM расширили манифест до 15 факторов. Новые факторы:
– API First, т.е. сначала делаем контракт нового API, а только потом его реализовываем.
– Telemetry. Логи из 12 факторов это поток событий, а телеметрия это time series метрики.
– Authentication and authorization. Снова напоминаем себе и команде об важности безопасности.
👍33😱1
Какие вопросы задать, чтобы проверить понимание 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
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
​​oclif.io – Open CLI Framework
#package

Вчера на Voice Chat Алексей озвучил своей виденье, что правильная организация кода должна позволять сделать из web приложения CLI утилиту. Как правило CLI утилиты написаны на Python (например AWS, GCP). Но есть примеры и на #nodejs: heroku, salesforce, twilio. Они все написаны на фреймворке oclif. У него отличная документация, возможность сразу делать упаковку в исполняемый файл под нужную операционку, публикация на S3, поддержка typenoscript и отличное комьюнити. Однозначный выбор для тех.стэка в проект, которому необходима CLI утилита.
👍9🔥5💩2
Advanced TypeScript Playlist by Basarat
#typenoscript #worth_seeing

Сегодня в рекомендациях не одно видео, а целый плейлист от Basarat. Вы знаете автора по книге TypeScript Deep Dive. В плейлисте собранны короткие видео уроки по продвинутому использованию typenoscript. Вот три видео, которые мне стоит пересказать как рецепты в рамках канала:
– 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
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
​​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
Когда и как использовать 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
#announcement

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

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

До встречи в эфире!
👍19🤩10💩6🔥5🎉3
Live stream scheduled for
​​Есть такой проект Best of JS. Его автор каждый год делает топ OpenSource JS библиотек набравшие за год наибольшее количество звезд на GitHub. Топ разбит на категории. В категории #nodejs frameworks картина такова:
1. Next.js – находиться в категории из-за позиционирования как фулстэк фреймворк.
2. Nest.js – top-1 для BE разработки
3. Strapi – вложено очень много в маркетинг, осваивают инвесторские деньги.

Посмотреть итоги года можно тут: 2021 JavaScript Rising Stars.
👍9
Как использовать assert для улучшения читабельности кода?
#typenoscript

В javanoscript разработки мы обычно используем 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
​​Как запустить Recorder в Chrome?

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

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

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

Подробней в Chrome DevTools.
🔥36
Audio
#voice_chat About Software Engineering Education с Тимуром Шемсединовым

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

В сегодняшней подборке все книги на английском языке. Читайте на английском. Это позволит вам изучать устоявшуюся терминологию. Вы ведь не ходите называть Promise Обещанием, а Tuple Кортежем?

📕The TypeScript Handbook. В марте 2021 команда переписала руководство и держит его актуальным после каждого релиза. Поэтому обучение начинайте именно с него. Книгу можно скачать бесплатно, в конце странице grab a copy in Epub or PDF form.

📕Effective TypeScript. Книга от O'Reilly в формате принципов языка с объяснением почему стоит делать именно так. Например: Prefer Type Declarations to Type Assertions

📕Programming TypeScript by Boris Cherny. Еще одна книга от O'Reilly с фокусом на реальной практике применения. Каждая глава заканчивается упражнениями для закрепления теории.

📕TypeScript 4 Design Patterns and Best Practices Свежая книга, которая не только показывает фичи языка, но и паттерны их использования.
👍37🔥12
llhttp - new HTTP 1.1 parser for Node.js
#worth_seeing #typenoscript

На этой неделе в войс чате с Тимуром мы поднимали вопрос о системном программирование, т.е. создание инструментов для создания продуктов. Сегодняшний доклад как раз об этом.

В докладе Федор рассказывает как и зачем был переписан http_parser. Произошло это в 2019. Кодовая база http_parser на чистом С перестала быть поддерживаемой. Ее переписали на С + TypeScript и назвали llparse. Его исходный код стоит изучить с целью улучшения как своих навыков работы с TypeScript, так и понимания принципов работы http в целом.

Ссылки:
👀 Видео
📕 Сайт
⚙️ GitHub
👍19
​​Testing Pyramid Makes Little Sense, What We Can Use Instead
#worth_seeing

Сегодняшнее видео предлагает переосмыслить концепт пирамиды тестирования. Глеб Бахмутов и Роман Сандлер разбирают различные подходы в тестирования JS проектов. Они вводят матрице Compromise VS Effort, предлагают список вопросов, которые стоит задать себе и команде для выбора подходов.

Для меня это самое полезное видео с ноябрського TestJsSummit 2021. Возможно, для вас будет полезнее другой доклад, поэтому прикрепляю весь плейлист. Он стоит того, чтобы уделить ему вечер.

Ссылки
👀Видео
📕Слайды
🔗Сайт конференции
👉Плелист всех видео с конференции
🔥11👍5
26-27 января состоится #conference TheJam.dev 2022. Это двух дневная бесплатная онлайн конференция посвященная JAM стэку.
👉Регистрация

JavaScript разработчику нужно знать об этом стэке, не зря первая буква в JAM это javanoscript. Node.js разработчику будет полезно иметь опыт работы с какой-либо Headless CMS.

Ссылки в тему:
🔗 jamstack.org
🔗 jamstack.wtf
👍2
​​Обновление Open Machine Learning Course

Yorko (Юрий Кашницкий) зарелизил обновленную версию mlcourse.ai. Раньше он проходился в когортах, теперь его можно пройти в self-paced режиме. Я сам проходил этот курс. Знания из курса помогли построение процессов с Data Science инженерами.

Почему я его рекомендую для ознакомления #nodejs разработчикам? Во-первых, для прокачки эрудиции и T-shaped экспертизы. Во-вторых, все чаще API должны забирать данные из Machine Learning моделей, а значит понимание как они работают упрощают интеграцию.

Рецепты по теме:
Как технологии будут востребованы для Node.js разработки в 2022?
🔥8👍2
​​Читатели из Украины знают об зарплатной аналитики DOU. Ее сегодня обновили по итогам декабрьского опроса.

🔗 Ссылка: https://dou.ua/lenta/articles/salary-report-devs-winter-2022/

Вопрос к читателям из других стран: РФ, Европа и т.д. А где вы смотрите аналитику зарплат?
👍6