
folex
20.09.2017
10:38:52

Pavel
20.09.2017
11:18:52
есть ли для GetResult в plain sql slick какие-то свистелки помогающие убрать боилерплейт?

Arthur
20.09.2017
11:40:44
у кого-то когда-то была задача вставить елемент в определенное место в списке?
в скала коллекциях вообще есть такие методы?

Google

Arthur
20.09.2017
11:41:08
или надо мутиться через .split
нашел вариант лучше TreeMap, проблема была в том что нужно было поддерживать мапу отсортированной в определенном порядке на основе ключа
а TreeMap по дефолту отсортирована по ключу

Diemust
20.09.2017
11:46:54

Arthur
20.09.2017
11:47:05
мутабл лист, такое себе)
private var state = new TreeMap[String, ActorRef]()(implicitly[Ordering[String]].reverse)
забавный велосипед вышел

Oleg
20.09.2017
11:57:39
ПОчти такое же хотел предложить https://scastie.scala-lang.org/Odomontois/hpPGxPmtSLuDLYVqozLgiw

Arthur
20.09.2017
11:59:19
я плохо понял зачем тегать последнюю цифру в числе

KrivdaTheTriewe
20.09.2017
12:00:23
kak je gorit ot scala 2.10.6

Arthur
20.09.2017
12:01:51
фетиш на постарше?)

KrivdaTheTriewe
20.09.2017
12:02:14
spark 1.3 под 2.10

Grigory
20.09.2017
12:02:27
кривда любитель милфоспарка

Arthur
20.09.2017
12:02:34
поэтому я не занимаюсь бигдатой

Google

KrivdaTheTriewe
20.09.2017
12:03:00
ну контейнеры спасли бы меня, но не спасут)
вынес в другой модуль и всё заработало
а не, оно просто позже стало падать) ленивая иницилизация наше всё

Grigory
20.09.2017
12:07:53
а чо у тя там падает

Kirill
20.09.2017
12:34:41
Кто-нибудь gradle пользуется? В последней версии scala-плагина (2017.2.7) для идеи, перестало работать добавление compiler plugin-а и нескольких параметров для него через scalaCompileOptions.additionalParameters, bad option пишет

folex
20.09.2017
13:04:04
Переписал я значит всё с Scala на build.sbt, по документации и гайдами, вот это всё. Переписал, и пытаюсь загрузить в сбт, а там NullPointerException.
https://gist.github.com/folex/41bdd9dc1312e767cb239816adb98d5f
what do I do now? :(
как это отлаживать?

Nick
20.09.2017
13:07:24
дописать в JAVA_OPTS дебаг

Oleg
20.09.2017
13:09:46
а какой sbt?
аааа во, у тебя прожекты ведь лейзи валами?
lazy val core = project ...

Mikhail
20.09.2017
13:22:08
я плохо понял зачем тегать последнюю цифру в числе
последняя цифра - это название тега, а не то, что он тегает) тегает он ключ, чтобы тримап с ключем ластдигит был, а не просто инт и свой имплисит ордеринг подтянул к ластдигиту относящийся, а не к инту, при этом поскольку это тег - он не прячет основание и все операции которые с интом можно делать, можно и с тегированным делать
x % 10
. рисуется вобщем, чтобы пример не скуфный был)

folex
20.09.2017
13:25:53
lazy val core = project ...
ага, точно! Щас попробую. Мне сбт прост как-то запретил делать
lazy val project = {
import ...
project.in(...)
}
, и я чот решил что это от lazy, удалил, и забыл
да, это оно. Спасибо!

Arthur
20.09.2017
13:46:12
а кто знает, если я создам два персистенс актора с одинаковым id, акка поймет это и убьет один из них?
в пределах одной актор систем

Nikita
20.09.2017
13:46:52
c persistence id?
думаю нет. скорее всего они просто начнут портить журнал

