Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Знай свой JIT: ближе к машине
#worth_seeing

Сегодня видео с FrontendConf'18. В докладе идет очень подробный разбор как работает V8. Какие этапы javascript проходит код, прежде чем будет исполнен. Вдумчивый слушатель узнает, почему использование TypeScript улучшает производительность JS приложение.

Докладчик Андрей Мелихов известен благодаря своему подкасту девШахта. За последний год подкаст превратился в ютубканал.

Ссылки:
🔗 Слайды
🔗 Расшифровка доклада в виде статьи на хабр
🔗 ДевШахта
Build Better Workloads with the AWS Well-Architected Framework and Tool
#worth_seeing #aws #cloud_native

Сегодня в рекомендациях видео об AWS Well-Architected Framework. Данный фреймворк помогает разворачивать приложения в AWS правильно. Вот ссылки, которые помогут лучше разобраться:
- общая инфо
- white paper, по своей сути является манифестом. Стоит знать, даже если вы не работает с AWS.
- labs, лабораторные для применения идей на практике.
- Well-Architected Tool, инструмент для проверки.

Данное рецепт являет логическим продолжением для тех, кто уже выполнил 100 базовых упражнений для изучения AWS.
Как автоматизировать 2FA?
#package #security

Данный рецепт не о том, как реализовать в своем приложение 2FA (Two-factor authentication). Для этого существуют готовые сервисы, о которых я рассказывал на React fwdays’21. Сегодня кейс из сотрудничества с QA автоматизаторами.

Для проверки приложения необходимо произвести логин пользователя. Это происходит через gmail. Переодически gmail говорит необходима дополнительная проверка – неизвестное устройство. Варианты решения отправка смс или отправка емейл не подходят, так как требуют дождаться этих смс/емейлов, способа их получения, парсинга и т.п.

В данном кейсе правильно использовать google authenticator. Данный 2FA способ виден, только если вы добавили номер телефона. В момент настройке будет показан QR code, который содержит текст вида:
otpauth://totp/Google:<EMAIL>?secret=<SECRET>&issuer=Google
Для того, чтобы генерировать token валидные 30 секунд вам достаточно знания secret. В этом поможет пакет otplib. Пакет позволяет генерировать и проверять не только для authenticator, но One Time Passwords, но как я уже говорил, для этого лучше использовать готовые решения.
Как подтянуть TypeScript?
#typescript #code_pattern

Лучший способ тренировки паттернов кодирование это решений задач. Для этого отлично подойдет проект type-challenges. Каждая из задач предлагает написать свой тип. Есть встроенная проверка. Как это работает можно глянуть на Hello World примере.

В Readme проекта задачи отсортированы по темам и уровням сложности. Некоторые задачи начального уровня предлагают реализовать built-in тип, т.е. который уже есть в TypeScript.
Зачем нужен Symbol в JavaScript?
#code_pattern

В ECMAScript2015 (ES6) появился примитивный тип Symbol. Он используется, чтобы создавать уникальные идентификаторы. Пример:
const first = Symbol('example')
const second = Symbol('example')
first === first // true
first === second // false
Т.е. создать второй раз тот же самый идентификатор нельзя. Их используют для определения свойств объектов, т.е. обращения к его ключам.

Основное назначение Symbol это работа со встроенными фичами языка. Для этого существуют Well-known Symbols, такие как:
- Symbol.iterator
- Symbol.hasInstance
- Symbol.toStringTag
- и т.д., подробней об встроенных символах смотри typescript doc или на habr.

Well-known Symbols, используются на системном уровне программирования, т.е. на уровне библиотек и фреймворков. На прикладном уровне, т.е. на уровне написания кода приложения, а не библиотек, устоявшейся практикой является использование Symbol в декораторах на TypeScript. Пример:
import { SetMetadata } from '@nestjs/common';
export const isPublic = Symbol('isPublic');
export function Public() {
return SetMetadata(isPublic, true);
}
Таким образом можно вы можете гарантировать, что не произойдет коллизии в чтение/записи метаданных из ваших объектов.

Стоит еще знать об Symbol.for и Symbol.keyFor, которые позволяют работать с shared Symbol. По своей сути это глобальные переменные в shared Symbol scope, поэтому опытные программисты стараются их избегать.
👍2
Как использовать Node.js REPL?
#nodejs_api

REPL расшифровывается как read–eval–print loop. Для запуска #nodejs в таком режиме достаточно выполнить node без указания файла.

Работа с REPL очень похожа на работу с Console Panel в Google Chrome:
- пишешь JS код, его результат выводиться в консоль
- Cmd + K on MacOS / Ctrl + L on Windows – очистят консоль

Но есть и различия:
- Переменная _ хранит значение последней команды
- Есть команды начинающиеся с точки. Полный перечень .help
- Чтобы выйти из REPL используйте горячую клавишу Ctrl+D или Ctrl+C дважды

