Simple monorepos via npm workspaces and TypeScript project references
Статья от Dr. Axel Rauschmayer про монорепы с использованием npm, который умеет в workspaces, и примером правильной настройки tsconfig в рамках монорепы
https://2ality.com/2021/07/simple-monorepos.html
#link #npm #typescript #monorepo #frontend #web-development
Статья от Dr. Axel Rauschmayer про монорепы с использованием npm, который умеет в workspaces, и примером правильной настройки tsconfig в рамках монорепы
https://2ality.com/2021/07/simple-monorepos.html
#link #npm #typescript #monorepo #frontend #web-development
Abracadabra, refactor this! - Visual Studio Marketplace
Расширение для vscode для автоматического рефакторинга JS и TS кода. Некоторые рефакторинги выглядят весьма впечатляюще
https://marketplace.visualstudio.com/items?itemName=nicoespeon.abracadabra#abracadabra
#link #typescript #vscode #frontend #web-development
Расширение для vscode для автоматического рефакторинга JS и TS кода. Некоторые рефакторинги выглядят весьма впечатляюще
https://marketplace.visualstudio.com/items?itemName=nicoespeon.abracadabra#abracadabra
#link #typescript #vscode #frontend #web-development
Visualstudio
Abracadabra, refactor this! - Visual Studio Marketplace
Extension for Visual Studio Code - Automated refactorings for VS Code, in JavaScript and TypeScript.
Incremental note-taking
Организация своих заметок - непростая задача. Есть много инструментов и подходов к накоплению знаний через заметки.
Большинство популярных на сегодняшний день инструментов проповедуют подход, в котором необходимо фиксировать текущее состояние знания. Например, вы узнали что-то год назад, теперь узнали об этом же факте что-то новое - вы должны обновить заметку в своей базе знаний.
Этот подход не похож на то, как работает память. В вашей памяти останется 2 знания: как вы знали раньше и что вы узнали нового.
Подход Incremental note-taking, описанный в статье, пытается это повторить. Вместо того, чтобы обновить старую заметку, следует сделать новую и соединить с предыдущей. Также важен контекст, в котором заметка появилась - например время, когда она появилась, и место, где она появилась.
В статье рассматриваются еще разные аспекты работы памяти и организации заметок, а также как реализовать Incremental note-taking подход используя существующие инструменты для ведения базы знаний.
https://thesephist.com/posts/inc
#link #knowledge-managment
Организация своих заметок - непростая задача. Есть много инструментов и подходов к накоплению знаний через заметки.
Большинство популярных на сегодняшний день инструментов проповедуют подход, в котором необходимо фиксировать текущее состояние знания. Например, вы узнали что-то год назад, теперь узнали об этом же факте что-то новое - вы должны обновить заметку в своей базе знаний.
Этот подход не похож на то, как работает память. В вашей памяти останется 2 знания: как вы знали раньше и что вы узнали нового.
Подход Incremental note-taking, описанный в статье, пытается это повторить. Вместо того, чтобы обновить старую заметку, следует сделать новую и соединить с предыдущей. Также важен контекст, в котором заметка появилась - например время, когда она появилась, и место, где она появилась.
В статье рассматриваются еще разные аспекты работы памяти и организации заметок, а также как реализовать Incremental note-taking подход используя существующие инструменты для ведения базы знаний.
https://thesephist.com/posts/inc
#link #knowledge-managment
Social loafing - Wikipedia
Социальная ленность - эффект в психологии, заключающийся в том, что чем больше группа людей, тем меньше производительность каждого участника группы.
Эффект подтверждается большим количеством независимых исследований.
Это обьясняет почему из каждого утюга слышано про то, что команды должны быть маленькими. В маленьких командах, около 5 человек согласно исследованиям, социальная ленность не проявляется.
Интересные факты из исследований:
- Женщины и люди из восточных культур меньше подвержены социальной ленности.
- При рассмотрении распределенных и собранных в одном месте команд, выяснилось, что распределенные команды меньше подвержены социальной ленности (нет смысла делать видимость работы)
- Люди, занимающиеся командными видами спорта, менее подвержены социальной ленности. мое ИМХО, люди играющие в командные компьютерные игры также должны быть менее подвержены этому эффекту.
Одна из причин возникновения эффекта: чем больше группа, тем менее виден эффект от усилий конкретного человека.
Способы борьбы:
- Человек должен чувствовать, что его работа важна для команды
- Работа в группе, которая приносит удовольствие. хороший пример - парное программирование, если оно всем нравится.
- Работа с интересными задачами
- Четкие, ясные цели
- Оценка индивидуальной работы сотрудника, вместо оценки работы всей команды
Эффект также перекликается с другими психологическими теориями, например с Social identity theory
В общем:
- научно доказано, что размер команды имеет значение
- очень важно чтобы человек получал удовольствие от работы и чувствовал свой импакт на происходящее.
Ну и судя по исследованиям - идеальные тиммейты это женщины из восточной азии, играющие в командные виды спорта
https://en.wikipedia.org/wiki/Social_loafing
#link #peopleware #psychology
Социальная ленность - эффект в психологии, заключающийся в том, что чем больше группа людей, тем меньше производительность каждого участника группы.
Эффект подтверждается большим количеством независимых исследований.
Это обьясняет почему из каждого утюга слышано про то, что команды должны быть маленькими. В маленьких командах, около 5 человек согласно исследованиям, социальная ленность не проявляется.
Интересные факты из исследований:
- Женщины и люди из восточных культур меньше подвержены социальной ленности.
- При рассмотрении распределенных и собранных в одном месте команд, выяснилось, что распределенные команды меньше подвержены социальной ленности (нет смысла делать видимость работы)
- Люди, занимающиеся командными видами спорта, менее подвержены социальной ленности. мое ИМХО, люди играющие в командные компьютерные игры также должны быть менее подвержены этому эффекту.
Одна из причин возникновения эффекта: чем больше группа, тем менее виден эффект от усилий конкретного человека.
Способы борьбы:
- Человек должен чувствовать, что его работа важна для команды
- Работа в группе, которая приносит удовольствие. хороший пример - парное программирование, если оно всем нравится.
- Работа с интересными задачами
- Четкие, ясные цели
- Оценка индивидуальной работы сотрудника, вместо оценки работы всей команды
Эффект также перекликается с другими психологическими теориями, например с Social identity theory
В общем:
- научно доказано, что размер команды имеет значение
- очень важно чтобы человек получал удовольствие от работы и чувствовал свой импакт на происходящее.
Ну и судя по исследованиям - идеальные тиммейты это женщины из восточной азии, играющие в командные виды спорта
https://en.wikipedia.org/wiki/Social_loafing
#link #peopleware #psychology
Эволюция рабочего места: от ноутбука на кухне до работы стоя
Статья про эргономику на рабочем месте. Рассматриваются стулья, столы и работа стоя.
https://habr.com/ru/company/dododev/blog/570078
#health
Статья про эргономику на рабочем месте. Рассматриваются стулья, столы и работа стоя.
https://habr.com/ru/company/dododev/blog/570078
#health
Хабр
Эволюция рабочего места: от ноутбука на кухне до работы стоя
Компьютерный стол у меня появился на два года раньше компьютера, в 2004 году. Это был обычный стол, у которого даже были полки для монитора и клавиатуры. За ним я научился всему, а спустя 17 лет он...
Beat the bystander effect with minimal social pressure
Эффект свидетеля - психологический эффект, проявляющийся в том, что люди, оказавшиеся свидетелями чрезвычайной ситуации, не пытаются помочь пострадавшим.
Он также может работать в бытовых ситуация и на работе. Вы, наверное, часто сталкивались с проявлением этого эффекта, когда кто-то говорит "нужен доброволец который сделает Х", но никто не отзывается. Каждый думает, что он недостаточно подходит для этой роли.
Статья предлагает бороться с эффектом свидетеля следующим образом:
- Предлагайте сделать целевое действие конкретным людям. При этом ответ "нет" не должен игнорироваться
- При поиске добровольца ограничивайте время поиска. Например, "ищу добровольца для Х следующие 3 дня, потом выберу кого нибудь"
- Предлагайте другого человека, если это пойдет на пользу процессу
- Даже "эй, Боб, помоги мне найти того кто сделает Х" лучше чем "Ищу добровольца чтобы сделать Х"
http://acritch.com/bystander-tactics
#link #psychology
Эффект свидетеля - психологический эффект, проявляющийся в том, что люди, оказавшиеся свидетелями чрезвычайной ситуации, не пытаются помочь пострадавшим.
Он также может работать в бытовых ситуация и на работе. Вы, наверное, часто сталкивались с проявлением этого эффекта, когда кто-то говорит "нужен доброволец который сделает Х", но никто не отзывается. Каждый думает, что он недостаточно подходит для этой роли.
Статья предлагает бороться с эффектом свидетеля следующим образом:
- Предлагайте сделать целевое действие конкретным людям. При этом ответ "нет" не должен игнорироваться
- При поиске добровольца ограничивайте время поиска. Например, "ищу добровольца для Х следующие 3 дня, потом выберу кого нибудь"
- Предлагайте другого человека, если это пойдет на пользу процессу
- Даже "эй, Боб, помоги мне найти того кто сделает Х" лучше чем "Ищу добровольца чтобы сделать Х"
http://acritch.com/bystander-tactics
#link #psychology
beachball
Тул для удобной автоматической публикации npm пакетов от Microsoft.
- Синхронизирует гит и нпм
- Генерирует ченджлоги
- Сам поднимает версии по семверу
- Работает как с моно-репо и так и single-репо
- 0-config
https://microsoft.github.io/beachball
#link #monorepo #microsoft #npm #web-development #frontend #library
Тул для удобной автоматической публикации npm пакетов от Microsoft.
- Синхронизирует гит и нпм
- Генерирует ченджлоги
- Сам поднимает версии по семверу
- Работает как с моно-репо и так и single-репо
- 0-config
https://microsoft.github.io/beachball
#link #monorepo #microsoft #npm #web-development #frontend #library
microsoft.github.io
beachball
The Sunniest Semantic Version Bumper
How to model application flows in React with finite state machines and XState
Пошаговый пример проектирования небольшой страницы с помощью XState
https://engineering.kablamo.com.au/posts/2021/finite-state-machines-and-xstate
#link #frontend #web-development #xstate #react #javascipt
Пошаговый пример проектирования небольшой страницы с помощью XState
https://engineering.kablamo.com.au/posts/2021/finite-state-machines-and-xstate
#link #frontend #web-development #xstate #react #javascipt
Insights from Kablamo Engineering.
How to model application flows in React with finite state machines and XState
Application state in front-end clients is a complexity that is at best managed, and at worst the reason you can't deliver new features. What if you could know every state your app could be in and ensure that it can only be in those states?
Frontend development. How to use finite state machines in React?
Еще одна статья про проектирование маленьгого react приложения вместе с xstate
https://tsh.io/blog/finite-state-machines-in-react
#xstate #react #javascipt #web-development #frontend
Еще одна статья про проектирование маленьгого react приложения вместе с xstate
https://tsh.io/blog/finite-state-machines-in-react
#xstate #react #javascipt #web-development #frontend
The Software House
How to use finite state machines in React?
Finite state machines in React? I know, it sounds crazy. But if you introduce state machines in frontend development they will work miracles for your project.
17 причин не использовать чаты в работе, перевод статьи основателя Basecamp — Офис на
Статья про то, как чаты, из идеи асинхронного общения превратились плохое синхронное общение.
Также указаны принципы хорошего асинхронного общения. Но ни слова о том, как перестать делать плохо и начать делать хорошо
https://vc.ru/office/275508-17-prichin-ne-ispolzovat-chaty-v-rabote-perevod-stati-osnovatelya-basecamp
#communication
Статья про то, как чаты, из идеи асинхронного общения превратились плохое синхронное общение.
Также указаны принципы хорошего асинхронного общения. Но ни слова о том, как перестать делать плохо и начать делать хорошо
https://vc.ru/office/275508-17-prichin-ne-ispolzovat-chaty-v-rabote-perevod-stati-osnovatelya-basecamp
#communication
vc.ru
17 причин не использовать чаты в работе, перевод статьи основателя Basecamp — Офис на vc.ru
Краткая справка про ребят из Basecamp — с 2006 года делают софт для ведения проектов и удаленных команд, первые на рынке рабочих чатов. Раньше вели блог Signal vs. Noise, где много интересных статей. Джейсон Фрид, основатель, написал две книги — Remote и…
Patterns of Legacy Displacement
Паттеры для замены легаси на что-то новое.
Сам процесс замены можно разбить на следующие состоявляющие:
- Понять, чего хотим достичь
- Разбить проблему на мелкие части
- Успешно заделиверить эти части
- Изменить организацию так, чтобы новое решение не превратилось в новое легаси
В статье рассказывается об анти-паттернах переписывания легаси:
- переписывание всего разом
- переписывание потому что "новая технология"
- переписывание без понимания, чего хотим достичь
- переделывавние технической части или бизнесовой изолированно друг от друга
В целом для хорошей замены легаси компонента на новвый, нужно
- уметь в архитектуру
- быть agile
- понимать зачем это бизнесу
- менять не только саму систему, но и все процессы и организацию вокруг системы
Обязательно к прочтению всем, кто хочет менять легаси
https://martinfowler.com/articles/patterns-legacy-displacement
#martin-fowler #refactoring #legacy
Паттеры для замены легаси на что-то новое.
Сам процесс замены можно разбить на следующие состоявляющие:
- Понять, чего хотим достичь
- Разбить проблему на мелкие части
- Успешно заделиверить эти части
- Изменить организацию так, чтобы новое решение не превратилось в новое легаси
В статье рассказывается об анти-паттернах переписывания легаси:
- переписывание всего разом
- переписывание потому что "новая технология"
- переписывание без понимания, чего хотим достичь
- переделывавние технической части или бизнесовой изолированно друг от друга
В целом для хорошей замены легаси компонента на новвый, нужно
- уметь в архитектуру
- быть agile
- понимать зачем это бизнесу
- менять не только саму систему, но и все процессы и организацию вокруг системы
Обязательно к прочтению всем, кто хочет менять легаси
https://martinfowler.com/articles/patterns-legacy-displacement
#martin-fowler #refactoring #legacy
martinfowler.com
Patterns of Legacy Displacement
Patterns for the effective modernization of legacy software systems
Ускоряем код на JS и других языках: подборка приёмов от разработчика поиска Яндекса
Команда поиска Яндекс внимательно следит за производительностью своего поиска. Поиск яндекса - пример бизнеса, в котором производительность критична.
У команды поиска уже были хорошие доклады про то, как они следят за перформансом своего приложения.
Теперь же они оформили свой опыт оптимизации исполнения кода в виде статьи на хабре.
https://habr.com/ru/company/yandex/blog/570914
#web-development #frontend #yandex #habr #performance
Команда поиска Яндекс внимательно следит за производительностью своего поиска. Поиск яндекса - пример бизнеса, в котором производительность критична.
У команды поиска уже были хорошие доклады про то, как они следят за перформансом своего приложения.
Теперь же они оформили свой опыт оптимизации исполнения кода в виде статьи на хабре.
https://habr.com/ru/company/yandex/blog/570914
#web-development #frontend #yandex #habr #performance
Хабр
Приёмы ускорения кода на JS и других языках: подборка от разработчика поиска Яндекса
Привет! Меня зовут Виктор Хомяков, в Яндексе я работаю над скоростью страниц поиска. Однажды мне в голову пришла идея обобщить свой опыт и систематизировать приёмы ускорения работы кода на JavaScript....
GitHub - vultix/ts-results: A typescript implementation of Rust's Result object.
Имплементация обьекта Result из Rust на typescript. Result очень похож на монаду Maybe (если я правильно помню эту монаду) - может содержать или результат или ошибку, но перед тем как работать с результатом нужно проверить, содержится ли в Result ошибка или результат.
Выглядит интересно.
https://github.com/vultix/ts-results
#link #typescript #library #github #web-development #frontend
Имплементация обьекта Result из Rust на typescript. Result очень похож на монаду Maybe (если я правильно помню эту монаду) - может содержать или результат или ошибку, но перед тем как работать с результатом нужно проверить, содержится ли в Result ошибка или результат.
Выглядит интересно.
https://github.com/vultix/ts-results
#link #typescript #library #github #web-development #frontend
GitHub
GitHub - vultix/ts-results: A typescript implementation of Rust's Result object.
A typescript implementation of Rust's Result object. - vultix/ts-results
WebDriver BiDi - The future of cross-browser automation
Сначала на свет появился Selenium, позволивший автоматизировать тестирование в браузерах с использованием протокола WebDriver. Этот протокол стандартизирован W3C и именно благодаря ему с помощью Selenium возможно тестировать почти все браузеры.
Затем на свет вышел Chrome Devtools Protocol (CDP) и puppeteer. Он, обьективно говоря, удобнее всем. Кроме одного факта - работает только с chromium based браузерами. Текущие самые популярные платформы для написания браузерных тестов - cypress и puppeteer, работают на CDP.
Чуть позже Microsoft анонсировала playwright. Инструмент имеет апи как у puppeteer, но умеет автоматизировать safari и firefox (если не ошибаюсь).
А теперь комитет W3C стандартизирует WebDriver-BiDi - который должен взять плюсы CDP, но убрать из них специфику хрома и стать единым новым протоколом для общения с браузерами.
https://developer.chrome.com/blog/webdriver-bidi
#testing #web-development
Сначала на свет появился Selenium, позволивший автоматизировать тестирование в браузерах с использованием протокола WebDriver. Этот протокол стандартизирован W3C и именно благодаря ему с помощью Selenium возможно тестировать почти все браузеры.
Затем на свет вышел Chrome Devtools Protocol (CDP) и puppeteer. Он, обьективно говоря, удобнее всем. Кроме одного факта - работает только с chromium based браузерами. Текущие самые популярные платформы для написания браузерных тестов - cypress и puppeteer, работают на CDP.
Чуть позже Microsoft анонсировала playwright. Инструмент имеет апи как у puppeteer, но умеет автоматизировать safari и firefox (если не ошибаюсь).
А теперь комитет W3C стандартизирует WebDriver-BiDi - который должен взять плюсы CDP, но убрать из них специфику хрома и стать единым новым протоколом для общения с браузерами.
https://developer.chrome.com/blog/webdriver-bidi
#testing #web-development
Chrome for Developers
WebDriver BiDi - The future of cross-browser automation | Blog | Chrome for Developers
Getting to know what is WebDriver BiDi and why it is the future of cross-browser automation
TypeScript: Unexpected intersections
У вас есть 2 обьекта одного типа Type.
type Type = {
a: string,
b: number
}
Функция принимает параметр key типа keyof Type и перебрасывает из одного обьекта значение key в другой обьект.
function fn(key: keyof Type) {
obj1key = obj2key
}
В этом случае Typescript будет думать, будто-бы мы ЛЮБОЙ ключ obj2 кидаем в ЛЮБОЙ ДРУГОЙ ключ obj1. Т.е. rак будто пытаемся записать string | number либо в поле с типом string, либо в поле с типом number. Typescript кинет ошибку т.к. ему нужно доказать что мы правильно перезаписываем поля.
Такое поведение неочевидно, потому что для разработчика ожидаемое поведение другое. Из кода понятно, что мы не можем тут записать неправильный тип данных.
Решение для этой проблемы, а также пара других похожих проблем можно прочитать в статье.
https://fettblog.eu/typescript-unexpected-intersections
#typescript #frontend #web-development
У вас есть 2 обьекта одного типа Type.
type Type = {
a: string,
b: number
}
Функция принимает параметр key типа keyof Type и перебрасывает из одного обьекта значение key в другой обьект.
function fn(key: keyof Type) {
obj1key = obj2key
}
В этом случае Typescript будет думать, будто-бы мы ЛЮБОЙ ключ obj2 кидаем в ЛЮБОЙ ДРУГОЙ ключ obj1. Т.е. rак будто пытаемся записать string | number либо в поле с типом string, либо в поле с типом number. Typescript кинет ошибку т.к. ему нужно доказать что мы правильно перезаписываем поля.
Такое поведение неочевидно, потому что для разработчика ожидаемое поведение другое. Из кода понятно, что мы не можем тут записать неправильный тип данных.
Решение для этой проблемы, а также пара других похожих проблем можно прочитать в статье.
https://fettblog.eu/typescript-unexpected-intersections
#typescript #frontend #web-development
fettblog.eu
TypeScript: Unexpected intersections
Sometimes when writing TypeScript, some of the things you’d usually do in JavaScript work a little different and cause some weird, and puzzling situations. Sometimes you just want to assign a value to an object property and get a weird error like “Type ‘string…
Heuristics for Effective Software Development: A continuously evolving list
Эвристики эффективной разработки.
Очередной манифест с лозунгами. Но в целом все верно.
https://holub.com/heuristics-for-effective-software-development-a-continuously-evolving-list
#development
Эвристики эффективной разработки.
Очередной манифест с лозунгами. Но в целом все верно.
https://holub.com/heuristics-for-effective-software-development-a-continuously-evolving-list
#development
Allen Holub
Heuristics for Effective Software Development Organizations: A continuously evolving list.* | Allen Holub
Without psychological safety, respect, and trust, none of the following is possible. The way we work, the work we do, and the organizations within which we work are all part of a connected system. You cannot change anything without changing everything. You…
The Problem with Prioritization Frameworks
Есть несколько популярных фреймворков для приоритезации задач.
- ICE/RICE scoring (reach, impact, confidence, effort)
- Value vs complexity 2X2 matrix
- Stakeholder scoring
Все они примерно одинаковы, нужно дать оценку идеям по трем пунктам:
- Сколько это принесет денег
- Как сложно это сделать
Вопросов может быть больше или они могут быть поставлены по другому, но в целом они сводятся к этим двум оценкам.
Эти фреймворки не работают, потому что их результаты очень неточны. Они хорошо выделяют задачи которые легко сделать и приносят много ценности и которые сложно сделать и не приносят ценности. Но такие задачи легко видны и без применения фреймворков приоритезации.
Решение проблемы приоритезации в другом: продуктовая команда должна сфокусироваться на меньшем количестве задач, но на таких, в которые верит вся продуктовая команда.
Не смотря на то, что эти фреймворки не помогают с приоритезацией, они могут помочь в другом. Эти фреймворки хорошо визуализируют, почему некоторые запросы стейкхолдеров не следует брать в работу. В этом случае эти фреймворки выполняются роль платформы для обсуждения.
Есть и другие методы приоритезации:
- Kano model
- Opportunity scoring
- Buy-a-feature method
Они работают лучше, но по-другому и имеют свои проблемы
https://jefago.com/product-management/why-prioritization-frameworks-dont-work
#link #managment #agile #prioritization
Есть несколько популярных фреймворков для приоритезации задач.
- ICE/RICE scoring (reach, impact, confidence, effort)
- Value vs complexity 2X2 matrix
- Stakeholder scoring
Все они примерно одинаковы, нужно дать оценку идеям по трем пунктам:
- Сколько это принесет денег
- Как сложно это сделать
Вопросов может быть больше или они могут быть поставлены по другому, но в целом они сводятся к этим двум оценкам.
Эти фреймворки не работают, потому что их результаты очень неточны. Они хорошо выделяют задачи которые легко сделать и приносят много ценности и которые сложно сделать и не приносят ценности. Но такие задачи легко видны и без применения фреймворков приоритезации.
Решение проблемы приоритезации в другом: продуктовая команда должна сфокусироваться на меньшем количестве задач, но на таких, в которые верит вся продуктовая команда.
Не смотря на то, что эти фреймворки не помогают с приоритезацией, они могут помочь в другом. Эти фреймворки хорошо визуализируют, почему некоторые запросы стейкхолдеров не следует брать в работу. В этом случае эти фреймворки выполняются роль платформы для обсуждения.
Есть и другие методы приоритезации:
- Kano model
- Opportunity scoring
- Buy-a-feature method
Они работают лучше, но по-другому и имеют свои проблемы
https://jefago.com/product-management/why-prioritization-frameworks-dont-work
#link #managment #agile #prioritization
Jefago
The Problem with Prioritization Frameworks
Prioritizing is difficult for many product managers, so they turn to prioritization frameworks. However, they solve the wrong problem, and they solve it badly.
GitHub’s Journey From Monolith to Microservices
Github вырос в 2 раза за полтора года. GitHub стал достаточно большим, чтобы ощущать неудобство от монолита:
- можно случайно все сломать
- большой кусок кода
- все разработчики завязаны на 1 стек
Поэтому было принято решение понемногу вводить микросервисы. В статье описаны проблемы, с которыми столкнулись в GitHub. И их решения.
В статье вы не увидите ничего нового, если вы уже мастер микросервисов. П
https://infoq.com/articles/github-monolith-microservices
#github #microservices #web-development
Github вырос в 2 раза за полтора года. GitHub стал достаточно большим, чтобы ощущать неудобство от монолита:
- можно случайно все сломать
- большой кусок кода
- все разработчики завязаны на 1 стек
Поэтому было принято решение понемногу вводить микросервисы. В статье описаны проблемы, с которыми столкнулись в GitHub. И их решения.
В статье вы не увидите ничего нового, если вы уже мастер микросервисов. П
https://infoq.com/articles/github-monolith-microservices
#github #microservices #web-development
InfoQ
GitHub’s Journey from Monolith to Microservices
This article explores GitHub's recent journey towards a microservices architecture. It takes a deeper look at GitHub’s historical and current state, goes over some internal and external factors, and discusses practical consideration points in how Github tackled…
How open source beat agile
GitHub запустился в 2008 году и очень быстро стал популярным. В том числе популяризировалась и модель Pull Request + Code Review.
В 2010 году была опубликована книга Continuous Delivery, в рамках которой предлагается коммитить сразу в мастер и не рекомендуется делать долго-живущие фиче-ветки.
Эта два совершенно разных подхода, которые подходят разным контекстам. Подход GitHub'а подходит open-source проектам, потому что:
- В проекты в GitHub'е нельзя просто так комитить в мастер
- Нет четкого заказчика
Подход Continious Delivery больше подходит agile проектам, где все разработчики могут комитить сразу в мастер и есть четкий заказчик.
Эти два подхода конфликтуют.
Почему же в коммерческой разработке все используют подход, который больше подходит для open source проектов? А именно, почему практически все разрабатывают с помощью Pull Request и Code Review?
Автор статьи связывает это с тем, что процесс разработки как в Open Source более прозрачен. Разработчики во время Code Review видят практики, которые применяют другие разработчики. В то время как при применении Continous Delivery сложно увидеть практики, применяемые другими разработчиками.
От себя добавлю, что инструментов, позволяющих проводить Code Review на Pull Request'ах - достаточно много. В то же время инструментов, позволяющих делать удобный Continious Code Review на мастере - нет совсем
https://surfingcomplexity.blog/2017/01/21/how-open-source-beat-agile
#agile #development #code-review
GitHub запустился в 2008 году и очень быстро стал популярным. В том числе популяризировалась и модель Pull Request + Code Review.
В 2010 году была опубликована книга Continuous Delivery, в рамках которой предлагается коммитить сразу в мастер и не рекомендуется делать долго-живущие фиче-ветки.
Эта два совершенно разных подхода, которые подходят разным контекстам. Подход GitHub'а подходит open-source проектам, потому что:
- В проекты в GitHub'е нельзя просто так комитить в мастер
- Нет четкого заказчика
Подход Continious Delivery больше подходит agile проектам, где все разработчики могут комитить сразу в мастер и есть четкий заказчик.
Эти два подхода конфликтуют.
Почему же в коммерческой разработке все используют подход, который больше подходит для open source проектов? А именно, почему практически все разрабатывают с помощью Pull Request и Code Review?
Автор статьи связывает это с тем, что процесс разработки как в Open Source более прозрачен. Разработчики во время Code Review видят практики, которые применяют другие разработчики. В то время как при применении Continous Delivery сложно увидеть практики, применяемые другими разработчиками.
От себя добавлю, что инструментов, позволяющих проводить Code Review на Pull Request'ах - достаточно много. В то же время инструментов, позволяющих делать удобный Continious Code Review на мастере - нет совсем
https://surfingcomplexity.blog/2017/01/21/how-open-source-beat-agile
#agile #development #code-review
Surfing Complexity
How open source beat agile
How does code land in your master branch? Do your team members commit directly to master, or do you merge in pull requests? In 2008, the repository hosting company known as GitHub was founded. GitH…
Prefer Declarative State Updaters
Статья про антипаттерн, когда чаилд-компонент работает с передаваемым ему апи, зная его реализацию
В частности, когда в чаилд компонент передаётся setState от родителя
Из минусов статьи - аргументация. Это плохо потому что это плохо и вообще не надо так.
https://kyleshevlin.com/prefer-declarative-state-updaters?ck\_subscriber\_id=887769274
#link #react #frontend #javascript #web-development
Статья про антипаттерн, когда чаилд-компонент работает с передаваемым ему апи, зная его реализацию
В частности, когда в чаилд компонент передаётся setState от родителя
Из минусов статьи - аргументация. Это плохо потому что это плохо и вообще не надо так.
https://kyleshevlin.com/prefer-declarative-state-updaters?ck\_subscriber\_id=887769274
#link #react #frontend #javascript #web-development
Kyleshevlin
Prefer Declarative State Updaters
Learn how declarative state updaters improve the quality of your component's code.
How To Write Readable React Content States
Практически для любого контента нам нужно уметь показывать 4 состояния:
- ожидание
- загрузка данных
- ошибка загрузки
- успешная загрузка
В статье рассматриваются два способа реализации этих состояний в react компоненте.
По сути это:
- условия в разметке
- отдельные компоненты
Оба способа имеют свои плюсы и минусы и подходят в разных контекстах
https://www.chakshunyu.com/blog/how-to-write-readable-react-content-states/
#link #react #javascript #web-development #frontend
Практически для любого контента нам нужно уметь показывать 4 состояния:
- ожидание
- загрузка данных
- ошибка загрузки
- успешная загрузка
В статье рассматриваются два способа реализации этих состояний в react компоненте.
По сути это:
- условия в разметке
- отдельные компоненты
Оба способа имеют свои плюсы и минусы и подходят в разных контекстах
https://www.chakshunyu.com/blog/how-to-write-readable-react-content-states/
#link #react #javascript #web-development #frontend
Chakshunyu
How To Write Readable React Content States
Content streams are an important part of any React project, but also introduces a lot of complexity. Long term, making sure that the code is readable has a serious impact on the maintainability. This article will cover and analyze the readability of two fundamental…