No Way, JOSE
#worth_seeing #security
Сегодня в рекомендациях доклад, который описывает базовые понятия на которых строиться JWT. Докладчик – Sam Bellen, Developer Advocate Engineer в Auth0. Slides
#worth_seeing #security
Сегодня в рекомендациях доклад, который описывает базовые понятия на которых строиться JWT. Докладчик – Sam Bellen, Developer Advocate Engineer в Auth0. Slides
YouTube
No Way, JOSE - Sam Bellen | JSConf Hawaii 2020
Is your first thought when thinking about cryptography, “nope, that’s not for me!”? There’s no need to. When explained with simple examples, you can see the basics are not that complicated. The Javascript Object Signing and Encryption, or JOSE for short is…
Как я провожу собеседования?
#principles
Мое обычное собеседование длиться 1 час. В текущих условиях рынка у бизнеса нет возможности просить у кандидата больше времени. За этот час я проверяю, что кандидат умеет писать код и у него есть понимание тех.стэка.
Написание кода !== составление алгоритма
Написание кода это технический навык, который не должен требовать когнитивных усилий. Для его проверки я использую live-coding c однострочными задачками. Если кандидат гуглит как вернуть Promise из функции, то он скорее всего не писал на современном JS.
Составление алгоритма это сознательная работа, требующая когнитивных усилий. Способность составлять алгоритмы проверяют задачками с Leetcode. В ходе интервью и в повседневной жизни люди по-разному выполняют алгоритмизацию, поэтому я не даю задач на алгоритмы.
Понимание !== знание
В ходе интервью задача проверить, что кандидат способен выполнять задачи на проекте. Для этого ему необходимо не знание документации, а понимание и опыт работы с тех.стэка проекта. В этом помогают вопросы "В чем различие ...?", "Зачем/Почему...?", а не "Что такое ...?" или "Дайте определение ...". Обычно, глубина понимания прямо коррелирует с систем дизайном и алгоритмизацией.
Soft-skills работают всегда
За час кандидат показывает не только свои технические навыки, но и то как он общается. Сосредоточившись на тех. составляющий собеседования кандидат показывает свои повседневные навыки активного слушания, ведения тех. дискуссии, умение признать свою ошибку или незнание.
Матрица скилов
По итогам любой работы должен оставаться артефакт. Артефактом собеседования является матрица скилов кандидата. На ее основание бизнес принимает решение о дальнейшем сотрудничестве с кандидатом. У меня это это 4-7 пунктов с пятибальной шкалой и комментариями.
#principles
Мое обычное собеседование длиться 1 час. В текущих условиях рынка у бизнеса нет возможности просить у кандидата больше времени. За этот час я проверяю, что кандидат умеет писать код и у него есть понимание тех.стэка.
Написание кода !== составление алгоритма
Написание кода это технический навык, который не должен требовать когнитивных усилий. Для его проверки я использую live-coding c однострочными задачками. Если кандидат гуглит как вернуть Promise из функции, то он скорее всего не писал на современном JS.
Составление алгоритма это сознательная работа, требующая когнитивных усилий. Способность составлять алгоритмы проверяют задачками с Leetcode. В ходе интервью и в повседневной жизни люди по-разному выполняют алгоритмизацию, поэтому я не даю задач на алгоритмы.
Понимание !== знание
В ходе интервью задача проверить, что кандидат способен выполнять задачи на проекте. Для этого ему необходимо не знание документации, а понимание и опыт работы с тех.стэка проекта. В этом помогают вопросы "В чем различие ...?", "Зачем/Почему...?", а не "Что такое ...?" или "Дайте определение ...". Обычно, глубина понимания прямо коррелирует с систем дизайном и алгоритмизацией.
Soft-skills работают всегда
За час кандидат показывает не только свои технические навыки, но и то как он общается. Сосредоточившись на тех. составляющий собеседования кандидат показывает свои повседневные навыки активного слушания, ведения тех. дискуссии, умение признать свою ошибку или незнание.
Матрица скилов
По итогам любой работы должен оставаться артефакт. Артефактом собеседования является матрица скилов кандидата. На ее основание бизнес принимает решение о дальнейшем сотрудничестве с кандидатом. У меня это это 4-7 пунктов с пятибальной шкалой и комментариями.
Помогите лучше понимать аудиторию канала.
Через какую юрисдикцию вы получаете оплату?
PS Прошлый опрос по Seniority уровню.
Ukraine - 309
👍👍👍👍👍👍👍👍 65%
Belarus - 25
👍👍 5%
Russia - 91
👍👍👍 19%
Other - 48
👍👍 10%
👥 473 человека уже проголосовало.
Через какую юрисдикцию вы получаете оплату?
PS Прошлый опрос по Seniority уровню.
Ukraine - 309
👍👍👍👍👍👍👍👍 65%
Belarus - 25
👍👍 5%
Russia - 91
👍👍👍 19%
Other - 48
👍👍 10%
👥 473 человека уже проголосовало.
Telegram
Node.js Recipes
Помогите лучше понимать аудиторию канала.
Junior Software Engineer - 98
👍👍👍👍 20%
Software Engineer - 214
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
Junior Software Engineer - 98
👍👍👍👍 20%
Software Engineer - 214
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
#announcement #voice_chat
22 июля в 21:00 поговорим об обучение.
Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".
Вопросы:
❓ В чем особенность IT-обучения?
❓ Кто такие свитчеры? Как менять основной язык?
❓ Как обучаться на джуна? Как расти до синьора
❓ Как составлять план обучения?
Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
22 июля в 21:00 поговорим об обучение.
Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".
Вопросы:
❓ В чем особенность IT-обучения?
❓ Кто такие свитчеры? Как менять основной язык?
❓ Как обучаться на джуна? Как расти до синьора
❓ Как составлять план обучения?
Ссылка для подключения: https://xn--r1a.website/node_recipes?voicechat
До встречи в эфире!
Почему вам нужны знания Promise-ов в async/await коде?
#code_pattern
Async/await является основным стилем для написания асинхронного кода в современной #nodejs. Стоит помнить, что это синтаксический сахар поверх Promise chain. Поэтому для любого уровня разработчика важно понимать когда и для чего использовать такие конструкции:
➡️ Promise.all – необходимо использовать для получения значений, которые независимы. Будет прерван при первой ошибке.
➡️ Promise.race – необходимо использовать для получения первого значения или ошибки. Классический пример, это выброс ошибки по таймауту.
➡️ Promise.allSettled – необходимо использовать для получения всех значений. Ошибки не вызовут остановку, а будут частью результата.
Что дает использование этих конструкций? Вы можете запускать промисы не последовательно, а параллельно. В результате время ответа становиться быстрее.
#code_pattern
Async/await является основным стилем для написания асинхронного кода в современной #nodejs. Стоит помнить, что это синтаксический сахар поверх Promise chain. Поэтому для любого уровня разработчика важно понимать когда и для чего использовать такие конструкции:
➡️ Promise.all – необходимо использовать для получения значений, которые независимы. Будет прерван при первой ошибке.
➡️ Promise.race – необходимо использовать для получения первого значения или ошибки. Классический пример, это выброс ошибки по таймауту.
➡️ Promise.allSettled – необходимо использовать для получения всех значений. Ошибки не вызовут остановку, а будут частью результата.
Что дает использование этих конструкций? Вы можете запускать промисы не последовательно, а параллельно. В результате время ответа становиться быстрее.
Как писать меньше TypeScript интерфейсов?
#typescript
TL;DR Используйте Lookup Types
TypeScript позволяет писать вложенные интерфейсы. Например:
Необходимо создать функцию
Вместо этого следует использовать Lookup Types. Это выглядит так:
Обратите внимание, что всегда используются квадратные скобки и кавычки, а не точка. Такая нотация позволяет делать
#typescript
TL;DR Используйте Lookup Types
TypeScript позволяет писать вложенные интерфейсы. Например:
interface User { id: number; name: string; contacts: { phone: string; email: string; address: { country: string; city: string; street: string; } }}Необходимо создать функцию
updateUserContact. Распространённое решение вынести UserСontact как отдельный интерфейс, или еще хуже продублировать его. Новый интерфейс использовать как тип в функции.Вместо этого следует использовать Lookup Types. Это выглядит так:
type UserСontacts = User['contacts']type UserAddress = User['contacts']['address']Обратите внимание, что всегда используются квадратные скобки и кавычки, а не точка. Такая нотация позволяет делать
union внутри квадратных скобок или использовать keyof. В завершение пример близкий к продакшен коду:function updateUserContact<T extends keyof User["contacts"]>( user: User, contactType: T, contact: User["contacts"][T]): void {// ...}www.typescriptlang.org
Documentation - TypeScript 2.1
TypeScript 2.1 Release Notes
Audio
#voice_chat
Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".
Вопросы:
❓ В чем особенность IT-обучения?
❓ Кто такие свитчеры? Как менять основной язык?
❓ Как составлять план обучения?
Книга, о которую рекомендует Сергей это "Цель. Процесс непрерывного совершенствования" Элияху Голдратт
Chrome Extension для удобного контроля скорости видео.
Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".
Вопросы:
❓ В чем особенность IT-обучения?
❓ Кто такие свитчеры? Как менять основной язык?
❓ Как составлять план обучения?
Книга, о которую рекомендует Сергей это "Цель. Процесс непрерывного совершенствования" Элияху Голдратт
Chrome Extension для удобного контроля скорости видео.
Какие вопросы необходимо решить при внедрение WebSockets?
#architecture
Вот список вопросов, которые я задаю при внедрение WS на проекте.
❓ Какую бизнес задачу решают real-time updates от сервера? Определяет нужны WS, SSE или GraphQL Subscriptions.
❓ Какие клиенты будут использоваться: браузер, мобильные и т.д? Определяет нужен ли fallback, если WS не доступен. Ключевой аргумент в извечном споре socket.io VS ws
❓ Может ли клиент подписываться на конкретный поток сообщений? Определяет механизм создания подписок и поведения в момент пере-подключения.
❓ Какие ACL нужны? Определяет поведения системы в момент подключения, отправки/принятие сообщений и создание подписок.
❓ Где мы разворачиваем? Определяет перечень технологий, которые мы сможем использовать. Например, в AWS есть WS на serverless.
#architecture
Вот список вопросов, которые я задаю при внедрение WS на проекте.
❓ Какую бизнес задачу решают real-time updates от сервера? Определяет нужны WS, SSE или GraphQL Subscriptions.
❓ Какие клиенты будут использоваться: браузер, мобильные и т.д? Определяет нужен ли fallback, если WS не доступен. Ключевой аргумент в извечном споре socket.io VS ws
❓ Может ли клиент подписываться на конкретный поток сообщений? Определяет механизм создания подписок и поведения в момент пере-подключения.
❓ Какие ACL нужны? Определяет поведения системы в момент подключения, отправки/принятие сообщений и создание подписок.
❓ Где мы разворачиваем? Определяет перечень технологий, которые мы сможем использовать. Например, в AWS есть WS на serverless.
Microservices in the Cloud with Kubernetes and Istio
#worth_seeing
Сегодня в рекомендациях видео трехлетней давности с Google I/O' 18. Докладчик Sandeep Dinesh показывает как в микросервисной архитектуре переложить вопросы маршрутизации, оркестрирования, canary-releases и т.д с уровня кода на уровень инфраструктуры.
#worth_seeing
Сегодня в рекомендациях видео трехлетней давности с Google I/O' 18. Докладчик Sandeep Dinesh показывает как в микросервисной архитектуре переложить вопросы маршрутизации, оркестрирования, canary-releases и т.д с уровня кода на уровень инфраструктуры.
YouTube
Microservices in the Cloud with Kubernetes and Istio (Google I/O '18)
Are you building or interested in building microservices? They are a powerful method to build a scalable and agile backend, but managing these services can feel daunting: building, deploying, service discovery, load balancing, routing, tracing, auth, graceful…
WebTransport
#worth_seeing
Два месяца назад я рекомендовал посмотреть интро видео об HTTP/3. Этот протокол открывает возможность для использования WebTransport. Сегодняшнее видео как раз объясняет, что это и какие проблемы решает.
Данная технология не готова к использованию для широкого круга проектов. Рецепт сделан подсветить направление в котором двигается веб-разработка.
Ссылки по теме:
- WebTransport Explainer
- Experimenting with WebTransport
#worth_seeing
Два месяца назад я рекомендовал посмотреть интро видео об HTTP/3. Этот протокол открывает возможность для использования WebTransport. Сегодняшнее видео как раз объясняет, что это и какие проблемы решает.
Данная технология не готова к использованию для широкого круга проектов. Рецепт сделан подсветить направление в котором двигается веб-разработка.
Ссылки по теме:
- WebTransport Explainer
- Experimenting with WebTransport
YouTube
WebTransport (BlinkOn 14)
WebTransport is a new protocol and JavaScript API to permit sites to communicate without head-of-line blocking. This session will provide updates on the latest changes to the spec and implementation as well as future direction. It will also provide plenty…
Kafka Summit
#conference
На следущей неделе, 27-28 июля, пройдет бесплатная онлайн конференция Kafka Summit. Целевая аудитория конференции это разработчики использующие Kafka в продакшене. Лишь небольшая часть #nodejs проектов используют данную технологию. Большинство используют Rabbit или очереди от cloud-провайдеров. Тем не менее о данной технологии стоит иметь представление. В этом может помочь не конференция, а bootcamp который обновили в предверии конференции. Подробней по ссылкам:
- https://www.confluent.io/training/learn-confluent/
- https://www.confluent.io/certification/
#conference
На следущей неделе, 27-28 июля, пройдет бесплатная онлайн конференция Kafka Summit. Целевая аудитория конференции это разработчики использующие Kafka в продакшене. Лишь небольшая часть #nodejs проектов используют данную технологию. Большинство используют Rabbit или очереди от cloud-провайдеров. Тем не менее о данной технологии стоит иметь представление. В этом может помочь не конференция, а bootcamp который обновили в предверии конференции. Подробней по ссылкам:
- https://www.confluent.io/training/learn-confluent/
- https://www.confluent.io/certification/
Как документировать асинхронное API?
#architecture #service
TL;DR Используйте AsynAPI
Упрощенно говоря существует только два способа взаимодействия: Req/Res и Pub/Sub. Еще эти способы называют синхронный и асинхронный.
При Request/Response клиент отправляет запрос на сервер, сервер начинает работу и отправляет ответ клиенту, как только работа будет выполнена. При Publish/Subscribe вместе запроса публикуется событие и ответ не требуется. Некоторые buzzword используемые при PubSub: WebHooks, Event-driven architectures, CQRS.
REST является классическим способом создания Web API и реализует Req/Res взаимодействие. Для его описания традиционно используют OpenApi, старое название Swagger.
Через WebSockets является дву-направленным протоколом, что позволяет создавать на его основе как Req/Res, так и Pub/Sub взаимодействие. Чаще всего WS используют именно для оповещений со стороны сервера, т.е для Pub/Sub. Естественно его следует описывать, использовать Documentation First подход. Для этого и был создан AsynAPI. Он позволяет описывать асинхронное взаимодействия не только по WS, но и по другим протоколам. Рекомендую к использованию.
#architecture #service
TL;DR Используйте AsynAPI
Упрощенно говоря существует только два способа взаимодействия: Req/Res и Pub/Sub. Еще эти способы называют синхронный и асинхронный.
При Request/Response клиент отправляет запрос на сервер, сервер начинает работу и отправляет ответ клиенту, как только работа будет выполнена. При Publish/Subscribe вместе запроса публикуется событие и ответ не требуется. Некоторые buzzword используемые при PubSub: WebHooks, Event-driven architectures, CQRS.
REST является классическим способом создания Web API и реализует Req/Res взаимодействие. Для его описания традиционно используют OpenApi, старое название Swagger.
Через WebSockets является дву-направленным протоколом, что позволяет создавать на его основе как Req/Res, так и Pub/Sub взаимодействие. Чаще всего WS используют именно для оповещений со стороны сервера, т.е для Pub/Sub. Естественно его следует описывать, использовать Documentation First подход. Для этого и был создан AsynAPI. Он позволяет описывать асинхронное взаимодействия не только по WS, но и по другим протоколам. Рекомендую к использованию.
Asyncapi
AsyncAPI Initiative for event-driven APIs
Open source tools to easily build and maintain your event-driven architecture.
All powered by the AsyncAPI specification, the industry standard for defining asynchronous APIs.
All powered by the AsyncAPI specification, the industry standard for defining asynchronous APIs.
Как следить за устареванием кода?
#nodejs_api #typescript
В разработке существует жизненный цикл. Вы можете увидеть его этапы в #nodejs документации в виде stability index. Часть методов помечена как Legacy, т.е. их не стоит использовать как прямо, так и через библиотеки. Аналогичный подход можно использовать в своей кодовой базе. Для этого следует использовать JSdoc
Проверку использования устаревшего кода можно переложить на eslint. Для javascript проектов для этого используется правило import/no-deprecated.
В typescript есть перегрузка функций и устареть может только часть сигнатур. Пример:
Поэтому для typescript проектов следует использовать eslint-plugin-deprecation.
#nodejs_api #typescript
В разработке существует жизненный цикл. Вы можете увидеть его этапы в #nodejs документации в виде stability index. Часть методов помечена как Legacy, т.е. их не стоит использовать как прямо, так и через библиотеки. Аналогичный подход можно использовать в своей кодовой базе. Для этого следует использовать JSdoc
@deprecated. Пример:/** @deprecated use newFunction instead **/function oldFunction() {...}Проверку использования устаревшего кода можно переложить на eslint. Для javascript проектов для этого используется правило import/no-deprecated.
В typescript есть перегрузка функций и устареть может только часть сигнатур. Пример:
function example(userOrId: User): void/** @deprecated use with User instead of user_id **/function example(userOrId: number): voidПоэтому для typescript проектов следует использовать eslint-plugin-deprecation.
В комментариях к одному из рецептов меня спросили, что я думаю по поводу практик описанных в nodebestpractices. Я думаю, что знать об этом отличном репозитории нужно каждому #nodejs разработчику. Собственно эта заметка призывает вас прочитать его содержимое.
GitHub
GitHub - goldbergyoni/nodebestpractices: :white_check_mark: The Node.js best practices list (July 2024)
:white_check_mark: The Node.js best practices list (July 2024) - goldbergyoni/nodebestpractices
👍1
Подборка книг для прокачки, когда ты уже Senior
#list
Начну с хорошей цитаты:
Читать и перечитывать книги я предпочитаю на O'Reilly. Рецепт о том как это делать тут.
Собственно вот список книг, которые я рекомендую:
📕Cloud Native ставит парадигму Cloud Native мышления и дает конкретные рецепты реализации.
📕Refactoring: Improving the Design of Existing Code класика от Мартина Фаулера переписанная с JavaScript примерами
📕Web Scalability for Startup Engineers настольная книга, как проектировать и создавать масштабируемые веб-проекты
📕Programming TypeScript на текущий момент лучшая из книг по TypeScript
Как вы видите в списке отсутствуют книги по #nodejs. Дело в том, что пока я не прочитал ни одной книги, сфокусированной именно на Node.js, которую мне хотелось бы перечитать.
#list
Начну с хорошей цитаты:
A good book gets better at the second reading. A great book at the third. Any book not worth rereading isn’t worth reading. – Nassim TalebЧитать и перечитывать книги я предпочитаю на O'Reilly. Рецепт о том как это делать тут.
Собственно вот список книг, которые я рекомендую:
📕Cloud Native ставит парадигму Cloud Native мышления и дает конкретные рецепты реализации.
📕Refactoring: Improving the Design of Existing Code класика от Мартина Фаулера переписанная с JavaScript примерами
📕Web Scalability for Startup Engineers настольная книга, как проектировать и создавать масштабируемые веб-проекты
📕Programming TypeScript на текущий момент лучшая из книг по TypeScript
Как вы видите в списке отсутствуют книги по #nodejs. Дело в том, что пока я не прочитал ни одной книги, сфокусированной именно на Node.js, которую мне хотелось бы перечитать.
Подборка задач для прокачки, когда ты уже Middle
#list
Сегодня в обзоре список типичных задач #nodejs разработчика не связанных с написанием кода. Все задачи носят практический характер, поэтому я формулирую их в виде
✅ Спроектировать REST API с помощью OpenAPI
✅ Настроить CI/CD с помощью GitHub Actions
✅ Описать архитектуру в draw.io
✅ Описать фичу с помощью plantuml
✅ Добавить систему оповещений с помощью бота (telegram, slack, discord)
✅ Добавить внешнюю систему мониторинга uptime с помощью freshping.io (это бесплатный аналог pingdom). Если работает с GCP, то используйте alerts
✅ Добавить продуктовую аналитику с помощью mixpanel
✅ Сделайте отчет с помощью datastudio или любого другого business intelligence tool
#list
Сегодня в обзоре список типичных задач #nodejs разработчика не связанных с написанием кода. Все задачи носят практический характер, поэтому я формулирую их в виде
ACTION с помощью TOOL. Инструмент можно менять в зависимости от проекта и его тех.стека. Кстати о проекте, я предполагаю что у вас есть проект под эти задачи. Это может быть или основной, или ваш pet проект.✅ Спроектировать REST API с помощью OpenAPI
✅ Настроить CI/CD с помощью GitHub Actions
✅ Описать архитектуру в draw.io
✅ Описать фичу с помощью plantuml
✅ Добавить систему оповещений с помощью бота (telegram, slack, discord)
✅ Добавить внешнюю систему мониторинга uptime с помощью freshping.io (это бесплатный аналог pingdom). Если работает с GCP, то используйте alerts
✅ Добавить продуктовую аналитику с помощью mixpanel
✅ Сделайте отчет с помощью datastudio или любого другого business intelligence tool
Working with WebSockets on AWS
#worth_seeing #aws
Для постоянных читателей рубрики не будет новостью, что AWS предлагает serverless websockets. Я делился соответствующим видео с OpenJS World 2020.
Сегодня у нас более подробное видео от Ryan Lewis. Доклад сделан в рамках youtube-канала, а не конференции. Формат – live coding . В нем докладчик не только рассказывает что, но и показывает как. В рамках конференций это самый сложный формат. В записи его делать проще, что однако не умоляет ценность рекомендуемого видео.
Расскажу о докладчике. Райан делает материалы по AWS, serverless и JavaScript. Для начинающего #nodejs разработчика будет полезна его бесплатная книга "The Cloud Developer Workbook", где собранны 100 базовых упражнений для изучения AWS.
#worth_seeing #aws
Для постоянных читателей рубрики не будет новостью, что AWS предлагает serverless websockets. Я делился соответствующим видео с OpenJS World 2020.
Сегодня у нас более подробное видео от Ryan Lewis. Доклад сделан в рамках youtube-канала, а не конференции. Формат – live coding . В нем докладчик не только рассказывает что, но и показывает как. В рамках конференций это самый сложный формат. В записи его делать проще, что однако не умоляет ценность рекомендуемого видео.
Расскажу о докладчике. Райан делает материалы по AWS, serverless и JavaScript. Для начинающего #nodejs разработчика будет полезна его бесплатная книга "The Cloud Developer Workbook", где собранны 100 базовых упражнений для изучения AWS.
YouTube
Working with WebSockets on AWS
WebSockets is the best way to interact in real-time between your front-end and back-end. AWS provides a new WebSocket API through API Gateway, which is powerful and easy to set up. In this tutorial, we'll create a new WebSocket API, a Lambda function, and…