
Mikhail
17.11.2016
11:37:51

Grigory
17.11.2016
11:40:04
можно зашейдить нетти при сборке джарника
типа скажем есть проект 1 (пусть тут нетти 1) и проект2 (от нетти 2) и есть третий где оба проекта нужны; тогда при собрке можно переименовать один из нетти
он все линки переименовывает

Google

Grigory
17.11.2016
11:42:51
assemblyShadeRules in assembly := {
val shadePackage = "package.shaded"
Seq(
ShadeRule.rename("com.google.common.**" -> s"$shadePackage.google.common.@1")
.inLibrary(
...
).inAll
)
}

Mikhail
17.11.2016
11:44:03
он уже в готовых джарниках меняйт байткод?

Grigory
17.11.2016
11:44:47
это полезный трюк кстате для запуска кассандро джобы к примеру на спарке на какомнить emr, где гуавы версии конфликтуют (кассандре нужна 16 а там класс паф спарка засран 14ым и еще кучей всего)
да она не меняет байт код)

Mikhail
17.11.2016
11:45:26
так меняет или не меняет?

Grigory
17.11.2016
11:47:14
ах меняет
типа
эээ не помню что он использует для этого
мне кажется там была ссылка как это делается в ридмихе

folex
17.11.2016
11:48:30
круто, спасибо!

Mikhail
17.11.2016
11:48:43
тогда годно, если через байткод)

Grigory
17.11.2016
11:48:44
https://github.com/sbt/sbt-assembly#shading
https://code.google.com/archive/p/jarjar/wikis/CommandLineDocs.wiki

Google

folex
17.11.2016
11:50:12
@pomadchin так, а если транзитивную зависимость шейдить, то тот кто зависит от неё, он же сломается?

Mikhail
17.11.2016
11:50:48
его тоже зашейдить надо

Grigory
17.11.2016
11:50:55
угу
аккуратно шейдь смотри чо походу дела ломается
что поделать ):
иногда это красиво иногда не очень

folex
17.11.2016
11:51:52
Mikhail а как это поможет?

Mikhail
17.11.2016
11:52:13
он не только перекладывает классы на другое место, он еще и референсы заменяет

Grigory
17.11.2016
11:52:48
assemblyShadeRules in assembly := {
val shadePackage = "shaded"
Seq(
ShadeRule.rename("com.google.common.**" -> s"$shadePackage.google.common.@1")
.inLibrary(
"lib1,
"lib2"
).inAll
)
}

Mikhail
17.11.2016
11:54:34
lib1, lib2 + ... = это нетти которую шейдишь и все либы которые от этой версии нетти зависят

Grigory
17.11.2016
11:55:54
ага; если у тя чтото тянется транзитивно; берешь прям название тразитивной либы вписываешь ("blablaorg" %(%) "blablaname" % version)

folex
17.11.2016
11:56:43
круто

Mikhail
17.11.2016
11:57:47
бояться нечего. проблемы будут, только если где-то используется Class.forName )))

Grigory
17.11.2016
11:58:17
да поэксперментируй с воможносятми шейдинга :D

Bulbu
17.11.2016
13:51:20
кто-нибудь юзал гитлаб issue tracker?

Ilya
17.11.2016
13:52:48
Умеет кто-нибудь в .scalafmt? Хочу заалайнить последний поднимающий оператор в фор-компрехеншон
Типа вот этого
Автор говорит, ручками алайнит
Так можно конфигом вообще настроить, без кодирования?

Wystan
17.11.2016
13:54:25
Сколько людей, столько и стилей

Google

Denis
17.11.2016
13:57:21
Там в новой версии даже фрик не надо писать

Юрий
17.11.2016
13:58:56
Это типа читабельный код?

Ilya
17.11.2016
14:00:01
Я даблчекну, но вроде я этого не заметил
Типа читабельнее, чем без алайна

Vladimir
17.11.2016
14:01:04
да если status match в отдельное место выделить, будетт очень ОК
даже ничего алайнить не придёться

Ilya
17.11.2016
14:03:13
И это еще без ониона

Denis
17.11.2016
14:05:49
May the Force be with you

Daniel
17.11.2016
14:12:28

Mikhail
17.11.2016
14:13:11
там же написано - freek - только для фриков)

Daniel
17.11.2016
14:13:51
круче только так https://i.redd.it/vox68l5tr9sx.jpg

Lev
17.11.2016
14:16:45
надеюсь, что поддержку этого никогда не добавят в scalafmt

