
Mikhail
27.06.2017
10:14:31
но пример где таггеттипы не работают с дерайвом - все таки давай)

Фрилансер
27.06.2017
10:14:44
Господа, кто может посоветовать инструменты, чтобы продьюсить SOAP сервис? Желательно не Play. В Akka не нашел ничего подобного, кроме camel.
Не уж то jax-ws только остается?

Alexey
27.06.2017
10:15:47
scalaxb

Google

Mikhail
27.06.2017
10:16:32
Oleg как назвать метод вместо который будет выдавать на выходе потрошенку? (вместо @@ )

Oleg
27.06.2017
10:21:20
это каноничное использование shapeless.newtype
https://scalafiddle.io/sf/LN0OTMC/0
тут даже без дерайва
просто вот опс
очевидно, что провернуть такое же с тегом не получится, т.к. у функции, которая завраплена есть свой apply
ну или если получится, проверни

Mikhail
27.06.2017
10:25:35

Фрилансер
27.06.2017
10:27:53
scalaxb
В их бедноватой документации нашел только пример с SOAP клиентом, а примеры сервера есть?

Oleg
27.06.2017
10:28:21

Google

Diemust
27.06.2017
10:28:36
а чем camel не нравится, вроде ж была связка akka+camel, правда не знаю, на скок актуальная

Oleg
27.06.2017
10:29:45
Так что если вы с Александром запилили либы с тегами, это ещё не значит, что всё, что людям нужно - это теги

Mikhail
27.06.2017
10:30:15

Yuriy
27.06.2017
10:31:00
Всем привет!

Mikhail
27.06.2017
10:31:19

Oleg
27.06.2017
10:32:03
короче, запили ньютайпы
будет классно

Митко Соловец?
27.06.2017
10:33:43
господа, кто-нибудь писал ИИ на скале?

Mikhail
27.06.2017
10:35:36
ты так процитировал, будто до моей реплики где-то это сказал
если взять, что тегированный тип T with Tag[T,U], T - основание. Tag[T,U] - сам тег, а также можно назвать как дополненная тайплевел инфо, то ньютайп как раз и есть тег(а также дополненной тайплевел инфо) без основание. просто я использовал слово "тег" исключительно для дополненной тайплевел части) я запилю, нет проблем - ты мне скажи, как лучше назвать метод дополнительно к @@ - потому что я пока теряюсь как будет лучше?

Yuriy
27.06.2017
10:36:07
Коллеги, тут есть спарководы? Странное дело - гоняю алгоритм поиска кратчайшего пути на графе: BSP/Pregel API graphX с исходным RDD в Cassandra. 4,5 миллиона ребер в графе. Кластер кассандры - 6 узлов. Кластер спарка - до 80 ядер. По всем показателям нагрузка очень низкая, но быстрее 22 секунд алгоритм еще ни разу не отработал. Куда копать?

Mikhail
27.06.2017
10:38:10
ну и есть нюанс. что сейчас TaggedType.apply - заточен на то, чтобы на выходе выдавать с основанием. можно добавить впринципе метод TaggedType.newtype - который как раз разделит

Oleksandr
27.06.2017
10:38:42

Mikhail
27.06.2017
10:39:15
но тогда придется все равно конечно писать
Step.newtype(value)
или
Step newtype value
. Oleg , норм?

Oleg
27.06.2017
10:40:36
если взять, что тегированный тип T with Tag[T,U], T - основание. Tag[T,U] - сам тег, а также можно назвать как дополненная тайплевел инфо, то ньютайп как раз и есть тег(а также дополненной тайплевел инфо) без основание. просто я использовал слово "тег" исключительно для дополненной тайплевел части) я запилю, нет проблем - ты мне скажи, как лучше назвать метод дополнительно к @@ - потому что я пока теряюсь как будет лучше?
короче, есть такая штука
case class Foo(x: Int) extends AnyVal {
... foo ops...
}
т.к. AnyVal работает через раз, хотелось бы сделать drop-in replacement, чтобы
implicit class FooOps(x: Int) extends AnyVal{
... foo ops ...
}
type Foo = Newtype[Foo, FooOps]
def Foo(x: Int): Foo = Newtype(x)
вот если кода здесь будет ещё меньше - будет ещё лучше
но главное, чтобы у Foo были FooOps волшебным образом

