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

Older Posts 20 shown
Post #199 1.4K
boardgame.io движок для пошаговых игр
#tech_stack

Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.

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

Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
boardgame.io Open Source Game Engine for Turn-Based Games
Post #198 1.59K
Как использовать ARG и ENV внутри Dockerfile?
#docker

Сегодня обсудим две инструкции внутри Dockerfile: ARG и ENV.

TL;DR Используйте ARG для определения build-time переменных, а ENV – run-time. Используйте ENV=arg_var_name, чтобы создать образ с переменной определяемой в ходе сборки.

Инструкция ARG определяет build-time variables. Они доступны только во время сборки docker image во всех инструкциях включая FROM. Запущенный контейнер не могут получить к доступ к этим переменным. Это также относится к инструкциям CMD и ENTRYPOINT, которые определяют, что контейнер должен запускать по умолчанию. Если вы не указываете значение по умолчанию для ARG, то при сборке передача аргументов обязательна. Для этого используется --build-arg. Пример:
ARG some_variable_name
# or with a hard-coded default:
#ARG some_variable_name=world
RUN echo "Hello $some_variable_name"

$ docker build --build-arg some_variable_name=a_value

Переменные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.

ENV и ARG можно комбинировать вместе.

Пример из реального проекта:

FROM node:14.17.1-alpine

ARG VERSION=latest
ENV VERSION=$VERSION
ENV PORT=8000
WORKDIR /opt/app/

COPY package.json package-lock.json /opt/app/
RUN npm install --production
COPY src /opt/app/

EXPOSE $PORT
ENTRYPOINT ["node", "/opt/app/index.js"]

Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
Post #197 1.93K
TDD Conference
#conference

На следующих выходных будет бесплатная online конференция с амбициозным названием First International Test Driven Development (TDD) Conference. Организатором является Alex Bunardzic.

Полчаса назад я ничего не знал ни об этом человеке, ни об конференции. Сейчас я улучшаю тесты на основном проекте. Изучение материалов по TDD Manifesto привели меня на сайт конференции. Именно из-за одноименного доклада я на ней зарегистрировался, что предлагаю сделать и вам.

Видео: https://www.youtube.com/watch?v=-_noEVCR__I
TDD Conference First International Test Driven Development (TDD) Conference Join the TDD Revolution!
Post #196 1.77K
Stream-oriented Architecture with Nest
#worth_seeing #nestjs

Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.

В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.

Слайды
YouTube Taming reactive Node.js: Stream-oriented architecture with NestJS | Kamil Myśliwiec accessible for deaf/hearing-impaired: sign language interpreter (DGS) visible for complete duration + captions // slide collection https://buff.ly/2YLcPlA // Licence: CC BY-ND https://buff.ly/2TN3XIo The stream-oriented architectures are still very rare in…
Post #195 2.6K
Play it Right with CodeceptJS
#worth_seeing

Сегодня в рекомендациях видео по CodeceptJS. Это BDD фреймворк для создания end-to-end тестов на JavaScript. Докладчик автор фреймворка – Michael Bodnarchuk. Мне кажется недооцененной возможность писать тесты в BDD стиле, т.е. понятном для бизнеса языке. Надеюсь это видео поможет вам задуматься над вашими тестами.
YouTube Play it Right with CodeceptJS: An Introduction to Supercharged E2E Testing – Michael Bodnarchuk Get a GitNation Multipass, attend 8+ remote JavaScript conferences & watch tens of pro talks and workshops from our past events: https://portal.gitnation.org/multipass 🗓 TestJS Summit 2021 #TestJSSummit Website – https://testjssummit.com/ Watch the…
Post #193 1.68K
Закончил доклад в рамках @mathrandomcommunity:
Deep Dive Into NestJS

Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
YouTube Deep Dive Into NestJS NestJS is a framework with excellent documentation and a mature ecosystem. But during this talk, we will not retell its docs. We will go deeper. The plan is: - base packages, - application lifecycle, - request context and lifecycle, - declarative code with…
  • 👍 1
Post #192 1.86K
Подборка node.recipes за июнь 2021
#monthly_list

