@scala_ru

Страница 1448 из 1499
OlegYch
03.05.2018
17:15:58
добавь

беда

Александр
03.05.2018
18:07:23
Новый выпуск https://mailchi.mp/softwaremill/scala-times-issue-2607905?e=e642d805da

Nick
03.05.2018
18:45:45
А зачем ты эт сюда постишь? У них ж рассылка есть

Google
Sergey
03.05.2018
18:50:52
Поручик с Наташей Ростовой плывут на лодке. - Наташа, а вас случайно веслом по голове не били? - Да что вы себе позволяете, поручик!? - Да это же я так, разговор поддержать!

(ц)

Sergei
03.05.2018
18:55:44
Новый выпуск https://mailchi.mp/softwaremill/scala-times-issue-2607905?e=e642d805da
e=e642d805da это твой айди в ссылке. По ней можно отписать тебя от рассылки или сменить Мейл.

M
03.05.2018
18:58:43
)))))

Александр
03.05.2018
18:58:58
Nikita
03.05.2018
19:18:03
А когда 43 выпуск скалалаза будет в подкастах тунца?

Evgeniy
04.05.2018
06:42:55
@nikitamatveenko сегодня планируем выложить

Vadim
04.05.2018
06:50:38
а что за подкасты тунца?)

Grigory
04.05.2018
06:50:59
а что за подкасты тунца?)
ай тьюнс в народе тунец зовется

KrivdaAllStars
04.05.2018
09:24:23
https://github.com/RBMHTechnology/eventuate юзал кто?

Nick
04.05.2018
09:34:22
Rbmk ток юзал

Alexander
04.05.2018
10:08:32
Ковырял

Google
Max
04.05.2018
10:24:16
https://github.com/RBMHTechnology/eventuate юзал кто?
я тоже ковырял интересная штука там есть пример как поднять 5 нод но crdt весьма ограничена по возможному функционалу - для прода придется реальномного допиливать ну конечно зависит от задачи

и он же почти перестал ее пилить

Vasiliy
04.05.2018
13:47:12
Всем привет. У меня был некоторый List[_], после вызова map я получил List[(_, _)], при этом мне нужен Map[_, _]. Что в данной ситуации будет лучше, вызвать .toMap или breakOut передать?

Alexander
04.05.2018
13:50:53
view -> map -> toMap

breakOut deprecated считай

Vladyslav
04.05.2018
13:55:16
breakOut deprecated считай
а можно по подробней, почему "считай"?

Alexander
04.05.2018
13:55:50
в новых коллекциях его убрали, смотри описание изменений, где-то было общедоступное

Vladyslav
04.05.2018
13:56:08
в строумене?

Alexander
04.05.2018
13:57:20
https://scala-lang.org/blog/2017/02/28/collections-rework.html

ищи breakOut (там несколько вхождений)

Vladyslav
04.05.2018
13:58:05
?

Vasiliy
04.05.2018
14:10:30
Спасибо, про view я благополучно забыл

https://scala-lang.org/blog/2017/02/28/collections-rework.html
Судя по всему таких забывших немало

Oleksandr
04.05.2018
14:12:33
а scalafix этот breakOut фиксит?

глупо выйдет, если нет

Daniel
04.05.2018
14:19:46
а scalafix этот breakOut фиксит?
надо смотреть, отдельного описания по правилам вродь нет

Сергей
04.05.2018
14:21:37
А как он его пофиксит? Там каждый случай уникален. Врядли там обученную нейронную сеть встроят.

Alexander
04.05.2018
14:28:21
знатоки макросов и прочих шаплесов, подскажите, есть ли какие-то непреодолимые преграды в написании макроса, который выведет Circe Encoder для голого трэйта?

Mikhail
04.05.2018
14:31:36
знатоки макросов и прочих шаплесов, подскажите, есть ли какие-то непреодолимые преграды в написании макроса, который выведет Circe Encoder для голого трэйта?
если ты про не силд , то самая очевидная преграда в том, что ты не в курсах кто, где и когда будет наследовать твой трейт)

Alexander
04.05.2018
14:32:41
Google
Alexander
04.05.2018
14:33:17
зачем нужны наследники, мне же их создавать не надо, речь про Encoder (trait -> JSON)

Alexey
04.05.2018
14:33:40
не про силд, а зачем знать это? Есть trait { def name: String def age: Int } например
Ну написать макрос которые для def нагенерит Encoder не сложно

Vadim
04.05.2018
14:34:47
а зачем макрос если можно в рукопашку объявить?

Mikhail
04.05.2018
14:34:55
не про силд, а зачем знать это? Есть trait { def name: String def age: Int } например
ну ок. допустим ты забил на то, что могут появится новые поля которые имеют значение. поехали дальше, вот твой трейт конкретно написанный - как макрос должен вкурить что из его мемберов подлежит сериализации, а что нет? вобщем это конечно не преграда для костыля и в таком ракурсе это не представляет трудностей. но явно далеко не самое хорошее и универсальное решение)

Alexander
04.05.2018
14:36:19
все def в трэйте подлежат сериализации, как все поля в case class сейчас