Митко Соловец?
27.06.2017
10:41:10
ИИ ?
искусственный интеллект

Alexey
27.06.2017
10:41:13

Oleksandr
27.06.2017
10:42:48
искусственный интеллект
ну я намекнул, что это очень обширное понятие
что конкретно интересует?
я баловался nlp с stanfordnlp / factorie

Митко Соловец?
27.06.2017
10:43:10

Oleg
27.06.2017
10:43:32
если взять, что тегированный тип T with Tag[T,U], T - основание. Tag[T,U] - сам тег, а также можно назвать как дополненная тайплевел инфо, то ньютайп как раз и есть тег(а также дополненной тайплевел инфо) без основание. просто я использовал слово "тег" исключительно для дополненной тайплевел части) я запилю, нет проблем - ты мне скажи, как лучше назвать метод дополнительно к @@ - потому что я пока теряюсь как будет лучше?
т.е. вот этот тайп конструктор @@ совсем не нужен, т.к. хотелось бы использовать Foo, не задумываясь case class это или newtype

Google

Oleksandr
27.06.2017
10:43:35

Oleg
27.06.2017
10:44:00

KrivdaTheTriewe
27.06.2017
10:47:03
Господа, я вот никак не могу понять, у меня была некоторая акторсистема , там была цепочка вызовов Actor1->Actor2->Actor3->Actor1 , теперь потребовалось прикрутить хттп , как теперь избежать переписывание этой цепочки вызовов в цепочку асков, чтобы можно было сделать телл из реквестхендлера, и получить ( или не получить ответ ) от актор системы?

Vladimir
27.06.2017
10:49:41
аск будет только между requesthandlerом и actor1, кмк

Alexey
27.06.2017
10:50:11
можно сохранить request context в акторе и завершать, когда приходит ответ
или падать по таймауту

KrivdaTheTriewe
27.06.2017
10:56:10
но пока я выполняю АСК я даже проверить не могу это

Vadim
27.06.2017
11:01:45
тут forward должен подойти

KrivdaTheTriewe
27.06.2017
11:02:54
не совсем понимаю

Vadim
27.06.2017
11:05:55
ну вот твоя цепочка a1 -> a2 -> a3, когда сообщение приходит a1 он его форвардит в следующий прост и так дальше - последней отвечает сендеру - и у него будет сендер там где изначально ask дернули

KrivdaTheTriewe
27.06.2017
11:14:57
actorref.tell(msg,replyTo) на msg forrward actorref заменить - это получим тоже самое. Но я не могу сделать Actor1 ? GetUserInfo из http , потому что этот UserInfo придёт как tell из последнего по цепочке актора( что изменит состояние Actor1 и тогда он будет знать , что ответить), а в рамках первого аска внутреннее состояние Actor1 не изменится ( так как он обрабатывает только одно сообщение за раз)

Vladimir
27.06.2017
11:16:00

Mikhail
27.06.2017
11:16:17
очевидно, что провернуть такое же с тегом не получится, т.к. у функции, которая завраплена есть свой apply
вот теперь я понял, зачем именно тебе разделение) чтобы иметь возможность заоверрайдить имеющиеся операции в основании. мы конечно теряем все операции, но возможно иногда действительно можно получить больше профита чем потери. не могу сказать, что я бы сделал именно так, может быть я просто поменял бы схему и получил бы тот же профит без потерь операций. возможно синтаксис у дигитс был бы другим. как знать. но я таки сейчас добавлю ньютайпы в супертаггет.
ну это такое да - известное ограничение таггеттипов с основанием, впрочем как и любых других типов - нельзя что-то заоверрайдить через имплисит класс. биш минут вобщем

Bulbu
27.06.2017
11:39:07
Всем привет! Есть интересная проблема: нужно long разбить на x непересекающихся подмножеств

Oleg
27.06.2017
11:39:36
scala.Long ?

Bulbu
27.06.2017
11:40:03
чтобы для каждого этого подмножества можно было сделать циклический инкремент
да

