@scala_ru

Страница 1118 из 1499
Mikhail
05.12.2017
06:08:53
В твоём варианте тоже будет новый таск, просто через map а не flatMap
он в предыдущий вызов не схлопнется? надо будет глянуть, что они там генерят)

Alexander
05.12.2017
07:15:43
А где пример стрима?
Все что есть - это итератор получаемый в ответ, как встроить в такую схему стрим - не понимаю.

Google
Mikhail
05.12.2017
07:16:16
@rockjam завтра расскажешь кароч) заинтересовал
Это называется feature toggles - ранняя интеграция в мастер с ручным активированием фичи

Vladimir
05.12.2017
07:17:14
а есть для такого подхода истории успеха с командой больше 5 человек? пара знакомых с такого как раз слезала по ходу роста

Mikhail
05.12.2017
07:18:00
По моему хром так пишут

Как раз потому что много людей одновременно работает

Denis
05.12.2017
07:21:03
SRE из гугла рассказывал что там так часто делают.

Mikhail
05.12.2017
07:29:11
Делать так можно, но нужно соблюсти много условий

Nick
05.12.2017
07:29:53
По моему хром так пишут
хром пишут не совсем так

у них там несколько веток

Mikhail
05.12.2017
07:30:34
Проблема с код ревью - либо работать в парах, либо не деплоить автоматически на прод

Ну у хрома есть версии, да

Nick
05.12.2017
07:31:36
что мешает юзать обычный гитфлоу?)

Mikhail
05.12.2017
07:34:51
Стоимость интеграции долгих веток

Никогда не слышали "этот класс пока не трогай, я у себя в ветке отрефакторил".

Google
Vladimir
05.12.2017
07:42:33
кто первый смержил, того и тапки

Mikhail
05.12.2017
07:45:10
Да, если есть код ревью, то можно придираться пока свою ветку не смержишь

Про бэкмерж не слышали?
А причём тут это. Проблему тапок это не решает.

Чем больше wip не интегрированный, тем больше конфликтов

Размер wip пропорционален количеству разработчиков и размеру фич

В какой-то момент это становится серьёзной проблемой

Nick
05.12.2017
07:51:03
А причём тут это. Проблему тапок это не решает.
Но уменьшает боль и зуд в анусе

Mikhail
05.12.2017
07:51:38
Проблема не в том как и когда решать конфликты, а в том что они вообще есть

Nick
05.12.2017
07:53:12
Эт не проблема)

Gennady
05.12.2017
07:54:24
конфликты в одних и тех же местах - признак неподходящей архитектуры/дизайна, в разных - плохого планирования

условный гитфлоу и WIPы могут решить вторую проблему, но не первую

Mikhail
05.12.2017
07:56:04
Допустим, я отрефакторил класс повсеместно использующийся и смерджил в мастер. 10 моих коллег в ветках этот класс тоже использовали поняли что у них конфликты, но не вполне осознают суть изменений (ну потому что им нужно больше вникнуть в контекст, чем автору). Зовут автора или тихо матерясь правят свой код, тратя своё время. Поэтому для значительных изменений люди пытаются подобрать момент когда меньше wip, зная какой гемор с конфликтами иначе.

Victor
05.12.2017
07:56:39
Выделить в отдельный модуль и подвергнуть его версионированию?

Mikhail
05.12.2017
07:57:17
В чем плохой?

Alexander
05.12.2017
07:57:21
Oleg
05.12.2017
07:57:31
благодарю, отпишу
Это пример с https://github.com/travisbrown/iteratee

Google
Mikhail
05.12.2017
07:57:54
Нужно сделать митинг "рефакторим класс A"?

Gennady
05.12.2017
07:58:07
Выделить в отдельный модуль и подвергнуть его версионированию?
это уже архитектурное решение (скорее верное для описанного кейса)

Nick
05.12.2017
07:58:12
В чем плохой?
Плохо когда у тебя люди один класс правят

Mikhail
05.12.2017
07:58:28
А представьте что коллег не 10, а 100. Договориться не получится.

Плохо когда у тебя люди один класс правят
Так они не правят, а используют. Хуже когда правят, да.

Александр
05.12.2017
07:59:18
писали 30 людями в 5 командах в 1 мастер, боли были при мерджах но не огромные

Nick
05.12.2017
07:59:25
Так они не правят, а используют. Хуже когда правят, да.
Использование не должно конфликтов порождать

Mikhail
05.12.2017
07:59:34
Э?

Gennady
05.12.2017
07:59:40
А представьте что коллег не 10, а 100. Договориться не получится.
архитектор на что? 100 человек в гибкость и договоры p2p не влезут, надо менеджить

Александр
05.12.2017
08:00:33
А представьте что коллег не 10, а 100. Договориться не получится.
коль, люди сразу в мастер пушили то 100 людям было бы легче?

