TDD Conference
#conference
На следующих выходных будет бесплатная online конференция с амбициозным названием First International Test Driven Development (TDD) Conference. Организатором является Alex Bunardzic.
Полчаса назад я ничего не знал ни об этом человеке, ни об конференции. Сейчас я улучшаю тесты на основном проекте. Изучение материалов по TDD Manifesto привели меня на сайт конференции. Именно из-за одноименного доклада я на ней зарегистрировался, что предлагаю сделать и вам.
Видео: https://www.youtube.com/watch?v=-_noEVCR__I
#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!
Как использовать 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, то при сборке передача аргументов обязательна. Для этого используется
Переменные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.
ENV и ARG можно комбинировать вместе.
Пример из реального проекта:
Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
#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=worldRUN echo "Hello $some_variable_name"$ docker build --build-arg some_variable_name=a_valueПеременные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.
ENV и ARG можно комбинировать вместе.
Пример из реального проекта:
FROM node:14.17.1-alpineARG VERSION=latestENV VERSION=$VERSIONENV PORT=8000WORKDIR /opt/app/COPY package.json package-lock.json /opt/app/RUN npm install --productionCOPY src /opt/app/EXPOSE $PORTENTRYPOINT ["node", "/opt/app/index.js"]Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
boardgame.io движок для пошаговых игр
#tech_stack
Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.
Ключевые фичи:
- кодовая база на TypeScript
- готовые инструменты для дебагинга, визуализации и симуляции
- легкое подключение ботов
- расширение с помощью плагинов
- есть игровое лобби
Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
#tech_stack
Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.
Ключевые фичи:
- кодовая база на TypeScript
- готовые инструменты для дебагинга, визуализации и симуляции
- легкое подключение ботов
- расширение с помощью плагинов
- есть игровое лобби
Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
boardgame.io
Open Source Game Engine for Turn-Based Games
Что такое JSONPath?
#package #graphql
Работать с JSON в JavaScript крайне просто. Это подталкивает #nodejs разработчиков отдавать раздутые объекты из API. Упростить работу с такими объектами позволяет JSONPath. У него есть предшественик – Xpath, аналог для XML.
В синтаксисе всего десяток операторов. Чтобы их лучше понять, рекомендую перейти на JSONPath Online Evaluator и протестить разные выражения. Собственно вот синтаксис:
Базовые операторы – интуитивно понятны
Продвинутые операторы
Скриптовые операторы –
На уровне кода JSONPath полезен во время мутаций сложных JSON структур. Для этого используется одноименный пакет jsonpath. JSONPath встроен в Insomnia, API клиент для работы с GraphQL и REST. Поэтому многие QA выбирают его вместо Postman.
#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.
Refactoring: Second Edition
#worth_seeing
Мой ответ на этот вопрос – Мартин Фаулер. Он автор книги "Рефакторинг". В 2018 году он написал второе издание. В первом издание примеры кода были на Java, а во втором – на JavaScript.
Почему так вышло и как применять идеи из этой #must_read книги в сегодняшнем видео.
#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…
This eagerly awaited update brings a fresh perspective. It has been fully updated…
Hello Quantum Developers World - Yet Another Frontier for JavaScript
#worth_seeing
Сегодня интро видео в квантовые вычисления. Для нас это новый инструмент. Он не востребован – на рынке нет подходящих типовых бизнес задач.
Почему стоит узнать об q-вычислениях:
- они уже доступны в облаках
- моделируют вероятностные события
- лучший кандидат на следующего техно-хайп, как это было с serverless и blockchain
Ссылка от докладчика: bit.ly/qcon-qjs
#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…
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…
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️⃣)
#principles
В роли консультанта моя работа это задавать правильные вопросы. Самый информативный: "Почему данный функционал реализован на этом уровне?". Поделюсь субъективным разделением уровней.
1️⃣ Уровень бизнес-кода. Реализуется сервисами, моделями, репозиториями, миграциями, шаблонами и т.п. Создает всю бизнес логику, в том числе ее представление на уровне данных. Не может быть перенесен между проектам. Имеет особую коммерческую ценность и защищается NDA.
2️⃣ Уровень кода-приложения. Реализуется контролерами, валидаторами, роутерами, обработчиками ошибок, логгерами и т.д. По сути это код использующий методы фреймворка для вызова бизнес-логики.
3️⃣ Уровень кода-фреймворка. Реализуется набором библиотек и паттернов, с помощью которых команда создает проект. При правильной реализация, этот код может быть переиспользован между проектами. При идеальной реализации: это open-source, качественная тех. документация, 100% покрытие тестами. Именно здесь чаще всего происходит техническая инфляция.
4️⃣ Уровень сервисов и инфраструктуры. Реализуется сторонними API, очередями, базами данных, лоад балансерами, автоскейлерами и т.д. Команда разработки отвечает за выбор и конфигурация, но не за реализацию. Чем больше технических и бизнес задач решено на данном уровне, тем лучше для бизнеса.
5️⃣ Уровень команд и процессов. Реализуется договоренностями между людьми. Отражается прямым образом в архитектуре. Тут важны здравый смысл, дисциплина и умение понять других.
Чем эта философия может быть полезна для #nodejs разработчика? Чтобы определить свое профессиональное развитие! Понимайте где вы хотите находиться. Например, Тимур Шемсединов не любит заниматься прикладным программирование (1️⃣+2️⃣), ему интересно системное программирование(3️⃣+4️⃣)
Как и зачем обновить aws-sdk с v2 на v3?
#package #aws
Два месяца назад я рассказывал как Как уменьшить потребление памяти во время TypeScript компиляции? Там я привел в качестве примера изменения импортов из
Вторая версия по-прежнему поддерживается, но переходить на третью уже пора. Вот причины:
➡️ модульная архитектура, т.е. один пакет для работы с одним сервисом. Можно не следить за правильностью import-ов как в примере.
➡️ TypeScript-first поддержка
➡️ короче Stack Trace для ошибок
➡️ оплата технической инфляции раньше ее превращения в тех.долг
Перед обновлением можно рекомендую глянуть workshop v2->v3 для самостоятельного прохождения от AWS.
#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.
Что такое AssemblyScript?
#typescript
Универсальный способ оптимизации производительности для JavaScript разработчика это перенос вычислений в WebAssembly. Упрощенно говоря это значит написать требуемый код на C++ или его аналогах.
AssemblyScript решает проблему "
Для большинства проектов это решение будет over-engineering, но там где есть CPU intensive задачи я рекомендую это решение.
#typescript
Универсальный способ оптимизации производительности для JavaScript разработчика это перенос вычислений в WebAssembly. Упрощенно говоря это значит написать требуемый код на C++ или его аналогах.
AssemblyScript решает проблему "
мне нужен WASM, но нет ресурсов чтобы изучить новый язык". По сути AssemblyScript это тот же TypeScript с WASM типами и уже настроенным компилятором. Это решение хорошо тем, что подойдет и для Node.js, и для браузера.Для большинства проектов это решение будет over-engineering, но там где есть CPU intensive задачи я рекомендую это решение.
Какие вещи должны быть в техническом стэке для поддержки проекта?
#tech_stack #list
На этапе day 2 происходит поддержка проекта. Вот список из пяти инструментов, которые помогут в этом.
➡️ Система менеджмента инцидентов и оповещения о них. Пример: PagerDuty.
➡️ Система мониторинга. Пример: DataDog
➡️ Система сборки логов. Пример: ELK
➡️ Система сборки ошибок. Пример: Sentry
➡️ Мониторинг производительности – Application Performance Monitoring. Пример: Elastic APM
#tech_stack #list
На этапе day 2 происходит поддержка проекта. Вот список из пяти инструментов, которые помогут в этом.
➡️ Система менеджмента инцидентов и оповещения о них. Пример: PagerDuty.
➡️ Система мониторинга. Пример: DataDog
➡️ Система сборки логов. Пример: ELK
➡️ Система сборки ошибок. Пример: Sentry
➡️ Мониторинг производительности – Application Performance Monitoring. Пример: Elastic APM
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
Гость: Андрей Кучеренко, 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
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
До встречи в эфире!