@scala_ru

Страница 1302 из 1499
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 примерно в то же количество строчек окай

Юрий
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
скорость не очень важно, но левшу посмотрю
смотри DiffRenderContext. сам шаблонизатор не смотри.

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

Google
Юрий
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
я что-то не найду, как в левше своё дерево задать?
императивненько через DiffRenderContext.

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
Типа 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: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
Даже если я мысленно смирюсь, что я никогда не смогу проверить, что получить ровно одну директиву для каждого поля

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

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

Aleksey
20.02.2018
09:22:59
Если мой AST - это большой тип? И он иммутабельный, тогда как будет выглядеть перформер?
Пускай это будет иммутабельный ADT. В этом случае пеформер должен сгенерить список команд, потом этот список команд будет рекурсифно применен к AST. Если твой AST целиком выражен через тип, то не знаю. Я пока так не умею думать.

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

Alexey
20.02.2018
09:26:32
Ты всегда можешь сохранить мета-информацию. На пример в качестве вышеупомянутых энкодеров и декодеров можно изспользовать какой-нибудь XML-сереализатор.
да, но это подгон под решение. у меня доменная область будет смоделирована кейсклассами. удобнее оперировать именно этим объектами. скорость и память не важна. деревья относительно небольшие. это не дом.

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 руками

Юрий
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
никаких бинов просто объект)

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

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
из jvm-скалы можно 100% дергать все что есть в джаве.
прям вообще все работает, и аннотации и прочее?

Aleksey
20.02.2018
09:43:23
прям вообще все работает, и аннотации и прочее?
все работает. есть скала-проекты, где скала используется просто как улучшенная джава. спринг, джексон, томкат, мавен, вот это все. лично я такую скалу не одобряю.

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