
Sergey
06.10.2017
08:26:49
можно свой range сделать еще

Quantum Harmonizer
06.10.2017
08:27:02
inline infix fun Int.exclusivelyTo(that: Int) = (this+1) .. (that-1)

Sergey
06.10.2017
08:27:29
(this+1) until that

Anton
06.10.2017
08:28:07

Google

Maxim
06.10.2017
08:32:06
Коллеги, вопрос по котлиновским data class и proguard. Есть ли какой то более изящный вариант избежать обфускации, кроме как сложить все эти классы в один пакет и добавить исключение для него?

Igor
06.10.2017
08:32:55
Анотировать каждый @Keep

Quantum Harmonizer
06.10.2017
08:33:07

Maxim
06.10.2017
08:38:15

Quantum Harmonizer
06.10.2017
08:38:51
можно написать keep, который опирается на это
но лучше, конечно, не допускать ситуаций, когда весь класс нужно защитить от обфускации

whalemare
06.10.2017
08:48:58
а по data нельзя чекать?
или прогуард работает уже после того как прошелся котлиновский компилятор?

Quantum Harmonizer
06.10.2017
08:49:46

whalemare
06.10.2017
08:50:58
ясненько

Eugeny
06.10.2017
09:02:18
каждый раз, когда пишу на котлине, пишу будто музыку
это норма?

Google

Anton
06.10.2017
09:02:35
нет

Гадкий
06.10.2017
09:03:05

Eugeny
06.10.2017
09:03:30

Гадкий
06.10.2017
09:04:06
тогда нормально)

Vlad
06.10.2017
09:14:54

Eugeny
06.10.2017
09:17:15
шансон это шестая джава

Anton
06.10.2017
09:26:50

Anton
06.10.2017
09:27:18
ахах

Руслан
06.10.2017
09:27:59
Прям ?

Lev
06.10.2017
12:25:11
Кто котлин 1.2 юзал?
А мультиплатформенностью


Vadim
06.10.2017
13:17:39
Всем привет! Возник вопрос: есть ли какой-то элегантный способ сделать Deffered с возможностью задать значение в какой-то момент самому?
Конкретнее: юзаю akka actors, которые умеют присылать-отправлять сообщения, но для Koltin эта либа не разрабатывалась и там нет возможности попросить что-то у актора и получить в ответ Deffered. Все, что умеют акторы : это 1) в специальном обработчике получить сообщение от другого актора и в зависимости от его типа что-то сделать, 2) отправить кому-то сообщение методом tell
Сейчас мне надо сделать примерно следующее:
val result = async {
otherActor.tell(message, self)
// ждать, пока он ответит и вернуть то, что прислал
}
Вижу тупое решение:
1. сделать свой класс MyDeffered: Deffered<Responce> { заимплементить кучу не нужных мне по большей части методов } с единственным методом setResponce(responce: Responce)
2. добавить глобальную мапу responceMap = HashMapOf<Message, Deffered<Responce>>()
3. в обработчик получения сообщений добавить, что если пришло responce на message, то responceMap[message]. setResponce(responce)
4.
val result = async {
otherActor.tell(message, self)
responceMap.put(message, MyDeffered())
responceMap[message].await()
}
выглядит очень кривовато и неестественно
PS: с корутинами не так давно столкнулся, так что могу не знать каких-то простых вещей. Всем заранее спасибо =)


