
Andrey
20.02.2018
07:42:37

Gennady
20.02.2018
08:02:29
рефликсией мапа делается в несколько строчек

Alexey
20.02.2018
08:04:27

Oleg
20.02.2018
08:15:32
руками мапа делается тоже в несколько строчек

Google

Oleg
20.02.2018
08:16:10
но тут такой просто кейз

Aleksey
20.02.2018
08:16:40
@l3h3r по поводу пути от одного графа к другому. тебе может помочь связка shapless/magnolia + левша. особенно, если при выводе изменений важна скорость.

Nick
20.02.2018
08:16:59
Фомкин мастер интеграции рекламы

Vadim
20.02.2018
08:17:06
магнолия вроде как заточена именно тайпклассы выводить

Aleksey
20.02.2018
08:17:59

Gennady
20.02.2018
08:18:17
Зачем рефлексия если можно без
ну то есть тащить либы, которые рефлексией обмазаны ради простой задачи лучше, чем самому в рефлексию из scala.reflection примерно в то же количество строчек
окай

Oleg
20.02.2018
08:18:48

Alexey
20.02.2018
08:19:51

Юрий
20.02.2018
08:19:55
Народ, а у вас работает ссылка:
https://jai.dev.java.net/binary-builds.html
?

Vadim
20.02.2018
08:20:35
у меня есть преполоджение что в том случае вообще это все не нужно - скорее всего кол-во классов из которых надо выкорчевывать лимитировано)

Aleksey
20.02.2018
08:20:38

Oleg
20.02.2018
08:21:51
В следующем фильме Бекмамбетова мы увидим бухих людей в слоу-мо, берущих ипотеку в Тинькофф, поедающих Кальве и кодящих на Королёв одновременно

Google

Vadim
20.02.2018
08:22:51

Daniel
20.02.2018
08:23:27

Юрий
20.02.2018
08:23:27

Alexey
20.02.2018
08:24:17
гугл кеш в помощь

Юрий
20.02.2018
08:27:20
гугл кеш в помощь
если это мне, то это не спасёт. Там лежал артефакт, и теперь сборка падает, так как ссылка недоступна
это какая-то джавовая штука
javax

Alexey
20.02.2018
08:27:52
лiл
тогда, б-г в помощь

Daniel
20.02.2018
08:28:31
javax
javax отъехал в 9ке в отдельный модуль, скорее всего из-за этого

Юрий
20.02.2018
08:31:04
ну старые артефакты то зачем портить?
мне эта зависимость как транзитивная через 10 зависимостей приехала

Daniel
20.02.2018
08:31:50
хз зачем
для стимуляции мож
поищи в других репах, может получится через резолвер пофиксить

Юрий
20.02.2018
08:32:49
Так и сделал
Но если это правда специально сделано, то это вообще так себе решение

Oleg
20.02.2018
08:39:47
нашёл там только про HTML\XML подобное что-то

Aleksey
20.02.2018
08:40:49

Oleg
20.02.2018
08:41:20
Звучит странно
там такая типизированная задача, что её походу через зигоморфизмы какие-то котить надо

Google

Oleg
20.02.2018
08:42:26
а ты императивно

Aleksey
20.02.2018
08:43:11
Типа
val rc = DiffRenderContext[Nothing]()
rc.openNode("node")
rc.closeNode("node")
rc.swap()
rc.openNode("node")
rc.openNode("subnode")
rc.closeNode("subnode")
rc.closeNode("node")
rc.diff(performer)
обычно программист этот треш естественно не видит -- он скрыт глубоко под капотом.

Oleg
20.02.2018
08:46:56
мне нужно понимать какой-то протокол диффов левши?

Александр
20.02.2018
08:48:08

Aleksey
20.02.2018
08:55:12

Oleg
20.02.2018
08:58:16
как-то макросом наверно.
твой-то
перформер - не макрос, если я эти методы макросом сделаю, твой код из них дерево не сгенерит

Aleksey
20.02.2018
09:00:08

Oleg
20.02.2018
09:01:08
ну вот я вообще не могу представить себе как это сделать

Vadim
20.02.2018
09:04:03
а что там спрашивали - я помню давно в жабьи года у меня коллеги радовались вот этой штуке https://javers.org/

