@scala_ru

Страница 231 из 1499
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
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?

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