При желание можно написать свой REPL. Например для работы с API или базой данных, как это сделано для MongoDB. Подробней в документации.
Спасибо, что читаете и рекомендуете коллегам!
Что нового в TypeScript 4.4?
#typescript

24 августа выйдет новая версии TypeScript. Вот краткий пересказ release notes:
– В catch блоках можно включить, что тип ошибки будет unknown, вместо any. Для этого добавлен флаг useUnknownInCatchVariables, который по умолчанию включен с strict флагом. При переходе потребует изменить часть кодовой базы.
– Добавлен флаг --exactOptionalPropertyTypes, который запрещает для опциональных полей ставить undefined.
– Добавлена поддержка Class static initialization blocks. Напомню, что при переходе на 16-й версию #nodejs будет поддержка уровне V8, т.е. можно будет использовать и в JS-base проектах.
– Улучшение работы с Index Signatures. До этого это могли быть только number и string. В новой версии добавлены Symbol и template string, а так же разрешены union.
– традиционные изменения в lib.d.ts, который используется по умолчанию, если не указаны lib. Эти изменения являются breaking change. Полный перечень. Если вы используете lib.d.ts в своем проекте, то самое время прочитать Как правильно настроить TypeScript в Node.js проекте?
– улучшена скорость сборки и интеграция с Visual Studio
30 seconds of code – сборник код-снипетов
#list #code_pattern

В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
Почему нужно избегать магии?
#code_pattern

Там где исчезает понимание техника превращается в магию. Программистам следует этого избегать.

Avoid magic strings
Выглядит данная магия так:
function isFriend(name) {
if (name === 'Alice') return true;
...
}
Поддерживать и читать этот код сложно. Вынесение таких строк как Alice в отдельный файл или объект с константами обычная практика в JS. В TypeScript для этих целей используется string base enum.

Avoid magic numbers
Аналогичная проблема может быть с числами.
function isAdult(user) {
return user.age >= 16;
}

Решение аналогично. Перенос в константы. Улучшение читабельности и поддержки. 16 лет как пороговое значение будет разным в разных доменах.
Для автоматизации используйте eslint, там есть правило no-magic-numbers.
Как правильно проектировать обновление в REST?
#rest #architecture

Вот, что следует учесть при проектирование endpoint-ов, которые будут обновлять состояние ресурсов:
Необходимо полное (PUT) или частичное обновление (PATCH)? Возможно, необходимы оба способа. В блоге Postman на этой неделе была статья What We Learned from 200,000 OpenAPI Files. Из нее можно увидеть, что в среднем PUT используется в 10 раз чаще чем PATCH.
Должен ли сервер проверять, что клиент использует последнюю версию ресурса? Если это необходимо, то необходимы заголовки Etag и If-Match. Если версия ресурса описанная Etag-м на клиенте и сервере отличается, то сервер выдаст ошибку с 412 кодом (Precondition Failed).
Что мы редактируем, сущность или коллекцию сущностей? Для редактирования отдельной сущности (/todos/:id) подойдут и PUT, и PATCH. Но при редактирование коллекции (/todos/) стоит использовать PATCH с body в формате JSON Patch.
Делюсь крутой ссылкой с CTO meetup. https://www.progression.fyi
В ней собраны критерии кто есть синьор/мидл/whatever в разных компаниях.
Context Aware Content Discovery: The Natural Evolution
#rest #worth_seeing

Идея сегодняшнего видео проанализировать как скрапинг контента меняется при работе с API по сравнению с файловыми серверами. Чтобы это сделать, команда из Assetnote собрала из открытых источников Open API Specs, проанализировала тысячи апи и их реализации. Компания занимаются безопасностью, поэтому они выкладывают свои инструменты в OpenSource.

Видео это фундаментальное отчет-исследование. Рекомендую посмотреть целиком особенно если вы занимаетесь парсингом.

Слайды
На август по voice chat был отпуск. В сентябре буду возвращать этот формат. Мне важно ваше мнение когда их проводить, чтобы вы могли послушать эфир, поучаствовать и задавать вопросы.

Как было – Четверг, вечер в 21:00 - 62
👍👍👍👍👍👍👍👍 45%
Morning coffee – Утро буднего дня с 8 до 10 - 11
👍👍 8%
Выходной день с 9 до 11 - 5
👍👍 4%
Все равно, если и слушаю то в записи - 57
👍👍👍👍👍👍👍 42%
Напишу в комментариях - 2
👍 1%
👥 137 человек уже проголосовало.
Complexity vs Incomprehensibility
#principles

Я рекомендую различать сложность, т.е. метрику количества элементов системы/кода/задачи и понятность, т.е. необходимые когнитивные усилия, чтобы понять систему/код/задачу. На английском это Complexity vs Incomprehensibility. Оба этих параметры определяют стоимость создания и поддержки кода. Но именно непонятность вносит большую часть.

