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 – воркшоп с примером трейсинга
В гостях: Алексей Бобырь, 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 утилита.
#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
#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
#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, поэтому уверен программа будет интересной. Рекомендую к регистрации и просмотру.
#conference
Git Nation проводит несколько конференций в год. Возможно, вы слышали о них:
- TestJS Summit
- Node Congress
- GraphQL Galaxy
- JSNation Live
- React Summit
Первой из них пройдет Node Congress.
Когда: 17-18 Февраля
Формат: онлайн
Регистрация: nodecongress.com
Билеты: бесплатной для просмотра онлайн или 46 euro
Тем на сайте еще нет, но список докладчиков уже выложен. Программный комитет возглавляет Matteo Colina, поэтому уверен программа будет интересной. Рекомендую к регистрации и просмотру.
👍15
Когда и как использовать
#web_api
Сегодня обсудим Web API
На данный url будет отправлен POST запрос. Его Content-Type будет зависит от аргумента data. По умолчанию это
Чтобы работать с
Тогда на сервере мы сразу получаем JSON, с которым удобно работать.
Используйте данное API для построение своей системы аналитики.
Ссылки:
🔗 MDN
🔗 Can I use
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
Агенда, которую мы вряд ли успеем покрыть:
- Проблема некачественных курсов по программированию
- Обучение на основе чтения кода и исправления ошибок
- Обучение на нескольких языках и через переводы
- Полное разрушение высшего образования
- Программирование в школах
- Особый путь для свитчеров
- Кому нужно системное программирование
- Подготовка лоукод-специалистов
- Как подготовить: постановщики задач, архитекторы, бизнес-аналитики
- Новые профессии
До встречи в эфире!
На этой неделе #voice_chat будет About Software Engineering Education с Тимуром Шемсединовым
Когда: в четверг, 13 января, в 21:00
Где: https://news.1rj.ru/str/node_recipes?voicechat
Агенда, которую мы вряд ли успеем покрыть:
- Проблема некачественных курсов по программированию
- Обучение на основе чтения кода и исправления ошибок
- Обучение на нескольких языках и через переводы
- Полное разрушение высшего образования
- Программирование в школах
- Особый путь для свитчеров
- Кому нужно системное программирование
- Подготовка лоукод-специалистов
- Как подготовить: постановщики задач, архитекторы, бизнес-аналитики
- Новые профессии
До встречи в эфире!
👍19🤩10💩6🔥5🎉3
Есть такой проект Best of JS. Его автор каждый год делает топ OpenSource JS библиотек набравшие за год наибольшее количество звезд на GitHub. Топ разбит на категории. В категории #nodejs frameworks картина такова:
1. Next.js – находиться в категории из-за позиционирования как фулстэк фреймворк.
2. Nest.js – top-1 для BE разработки
3. Strapi – вложено очень много в маркетинг, осваивают инвесторские деньги.
Посмотреть итоги года можно тут: 2021 JavaScript Rising Stars.
1. Next.js – находиться в категории из-за позиционирования как фулстэк фреймворк.
2. Nest.js – top-1 для BE разработки
3. Strapi – вложено очень много в маркетинг, осваивают инвесторские деньги.
Посмотреть итоги года можно тут: 2021 JavaScript Rising Stars.
👍9
Как использовать assert для улучшения читабельности кода?
#typenoscript
В javanoscript разработки мы обычно используем assert в коде тестов, но не в коде приложения. Мой опыт работы с koa читабельность кода с assert получается выше.
Пример из библиотеки koa:
Т.е. если пользователь не найден, будет выкинута ошибка с указанным текстом и статусом 401. Дальше по коду вы можете быть уверены, что
Причем TypeScript автоматически изменит тип выражения. Это достигается за счет использования Assertion Functions, который появились с версии 3.7. Пример такой функции:
К сожалению, Nest.js и Fastify из коробки не имеют встроенного 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.
В 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 команда переписала руководство и держит его актуальным после каждого релиза. Поэтому обучение начинайте именно с него. Книгу можно скачать бесплатно, в конце странице
📕Effective TypeScript. Книга от O'Reilly в формате принципов языка с объяснением почему стоит делать именно так. Например:
📕Programming TypeScript by Boris Cherny. Еще одна книга от O'Reilly с фокусом на реальной практике применения. Каждая глава заканчивается упражнениями для закрепления теории.
📕TypeScript 4 Design Patterns and Best Practices Свежая книга, которая не только показывает фичи языка, но и паттерны их использования.
#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. Кодовая база
Ссылки:
👀 Видео
📕 Сайт
⚙️ GitHub
#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. Возможно, для вас будет полезнее другой доклад, поэтому прикрепляю весь плейлист. Он стоит того, чтобы уделить ему вечер.
Ссылки
👀Видео
📕Слайды
🔗Сайт конференции
👉Плелист всех видео с конференции
#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
👉Регистрация
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?
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/
Вопрос к читателям из других стран: РФ, Европа и т.д. А где вы смотрите аналитику зарплат?
🔗 Ссылка: https://dou.ua/lenta/articles/salary-report-devs-winter-2022/
Вопрос к читателям из других стран: РФ, Европа и т.д. А где вы смотрите аналитику зарплат?
👍6
Как отследить работу Garbage Collector?
#web_api #nodejs_api
Плохая организация JavaScript кода может привести к утечке памяти. Для отслеживания утечки ресурсов в ES2021 появился FinalizationRegistry. Так можно вызвать callback после отработки Garbage Collector по указанному ресурсу:
⚠️Пример максимально упрощен. При запуске без массового создания новых объектов ждать сборки мусора придется долго.
Авторы не рекомендует использовать для построение бизнес логики, реализация сборки мусора, зависит от реализации любого конкретного движка JavaScript.
Работает в #nodejs 14.6.0 и новее. Для работы в TypeScript необходимо включить es2021.weakref.
Ссылки:
🔗 пример для запуска в браузере
🔗 MDN
🔗 TC39
🔗 Can I use
#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
🔥6
Как работать с Event Emitter в async/await стиле?
#nodejs_api
В 2022 году асинхронных #nodejs код строиться на async/await. Однако важный модуль Event Emitter построен на callback-ах. Начиная с 12.16 версии в нем есть встроенный функционал для упрощения работы с Promise. За это отвечают две функции:
В 16 Node.js добавили options для передачи AbortController.
Упрощенный пример кода демонстрирующий обе функции:
⚠️В пример
Ссылки:
⚙️ Код на runkit
📕 Документация events
👩🍳 Обзор AbortController
#nodejs_api
В 2022 году асинхронных #nodejs код строиться на async/await. Однако важный модуль Event Emitter построен на callback-ах. Начиная с 12.16 версии в нем есть встроенный функционал для упрощения работы с Promise. За это отвечают две функции:
events.on(emitter, eventName[, options]) – возвращает AsyncIterator, который легко итерировать конструкцией for awaitevents.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();⚠️В пример
await handle, сделано для демонстрации работы AsyncIterator. В результате такой конструкции HttpServer будет обрабатывать запросы не параллельно, а последовательно. Чтобы это исправить можно убрать await на этой строке.Ссылки:
⚙️ Код на runkit
📕 Документация events
👩🍳 Обзор AbortController
👍18👎1
Подборка книг для изучения 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
#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
👍25