folex
20.09.2017
13:55:04
В build.sbt есть какие-то новые правила по поводу
ivyScala := ivyScala.value map {
_.copy(overrideScalaVersion = true)
},
?
Я добавил это в inThisBuild, и у меня выдает что в одном из подпроектов:
[error] Reference to undefined setting:
[error]
[error] {.}/*:ivyScala from {.}/*:ivyScala (/Development/server/project/Settings.scala:55)
[error] Did you mean submoduleNameHere/*:ivyScala ?
[error]
если закомментировать это — проходит. Где-то синтаксическая ошибка? или не везде есть ivyScala ключ? Вроде в sbt.Keys лежит

Google

Daniel
20.09.2017
14:12:35

folex
20.09.2017
14:17:00
А у меня 0.13.16
на 1.х не вышло перейти из-за плагинов :(
sbt-play, sbt-scrooge
может через пару месяцев получится

Daniel
20.09.2017
14:26:56
0.13.16 переходная версия, подозреваю там какие-то моменты уже могут быть как в 1.х

folex
20.09.2017
14:47:52
До этого работало, после миграции на .sbt сломалось. Может быть и правда что-то такое.

Vladimir
20.09.2017
15:48:01
Кто-то пили сериализацию дженериков для акка кластера? Пока вышло с kryo idstrategy="default", но я бы хотел налепить на протобафе что-то
case class Envelope[T](value: T)
учитывая, что я знаю, как T преобразовать в bytearray
...как начнешь скалу с аккой склеивать, так таким дерьмом тянуть начинает

Nikita
20.09.2017
15:55:55
можешь просто сделать трейт-маркер для всего сериализуемого
и в сериализаторе матчить этот трейт

KrivdaTheTriewe
20.09.2017
15:58:41

Vladimir
20.09.2017
16:00:41
и в сериализаторе матчить этот трейт
я хочу волшебства: сделать использовать для сериализации самого Т некий тайпкласс, а сериализатор Envelope бы каким-то образом брал уже сериализованный Т и упаковывал себя вместе с ним
т.ч. в конфиге я бы определил только сериализатор для Envelope, а остальное на уровне типов
мой внутренний ДеГоз бунтует против того, чтобы каждое новое сообщение в конфиг добавлять

Nikita
20.09.2017
16:01:30
волшебства не бывает к сожалению

KrivdaTheTriewe
20.09.2017
16:01:57

Vladimir
20.09.2017
16:02:44
т.е. под капотом все равно крио)))

Oleg
20.09.2017
16:20:27
я хочу волшебства: сделать использовать для сериализации самого Т некий тайпкласс, а сериализатор Envelope бы каким-то образом брал уже сериализованный Т и упаковывал себя вместе с ним
т.ч. в конфиге я бы определил только сериализатор для Envelope, а остальное на уровне типов
ну всё просто, имплементишь http://doc.akka.io/api/akka/current/akka/serialization/Serializer.html
объявляешь свой тайпкласс как implicit val, засовываешь в него всяческие тайптеги, добавляешь какую-нибудь хрень типа процесса инициализации с регистрацией в гигантской мапе по тайптегу оригинального сериалайзер и тех, от которых он зависит, собираешь все инициализации при старте приложения, получаешь кучу багов, тормозов, те же проблемы, что с крио, но без крио

Vladimir
20.09.2017
16:22:15
что-нибудь при этом еще можно сделать на макросах и все равно будет грустно(

Oleg
20.09.2017
16:24:01
думаю, мечтать о тайпклассах можно перестать уже когда видишь def toBinary(o: AnyRef): Array[Byte]
и начинаешь сочинять как искать свой тайпкласс в AnyRef

Google

Oleg
20.09.2017
16:24:50
но полагаю с тайптегами и поиском val в рефлекшоне, соответствующему сохранённому инстансу можно навернуть что-то
через раз работающее
ну или просто замутить
trait MySerializable[ T <: MySerializable] {
implicit def serialize: Serialize[T]
}а в своих кейз классах
case class Envelope[T](val x: T)(implicit val serialize: Serialize[Envelope[T]]) extends MySerializable[Envelope[T]]

folex
20.09.2017
16:29:00
конфиг генерить можно же наверняка?

Oleg
20.09.2017
16:29:57


Oli
20.09.2017
16:55:14
Привет всем, вот захотелось мне ленивую генерилку всего и вся сделать. Помимо прочего нагуглилось вот это https://stackoverflow.com/questions/3797699/generator-block-to-iterator-stream-conversion
В общем, топовый ответ оттуда:
scala> def data(f : Int => Unit) = for(i <- 1 to 10) {
| println("Generating " + i)
| f(i)
| }
data: (f: (Int) => Unit)Unit
scala> def toTraversable[T]( func : (T => Unit) => Unit) = new Traversable[T] {
| def foreach[X]( f : T => X) = func(f(_) : Unit)
| }
toTraversable: [T](func: ((T) => Unit) => Unit)java.lang.Object with Traversable[T]
Использование:
scala> toTraversable(data).view.take(3).sum
Generating 1
Generating 2
Generating 3
Generating 4
res1: Int = 6
Если в дебагере смотреть, Traversable генерируется до конца (так полагаю watcher'ы высчитываются и побуждают эту генерацию), но потом все таки выполняется take(3), но не как я бы ожидала. Там магия какая-то: внутри data, после выполнения f(i) мы перескакиваем обратно на foreach в traversable, а как бы цикл for(i <- 1 to 10), который внутри data, игнорируем. Я увидела breaks в traversable trait'е, но не осилила где они используются и как это работает. Anyone knows?


Nikita
20.09.2017
16:59:53
есть отличная статься на тему ленивости и стримов http://derekwyatt.org/2011/07/29/understanding-scala-streams-through-fibonacci/

Oli
20.09.2017
17:02:30
В итоге, я в проде и пишу first #:: blahblah, просто любопытно как TraversableView это делает.

Oleg
20.09.2017
17:12:27


Mikhail
20.09.2017
17:13:02
f - которая в дату пихается его и бросает
Привет всем, вот захотелось мне ленивую генерилку всего и вся сделать. Помимо прочего нагуглилось вот это https://stackoverflow.com/questions/3797699/generator-block-to-iterator-stream-conversion
В общем, топовый ответ оттуда:
scala> def data(f : Int => Unit) = for(i <- 1 to 10) {
| println("Generating " + i)
| f(i)
| }
data: (f: (Int) => Unit)Unit
scala> def toTraversable[T]( func : (T => Unit) => Unit) = new Traversable[T] {
| def foreach[X]( f : T => X) = func(f(_) : Unit)
| }
toTraversable: [T](func: ((T) => Unit) => Unit)java.lang.Object with Traversable[T]
Использование:
scala> toTraversable(data).view.take(3).sum
Generating 1
Generating 2
Generating 3
Generating 4
res1: Int = 6
Если в дебагере смотреть, Traversable генерируется до конца (так полагаю watcher'ы высчитываются и побуждают эту генерацию), но потом все таки выполняется take(3), но не как я бы ожидала. Там магия какая-то: внутри data, после выполнения f(i) мы перескакиваем обратно на foreach в traversable, а как бы цикл for(i <- 1 to 10), который внутри data, игнорируем. Я увидела breaks в traversable trait'е, но не осилила где они используются и как это работает. Anyone knows?
def invoke {
try{
def f = (i:Int) => { if (enough) throw hitriiexception }
data(f)
}catch { case x:hitriiexception => }
}
типа того. брейк, ретурн - также через эксепшены работают - сахарок


Oleksandr
20.09.2017
17:24:34
без стектрейса эксепшн, замечу, так что перформанс падает меньше

Oli
20.09.2017
17:31:32
Лол, думала я в data f(i) обернуть в try catch) но решила, что это уже извращенство)

Oleg
20.09.2017
17:36:11
ленивые генерилки лучше на https://github.com/functional-streams-for-scala/fs2/blob/series/0.10/docs/guide.md#building-streams делать

Oli
20.09.2017
17:38:48

Alexander
20.09.2017
17:39:34
Мне fs2 очень понравился. Правда я других и не пробовал стримов.

Aleksei
20.09.2017
17:39:50
я не пользовался, но одобряю

Google

Oleg
20.09.2017
17:40:48
Сам пользовал? Any pitfalls?
пользовал, питфоллы: коллеги будут высмеивать за то что юзаешь (давно уже не) scalaz-streams, а также, что это серьёзная тулза для реактивных стримов а не просто локально тяп-ляп

Nick
20.09.2017
17:40:58
А кто что использует у нас для тресинга и метрик?

Oleg
20.09.2017
17:44:20

Aleksei
20.09.2017
17:45:20
я так подозреваю или открытие или бинбанк =)

Oleg
20.09.2017
17:45:49

Nikita
20.09.2017
17:48:54

Nick
20.09.2017
17:49:32
А чем ужасен?

folex
20.09.2017
17:52:16
мы юзаем kamon, но тольку ту часть, где он через aspectjweaver вклинивается в переходы между потоками. таким образом прокидываем контекст между фьючами и акторами.

Nikita
20.09.2017
17:52:22
Ну руками народа все прописывать, стримы мониторить не умеет, Akka http через костыль работает с ним

folex
20.09.2017
17:52:54
если что-то другое в камоне включить, метрики там, то сразу закапывать сервис
тормозит, течет, хрен пойми как работает

Nick
20.09.2017
17:53:10
метрики jmx?

folex
20.09.2017
17:53:13
your mileage may vary
метрики jmx?
ну я говорю про репорт куда-нибудь, но это не суть, основная проблема вроде в том что он в свои коллекторы их собирает перед репортом/отправкой
и там всё прям плохо у нас было
а-ля включаешь репортинг в инфлюкс, и он просто смотрит на холостую actorsystem, которая внутри там где-то у кого-то, и всё равно течет