Вещи, которые позволяют делать ваш код понятным:
- хороший нейминг
- абстракции и паттерны
- консистеная организация кода
- код ревью
- качественно поставленные задачи

Закончу своей же цитатой: "Все сложное — это состыкованное с друг другом простое. Поэтому делай просто и одинаково. А сложным оно станет само"
#announcement #voice_chat

2 сентября в 21:00 поговорим о том, что такое Culture Fit.
Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)

Вопросы:
 Как проходит Culture Fit Interview?
 Как различается в культура в ентерпрайз и стартапах?
 Различие в Европе, СНГ и США
 Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?

Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Live stream scheduled for
Где посмотреть лучшие практики по безопасности?
#security #list

Лучшие практики безопасности веб-проектов описаны в OWASP cheat sheets. OWASP расшифровывается как Open Web Application Security Project. Вот топ-5 для #nodejs разработчиков:
🔗 NodeJS security cheat sheet
🔗 REST Security Cheat Sheet
🔗 npm Security best practices
🔗 Node.js Docker Cheatsheet
🔗 Microservices Security Cheat Sheet
Подборка node.recipes за август 2021
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Что такое Breaking Change в Web API?
➡️ Почем нынче Node.js разработчики?
➡️ Обзор Node.js v16: Префикс для Core modules
➡️ JavaScript Algorithms and Data Structures
➡️ Обзор сервиса RunKit
➡️ Обзор Node.js v16: Новые JavaScript конструкции
➡️ Где изучать Kubernetes
➡️ Обзор Node.js v16: Упрощение доступа к util.types
➡️ Как и зачем использовать AsyncLocalStorage?
➡️ Как автоматизировать 2FA?
➡️ Как подтянуть TypeScript?
➡️ Зачем нужен Symbol в JavaScript?
➡️ Как использовать Node.js REPL?
➡️ 30 seconds of code – сборник код-снипетов
➡️ Почему нужно избегать магии?
➡️ Как правильно проектировать обновление в REST?
➡️ Complexity vs Incomprehensibility
➡️ Что нового в TypeScript 4.4?
➡️ Где посмотреть лучшие практики по безопасности?

Доклады, которые стоит посмотреть:
👀 Real-time communication with WebRTC: Google I/O 2013
👀 Что такое Code With Me от JetBrains?
👀 Yoni Goldberg on Integration Tests with JavaScript
👀 Знай свой JIT: ближе к машине
👀 Build Better Workloads with the AWS Well-Architected Framework and Tool 
👀 Context Aware Content Discovery: The Natural Evolution

Voice Chats:
На август был отпуск. В сентябре формат возвращается в то же время. Спасибо всем, кто принял участие в голосование.
Forwarded from DOU #tech
Tech voice chat на тему «Cloud Development» проведемо цієї п'ятниці!

📌 3 вересня, о 18:00, за цим посиланням.

Про що поговоримо:
☁️ як хмарні технології вплинули на підходи розробки ПЗ;
☁️ порівняємо AWS vs MS Azure vs Google Cloud (наскільки це можливо 😉);
☁️ тренди і таке інше.

Також не соромтеся пропонувати власні теми для обговорення 👉 @dzzzvinka


Спікери (список може оновлюватися):
🗣 Нікіта Галкін, Cloud Architect at Formelife, автор @node_recipes, організатор GDG Cloud Kyiv
🗣 Антон Бойко, Senior Solution Architect в BoykoAnt.PRO, засновник Ukrainian Microsoft Azure Community, Microsoft Azure Technical Expert, Microsoft Azure MVP з 2014
🗣 Руслан Кусов, AWS Cloud COE Lead at SoftServe, APN Ambassador (AWS)

❗️Формат: 30-45 хвилин говорять лише спікери, потім — підключаємо до слова слухачів.

Статті та топіки на теми: cloud, AWS, Azure


Приєднаєтеся?
Audio
#voice_chat About Culture Fit.

Гость: Алексей Мигутский, Senior Software Development Engineer в Microsoft. Алексей поработал в аутсорсе в Беларуси и Украине, а затем переехал в Берлин и начал свой путь в продуктовых стартапах. Последние пять лет он работает в Microsoft (Microsoft To-Do и GitHub Projects & Issues). Алексей так же занимается коачингом разработчиков (официальный Early Career Advisor в Microsoft и свой проект mtdv.io)

Вопросы:
Как проходит Culture Fit Interview?
Как различается в культура в ентерпрайз и стартапах?
Различие в Европе, СНГ и США
Как и где происходит разделение на BE/FE/FullStack? Как происходит кооперация?

Подключайтесь послушать, задавайте свои вопросы в комментариях и в эфире.