Google

Bulbu
27.06.2017
11:40:28
написал не совсем понятно, наверное...
будет несколько актеров, каждый из них будет генерить айдишник - лонг, но в строго заданном интервале
чтобы по айди однозначно актера найти

Oleg
27.06.2017
11:41:48
битовые маски?

Bulbu
27.06.2017
11:41:55
типа того

Oleg
27.06.2017
11:42:04
а в чём задача?

Bulbu
27.06.2017
11:42:24
как это сделать)

Oleg
27.06.2017
11:42:39
сделать а-ля DHT?

Bulbu
27.06.2017
11:42:53
нужно типа лямбду каждому актеру дать правилбную

Admin
ERROR: S client not available

Bulbu
27.06.2017
11:43:13
наверное
ты про бизнес задачу? Это мапинг реквест-респонс
т.е. у меня есть параметр - кол-во актеров, с этим параметром мне нужно сделать интервалы
просто взять и поделить арифметически может?

Diemust
27.06.2017
11:47:57
юзай snowflake не думай об интервалах
у тебя ж задача сделать числа уникальными только?

Denis
27.06.2017
11:48:23
распределить по кольцу

Bulbu
27.06.2017
11:48:44
уникальные для каждого актера лонги(!)

Denis
27.06.2017
11:48:49
https://www.hakkalabs.co/articles/how-cassandra-stores-data

Bulbu
27.06.2017
11:49:16
актеры их генерят

Google

Oleg
27.06.2017
11:49:34
ну раздавай в качестве параметра актору Int, и генерь внутри Int,
def key(actorIdx: Int, intKey: Int) = (actorIdx : Long) << 32 + intKey
def route(message: Message) = actors((message.key >> 32).asInstanceOf[Int]) ! message

Diemust
27.06.2017
11:50:50
имхо, почему бы не рассмотреть, что лонги будет генерить тот, кто раздает таски этим акторам? а по акторам балансить с помощью хэша. Или что актор сам генерит айдишник - это жесткий констреинт?

Bulbu
27.06.2017
11:52:03
хммм
это мысль, просто сейчас не так, хотя можно сделать так как ты говоришь
спасибо!

Denis
27.06.2017
11:53:15
UUID#hashCode % numActors

Bulbu
27.06.2017
11:54:30

A
27.06.2017
12:09:38
У тебя в любом случае будет хеш, по которому никак не восстановить ид актора
Если только "рядом" не будешь хранить дом инфу
Я бы взял мурмур-хеш ?

Oleg
27.06.2017
12:15:00

Valeriy
27.06.2017
14:57:29
Подскажите, кто проходил специализацию по scala на coursera, стоит ли проходить ее всю? Пока закончил первый курс Functional Programming Principles in Scala, понравилось. Из остальных курсов не все читает Одерски, стоит ли за них платить ?

Ivan
27.06.2017
14:57:54
Коллеги, делаю примерно вот так:
object Foo {
implicit val fooWrites = Json.writes[Foo]
implicit val eitherWrites: Writes[Either[X, Y]] = new Writes[Either[X, Y]] {
...
}
}
case class Foo (bar: Either[X, Y])
И получаю ошибку компиляции: Reference to uninitialized value eitherWrites
Если переставляю порядок имплиситов - компилится. Собственно вопрос, где можно почитать о порядке инициализации имплиситов, и вообще нормальное ли это поведение?

Alexey
27.06.2017
15:06:39
lazy val и всё будет ок
он определён просто ниже и всё

Ivan
27.06.2017
15:08:15
Это понятно. Мне интересно понять почему оно так работает.

Alexey
27.06.2017
15:10:46
ну воспринимай это как конструктор, ты еще не инициализировал ссылку eitherWrites и пытаешься её уже захватить в fooWrites, вот тебе и ошибка
я честно даже несколько удивлен, что компилятор это определил :)

Friedrich
27.06.2017
15:14:38
Это и для не имплиситов работает так же.
Но компилятор тут молодец, конечно.

Ivan
27.06.2017
15:15:24
А для чего еще работает? В каких случаях это спасает?