Node.js Recipes – Telegram
Node.js Recipes
3.23K subscribers
167 photos
7 videos
1 file
612 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Итоги мая 2021

телеграм канал @node_recipes
⚙️ количество подписчиков почти преодолело 1000
эксперимент с Voice Chat оказался успешным. На еженедельных эфирах в среднем 40 слушателей. Формату быть.
появилась айдентика и слоган
не понятна актуальность постов в формате #raffle и #freebies
трудозатраты 10-12 часов в неделю

комьюнити GDG Cloud Kyiv
официальная регистрация и освоение платформы
первый Cloud Jam с 15 участниками
⚙️ формирование комьюнити в работе
⚙️ другие форматы и план на июнь
трудозатраты 3-4 часа в неделю

Доклады
"Road to production" в ходе конференции Dev.Pro JS Conference
Уже завтра "Deep Dive Into NestJS" на JavaScript fwdays’21
⚙️ Node.js TDD 15 июня
трудозатраты 10-20 часов на доклад

Проекты в работе, не готовые к официальному релизу
⚙️ Личный сайт
⚙️ Сайт node.recipes на английском с еженедельной email рассылкой
⚙️ Серия воркшопов по Node.js и Cloud Native разработке
не хватает времени и/или мотивации

Спасибо за поддержку и обратную связь.
Какие директивы есть в TypeScript и зачем их использовать?
#typenoscript

Директива это комментарий, который говорит TypeScript компилятору изменить свое поведение. Существуют Triple-Slash Directives, которые выходят за рамки этого рецепта. Их использование оправдано при создание библиотек, но не приложений.

Сегодня же речь об директивах начинающихся@ts-. На текущий момента, в версии TypeScript 4.2, их существует 4:
➡️ // @ts-check – применяется только в начале javanoscript файла. Используется в ходе перехода с JS на TS. Для typenoscript файлов не применим.
➡️ // @ts-nocheck – применяется только в начале файла. Все ошибки в файле будут проигнорированы. Используется и в JS, и в TS. Рекомендован в случае перехода на TS.
➡️ // @ts-ignore – возможная ошибка на следующей строке будет проигнорирована.
➡️ // @ts-expect-error – ошибка на следующей строке будет проигнорирована. Если ошибки нет, то TypeScript компилятор выкинет ошибку Unused '@ts-expect-error' directive. Использование предпочтительней, чем @ts-ignore.

Каноническим примером использования @ts-expect-error является обращение к приватному свойству в unit тесте.

Тут можно прочитать рекомендацию, что в каком случае использовать @ts-expect-error или @ts-ignore. Выработанную договоренность лучше закрепить на уровне линтинга с помощью @typenoscript-eslint/ban-ts-comment.
Ответы на вопросы о закончившемся докладе:

Видео в паблик будет в конце августа. Для владельцев Full ticket уже доступно.
Хочу спросить в личку. У нас на проекте... Тут два варианта 1) Вытащить специфику проекта, чтобы можно было задавать публично. Например, в четверг на Voice Chat разберем. 2) Делать индивидуальную консультацию. На это на июль нет времени.
А почему в докладе не было ...? Потому, что это не часть фреймворка, которой нет в документации.
Будет ли повтор доклада? Да. Ближайшие 1-го июля в дружественном комьюнити @mathrandomcommunity
Слайды тут
Где брать сниппеты кода?
#service

Я не сторонник дублирования кода, но ради нескольких хелперов затаскивать в приложение lodash, rambda или их аналоги не стану. Вместо этого я пишу их сам. Большинство JS хелперов пишутся в одну строчку. Многие из моего helpers.ts можно найти на 1loc.dev.

Вот парочка полезных #nodejs разработчику:
➡️ Проверить, что код запущен в Node.js:
const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
➡️ memoize для длительных вычислений
const memoize = fn => ((cache = {}) => arg => cache[arg] || (cache[arg] = fn(arg)))();
👍1
OpenJS World уже сегодня!
#conference

Сегодня начинается конференция OpenJS World 2021. Подробное интро конференции тут.

Если вы еще не зарегистрированы, то рекомендую это сделать. Это бесплатно.

Для тех кто подумывает об #nodejs сертификации. 
1) регистрация дает 50% скидку
2) David Mark Clements делает доклад как раз о ней.

При изучение программы обратите внимание, что справа есть фильтры. Самый полезный из них
Slides Included. Я вижу такое впервые, когда доклады идут сразу со слайдами. Боюсь за себя и других докладчиков, если это станет трендом.
Обзор Node.js v16: Timers Promises API
#nodejs_api