Mikhail
05.12.2017
08:01:23
Я просто объясняю когда это может быть нужно. Не призываю создавать монорепу на 100 человек, но у кого-то это объективная реальность.

Victor
05.12.2017
08:02:08
тоже больно
Ну, выбирайте ту боль, с которой вы готовы смириться

Mikhail
05.12.2017
08:02:57
это уже огромная проблема
Монолит на 15 команд, 100 человек, 200+ модулей. Бывает.

Переписывание на микросервисы - несколько лет...

Alexandr
05.12.2017
08:03:51
Скаланы, а есть ли разница между x ne null и x != null ?

Gennady
05.12.2017
08:04:17
Бывает. Но если всем участвующим окей такой оверхед - на конфликты, проблемы, сложности развития - на большое бабло, в общем - то, наверное, есть и бенефиты. Наверное)

либо кто-то деньги считать не умеет

Oleg
05.12.2017
08:05:58
Скаланы, а есть ли разница между x ne null и x != null ?
зависит от того, как ты определил equals

Alexandr
05.12.2017
08:06:29
Уточню вопрос

Google
Alexandr
05.12.2017
08:06:40
если equals дефолтный. Безо вяских def equals(x: Any) = true

Oleg
05.12.2017
08:07:03
Можт ты написал у себя if (that == null)

Mikhail
05.12.2017
08:07:35
либо кто-то деньги считать не умеет
Ну легаси система и приносит бабло, нельзя же её выключить и начать с нуля

Oleg
05.12.2017
08:07:36
дефолтный это Object.equals или сгенеренный для case class?

Oleksandr
05.12.2017
08:08:00
вызов equals вс вызов сравнения ссылок для null нет разницы

Oleg
05.12.2017
08:08:10
В любом случае ne null быстрее до первого JITа

Murat
05.12.2017
08:08:35
Проверку на null надо через ne делать имхо

Oleksandr
05.12.2017
08:08:51
почему?

Admin
ERROR: S client not available

Nick
05.12.2017
08:09:10
Oleksandr
05.12.2017
08:09:16
разница скорости этих 2 вариантов -- даже не спичка, а пылинка

+1 к опшну)

Gennady
05.12.2017
08:09:55
Ну легаси система и приносит бабло, нельзя же её выключить и начать с нуля
все переводится в деньги, сравнивается стоимость владения (сколько приходится предодолевать на условную фичу) с прибылью и тут может внезапно открыться, что саппорт стоит неадекватно дорого в часах недешевых программистов

Alexandr
05.12.2017
08:10:27
дефолтный это Object.equals или сгенеренный для case class?
Ты меня застиг врасплох. У объекта по ссылке, у кейса по полям, если я не фейлю еще больше . Но все равно же не должено быть разницы?

Nick
05.12.2017
08:12:42
@odomontois глянь лс

Oleg
05.12.2017
08:12:58
Google
Oleg
05.12.2017
08:13:58
Thou shall not nullify case classes ?

Gennady
05.12.2017
08:15:14
за обнуление в коде и убить можно

Alexandr
05.12.2017
08:15:16
Ты пытаешься найти поддержку в чате, чтобы оправдаться в пулреквесте?
нет :( я чиню чужой код. Смотрю в него и мне как-то неуютно

Например, там есть object A { @volatile var e: A = _ } и ниже trait A { if (A.instance ne null) { LOG.error("A is already initialized!") } A.instance = this }

и у меня течет крыша.

Gennady
05.12.2017
08:17:52
вот эт ничего себе паттерны проектирования

Oleg
05.12.2017
08:17:56
за обнуление в коде и убить можно
KMP https://scastie.scala-lang.org/Odomontois/FHVehheLSV2O4BPwXmJ0pg

У меня теперь 7 дней или что там?

Gennady
05.12.2017
08:18:59
Олег, я не к тому что это невозможно, а к тому что человек, допускающий такую небезопасную реализацию в коде - не друг проекту и каждому программисту лично

Alexandr
05.12.2017
08:19:15
@odomontois в отрывке выше ты видишь рациональное зерно? Я на него уже полчаса смотрю и не укладывается.

Alexandr
05.12.2017
08:19:44
Погоди ....

Oleg
05.12.2017
08:19:47
Это у него такой lazy val из 90-х

Gennady
05.12.2017
08:19:48
передать в трейт инстанс компаньона и сделать доступ многопоточным

ага

Alexandr
05.12.2017
08:19:56
так ведь все равно утекает полусозданный объект

Oleksandr
05.12.2017
08:20:02
и у меня течет крыша.
м, ну ясно, что вызов null.equals сломается, и поэтому там ne сделай lazy val

Gennady
05.12.2017
08:20:04
потому и проверка

Alexandr
05.12.2017
08:20:06
volatile не гарантирует же, что оно создастся...

Gennady
05.12.2017
08:20:22
именно

Страница 1118 из 1499