Ilya
17.11.2016
14:20:41
Неожиданная реакция, признаться
Что плохого -то, поясните?=)

Lev
17.11.2016
14:27:13
не следует ожидать фанатизма в форматировании кода от тех, кто будет его сопровождать
на правах вброса: http://stackoverflow.com/questions/218123/what-was-the-strangest-coding-standard-rule-that-you-were-forced-to-follow

folex
17.11.2016
14:35:11
Господа скалисты, а у вас не было такого что в for comprehension от одной фьюче к другой ОЧЕНЬ ДОЛГО переключается?
очень долго это от 1 до 20 секунд
или может с промисами что-то такое было, мы щас грешим на конвертацию java фьючей в скальные через promise

Google

Daniel
17.11.2016
14:40:49

folex
17.11.2016
14:41:03
да нагрузки нету даже
просто такое происходит иногда. Мы в trace логгируем начало и конец фьючи, и так получается что от конца одной до начало второй может просто так быть некая пауза
при этом другая работа продолжает выполняться, не похоже на stop the world

Daniel
17.11.2016
14:45:27
а как конвертите? можно код?

folex
17.11.2016
14:46:09
щаа
def future(future: ResultSetFuture, requestContext: RequestContext): Future[ResultSet] = {
val promise = Promise[ResultSet]()
val callback = new FutureCallback[ResultSet] {
def onSuccess(result: ResultSet): Unit = {
promise success result
}
def onFailure(err: Throwable): Unit = {
val message: String = "DB query was not performed properly"
log.error(s"$message: $requestContext", err)
promise failure new BackendException(Err.Internal, err.getMessage).initCause(err)
}
}
Futures.addCallback(future, callback)
promise.future
}
это правда кассандровская фьюча конвертится
@danslapman подойдет? :)

Daniel
17.11.2016
14:56:04
возможно, что-то с addCallback не так, не работал с гуавой
а зачем вообще связываться с коллбэками, когда можно future { jfuture.get } ?
хотя бы для теста

folex
17.11.2016
14:58:31
потому что это блокирует поток же

Denis
17.11.2016
15:02:20
Мы вот это юзаем для конвертации кассандровских фьюч в скаловски
implicit def listenableFutureToFuture[A](lf: ListenableFuture[A])(implicit executionContext: ExecutionContext): Future[A] = {
val promise = Promise[A]
lf.addListener(new Runnable { def run() = {promise.complete(Try(lf.get())); ()} }, executionContext.asInstanceOf[Executor])
promise.future
}

folex
17.11.2016
15:03:03
@notxcain в обычном execution context?
оно же блочит его поток тогда?
Хотя гуавовская муть тоже блочит походу

Denis
17.11.2016
15:04:11
почему блочит?
она выполняет Runnable когда готово

folex
17.11.2016
15:05:48
> Waits if necessary
@notxcain

Google

folex
17.11.2016
15:05:56
.get()

Denis
17.11.2016
15:05:58
где?
это же коллбек
значит уже ждать не надо

folex
17.11.2016
15:06:20
аа, сори, чот я упустил

Denis
17.11.2016
15:06:22
ага

folex
17.11.2016
15:07:04
спасибо!

Daniel
17.11.2016
15:09:44
нашёл тут вот такой проект https://github.com/Spikhalskiy/futurity
суть в том, чтобы использовать 1 тред для ожидания всех конвертируемых фьюч (насколько я понял)

Slavik
17.11.2016
15:17:49
если это голая Future - действительно, требуется либо вешать 1/несколько тредов, либо использовать таймер и опрашивать Future (с таймером получается очень долго).
А ListenableFuture/CompletableFuture конвертируются нормально без тредов и тормозов
Для пользователей Finagle есть либа Twitter Bijections, в которой все это врапится/анврапится автоматом

Dmitry
17.11.2016
16:02:28
https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux

KrivdaTheTriewe
17.11.2016
16:04:57
очень хочется чтобы запустили студию для скалы

folex
17.11.2016
16:46:54
идея получше будет, нет?

?Ivan
17.11.2016
16:51:59
Ага, студия с рескалером ;)

folex
17.11.2016
16:54:55
идея итак с ним
решарпер это джетбрейнс же

Alexander
17.11.2016
16:56:19
ссори за оффтоп, но подскажите плиз:
есть Entity (например, User) и мне надо сделать @Immutable AdminUser extends User, у которого будет 1 дополнительное поле - @Formula(" length(name) ")
можно ли в хибернейте(jpa) сделать такое наследование, не меняя базовый класс и не вводя dtype?