Oleg
20.02.2018
09:04:56
какой адовый код мне нужно сгенерить, чтобы имея тип
('name -> StringDiff) ::
('age -> IntDiff) ::
('posts -> ListDiff[
('date -> DateDiff) ::
('text -> ListDiff[StringDiff])
:: HNil]) ::
('tags :: SetDiff[StringDiff]) ::
HNil
сгенерить для него процедурный ивент-бейзд билдер

Aleksey
20.02.2018
09:07:34
ну вот я вообще не могу представить себе как это сделать
Смотри. Некий макро/шеплесо/магнолевский энкодер генерит некий AST который легко обойти и вызвать методы диффрендер-контекста. Берем два объекта, переводим их в этот AST, и применяем на DiffRenderContext. Контекст выводит разницу на перформер. Рпазница применяется на AST. Потом есть некий декодер который может упаковать AST обратно в объект типа.

Oleg
20.02.2018
09:08:43
Даже если я мысленно смирюсь, что я никогда не смогу проверить, что получить ровно одну директиву для каждого поля

Aleksey
20.02.2018
09:09:35

Oleg
20.02.2018
09:09:40
Мне нужно репрезентить стейт, где заполнено лишь x промежуточных диффов
ну вот есть у меня тип
('age -> IntDIff) :: ('name -> StringDIff) :: HNil
на старте я не знаю ничего
поэтому у меня что-то вроде
('age -> Keep) :: ('name -> Keep) ::HNil
потом мне приходит команда
remove ("name") я должен преобразовать её в какоt-то значение
('age -> Keep) :: ('name -> Delete) :: HNil
потом мне приходит
delete("age") я преобразую
('age -> Delete) :: ('name -> Delete) :: HNil
а потом create("name", lol)
и я должен выставить
('age -> Delete) :: ('name -> Set("lol")) :: HNil

Google

Oleg
20.02.2018
09:15:07
мало того, что протокол этот не поддерживает специализированные дифы для сетов, массивов, строк, интов и т.п.
Он заставляет как-то очень жутко матчить каждый элемент в какой-то id
Находить по id в любой момент элемент в дереве
И репрезентить все возможные промежутчные состояния
Ну и реализовать какие-то ненужные setAttr с xmlns ...
В общем, я бы сказал, что левша ужасна для этого задачи
Т.е. именно интеграция с этим страшным протоколом будет гораздо сложнее, чем такой же дифф руками

Aleksey
20.02.2018
09:18:46
В общем, я бы сказал, что левша ужасна для этого задачи
Это вопрос о шашечках и езде. Если задача бысторо и мемори-бержливо выводить минимальный путь для превращения одного дерева в другое, то левша хороша. Пусть твой AST будет XML-AST. Пусть он будет мутабельным. Тогда перформер будет выглядить вот так https://github.com/fomkin/levsha/blob/master/dom/src/main/scala/levsha/dom/DomChangesPerformer.scala

Oleg
20.02.2018
09:19:31
Если мой AST - это большой тип? И он иммутабельный, тогда как будет выглядеть перформер?

Alexey
20.02.2018
09:22:39
не, мне нужно точно типизировано. там сложная логика за этим, а не просто деревья. облажаться нельзя :)

Aleksey
20.02.2018
09:22:59

Alexey
20.02.2018
09:26:32

Grigory
20.02.2018
09:32:08
Scalalaz #39 - Исповедь скалана http://scalalaz.ru/series-39.html

Nobody
20.02.2018
09:32:32
привет котаны
такой вопрос:
а можно ли реюзать джава обекты в скала и сериализовывать их и как это лучше делать?
задача у меня такая:
затянуть джава пакеты с DTO, забилдить объекты и послать их в запросе нагрузочного теста по ресту как джсон

_
20.02.2018
09:33:28
привет, никто не знает, как сделать чтобы кейс классы логировались с именами полей? и без изменения toString руками

Aleksey
20.02.2018
09:34:42

Oleg
20.02.2018
09:34:56

Юрий
20.02.2018
09:35:49
https://github.com/limansky/beanpuree

Google

Юрий
20.02.2018
09:35:53
эту?

Oleg
20.02.2018
09:37:01
К несчастью, автон вместо LabelledGeneriс юзает свой тайпкласс, поэтому машинерию для circe аналогичную generic.semiauto, придётся самому писать

Nobody
20.02.2018
09:38:13
ад какой
мне просто объект надо в джсон чпокнуть
что тут за страшные слова пошли)

Oleg
20.02.2018
09:38:14
ну или написать имплистиный конвертер LabelledBeanGeneric в простой LabelledGeneric

Nobody
20.02.2018
09:38:40
никаких бинов
просто объект)

Aleksey
20.02.2018
09:39:08

Oleg
20.02.2018
09:39:18
при чём тут скала тогда?

Aleksey
20.02.2018
09:39:32

Oleg
20.02.2018
09:39:39
где загвоздка?

Nobody
20.02.2018
09:39:53

Aleksey
20.02.2018
09:40:19

Nobody
20.02.2018
09:40:21
где загвоздка?
нет загвоздки, просто нуб в скале
мало ли чего там этакого

Daniel
20.02.2018
09:40:29
нет тут ада
бины лишь пример
и либо делаешь по джавовски с рефлексией в рантайме или используя другую технологию с рефлексией в компайл тайм
просто пробуй и по ходу дела задавай вопросы с конкретными проблемами
здесь помогут

Nobody
20.02.2018
09:41:28

Aleksey
20.02.2018
09:43:23