Mikhail
04.05.2018
14:36:50
Alexander
04.05.2018
14:37:12
почему ты называешь это костылём?

Mikhail
04.05.2018
14:40:44
почему ты называешь это костылём?
потому что сложно представить кейс в котором требуется сделать именно так, чтобы был базовый трейт который кто угодно будет наследовать и при этом если кто-то захочет наследников в жсон перегнать - получит исключительно мемберов базового трейта)

Oleksandr
04.05.2018
14:41:31
а через semanticdb можно откопать наследников незапечатанного трейта?

Vadim
04.05.2018
14:41:56
тот же самый эффект можно получить просто введением доп кейс класса, в который твой трейт переводится

Alexander
04.05.2018
14:42:39
тот же самый эффект можно получить просто введением доп кейс класса, в который твой трейт переводится
мы так и делаем, просто лишнее копирование, иногда достаточно глубокое

Alexey
04.05.2018
14:43:30
Знаю я тут одну либу где можно без копирования в аст писать json ?

Alexander
04.05.2018
14:43:41
levsha?

Alexey
04.05.2018
14:43:52
levsha?
Та не

Mikhail
04.05.2018
14:43:56
ну ок, я могу легко это представить
ну я верю, что человек который задает такие вопросы - всегда приходит с кейсом - в этом я тоже не сомневаюсь) мы же все здесь свое имхо высказываем, но ты всегда можешь поделиться с нами конкретным кейсом с аргументами за и мы с радостью это обсудим)

а через semanticdb можно откопать наследников незапечатанного трейта?
можно. но это только отдельным шагом после компиляции постфактум и только в рамках собранной бд, гарантировать что также будут поступать пользователи твоей поделки - нельзя никак

Alexey
04.05.2018
14:45:41
Если уж вам жалко памяти даже на копирования в case class, то я для этого и писал https://github.com/tethys-json/tethys

Google
Oleksandr
04.05.2018
14:46:08
типа сперва скомпилируй и собери семантикбд, а потом уже нормально скомпилируй

Mikhail
04.05.2018
14:46:16
можно влепить новую фазу в процесс компиляции?
можно, но см. предыдущий пункт - нельзя гарантировать того, что пользователи твоей поделки будут этой фазой пользоваться

Mikhail
04.05.2018
14:47:20
типа сперва скомпилируй и собери семантикбд, а потом уже нормально скомпилируй
тот случай, когда можно два раза войти в одну и ту же реку, но зачем?

Oleksandr
04.05.2018
14:47:34
но вообще это жесткий костыль :)

Mikhail
04.05.2018
14:47:49
addCompilerPlugin("slow_scala_compiler_twice_more")
можно. но см. предыдущий пункт - нельзя гарантировать того, что пользователи твоей поделки будут вставлять такую-же строчку

Admin
ERROR: S client not available

Alexander
04.05.2018
14:48:14
ну я верю, что человек который задает такие вопросы - всегда приходит с кейсом - в этом я тоже не сомневаюсь) мы же все здесь свое имхо высказываем, но ты всегда можешь поделиться с нами конкретным кейсом с аргументами за и мы с радостью это обсудим)
Есть модуль common-model с трэйтом UserLike, он отдаётся из сервисов, которые внутри используют его реализацию User недоступную вызывающим - чтобы такие классы не попали в JSON, т.е. чтобы JSON модели были независимы от внутренней модели и легко можно было понять, если API меняется. В контроллерах такие трэйты копируем в соотв. UserJson модели и их уже сериализуем. Любопытно, можно ли избежать этого копирования, но при этом сохранить разделение JSON и внутренней модели. Если начать энкодить трэйт напрямую, то это условие не выполняется...

Oleksandr
04.05.2018
14:48:18
скаламета как раз так и делает

Mikhail
04.05.2018
14:48:24
можно заставить, иначе работать не будет
будет компилироваться. этого достаточно, чтобы в прод отправить)

Mikhail
04.05.2018
14:49:41
Generic для трейта не даст его поля?
что есть поле у трейта?

Alexey
04.05.2018
14:49:58
что есть поле у трейта?
Ну понятно же что у него специфический кейс

Mikhail
04.05.2018
14:50:10
Ну понятно же что у него специфический кейс
это вопрос Николаю, что должен по его мнению генерик отдать)

Alexey
04.05.2018
14:50:18
И он сам решает какие трейты подходят

Alexander
04.05.2018
14:50:24
трэйты в скале перегружены сильно, в моём случе речь про что-то типа "pure trait" (no implementation, just defs/vals)

Alexey
04.05.2018
14:54:57
мне нужны def трэйта и его предков
Пиши для этого точно нет никаких препятствий

Alexander
04.05.2018
14:55:22
Пиши для этого точно нет никаких препятствий
благодарю, смущает, что это нужно будет переписывать на новых макросах в будущем