Рецепты для #nodejs разработчиков:
➡️ Какие директивы есть в TypeScript и зачем их использовать?
➡️ Где брать сниппеты кода?
➡️ Обзор Node.js v16: Timers Promises API
➡️ Что должен знать Junior Node.js Developer?
➡️ На что влияет environment variable EDITOR?
➡️ Как работает ORM?
➡️ Что должен уметь написать Senior Node.js разработчик?
➡️ Что такое Custom URL Protocol Scheme?
➡️ Что такое Graceful Shutdown и как его реализовать?
➡️ Как тестировать Dockerfile?
➡️ Что такое timing attack (атака по времени)?
➡️ Что такое JSON Patch?
➡️ Какие подписки читать Node.js разработчику?
➡️ Как работает query в REST?

Обзор релизов:
🚀 Node.js 14.17.1

Freebies:
🤑 O'Reilly books
🤑 Redis University

Доклады, которые стоит посмотреть:
👀 Consuming Nodejs Observability Features in Kubernetes Environments
👀 Node.js middleware - никогда больше
👀 Observing Node.js: Using Metrics to Improve your Application Performance
👀 Demystifying Database Performance Issues with sqlcommenter
👀 Migration to Google Cloud or How to Train your Pet
👀 DDD, event sourcing and CQRS – theory and practice
👀 NestJS. When patterns matters
👀 Cloud Native Landscape for Node.js Developers

Voice Chats:
🎤 About Cloud Native, в гостях Николай Крещенко
🎤 About Metarhia and Node.js, в гостях Тимур Шемсединов
🎤 About Security, в гостях Анастасия Войтова
Post #191 1.5K
Помогите лучше понимать аудиторию канала.

Junior Software Engineer - 97
👍👍👍👍 20%
Software Engineer - 215
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
Post #190 1.49K
Как работает query в REST?
#architecture #nestjs

Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:?id=1&id=2"

Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]

В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.

Для передачи массива параметров в query есть такие варианты:
1️⃣?foo=bar&foo=qux
2️⃣?foo[]=bar&foo[]=qux
3️⃣?foo%5B%5D=bar&foo%5B%5D=qux
4️⃣?foo=bar,qux

Какой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает [] при парсинге.
Post #189 2.51K
Какие подписки читать Node.js разработчику?
#list

Поделюсь списком моих email подписок:
JavaScript Weekly
Node Weekly
TypeScript Weekly
Web Tools Weekly
GraphQL Weekly
StackShare Weekly Digest

В подписках релизы инструментов, подборки статей и новости. У каждой есть архив, где можно понять качество контента.

Отдельно выделю Adventures in Nodeland by Matteo Collina как авторскую рассылку.
  • 👍 1
Post #188 1.41K
Cloud Native Landscape for Node.js Developers
#worth_seeing #cloud

При просмотре описания докладов на OpenJS World 2021 я подумал, что речь будет идти об Cloud Native Landscape. Это страница где собраны проекты участвующие в Cloud Native Foundation. Я ошибся. Докладчик делает обзор самого подхода, а не инструментов.

Slides
YouTube Cloud Native Landscape for Node.js Developers - Upkar Lidder, IBM Cloud Native Landscape for Node.js Developers - Upkar Lidder, IBM Get the lay of the Kubernetes land as a Node.js developer. Did you know there are more than 1500 projects listed on the CNCF landscape! It can be quickly get overwhelming if you haven’t developed…
Post #187 1.3K
VinnytsiaJS 2021
#conference

Винницкое JS комьюнити @vinjs проводит 21 августа оффлайн конференцию.
Формат традиционный для летних конференций – Open Air: бассейн, нетворкинг и JS доклады.

Я буду выступать на этой конференции с темой "Cloud Native Approach for Node.js Developers". Программа еще в стадии формирования, поэтому приглашаю коллег подать заявку на доклад.
Post #186 1.42K
NestJS. When patterns matters
#worth_seeing #nestjs

Сегодня у нас доклад с VinnytsiaJS 2017, которое можно назвать обзорным. 4 года назад я смотрел его, когда у Nest.js не было так подробно расписана документация, не было комьюнити. Для кого это тот доклад стал толчком к изучению всего Nest.js стэка.