Kirill
06.10.2017
13:19:08
LPT: исходный код в сообщениях лучше обернуть в три тильды с обоих сторон (`)

Vadim
06.10.2017
13:19:20
уже занимаюсь этим=)
+

Igor
06.10.2017
13:23:25
А почему бы вместе Deffered не юзать CompletableFuture? Их можно устанавливать в любой момент и у корутин есть обоертки для него.

Руслан
06.10.2017
13:42:14
А почему бы не передавать канал в актор в сообщении и актор пусть пишет обрратно в канал или передает дальше акторам?
Сами акторы на чем пишешь?

Google

Dmitry
06.10.2017
13:47:36

Quantum Harmonizer
06.10.2017
13:47:52
В каком виде лучше скидывать код?
Gist/PasteBin/CodeShare – 27
??????? 54%
Скриншотом – 13
??? 26%
Без разницы – 10
??? 20%
? 50 people voted so far.

Igor
06.10.2017
13:48:17
Зависит ?

Руслан
06.10.2017
13:49:29
Если это код который не подразумевает копирование - скриншот, если подразумевает и больше чем 5-10 строк - пастбин, иначе inline

Anton
06.10.2017
13:49:58
главное чтобы не текстом в сообщении

Igor
06.10.2017
13:50:30


Roman
06.10.2017
14:10:12
Всем привет! Возник вопрос: есть ли какой-то элегантный способ сделать Deffered с возможностью задать значение в какой-то момент самому?
Конкретнее: юзаю akka actors, которые умеют присылать-отправлять сообщения, но для Koltin эта либа не разрабатывалась и там нет возможности попросить что-то у актора и получить в ответ Deffered. Все, что умеют акторы : это 1) в специальном обработчике получить сообщение от другого актора и в зависимости от его типа что-то сделать, 2) отправить кому-то сообщение методом tell
Сейчас мне надо сделать примерно следующее:
val result = async {
otherActor.tell(message, self)
// ждать, пока он ответит и вернуть то, что прислал
}
Вижу тупое решение:
1. сделать свой класс MyDeffered: Deffered<Responce> { заимплементить кучу не нужных мне по большей части методов } с единственным методом setResponce(responce: Responce)
2. добавить глобальную мапу responceMap = HashMapOf<Message, Deffered<Responce>>()
3. в обработчик получения сообщений добавить, что если пришло responce на message, то responceMap[message]. setResponce(responce)
4.
val result = async {
otherActor.tell(message, self)
responceMap.put(message, MyDeffered())
responceMap[message].await()
}
См. класс CompletableDeferred, а вообще об этом написано здесь: https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#actors


Руслан
06.10.2017
14:13:34
ctrl+f - akka - nothing found

Roman
06.10.2017
14:17:21
А при чем тут Akka?
Akkа же она вся на фьючах

Руслан
06.10.2017
14:18:29
Ну человек хочет саспенд сделать на акковском акторе

Roman
06.10.2017
14:19:05
Интеграции с Akka фьючами нет — это недосмотр. Можете контрибьютнуть, по аналогии с тем как это сделано для других futures libs (типа Guava). Подробности здеcь: https://github.com/Kotlin/kotlinx.coroutines/tree/master/integration#contributing

Mi
06.10.2017
14:19:28

Руслан
06.10.2017
14:19:46
а что за фьючи? разве акторы там не Unit возвращают на tell?

Roman
06.10.2017
14:19:54
Там легко методом cut-and-paste перепилить интеграцию с Guava фьчами на интгерацию с Akka фьючами.
Ну вам же ждать надо. Если ждать, то там фьючи

Quantum Harmonizer
06.10.2017
14:21:11

Руслан
06.10.2017
14:22:40
В том то и дело, акторы в акке (афаик) ничего не возвращают.
Я вот смотрю на ActorRef#tell

Roman
06.10.2017
14:22:43
А вообще не надо на Akka акторах писать. Очень спагети код получатеся если так писать. Приходиться все "state machines" в большие when-ы разворачивать внутри receive функции. Такую работаю лучше компилятору доверить. Для этого Koltin корутины и сделаны
Да нету там future-returning методу.

Google

Roman
06.10.2017
14:24:27
Так что делать как раз по ссылке написано
Вы ему шлите CompletableDeferred и ждите пока на той стороне ему сделвют complete

Igor
06.10.2017
14:27:38

Roman
06.10.2017
14:40:47
Не. Коритины это не framework. Если вы напишете distributed/cluster framework, то будет и между процессами работать. А из коробки этого нет и в ближайшем будущем нет плана делать. Мы язык делаем. А frameworks пусть уж кто-то другой.

Quantum Harmonizer
06.10.2017
14:41:34
можно же небось засунуть сериализованную корутину в Apache Spark

Roman
06.10.2017
14:42:49
Не надо корутину никуда засовывать. Мыслите в териминах микро-сервисов. Поднимайте разные сервисы и пусть они по сети _данные_ (запросы, ответы и другие сообщения) передают
Вот для того чтобы такие штуки удобно было делать мы ktor пилим

Quantum Harmonizer
06.10.2017
14:43:36

Roman
06.10.2017
14:53:17
Мы пока над историей распределённый только работаем. Не хватает http client истории и чтобы через websoxket асинхронные каналы передачи данных прокидывать.

Quantum Harmonizer
06.10.2017
14:55:54

Roman
06.10.2017
14:56:13
Тоже будет. Work in progress.

Igor
06.10.2017
14:57:21
А чем акторы не микросервисы? Плюс не надо морочить себе голову “сериализацие”

Руслан
06.10.2017
15:02:26

Igor
06.10.2017
15:03:30
Tcp или что-там модное aeron

Quantum Harmonizer
06.10.2017
15:11:17

Руслан
06.10.2017
15:13:15

Igor
06.10.2017
15:42:14
Ой ребят, а вы откуда? Смотрю некоторые из вас хаскель любят. @BroadsideGC @djvantuz Anton

Kirill
06.10.2017
15:43:09

Artem
06.10.2017
15:47:02

Vadim
06.10.2017
15:55:01

Google

Roman
06.10.2017
16:00:41
????
Кого куда кастить?

Vadim
06.10.2017
16:03:19
Насколько я знаю Akka умеет в скаловские Future, с относительно недавних пор (и пока частично) - в CompletableFuture из Java8. CompletableDeffered придется из нее как-то получить?

Руслан
06.10.2017
16:04:08

Vadim
06.10.2017
16:04:32
возможно тут есть примеры : https://opencredo.com/improved-akka-java-8/

Roman
06.10.2017
16:06:28
Интероп с completablefuture здесь https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-jdk8/