Google
Alexey
04.05.2018
14:55:42
Mikhail
04.05.2018
14:55:44
мне нужны def трэйта и его предков
твои настроения мне понятны. просто Николай затронул генерик тему, которая как бы должна подходить под все трейты - поэтому я уточнил, что считать полем в трейте исключительно в рамках генерик, но не твоего кейса)

Nikolay
04.05.2018
14:56:49
да, про поле в трейте - имелось в виду def name: String - то есть def без параметров, который возвращает что-то, не Unit

@tvaroh не проще ли для такого трейта руками написать encoder-ы? или это очень частый кейс?

Alexander
04.05.2018
14:58:41
@tvaroh не проще ли для такого трейта руками написать encoder-ы? или это очень частый кейс?
частый, моделей же много, всё представлено трэйтами, которые в веб слое переводятся в кейз классы только чтобы отдать Circe, который полу-автоматически выводит Encoder, руками их писать не вариант

Nikolay
04.05.2018
14:59:13
хочется избавиться от прослойки dto?

не помню точно библиотеки, которые с помошью shapeless перегоняют данные между типами. если какая-то из этих либ может из трейта в кейс класс конвертнуть по имени и типу полей, то стоит взглянуть

Alexander
04.05.2018
15:01:29
хочется избавиться от прослойки dto?
хочется избавиться от необходимости во всех контроллерах делать это копирование, писать код в смысле, память вторична в целом, не хай лод... Но если убрать JSON модели в виде case class-ов, то независмость JSON теряется, непрозрачно. В общем пока прикидываю...

Mikhail
04.05.2018
15:02:07
Есть модуль common-model с трэйтом UserLike, он отдаётся из сервисов, которые внутри используют его реализацию User недоступную вызывающим - чтобы такие классы не попали в JSON, т.е. чтобы JSON модели были независимы от внутренней модели и легко можно было понять, если API меняется. В контроллерах такие трэйты копируем в соотв. UserJson модели и их уже сериализуем. Любопытно, можно ли избежать этого копирования, но при этом сохранить разделение JSON и внутренней модели. Если начать энкодить трэйт напрямую, то это условие не выполняется...
разделение на паблик и приват в рамках апи - мне понятны и приятны, особенно в рамках финансов и корпоративной безопасности. но в последнее время я стал слишком ленив для каких-то особых выкрутасов и остановился на том, что мне проще использовать соседние паблик модели, для которых енкодеры автоматом по привычным схемам будут делаться. грубо говоря, если совсем все строго, то разрешаем только отдачу только паблик моделей - case class PublicUser (...) (название не связано с реальностью, просто для примера) , для которых при необходимости будут однострочные правила, которые будут разрешать перегонку (посредством уже привычных наверное всем перегонок между не связанными родителями моделями) из приват модели в паблик перед конвертацией в жисон.

скрывать полностью реализации UserLike - тоже ушел давно от подобного, но если вдруг шибко понадобилось - то предпочел бы сделать ему .toPublicModel = return case class Model

Alexander
04.05.2018
15:05:43
скрывать полностью реализации UserLike - тоже ушел давно от подобного, но если вдруг шибко понадобилось - то предпочел бы сделать ему .toPublicModel = return case class Model
разделение моделей ещё нужно потому, что у нас каждый микросервис предоставляет код клиента к себе и он зависит только от JSON моделей и коммон (где трэйты), чтобы потроха сервисов и т.п. не лезло в класпас при пользовании клиентов. Ну нам нравится, вроде кайфик

Mikhail
04.05.2018
15:18:17
разделение моделей ещё нужно потому, что у нас каждый микросервис предоставляет код клиента к себе и он зависит только от JSON моделей и коммон (где трэйты), чтобы потроха сервисов и т.п. не лезло в класпас при пользовании клиентов. Ну нам нравится, вроде кайфик
Ну нам нравится - это хорошо, когда нравится и стакан на половину полон) кому костыли, а кому ходули) но если я правильно понял и продолжать лениться - можно также требовать от клиентов модельки в собственных кейс-классах. а как они там у себя это дело будут делать oneMicroServiceToRuleThemAll(case class MyPrivateUser(bla...., userLike:UserLike).userLike) или использовать автоконвертацию между моделями их внутренних моделей в модели общей либы или еще как-то. - уже без разницы. в этом русле - будет погибче и сторонние сервисы, модели в которых написаны по своим правилам и которые не изменить - проще будет связать через эти клиенты. но это так - мысли в слух)

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

Alexander
04.05.2018
15:25:29
Mikhail
04.05.2018
15:35:04
когда микросервис A использует клиент микросервиса B со всем его JSON моделями, то эти модели не текут в модели A, там обратное преобразование из JSON моделей во внутренние A
может да, а может и нет. если я представляю микросервис А, то мне без разницы - достаточно ему там паблик модели или он еще как-то это дело оборачивает. но я точно знаю, что скорее всего мои собственные модели, которые требуют больше полей или вовсе другой структуры я врятли захочу выстраивать вокруг моделей Б (особенно если мой сервис А обособленный, в целом самостоятельный и не зависит напрямую от Б) . (кстати про древовидное копирование кейс классов - есть тот же монокль, который упрощает это дело)

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