Зрелость технологии определяется ее стабильностью. Может считать это видео подтверждением, что Nest.js стабилен и его стоит использовать.
YouTube NestJS. When patterns matters - Ostap Chervak (VinnytsiaJS 2017) VinnytsiaJS 2017 #VinnytsiaJS2017 http://vinnytsiajs.org/ https://www.facebook.com/VinnytsiaJS/ https://twitter.com/VinnytsiaJS
Post #185 1.38K
Что такое JSON Patch?
#architecture

Для простоты примера рассмотрим Todo-list. Приходит задача добавить копирование одного todo элемента. Как вы ее спроектируете? Это реальный вопрос с собеседований.

Можно, переложить задачу на FE, чтобы он воспользовался существующим endpoint-ом для создания. Не удобно для массового копирования или добавления другой бизнес логики.

В REST существуют два метода для обновления PUT – полное обновление и PATCH – частичное. Мое решение поставленной задачи:

PATCH /todos
[{ "op": "copy", "from": "/todos/uuid", "path": "/todos/new-uuid" }]

Обратите внимание, что я использую PATCH не к отдельному элементу, а к ресурсу коллекции. За этим запросом стоит такая логика: FE генерирует новый UUID как и при создание, а потом говорит BE скопируй контент из существующего todo.

Тело запроса представляет собой JSON Patch, который описывает как изменить JSON документ. По сути это набор операций которые необходимо произвести над JSON документом. Большинство Web API состоят из JSON документов, поэтому можем использовать готовый RFC. Одна строничная документация с операциями и определением JSON Pointer по ссылке http://jsonpatch.com/
Post #184
Live stream finished (1 hour)
Post #183
Live stream started
Post #182 1.51K
Audio
#voice_chat #security

Гость: Анастасия Войтова, секурити инженер в cossacklabs.com. Занимается безопасностью и защитой данных.

❓ Топ 5 security проблем типичного веб-проекта
❓ Управление рисками и угрозами – как понять, какие штуки по безопасности нужны в твоем проекте, а какие нет
❓ SSDLC, SAMM — какие тулы/подходы на каждом этапе разработке софта
❓ Где и как учить основы security? Углублено?
❓ Как выглядит найм security engineer? Карьеры
❓ Что в облаках сделано хорошо для обеспечение security, а что необходимо реализовывать самостоятельно?

Ссылки от Анастасии:
- Личный блог
- Корпоративный блог
- Об интернатуре

OWASP cсылки:
- https://owasp.org/www-project-top-ten/
- https://github.com/OWASP/ASVS
- https://owaspsamm.org/model/
Post #181 1.43K
Что такое timing attack (атака по времени)?
#security #package

TL;DR Не используйте сравнение строк через === при проверке равенства секретов или токенов. Используйте безопасные сравнение с фиксированным временем – secure-compare

В веб-разработке мы часто не задумываемся об классической атаке на систему через анализ времени ответа. Исследование 2009 года показывает, что злоумышленник может измерять события с точностью 15–100ms в Интернете и с точностью 0.1ms в локальной сети.

Пример кода уязвимого к данной атаке:
function isAuthenticated(user, token) {
var correctToken = FetchUserTokenFromDB(user);
return token === correctToken;
}

Такое сравнение обрывается на первом же различном символе, поэтому можно по времени ответа подбирать ответ.

Безопасное по времени сравнение выглядит так:
let mismatch = 0;
for (var i = 0; i < a.length; ++i) {
mismatch |= (a.charCodeAt(i) ^ b.charCodeAt(i));
}
return mismatch;

Его можно использовать из пакета secure-compare.

Мне доводилось участвовать в спорах, где оппоненты говорили, что тут нет риска, так как задержка на запрос в базу данных и/или latency ответа не дадут злоумышленнику достаточно информации. Аргументы здравые. Вместо того, чтобы с ними спорить я задаю вопросы:
- есть ли в драйвере кэш запросов? Как он работает?
- Откуда злоумышленник проводить атаку из внешней или внутренней сети?
- Насколько большие затраты делать безопасное сравнение в сравнение с закрываемыми рисками?
npm npm: secure-compare Securely compare two strings, copied from cryptiles. Latest version: 3.0.1, last published: 10 years ago. Start using secure-compare in your project by running `npm i secure-compare`. There are 79 other projects in the npm registry using secure-compare.
Post #180
Live stream scheduled for Jun 24, 2021 at 18:00
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 →