Шестнадцатая версия #nodejs меняет работу с таймерами. Раньше мы не могли отменять промифисицированные таймеры. Теперь это возможно благодаря AbortController-ы. Промифисицированный таймер можно сразу получить из timers/promises, аналогично fs/promises . Функция setInterval
из timers/promises, будет возвращать не Promise, а asyncIterator. Его можно итерировать через for-await-for. Примеры в документации.
Live stream scheduled for
Audio
#voice_chat

Гость: Николай Крещенко, Senior Software Engineer в финтех сфере. Сейчас занят в разработке высокконагруженного бекенда необанка в Дубаях.

Вопросы
Чем Cloud Native подходы в разработке отличаются от традиционных
из чата по теме Cloud Native

Ссылки:
🔗 книга Cloud Native
🔗 Aviatrix Certified Engineer Multi-Cloud Networking & Security Courses
🔗 7 missing factors from 12 factor application

PS Изначально формат должен был быть Q&A, но в последний момент я пригласил Николая и изменил фокус на Cloud Native. Прошу прощения у кого были другие ожидания
Live stream started
Live stream finished (1 hour)
Что должен знать Junior Node.js Developer?

Вчера во время Voice Chat Андрей задал вопрос: "Какие необходимые навыки/знания ты бы выделил для junior nodejs разработчика?". Вопрос можно брать для отдельного часового обсуждения и все равно не будет раскрыт полностью.

Обратите внимание, что в русском языке Junior переводиться младший специалист. Это означает способность самостоятельно решать задачу. Уровень Middle – тоже самое плюс немного проектировать фичи, Senior – проектировать фичи, Lead – строить процессы.

Вот мой список для Junior:
➡️Знание JavaScript/TypeScript, чтобы по примеру из другого файла сделать схожую фичу и покрыть ее тестами
➡️Знание работы с GIT, достаточные для открытия Merge Request
➡️Знание Docker и CLI, достаточные чтобы по хорошей документации проекта развернуть локальное окружение.
➡️Прочитана и понята документация по Node.js и фреймворку, что бы бы знать как и что в ней искать.

Завершу двумя полезными ссылками:
🔗Building Modern Node.js Applications on AWS хороший обзорный курс, для тех кто не работал с Cloud Native
🔗Матрица компетентности от Ильи Климова
Consuming Nodejs Observability Features in Kubernetes Environments
#worth_seeing

Сегодняшнее видео приятно рекомендовать по многим причинам.

Во-первых, сама тема – мониторинг #nodejs метрик да еще в Kubernetes. На многих проектах нет мониторинга. Разработчики не знают как его сделать, а DevOps инженеры не понимают особенностей Node.js.

Во-вторых, докладчики из Red Hat, компании которая много делает для open source в общем, и для Node.js в частности.

Во-третьих, подача самого доклада. Ребята подкупают своей простотой и открытостью. Вот вы много видели докладов, где докладчик джун (Alex Alykiotis)? А где докладчик (Luke Holmquist) шутит со своего имени Лукас и показывая йоду из звездных войн? Такое интро настраивает на простоту. Действительно сложная тема раскрывается легко и интересно.
Node.js middleware - никогда больше!
#worth_seeing

Вряд ли среди русскоязычных веб-разработчиков есть те, кто не знают Тимура Шемсединова. Он один из топ докладчиков по #nodejs. Не все идеи из его докладов я разделяю, но точно могу рекомендовать их к ознакомлению. Докладов у Тимура много. Конкретно этот знаменателен тем, что в конце идет обсуждение Ильей Климовым.
Prisma Day
#conference

Я люблю Vendor-конференции. На них можно послушать доклады и для новичков, и для тех кто глубоко освоил технологию. Есть возможность познакомиться с командой разработки и задать им вопросы.

Сегодня речь именно о такой конференции: Prisma Day пройдет 29-30 июня. Если вы не знакомы с этой технологией, то на конференции самое время составить свое мнение о ней.
На что влияет environment variable EDITOR?
#cli

Переменная окружения EDITOR определяет, какой текстовый редактор использовать при многострочном пользовательском вводе или редактирование файла. По умолчанию в Unix системах это vim, в Windows – notepad.exe.
Я предпочитаю его переопределять на Visual Code.
export EDITOR='code'
В зависимости от того, какой shell вы используете это строчку необходимо внести в ~/.profile, ~/.bashrc, ~.zshrc, то есть в конфигурационный файл вашего shell.

Примеры, когда будет вызван редактор:
➡️ npm config edit
➡️ git commit
➡️ при клике по строчке ошибки в браузере вашего React приложения.

