@kotlin_lang

Страница 358 из 982
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
(this+1) until that
красиво)

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

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

Maxim
06.10.2017
08:38:15
Модификатор data тут вообще не при чём.
Я думал, может есть какой то признак, по которому их можно отличить

Анотировать каждый @Keep
Спасибо! Думаю мне это подойдет)

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
а по data нельзя чекать? или прогуард работает уже после того как прошелся котлиновский компилятор?
ProGuard работает с байт-кодом. Модификатор data там лежит, скорее всего, где-то глубоко в @Metadata.

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

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

это норма?

Google
Anton
06.10.2017
09:02:35
нет

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
шансон это шестая джава
Мавен централ, ветер северный, Конфиги в xml, бинов немерено, Лежит на проде тяжкий груз.

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
А почему бы вместе Deffered не юзать CompletableFuture? Их можно устанавливать в любой момент и у корутин есть обоертки для него.
Наверное это будет сложно в джаваскрипт скомпилировать. Там вместо оного есть Promise.

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

Руслан
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
Вы ему шлите CompletableDeferred и ждите пока на той стороне ему сделвют complete
А это все будет работать между процессами или вообще разными машинами? (я так понимаю и котлин-акторы работают только локально)

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
Вот для того чтобы такие штуки удобно было делать мы ktor пилим
вот распределённые вычисления не пробовал, а как веб-фреймворк он мне нравится

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

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

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

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

Руслан
06.10.2017
15:13:15
Tcp или что-там модное aeron
То что апаяесвкое для бигдата? Это сереализация

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

Kirill
06.10.2017
15:43:09
Ой ребят, а вы откуда? Смотрю некоторые из вас хаскель любят. @BroadsideGC @djvantuz Anton
они из ИТМО, кафедра КТ, СПб ссылку на этот чат вкинули в их локальный чат

Artem
06.10.2017
15:47:02
они из ИТМО, кафедра КТ, СПб ссылку на этот чат вкинули в их локальный чат
Если про нас когда-нибудь снимут фильм, то диктором на фоне точно будешь ты

Vadim
06.10.2017
15:55:01
См. класс CompletableDeferred, а вообще об этом написано здесь: https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#actors
Спасибо за ответ:) Я правильно Вас понял, что пока нет ничего лучше чем работать с акковскими фьючерами, потом кастить их к CompletableDeffered, а потом запускать на этом корутину?

Google
Roman
06.10.2017
16:00:41
????

Кого куда кастить?

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

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/

Страница 358 из 982