Soulful Socio-Technical Architecture
Вовлеченные работники производят больше ценности для бизнеса, а их пользователи счастливее.
Вовлеченность - важный аспект для успешных команд. Однако, по результата исследований, в среднем в IT очень низкая вовлеченность. Многие компании просто игнорируют вовлеченность сотрудников как аспект успешности компании.
В основном, компании оптимизирует техническую часть систему, забывая про социальную.
В первой половине 20-го века Великобритания начала процесс национализации уголе-добывающих шахт. Процесс добычи угля был построен так, что были бригады рабочих, которые сами решали как и что делать и их заработная плата зависела от результата работы всей группы. По сути, они были самоорганизующимися командами, которые сами принимали решение о том, что делать, кто лидер, нужны ли еще люди в команду.
При национализации "люди сверху" решили, что надо поменять процесс добычи угля и разделили процесс на 3 этапа и разделили команды на 3 области.
Это сильно ухудшило добычу угля и привело к забастовкам. Проблема в том, что при реорганизации добычи угля учитывалась только техническая сторона вопроса. Если мы хотим построить эффективную систему, нам нужно строить социо-техническую систему, т.е. учитывать и социальный фактор и технический.
В следующей реорганизации работы шахт уже учитывался социальный аспект системы.
Далее статья описывает интересные факты о вовлеченности, командах и социально-технических системах. И при этом есть ссылки на другие практики и книги (DDD, Team Topologies).
Если вам интересен managment и agile - статью можно прочитать. Если вы - кодер, то скорее всего статья покажется вам философскими рассуждениями и полной воды.
PS: В статье есть интересные илюстрации. Например, самооранизующиеся команды на фоне космоса.
https://infoq.com/articles/soulful-socio-technical-architecture
#agile
Вовлеченные работники производят больше ценности для бизнеса, а их пользователи счастливее.
Вовлеченность - важный аспект для успешных команд. Однако, по результата исследований, в среднем в IT очень низкая вовлеченность. Многие компании просто игнорируют вовлеченность сотрудников как аспект успешности компании.
В основном, компании оптимизирует техническую часть систему, забывая про социальную.
В первой половине 20-го века Великобритания начала процесс национализации уголе-добывающих шахт. Процесс добычи угля был построен так, что были бригады рабочих, которые сами решали как и что делать и их заработная плата зависела от результата работы всей группы. По сути, они были самоорганизующимися командами, которые сами принимали решение о том, что делать, кто лидер, нужны ли еще люди в команду.
При национализации "люди сверху" решили, что надо поменять процесс добычи угля и разделили процесс на 3 этапа и разделили команды на 3 области.
Это сильно ухудшило добычу угля и привело к забастовкам. Проблема в том, что при реорганизации добычи угля учитывалась только техническая сторона вопроса. Если мы хотим построить эффективную систему, нам нужно строить социо-техническую систему, т.е. учитывать и социальный фактор и технический.
В следующей реорганизации работы шахт уже учитывался социальный аспект системы.
Далее статья описывает интересные факты о вовлеченности, командах и социально-технических системах. И при этом есть ссылки на другие практики и книги (DDD, Team Topologies).
Если вам интересен managment и agile - статью можно прочитать. Если вы - кодер, то скорее всего статья покажется вам философскими рассуждениями и полной воды.
PS: В статье есть интересные илюстрации. Например, самооранизующиеся команды на фоне космоса.
https://infoq.com/articles/soulful-socio-technical-architecture
#agile
InfoQ
Soulful Socio-Technical Architecture
Happy developers make happy customers and stakeholders. Authority is ineffective with competent and knowledgeable teams. Socio-technical systems design provides a new worldview of what constitutes quality of working life and humanism at work. To create a…
GitHub - trekhleb/javascript-algorithms: 📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings
Репозитории, который содержит описание и реализацию на JS более 100 алгоритмов. Описания, кроме текста, содержат красивые диаграммы и анимации, упрощающие понимание материала
https://github.com/trekhleb/javascript-algorithms
#link #javascript #algorithms
Репозитории, который содержит описание и реализацию на JS более 100 алгоритмов. Описания, кроме текста, содержат красивые диаграммы и анимации, упрощающие понимание материала
https://github.com/trekhleb/javascript-algorithms
#link #javascript #algorithms
GitHub
GitHub - trekhleb/javascript-algorithms: 📝 Algorithms and data structures implemented in JavaScript with explanations and links…
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings - trekhleb/javascript-algorithms
6 Concrete Tips That Will Make Your React Pull Requests Easier To Review
6 Советов по улучшение Code Review:
- Опишите изменения, которые приносит этот ПР и зачем он их делает
- Если у вас изменения визуала - приложите скриншоты
- Расскажите о требованиях к задаче
- Не пишите сложный код
- Расскажите, как ревьюить ваш код
Статья достаточно короткая и почему-то привязана к React, хотя сами советы применимы к Code Review любой задачи.
https://chakshunyu.com/blog/6-concrete-tips-that-will-make-your-react-pull-requests-easier-to-review
#code-review
6 Советов по улучшение Code Review:
- Опишите изменения, которые приносит этот ПР и зачем он их делает
- Если у вас изменения визуала - приложите скриншоты
- Расскажите о требованиях к задаче
- Не пишите сложный код
- Расскажите, как ревьюить ваш код
Статья достаточно короткая и почему-то привязана к React, хотя сами советы применимы к Code Review любой задачи.
https://chakshunyu.com/blog/6-concrete-tips-that-will-make-your-react-pull-requests-easier-to-review
#code-review
Chakshunyu
6 Concrete Tips That Will Make Your React Pull Requests Easier To Review
As code proposers and members of a team, we have the responsibility to set up our reviewers for success. This article covers 6 concrete tips that will make your React pull requests easier to review and allow you to receive higher-quality reviews today.
GitHub - javascript-obfuscator/javascript-obfuscator: A powerful obfuscator for JavaScript and Node.js
Обфускатор JS кода, кототорый легко интегрировать в процесс сборки.
https://github.com/javascript-obfuscator/javascript-obfuscator
#link #javascript #library
Обфускатор JS кода, кототорый легко интегрировать в процесс сборки.
https://github.com/javascript-obfuscator/javascript-obfuscator
#link #javascript #library
GitHub
GitHub - javascript-obfuscator/javascript-obfuscator: A powerful obfuscator for JavaScript and Node.js
A powerful obfuscator for JavaScript and Node.js. Contribute to javascript-obfuscator/javascript-obfuscator development by creating an account on GitHub.
GitHub - webpro/reveal-md: reveal.js on steroids! Get beautiful reveal.js presentations from any Markdown file
Reveal.js - движок для презентаций на html+js. Reveal-md позволяет описывать слайды в markdown и затем переводить их в reveal.js. Если вы хотите делать презентации, но вы не хотите делать их в каком-то GUI, а просто хотели бы описать все текстом и чтобы оно потом само - рекомендую обратить внимание на reveal-md
https://github.com/webpro/reveal-md
#link #javascript #presentations
Reveal.js - движок для презентаций на html+js. Reveal-md позволяет описывать слайды в markdown и затем переводить их в reveal.js. Если вы хотите делать презентации, но вы не хотите делать их в каком-то GUI, а просто хотели бы описать все текстом и чтобы оно потом само - рекомендую обратить внимание на reveal-md
https://github.com/webpro/reveal-md
#link #javascript #presentations
GitHub
GitHub - webpro/reveal-md: reveal.js on steroids! Get beautiful reveal.js presentations from any Markdown file
reveal.js on steroids! Get beautiful reveal.js presentations from any Markdown file - webpro/reveal-md
The Micro-Frontend Chaos (and how to solve it)
Статья про микрофронтенды и борьбу за обратносовместимые изменения.
Микрофронтенды позволяют нам независимо разрабатывать и деплоить разные части приложения. Но если 1 из частей приложения ломает контракт - то может произойти каскад ошибок - часть А ломает контракт, от этого падает часть Б, которая зависит от А, а дальше падает В, зависящая от Б.
Автор перебирает разные решения но в итоге приходит к anit-corruption layer. Суть идеи, как я понял, явно выделять фасад модулей для удобного применения и следить за тем, чтобы он был обратносовместим. В npm пакетах эту роль обычно выполняет index.js - вы можете сделать сколько угодно сложную структуру в npm пакете, но index.js должен быть удобным и обратносовместимым.
Также в статье много примеров использования module federation
https://itnext.io/the-micro-frontend-chaos-and-how-to-solve-it-960b0a90c58
#javascript #microfrontends
Статья про микрофронтенды и борьбу за обратносовместимые изменения.
Микрофронтенды позволяют нам независимо разрабатывать и деплоить разные части приложения. Но если 1 из частей приложения ломает контракт - то может произойти каскад ошибок - часть А ломает контракт, от этого падает часть Б, которая зависит от А, а дальше падает В, зависящая от Б.
Автор перебирает разные решения но в итоге приходит к anit-corruption layer. Суть идеи, как я понял, явно выделять фасад модулей для удобного применения и следить за тем, чтобы он был обратносовместим. В npm пакетах эту роль обычно выполняет index.js - вы можете сделать сколько угодно сложную структуру в npm пакете, но index.js должен быть удобным и обратносовместимым.
Также в статье много примеров использования module federation
https://itnext.io/the-micro-frontend-chaos-and-how-to-solve-it-960b0a90c58
#javascript #microfrontends
Medium
The Micro-Frontend Chaos (and how to solve it)
Mastering the chaos of Micro-Frontend for the sake of stability
Can we useRef, but without the .current? Let's try!
Захватывающая статья про нестандартное использование useRef в react.
Статья начинается с того, что каждый раз писать ref.current - это не нормально, это лишний шум. Поэтому автор приводит несколько примеров, как использовать useRef, но не писать .current
А дальше автор уходит в исследование возможностей useRef для нестандартного использования. Например, для создания компонентов со своим независимым скоупом.
Рекомендую к прочтению, если вам интересны продвинутые и нестандартные техники использования react
https://thoughtspile.github.io/2021/10/25/useref-no-current
#react
Захватывающая статья про нестандартное использование useRef в react.
Статья начинается с того, что каждый раз писать ref.current - это не нормально, это лишний шум. Поэтому автор приводит несколько примеров, как использовать useRef, но не писать .current
А дальше автор уходит в исследование возможностей useRef для нестандартного использования. Например, для создания компонентов со своим независимым скоупом.
Рекомендую к прочтению, если вам интересны продвинутые и нестандартные техники использования react
https://thoughtspile.github.io/2021/10/25/useref-no-current
#react
Vladimir Klepov as a Coder
Can we useRef, but without the .current? Let's try!
Why I always wrap Context.Provider and useContext
React Context API - удобное, низкоуровное API. Разработчику необходимо делать телодвижения для простых вещей типа исключения лишних ререндеров
В статье предлагается рецепт для работы с контекстами - оборачивание их в кастомные хуки и провайдеры, где можно реализовать различные оптимизации.
https://thoughtspile.github.io/2021/10/27/better-react-context
#react #react-context
React Context API - удобное, низкоуровное API. Разработчику необходимо делать телодвижения для простых вещей типа исключения лишних ререндеров
В статье предлагается рецепт для работы с контекстами - оборачивание их в кастомные хуки и провайдеры, где можно реализовать различные оптимизации.
https://thoughtspile.github.io/2021/10/27/better-react-context
#react #react-context
Vladimir Klepov as a Coder
Why I always wrap Context.Provider and useContext
Elm at Rakuten
Компания Rakuten поделилась своими ощущениями от 2х лет использования Elm в продакшне.
Если коротко, то ребята довольны Elm.
- Функционыйльный ЯП
- Гарантия отсутствия ошибок в рантайме
- Компилятор хорошо оптимизирует код и быстро компилирует. В статье приводится цифра 2.5 секунды для компиляции 60к строк кода.
- Великолепный вывод ошибок при компиляции. Компилятор описывает, почему это плохо и как это исправить. Как минимум советую посмотреть статью только хотя бы ради этого пункта
- Elm, кроме синтаксиса, предлагает архитектуру
- Имеет встроенный линтер
При этом Rakuten обозначает явный минусы выбора Elm:
- Сложности с наймом
- Перейти на ФП не так-то просто
- Приходится переизобретать то, что в JS экосистеме уже давно есть
- Иногда необходим интероп с JS
- Малое количество доступных ресурсов по Elm
В целом, вдохновляющая статья про Elm.
https://engineering.rakuten.today/post/elm-at-rakuten
#elm
Компания Rakuten поделилась своими ощущениями от 2х лет использования Elm в продакшне.
Если коротко, то ребята довольны Elm.
- Функционыйльный ЯП
- Гарантия отсутствия ошибок в рантайме
- Компилятор хорошо оптимизирует код и быстро компилирует. В статье приводится цифра 2.5 секунды для компиляции 60к строк кода.
- Великолепный вывод ошибок при компиляции. Компилятор описывает, почему это плохо и как это исправить. Как минимум советую посмотреть статью только хотя бы ради этого пункта
- Elm, кроме синтаксиса, предлагает архитектуру
- Имеет встроенный линтер
При этом Rakuten обозначает явный минусы выбора Elm:
- Сложности с наймом
- Перейти на ФП не так-то просто
- Приходится переизобретать то, что в JS экосистеме уже давно есть
- Иногда необходим интероп с JS
- Малое количество доступных ресурсов по Elm
В целом, вдохновляющая статья про Elm.
https://engineering.rakuten.today/post/elm-at-rakuten
#elm
Rakuten Engineering Blog
Elm at Rakuten | Rakuten Engineering Blog
In our team at Rakuten, we have been using Elm1 in production for almost two years now. This post is about our story, the lessons we learned, and our likes and dislikes.
This post is quite long so if you prefer to see an overview, feel free to jump to the…
This post is quite long so if you prefer to see an overview, feel free to jump to the…
Завтра начнется HolyJS - платная онлайн конфа от jug.ru про фронтенд. Но последний день можно будет посмотреть бесплатно, если зарегистрироваться.
- 7 докладов: например, про множественное наследование на JS от Виктора Вершанского, Test Driven Development от Дмитрия Коваленко и «бабушкофон» (sic!) от Никиты Мостового;
- Большой воркшоп по GlimmerX из двух частей;
- Дискуссии после каждого доклада, где можно пообщаться со спикером;
- Отдельные тематические дискуссии при участии крутых экспертов;
- Обсуждения в главной студии;
- Возможность поучаствовать в играх, квизах, конкурсах и других активностях от партнеров конференции — там можно не только круто провести время, но и получить ценные призы;
- Виртуальная выставка конференции;
- Чаты, где сидят сотни ваших коллег со всего мира.
Для участия в бесплатном дне нужно только зарегистрироваться. Там нужно выбрать тип билета «COMMUNITY DAY»
- 7 докладов: например, про множественное наследование на JS от Виктора Вершанского, Test Driven Development от Дмитрия Коваленко и «бабушкофон» (sic!) от Никиты Мостового;
- Большой воркшоп по GlimmerX из двух частей;
- Дискуссии после каждого доклада, где можно пообщаться со спикером;
- Отдельные тематические дискуссии при участии крутых экспертов;
- Обсуждения в главной студии;
- Возможность поучаствовать в играх, квизах, конкурсах и других активностях от партнеров конференции — там можно не только круто провести время, но и получить ценные призы;
- Виртуальная выставка конференции;
- Чаты, где сидят сотни ваших коллег со всего мира.
Для участия в бесплатном дне нужно только зарегистрироваться. Там нужно выбрать тип билета «COMMUNITY DAY»
GitHub - lukeed/uvu: uvu is an extremely fast and lightweight test runner for Node.js and the browser
Ситник и artalar (автор ReatomJS) в твиттере рассказали о положительном опыте использования тест-раннера uvu.
Поигрался локально - действительно быстро работает
Из плюсов:
- быстрый
- простое API
- нет глобальных переменных (describe, it, test). Все нужно импортировать явно. Как следствие, тесты можно запускать просто как
Из минусов:
- Пока, например, нет возможности указать кастомный репортер для тестов. Так что, если вам нужна какая-нибудь интеграция или выгрузка результатов из CI куда-нибудь, то раннер может не подойти.
https://github.com/lukeed/uvu
#link #javascript #testing #github #library
Ситник и artalar (автор ReatomJS) в твиттере рассказали о положительном опыте использования тест-раннера uvu.
Поигрался локально - действительно быстро работает
Из плюсов:
- быстрый
- простое API
- нет глобальных переменных (describe, it, test). Все нужно импортировать явно. Как следствие, тесты можно запускать просто как
node test.ts и это будет работатьИз минусов:
- Пока, например, нет возможности указать кастомный репортер для тестов. Так что, если вам нужна какая-нибудь интеграция или выгрузка результатов из CI куда-нибудь, то раннер может не подойти.
https://github.com/lukeed/uvu
#link #javascript #testing #github #library
GitHub
GitHub - lukeed/uvu: uvu is an extremely fast and lightweight test runner for Node.js and the browser
uvu is an extremely fast and lightweight test runner for Node.js and the browser - lukeed/uvu
Разбираемся в сортах реактивности
Текстовая расшифровка доклада Дмитрия Карловского (более известный как автор $mol) про реактивность в общем и реализацию реактивности в JS-библиотеках в частности.
Как всегда от Дмитрия, много полезной теории, всесторонний анализ вопроса и, конечно же, $mol на первом месте
https://habr.com/ru/company/timeweb/blog/586450
#link #habr #nin-jin #$mol #reactive
Текстовая расшифровка доклада Дмитрия Карловского (более известный как автор $mol) про реактивность в общем и реализацию реактивности в JS-библиотеках в частности.
Как всегда от Дмитрия, много полезной теории, всесторонний анализ вопроса и, конечно же, $mol на первом месте
https://habr.com/ru/company/timeweb/blog/586450
#link #habr #nin-jin #$mol #reactive
Хабр
Разбираемся в сортах реактивности
Здравствуйте, меня зовут Дмитрий Карловский и я… прилетел к вам на турбо-реактивном самолёте. Основная суть реактивного двигателя изображена на картинке. Тут, казалось бы, хаотичное взаимодействие...
Stop catching errors in TypeScript; Use the Either type to make your code predictable
В некоторых языках программирования можно обьявить, какие исключения выкидывает метод или функция. Но в TS нет таких возможностей. Максимум, что у нас есть - это мы можем обьявить в блоке catch ошибку как unknown.
Система проверки типов в TS как будто бы просто игнорирует существование throw и catch, не давая при их использовании сильно больших гарантий на уровне типов.
Но мы можем использовать монаду Either, которая позволяет декларативно описать тип результата успешного и неудачного выполнения фнукции.
Подробнее про то, как это выглядит с хорошими примерами кода - в статье.
https://antman-does-software.com/stop-catching-errors-in-typescript-use-the-either-type-to-make-your-code-predictable
#typescript #error-handling #either
В некоторых языках программирования можно обьявить, какие исключения выкидывает метод или функция. Но в TS нет таких возможностей. Максимум, что у нас есть - это мы можем обьявить в блоке catch ошибку как unknown.
Система проверки типов в TS как будто бы просто игнорирует существование throw и catch, не давая при их использовании сильно больших гарантий на уровне типов.
Но мы можем использовать монаду Either, которая позволяет декларативно описать тип результата успешного и неудачного выполнения фнукции.
Подробнее про то, как это выглядит с хорошими примерами кода - в статье.
https://antman-does-software.com/stop-catching-errors-in-typescript-use-the-either-type-to-make-your-code-predictable
#typescript #error-handling #either
Record, replay and measure user flows
В preview версии Google Chrome появилась возможность записывать действия на сайте в сценарий, который затем можно редактировать, повторять и экспортировать как puppeteer скрипт.
В devtools появилась новая вкладка Recorder, в которой можно начать запись и сделать нужные действия на сайте. После остановки записи, сценарий можно запускать, в том числе настраивая тротлинг сети и процессора.
Сценарии также можно редактировать: добавлять новые шаги или изменять существующие.
И как вишенка на торте - сценарии можно экспортировать как puppeteer скрипт.
Это можно использовать как инструмент автоматизации рутины, как способ сгенерировать код автотеста, если у вас puppeteer, или как шаги для воспроизведения бага
https://developer.chrome.com/docs/devtools/recorder/
#link #google-chrome #puppeteer
В preview версии Google Chrome появилась возможность записывать действия на сайте в сценарий, который затем можно редактировать, повторять и экспортировать как puppeteer скрипт.
В devtools появилась новая вкладка Recorder, в которой можно начать запись и сделать нужные действия на сайте. После остановки записи, сценарий можно запускать, в том числе настраивая тротлинг сети и процессора.
Сценарии также можно редактировать: добавлять новые шаги или изменять существующие.
И как вишенка на торте - сценарии можно экспортировать как puppeteer скрипт.
Это можно использовать как инструмент автоматизации рутины, как способ сгенерировать код автотеста, если у вас puppeteer, или как шаги для воспроизведения бага
https://developer.chrome.com/docs/devtools/recorder/
#link #google-chrome #puppeteer
Chrome for Developers
Record, replay, and measure user flows | Chrome DevTools | Chrome for Developers
Record, replay, measure user flows, and edit their steps with the Recorder panel.
TBM 40/52: Why Limiting WIP, Starting Together, Being Less Busy, and Working Together is SO HARD
В Agile мире есть контр-интуитивный тезис: для того, чтобы доставлять фичи быстрее, нужно делать меньше.
Но когда мы начинаем реализовывать этот тезис через снижение WIP-лимитов, совместную работу и другие техники, то как-будто встречаем сопротивление.
Правда в том, что нельзя просто так, по щелчку пальцев, поменять систему, в которой участвуют люди. Возможно вы сталкивались с тем, что люди соглашаются, что парно программировать и писать приемочные авто-тесты - это "полезно и важно". Но на самом деле люди чувствуют, что это их отвлекает от "по-настоящему важной работы" - писать код.
Таких нюансов может быть много. Поэтому слишком активное и прямое внедрение новых техник обречено на сильное сопротивление и обратный ожидаемому эффект.
Следовательно, при внедрении техник, нужно учитывать эти нюансы и продумать, как внедрять эти техники наиболее естественным способом.
В статье также есть полезные видео про WIP-лимиты и другие полезные мысли. Рекомендую прочитать, если вас интересуют процессы и все с ними связанное.
https://cutlefish.substack.com/p/tbm-4052-why-limiting-wip-starting
#agile #kanban #wip
В Agile мире есть контр-интуитивный тезис: для того, чтобы доставлять фичи быстрее, нужно делать меньше.
Но когда мы начинаем реализовывать этот тезис через снижение WIP-лимитов, совместную работу и другие техники, то как-будто встречаем сопротивление.
Правда в том, что нельзя просто так, по щелчку пальцев, поменять систему, в которой участвуют люди. Возможно вы сталкивались с тем, что люди соглашаются, что парно программировать и писать приемочные авто-тесты - это "полезно и важно". Но на самом деле люди чувствуют, что это их отвлекает от "по-настоящему важной работы" - писать код.
Таких нюансов может быть много. Поэтому слишком активное и прямое внедрение новых техник обречено на сильное сопротивление и обратный ожидаемому эффект.
Следовательно, при внедрении техник, нужно учитывать эти нюансы и продумать, как внедрять эти техники наиболее естественным способом.
В статье также есть полезные видео про WIP-лимиты и другие полезные мысли. Рекомендую прочитать, если вас интересуют процессы и все с ними связанное.
https://cutlefish.substack.com/p/tbm-4052-why-limiting-wip-starting
#agile #kanban #wip
The Beautiful Mess
TBM 40/52: Why Limiting WIP, Starting Together, Being Less Busy, and Working Together is SO HARD
(Twitter is great.
Interactive stories (beta)
При написании историй в storybook иногда хочется сделать историю, в которой уже будет произведено какое-то действие пользователя - по клику открыта модалка, или навешан hover на какой-то элемент. В текущих реалиях для достижения результата нам нужно либо инструментировать код (например, добавлять проп forseOpened), либо пробовать поиграться с диспатчем кастомного события, либо вынести поведения из компонента наружу, а компоненту передавать уже готовое состояние.
Новая бета storybook решает эту проблему с помощью введения поля play у историй. В нем storybook позволяет описать действия, которые нужно совершить при заходе на историю. При этом storybook также предоставляет свой testing-library, с помощью которого делать эти действия очень просто.
Простой пример использования новой возможности:
Также в примерах кода используется msw для мокирования сети
https://storybook.js.org/blog/interactive-stories-beta
#storybook #auto-tests #testing-library
При написании историй в storybook иногда хочется сделать историю, в которой уже будет произведено какое-то действие пользователя - по клику открыта модалка, или навешан hover на какой-то элемент. В текущих реалиях для достижения результата нам нужно либо инструментировать код (например, добавлять проп forseOpened), либо пробовать поиграться с диспатчем кастомного события, либо вынести поведения из компонента наружу, а компоненту передавать уже готовое состояние.
Новая бета storybook решает эту проблему с помощью введения поля play у историй. В нем storybook позволяет описать действия, которые нужно совершить при заходе на историю. При этом storybook также предоставляет свой testing-library, с помощью которого делать эти действия очень просто.
Простой пример использования новой возможности:
export const OpenDialog = () = DeleteCustomerDialog /;
OpenDialog.play = async ({ canvasElement }) = {
const canvas = within(canvasElement);
await fireEvent.click(
canvas.getByRole('button', { name: 'Delete Customer' })
);
};
Также в примерах кода используется msw для мокирования сети
https://storybook.js.org/blog/interactive-stories-beta
#storybook #auto-tests #testing-library
Storybook Blog
Interactive stories (beta)
Simulate user behaviour using play functions
Why separate test automation teams don't work
Статья про то, почему выделенная команда для автотестов - антипаттерн, кроме одного сценария.
Некоторые команды считают, что разработчики должны заниматься "важными" вещами - делать бизнес-фичи. Автоматизация тестирования это, конечно, важно, но не настолько. Поэтому есть такой паттерн - нанимать отдельных людей, задача которых автоматизировать тестирование за разработчиками.
На практике это приводит к тому что:
- Разработчики не задумываются о тестируемости кода = тестировать становится сложнее
- Разработчики делают изменения, которые ломают авто-тесты, но разработчики не поддерживают авто-тесты. Принятие решения "это тест плохой или мы сломали что-то в продукте" требует большого количества времени
- Фидбек от тестов очень долгий. Если у нас есть команда разработки и команда автоматизации тестирования, то, как правило, автотесты пишутся намного позже кода. В итоге эти автотесты дают фидбек о том, что что-то не работает слишком поздно. Возможно даже после релиза.
Кажется, что иметь какие-то автотесты лучше, чем никаких. Но на практике это не всегда так. Например, лучше не иметь тестов вообще, если тесты - flaky, а тестовый прогон занимает 1 час.
Но лучше все таки поменять процесс так, чтобы те, кто пишут код, писали на него и авто-тесты. Это хорошо, потому что:
- Это упростит и написание тестов т.к. разработчик уже в контексте фичи и ему не нужно переключать контекст для написания авто-тестов
- Система будет тестируемой
- Фидбек от тестов будет раньше
Я бы к мыслям автора добавил, что и сам код авто-тестов будет лучше т.к. разработчики, имея руки, растущие из правильного места, могут применить принципы DRY, SOLID и другие хорошие практики к авто-тестам.
Автор также делает 1 исключение, в котором выделенная команда автоматического тестирования имеет смысл - это end-2-end тесты. end-2-end тесты могут быть не привязаны к конкретной команде т.к. проверяют все разом (грубо говоря, от верстки до БД), а также могут требовать отдельных компетенций.
https://techbeacon.com/app-dev-testing/why-separate-test-automation-teams-dont-work
#auto-tests #testing
Статья про то, почему выделенная команда для автотестов - антипаттерн, кроме одного сценария.
Некоторые команды считают, что разработчики должны заниматься "важными" вещами - делать бизнес-фичи. Автоматизация тестирования это, конечно, важно, но не настолько. Поэтому есть такой паттерн - нанимать отдельных людей, задача которых автоматизировать тестирование за разработчиками.
На практике это приводит к тому что:
- Разработчики не задумываются о тестируемости кода = тестировать становится сложнее
- Разработчики делают изменения, которые ломают авто-тесты, но разработчики не поддерживают авто-тесты. Принятие решения "это тест плохой или мы сломали что-то в продукте" требует большого количества времени
- Фидбек от тестов очень долгий. Если у нас есть команда разработки и команда автоматизации тестирования, то, как правило, автотесты пишутся намного позже кода. В итоге эти автотесты дают фидбек о том, что что-то не работает слишком поздно. Возможно даже после релиза.
Кажется, что иметь какие-то автотесты лучше, чем никаких. Но на практике это не всегда так. Например, лучше не иметь тестов вообще, если тесты - flaky, а тестовый прогон занимает 1 час.
Но лучше все таки поменять процесс так, чтобы те, кто пишут код, писали на него и авто-тесты. Это хорошо, потому что:
- Это упростит и написание тестов т.к. разработчик уже в контексте фичи и ему не нужно переключать контекст для написания авто-тестов
- Система будет тестируемой
- Фидбек от тестов будет раньше
Я бы к мыслям автора добавил, что и сам код авто-тестов будет лучше т.к. разработчики, имея руки, растущие из правильного места, могут применить принципы DRY, SOLID и другие хорошие практики к авто-тестам.
Автор также делает 1 исключение, в котором выделенная команда автоматического тестирования имеет смысл - это end-2-end тесты. end-2-end тесты могут быть не привязаны к конкретной команде т.к. проверяют все разом (грубо говоря, от верстки до БД), а также могут требовать отдельных компетенций.
https://techbeacon.com/app-dev-testing/why-separate-test-automation-teams-dont-work
#auto-tests #testing
TechBeacon
Why separate test automation teams don't work
The widely used "separate team" automation model is destined to fail—except in one case. Here's why, and what you should be doing instead.
useEffect sometimes fires before paint
Обычно предполагают что useEffect запустится после отрисовки. Но всегда ли это так?
На самом деле это не всегда так. Например в случае, если был вызван useEffect, а потом был вызван useLayoutEffect, обновляющий стейт компонента. В этом случае react вызовет useEffect раньше отрисовки.
Очень интересная статья про работу useEffect в разных условиях
https://thoughtspile.github.io/2021/11/15/unintentional-layout-effect
#react #react-hooks
Обычно предполагают что useEffect запустится после отрисовки. Но всегда ли это так?
На самом деле это не всегда так. Например в случае, если был вызван useEffect, а потом был вызван useLayoutEffect, обновляющий стейт компонента. В этом случае react вызовет useEffect раньше отрисовки.
Очень интересная статья про работу useEffect в разных условиях
https://thoughtspile.github.io/2021/11/15/unintentional-layout-effect
#react #react-hooks
Vladimir Klepov as a Coder
useEffect sometimes fires before paint
How to get started with property-based testing in JavaScript using fast-check
Статья про использование подхода property-based-testing с помощью fast-check
Разработчики в основном описывают авто-тесты вида вход = функция = выход. Это авто-тесты на основе примеров (example-based).
Но можно писать другие авто-тесты - property-based. В таких авто-тестах мы должны выделить свойство (property) тестируемой системы. Свойство - это то, что всегда истинно, если все корректно работают. Можно сказать, что это какое-то правило, описывающее тестируемую систему.
Если мы сможем описать какое-то свойство системы, то мы сможем использовать инструмент для property-based тестирования, который сгенерирует для нас сотни и тысячи тестовых сценариев и сам проверит, что свойство всегда истинно.
Самый просто пример, который можно описать в рамках канала:
Мы могли бы описать свойство, что при сложении двух позитивных чисел результат всегда будет больше любого из чисел
И fast-check запустит для нас 10000 тестов с разными числами.
Property-based testing достаточно мощная техника, но которую сложно применить.
Относительное этой статьи видно, что автор срезает углы, описывая преимущество property-based testing и недостатки examples-based testing.
Например, в недостатках example-based тестирования указывается то, что мы можем тратить циклы ЦПУ на тесты, которые нам не нужны. Хотя property-based testing предполагает запуск тысяч тестов т.к. ЦПУ дешевое и мы можем себе позволить проверять кейс тысячи раз.
Также в статье приводится достаточно простой для применения property-based тестирования. Будем честны - никогда нет проблем протестировать чистые функции, реализация которых занимает пару строчек. В таком случае не особо важно, какой подход использовать.
В остальном статья, как обычно у James Sinclair - классная. Если вас интересует тема автоматического тестирования и property-based тестирование - рекомендую к прочтению, но закройте глаза на сравнения с example-based тестированием.
https://jrsinclair.com/articles/2021/how-to-get-started-with-property-based-testing-in-javascript-with-fast-check
#sinclair #auto-tests #testing #property-based-testing #javascript
Статья про использование подхода property-based-testing с помощью fast-check
Разработчики в основном описывают авто-тесты вида вход = функция = выход. Это авто-тесты на основе примеров (example-based).
Но можно писать другие авто-тесты - property-based. В таких авто-тестах мы должны выделить свойство (property) тестируемой системы. Свойство - это то, что всегда истинно, если все корректно работают. Можно сказать, что это какое-то правило, описывающее тестируемую систему.
Если мы сможем описать какое-то свойство системы, то мы сможем использовать инструмент для property-based тестирования, который сгенерирует для нас сотни и тысячи тестовых сценариев и сам проверит, что свойство всегда истинно.
Самый просто пример, который можно описать в рамках канала:
const sum = (a, b) = a + b
Мы могли бы описать свойство, что при сложении двух позитивных чисел результат всегда будет больше любого из чисел
const propertyToTest = fc.property(fc.nat(), fc.nat(), (a,b) = {
const result = sum(a,b)
expect(result a).toEqual(true)
expect(result b).toEqual(true)
}
fc.assert(propertyToTest, {numRuns: 10000});
И fast-check запустит для нас 10000 тестов с разными числами.
Property-based testing достаточно мощная техника, но которую сложно применить.
Относительное этой статьи видно, что автор срезает углы, описывая преимущество property-based testing и недостатки examples-based testing.
Например, в недостатках example-based тестирования указывается то, что мы можем тратить циклы ЦПУ на тесты, которые нам не нужны. Хотя property-based testing предполагает запуск тысяч тестов т.к. ЦПУ дешевое и мы можем себе позволить проверять кейс тысячи раз.
Также в статье приводится достаточно простой для применения property-based тестирования. Будем честны - никогда нет проблем протестировать чистые функции, реализация которых занимает пару строчек. В таком случае не особо важно, какой подход использовать.
В остальном статья, как обычно у James Sinclair - классная. Если вас интересует тема автоматического тестирования и property-based тестирование - рекомендую к прочтению, но закройте глаза на сравнения с example-based тестированием.
https://jrsinclair.com/articles/2021/how-to-get-started-with-property-based-testing-in-javascript-with-fast-check
#sinclair #auto-tests #testing #property-based-testing #javascript
Jrsinclair
How to get started with property-based testing in JavaScript using fast-check
Property-based testing helps us write better tests, with less code, and greater coverage. This leads to more confidence in our code, and fewer bugs in our applications. But, as always, there’s a price. Property tests take more effort to write, and they take…
The strong and weak forces of architecture
Статья в блоке фаулера про связи между командами и системами в организации. Описывает опыт компании MYOB
Если коротко:
Если ваша организация достаточно большая, то вы не можете жестко регулировать, какую архитектуру, инструменты, технологии использовать. В этом случае теряется гибкость и команды вынуждены использовать неподходящие их контексту инструменты.
Обратная ситуация, когда каждая команда вольна выбирать все, что угодно - тоже нежелательна. Как же тогда найти золотую середину?
в MYOB все делится на вертикали, вертикали делятся на домены, в доменах существуют команды.
В рамках домена команды сильно связаны друг с другом: они могут делать изменения в общих участках кода, делятся знаниями друг с другом, могут делать изменения быстро.
Между доменами в рамках вертикали связь уже не такая сильная. Изменения, затрагивающие всю вертикаль, следует делать очень осторожно. Но можно не очень сильно регулировать технологический стек и инструменты.
Между вертикалями связь должна быть очень слабой. С точки зрения выбора технологий и инструментов должны быть обобщенные рекомендации.
Кажется, что не очень хорошо описал смысл статьи - так что лучше зайдите и почитайте. Статья очень короткая, что удивительно для блога Фаулера
https://martinfowler.com/articles/strong-weak-arch.html
#link #martin-fowler #teamlead #architecture
Статья в блоке фаулера про связи между командами и системами в организации. Описывает опыт компании MYOB
Если коротко:
Если ваша организация достаточно большая, то вы не можете жестко регулировать, какую архитектуру, инструменты, технологии использовать. В этом случае теряется гибкость и команды вынуждены использовать неподходящие их контексту инструменты.
Обратная ситуация, когда каждая команда вольна выбирать все, что угодно - тоже нежелательна. Как же тогда найти золотую середину?
в MYOB все делится на вертикали, вертикали делятся на домены, в доменах существуют команды.
В рамках домена команды сильно связаны друг с другом: они могут делать изменения в общих участках кода, делятся знаниями друг с другом, могут делать изменения быстро.
Между доменами в рамках вертикали связь уже не такая сильная. Изменения, затрагивающие всю вертикаль, следует делать очень осторожно. Но можно не очень сильно регулировать технологический стек и инструменты.
Между вертикалями связь должна быть очень слабой. С точки зрения выбора технологий и инструментов должны быть обобщенные рекомендации.
Кажется, что не очень хорошо описал смысл статьи - так что лучше зайдите и почитайте. Статья очень короткая, что удивительно для блога Фаулера
https://martinfowler.com/articles/strong-weak-arch.html
#link #martin-fowler #teamlead #architecture
martinfowler.com
The strong and weak forces of architecture
The forces for architectural alignment vary on domain relationships.
Powerful Terminal And Command-Line (CLI) Tools For Modern Web Development
Набор тулов для работы в терминале. Показано много разного и интересного.
https://smashingmagazine.com/2021/11/powerful-terminal-commandline-tools-modern-web-development
#terminal #cli #console
Набор тулов для работы в терминале. Показано много разного и интересного.
https://smashingmagazine.com/2021/11/powerful-terminal-commandline-tools-modern-web-development
#terminal #cli #console
Smashing Magazine
Powerful Terminal And Command-Line (CLI) Tools For Modern Web Development — Smashing Magazine
What’s your favorite command-line tool? In this post, Louis Lazaris shares a collection of relevant command-line apps and utilities that he has personally come across in the past few years. If there’s a useful one that hasn’t been mentioned and one you use…
👍1