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 #220 · Back to latest

Older Posts 20 shown
Post #219
Live stream started
Post #218 1.81K
Как писать меньше TypeScript интерфейсов?
#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
Post #217 1.46K
Почему вам нужны знания Promise-ов в async/await коде?
#code_pattern

Async/await является основным стилем для написания асинхронного кода в современной #nodejs. Стоит помнить, что это синтаксический сахар поверх Promise chain. Поэтому для любого уровня разработчика важно понимать когда и для чего использовать такие конструкции:

➡️ Promise.all – необходимо использовать для получения значений, которые независимы. Будет прерван при первой ошибке.
➡️ Promise.race – необходимо использовать для получения первого значения или ошибки. Классический пример, это выброс ошибки по таймауту.
➡️ Promise.allSettled – необходимо использовать для получения всех значений. Ошибки не вызовут остановку, а будут частью результата.

Что дает использование этих конструкций? Вы можете запускать промисы не последовательно, а параллельно. В результате время ответа становиться быстрее.
Post #216
Live stream scheduled for Jul 22, 2021 at 18:00
Post #215 3.53K
#announcement #voice_chat

22 июля в 21:00 поговорим об обучение.

Гость: Сергей Немчинский, руководитель и владелец учебной компании foxmindEd. Автор youtube канала с 175к подписчиками и фразы "Здравствуйте, мои дорогие".

Вопросы:
❓ В чем особенность IT-обучения?
❓ Кто такие свитчеры? Как менять основной язык?
❓ Как обучаться на джуна? Как расти до синьора
❓ Как составлять план обучения?

Ссылка для подключения: https://t.me/node_recipes?voicechat
До встречи в эфире!
Post #213 1.38K
Помогите лучше понимать аудиторию канала.
Через какую юрисдикцию вы получаете оплату?

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 человек уже проголосовал.
Post #212 1.51K
Как я провожу собеседования?
#principles

Мое обычное собеседование длиться 1 час. В текущих условиях рынка у бизнеса нет возможности просить у кандидата больше времени. За этот час я проверяю, что кандидат умеет писать код и у него есть понимание тех.стэка.

Написание кода !== составление алгоритма
Написание кода это технический навык, который не должен требовать когнитивных усилий. Для его проверки я использую live-coding c однострочными задачками. Если кандидат гуглит как вернуть Promise из функции, то он скорее всего не писал на современном JS.
Составление алгоритма это сознательная работа, требующая когнитивных усилий. Способность составлять алгоритмы проверяют задачками с Leetcode. В ходе интервью и в повседневной жизни люди по-разному выполняют алгоритмизацию, поэтому я не даю задач на алгоритмы.

Понимание !== знание
В ходе интервью задача проверить, что кандидат способен выполнять задачи на проекте. Для этого ему необходимо не знание документации, а понимание и опыт работы с тех.стэка проекта. В этом помогают вопросы "В чем различие ...?", "Зачем/Почему...?", а не "Что такое ...?" или "Дайте определение ...". Обычно, глубина понимания прямо коррелирует с систем дизайном и алгоритмизацией.

Soft-skills работают всегда
За час кандидат показывает не только свои технические навыки, но и то как он общается. Сосредоточившись на тех. составляющий собеседования кандидат показывает свои повседневные навыки активного слушания, ведения тех. дискуссии, умение признать свою ошибку или незнание.

Матрица скилов
По итогам любой работы должен оставаться артефакт. Артефактом собеседования является матрица скилов кандидата. На ее основание бизнес принимает решение о дальнейшем сотрудничестве с кандидатом. У меня это это 4-7 пунктов с пятибальной шкалой и комментариями.
Post #211 1.47K
No Way, JOSE
#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…
Post #210
Live stream finished (1 hour)
Post #209
Live stream started
Post #208 2.77K
Audio
#voice_chat

Гость: Андрей Кучеренко, Chief Software Engineer I в EPAM Systems. Работает в EPAM последние десять лет. Ведет JS комьюнити @mathrandomcommunity

Вопросы
❓ Этапы развития разработчика, система тайтлов и что идет после Senior?
❓ Как выбирать тех.стэк для проекта?
❓ Как качать навык систем дизайна?

Ссылки:
- https://www.npmjs.com/package/jscpd
- https://github.com/kucherenko/awesome-project-questions
- https://www.startupemulator.com/
- https://www.educative.io/courses/grokking-the-system-design-interview
- https://www.facebook.com/InternationalSoftwareArchitectClub
Post #207
Live stream scheduled for Jul 15, 2021 at 18:00
Post #206 1.62K
Какие вещи должны быть в техническом стэке для поддержки проекта?
#tech_stack #list

На этапе day 2 происходит поддержка проекта. Вот список из пяти инструментов, которые помогут в этом.

➡️ Система менеджмента инцидентов и оповещения о них. Пример: PagerDuty.
➡️ Система мониторинга. Пример: DataDog
➡️ Система сборки логов. Пример: ELK
➡️ Система сборки ошибок. Пример: Sentry
➡️ Мониторинг производительности – Application Performance Monitoring. Пример: Elastic APM
Post #205 1.45K
Что такое AssemblyScript?
#typescript

Универсальный способ оптимизации производительности для JavaScript разработчика это перенос вычислений в WebAssembly. Упрощенно говоря это значит написать требуемый код на C++ или его аналогах.

AssemblyScript решает проблему "мне нужен WASM, но нет ресурсов чтобы изучить новый язык". По сути AssemblyScript это тот же TypeScript с WASM типами и уже настроенным компилятором. Это решение хорошо тем, что подойдет и для Node.js, и для браузера.