Есть быть более точным, то многое программное обеспечение использует EDITOR, если не задан SOMETHING_EDITOR. Например, можно использовать REACT_EDITOR и GIT_EDITOR, но не NPM_EDITOR. Читайте документацию или исходный код конкретного ПО.
Как работает ORM?
#architecture #orm

Существует извечный спор ORM или SQL-запросы в коде. Я предпочитаю не спорить, а использовать и то, и другое.

Начнем с определений. ORM (Object-Relational Mapping) – это слой между базой данных и приложением, который занимается созданием, обновлением, чтением и удалением записей в базе данных. ORM упрощает работу с базой данных генерируя запросы из кода. Для этого необходимо описать модели, т.е. структуры таблиц. #nodejs разработчики делают это или через схему, или через TypeScript декораторы. Примеры:

// schema approach
import { Sequelize, DataTypes } from 'sequelize';
class User extends Model {}
User.init({
 username: DataTypes.STRING,
 birthday: DataTypes.DATE
});
// decorator approach
import { Entity, Column } from 'typeorm';
@Entity()
class User {
 @Column() username: string;
 @Column('date') birthday: string;
}

Модели используются для генерации запросов и правильной cериализации/деcериализации данных, т.е. мэпинга записей из БД в JS объекты.

Существует практика использования getter/setter в моделях. Например, на основание birthday можно сделать getter age. Если по этому полю необходимо будет строить запросы, то getter/setter не позволит это делать. В этом случае правильней будет сделать вычисляемое поле на уровне базы данных. В Postgres для этого используется Generated Columns.
Live stream scheduled for
#announcement #voice_chat

Что: Voice Chat об Node.js подходах и комьюнити
С кем: Тимур Шемсединов
Когда: завтра, 10 июня, в 21-00
Где: https://news.1rj.ru/str/node_recipes?voicechat
Frontend Stars Meetup
#announcement

Ребята из AllStars-IT завтра проводят offline meetup.
Не знаю как лучше написать О-Ф-Ф-Л-А-Й-Н! или Offline is the new luxury.

Программа:
➡️ Michael Hladky (Google Developer Expert, Microsoft MVP) с докладом Angular Performance Tuning with Zone-Flags. Доклад уже есть в интернете. Для #nodejs разработчиков будет полезна часть связанная с анализом flame-graph. Доклад будет на английском, а докладчик онлайн.
➡️ Александр Головатый (Senior Full-Stack-разработчик с 15-ти летним опытом) с докладом Chrome Extension With React. Александр делал первый доклад по данной теме еще 3 года назад. Ему действительно есть чем поделиться. Доклад будет на английском, а докладчик оффлайн.
➡️ Q&A и after-party.

Формат: оффлайн и онлайн
Участие: бесплатно
Регистрация: http://bit.ly/FrontendMeetup
Дисклеймер: мероприятие проводиться в рамках HR-брендинга компании AllStars-IT
👍1
Что должен уметь написать Senior Node.js разработчик?
#architecture

У меня много идей для докладов. Одна из них "Не только Web API". Большинство #nodejs разработчиков работают в web проектах и не умеют использовать Node.js для чего-то другого.

Для Web API много задач. Выбрать нужный протокол REST, RPC, SSE, GraphQL. Обеспечить нужный latency. Дать документацию. Исключить breaking change, что особенно важно в мобайл проектах. Но стоит добавить что-то не стандартное и разработчик теряется.

Вот мой личный топ-10 фичей или приложений, опыт создания которых помогает прокачать навыки:
➡️ Market-place. Пример: Uber, Airbnb
➡️ Поддержка реал-тайма. Пример: мессенджер, биржевые графики
➡️ Чат-боты. Пример: бот в телеграме, FB
➡️ Поисковая система. Пример: умный поиск по сайту, Google
➡️ Видео стриминг. Пример: Zoom
➡️ Картографический сервис. Пример: Google map
➡️ Collaborative real-time editor. Пример: Google Docs
➡️ CLI. Пример: npm, yarn, @nestjs/cli
➡️ REPL. Пример: Mongo shell
➡️ Game Server как пошаговый, так и реал-тайм. Пример: Монополия
Audio
#voice_chat

Гость: Тимур Шемсединов, CTO at Salucyber, главный архитектор технологического стека Metarhia, автор более 200 видео-лекция по веб-разработке.

Вопросы:
Что такое Metarhia? Какую проблему он решает?
Какие проблемы у тайпскрипта?

Дисклеймер – в комментария говорят, что ничего нового не услышали.