Для большинства проектов это решение будет over-engineering, но там где есть CPU intensive задачи я рекомендую это решение.
Post #204 1.59K
Как и зачем обновить aws-sdk с v2 на v3?
#package #aws

Два месяца назад я рассказывал как Как уменьшить потребление памяти во время TypeScript компиляции? Там я привел в качестве примера изменения импортов из aws-sdk. Этот пакет является второй версией AWS JS SDK. Я упустил выход третей версии в декабре прошлого года. Третья версия состоит из scoped packages с префиксом @aws-sdk, например @aws-sdk/client-s3.
Вторая версия по-прежнему поддерживается, но переходить на третью уже пора. Вот причины:
➡️ модульная архитектура, т.е. один пакет для работы с одним сервисом. Можно не следить за правильностью import-ов как в примере.
➡️ TypeScript-first поддержка
➡️ короче Stack Trace для ошибок
➡️ оплата технической инфляции раньше ее превращения в тех.долг

Перед обновлением можно рекомендую глянуть workshop v2->v3 для самостоятельного прохождения от AWS.
Post #203 1.44K
Any problem must be solved at the right level
#principles

В роли консультанта моя работа это задавать правильные вопросы. Самый информативный: "Почему данный функционал реализован на этом уровне?". Поделюсь субъективным разделением уровней.

1️⃣ Уровень бизнес-кода. Реализуется сервисами, моделями, репозиториями, миграциями, шаблонами и т.п. Создает всю бизнес логику, в том числе ее представление на уровне данных. Не может быть перенесен между проектам. Имеет особую коммерческую ценность и защищается NDA.
2️⃣ Уровень кода-приложения. Реализуется контролерами, валидаторами, роутерами, обработчиками ошибок, логгерами и т.д. По сути это код использующий методы фреймворка для вызова бизнес-логики.
3️⃣ Уровень кода-фреймворка. Реализуется набором библиотек и паттернов, с помощью которых команда создает проект. При правильной реализация, этот код может быть переиспользован между проектами. При идеальной реализации: это open-source, качественная тех. документация, 100% покрытие тестами. Именно здесь чаще всего происходит техническая инфляция.
4️⃣ Уровень сервисов и инфраструктуры. Реализуется сторонними API, очередями, базами данных, лоад балансерами, автоскейлерами и т.д. Команда разработки отвечает за выбор и конфигурация, но не за реализацию. Чем больше технических и бизнес задач решено на данном уровне, тем лучше для бизнеса.
5️⃣ Уровень команд и процессов. Реализуется договоренностями между людьми. Отражается прямым образом в архитектуре. Тут важны здравый смысл, дисциплина и умение понять других.

Чем эта философия может быть полезна для #nodejs разработчика? Чтобы определить свое профессиональное развитие! Понимайте где вы хотите находиться. Например, Тимур Шемсединов не любит заниматься прикладным программирование (1️⃣+2️⃣), ему интересно системное программирование(3️⃣+4️⃣)
Post #202 1.39K
Hello Quantum Developers World - Yet Another Frontier for JavaScript
#worth_seeing

Сегодня интро видео в квантовые вычисления. Для нас это новый инструмент. Он не востребован – на рынке нет подходящих типовых бизнес задач.

Почему стоит узнать об q-вычислениях:
- они уже доступны в облаках
- моделируют вероятностные события
- лучший кандидат на следующего техно-хайп, как это было с serverless и blockchain

Ссылка от докладчика: bit.ly/qcon-qjs
YouTube Hello Quantum Developers World - Yet Another Frontier for JavaScript Video with transcript included: https://bit.ly/3dLm0sf Miguel Ramalho talks about the underlying principles of Quantum Computing and how it differs from Classical Computing, how and why it is evolving so fast and how to take it from the hands of researchers…
Post #201 1.5K
Refactoring: Second Edition
#worth_seeing

С кем из ныне живущих людей вы хотели бы провести час за беседой?

Мой ответ на этот вопрос – Мартин Фаулер. Он автор книги "Рефакторинг". В 2018 году он написал второе издание. В первом издание примеры кода были на Java, а во втором – на JavaScript.

Почему так вышло и как применять идеи из этой #must_read книги в сегодняшнем видео.
YouTube Refactoring: Second Edition – A Conversation with Martin Fowler For more than 20 years, Martin Fowler's Refactoring has served as the definitive guide for those passionate about continually improving the design and maintainability of code. This eagerly awaited update brings a fresh perspective. It has been fully updated…
Post #200 1.38K
Что такое JSONPath?
#package #graphql

Работать с JSON в JavaScript крайне просто. Это подталкивает #nodejs разработчиков отдавать раздутые объекты из API. Упростить работу с такими объектами позволяет JSONPath. У него есть предшественик – Xpath, аналог для XML.

В синтаксисе всего десяток операторов. Чтобы их лучше понять, рекомендую перейти на JSONPath Online Evaluator и протестить разные выражения. Собственно вот синтаксис:
Базовые операторы – интуитивно понятны
$ – корневой элемент
@ – текущий элемент
. или [] – дочерний элемент
* – все элементы
Продвинутые операторы
.. – так называемый рекурсивный спуск. Выбирает дочерние элементы на всех уровнях.
[,] – union оператор
[start:end:step] – slice оператор
Скриптовые операторы – ?() и () зависят от конкретного языка и библиотеки для работы с JSONPath.

На уровне кода JSONPath полезен во время мутаций сложных JSON структур. Для этого используется одноименный пакет jsonpath. JSONPath встроен в Insomnia, API клиент для работы с GraphQL и REST. Поэтому многие QA выбирают его вместо Postman.
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 →