
Quantum Harmonizer
24.03.2018
09:05:47
OMG, no both

Vitalii
24.03.2018
09:05:51
No tarball either :(

Fag
24.03.2018
09:06:00
No windows either
Ugh

Google

Vitalii
24.03.2018
09:06:15
Which linux distribution do you have?

Fag
24.03.2018
09:06:19
Ive been trying to install the Jdk for 3 days on Mint
Ive gone through countless forum posts

Vitalii
24.03.2018
09:06:36
Is there any ppa for 10th java?

Fag
24.03.2018
09:07:01
I dont know, but I tried for 7, 8, and 9

Vitalii
24.03.2018
09:07:52
Found this: http://jdk.java.net/10/

Fag
24.03.2018
09:08:12
Thats openJDK : (
I looked at that page

Nameless
24.03.2018
09:10:47

Quantum Harmonizer
24.03.2018
09:14:19
Что тут понимается под диспатчингом? Доставка событий?

Fag
24.03.2018
09:19:18
Update:
i managed to find the archived JDK's from like, JDK 1 to JDK 9.0.1 so im currently installing 9

Google

Fag
24.03.2018
09:20:11
Thanks guys for trying ?

Mikhail
24.03.2018
09:35:37
fun <P1, P2, R> let2(p1: P1?, p2: P2?, block: (Pair<P1, P2>) -> R): R? {
return p1?.let { v1 -> p2?.let { v2 -> block(v1 to v2) } }
}

Boris
24.03.2018
09:41:04

Andrey
24.03.2018
09:42:00
не понял как использовать
(a,b).let2 {} ?

Boris
24.03.2018
09:42:16
Да и вообще нет смысла использовать здесь пару
Два параметра на вход, два параметра у лямбды, инлайн, иф
inline fun <P1,P2,R> ifNonNull(p1:P1?,p2:P2?,block:(P1,P2)->R)R? = if(p1 != null && p2 != null) block(p1,p2) else null типа такого

Mikhail
24.03.2018
10:01:28

Andrey
24.03.2018
10:02:48
а как сделать параметры в лямбде необязательными?
если так:
inline fun <P1, P2, R> let2(p1: P1?, p2: P2?, block: (P1,P2) -> R): R? {
return if (p1 != null && p2 != null) { block(p1,p2) } else { null }
}

Boris
24.03.2018
10:11:00
В этой функции не вижу смысла
Оно же будет налл видимо и никогда не будет срабатывать

Quantum Harmonizer
24.03.2018
10:12:49

Andrey
24.03.2018
10:15:23
чтобы можно быть использовать так let2(a,b) { print() }
а не let2(a,b) { _,_ -> print() }

Boris
24.03.2018
10:16:18
Так нельзя

Google

Quantum Harmonizer
24.03.2018
10:16:33

Andrey
24.03.2018
10:18:16
конечно, тогда действительно проще вместо этого всего использовать if - будет лучше выглядеть

Boris
24.03.2018
10:20:27

Quantum Harmonizer
24.03.2018
10:20:56
...кроме случая, когда переменные не локальные.

Boris
24.03.2018
10:22:22

Quantum Harmonizer
24.03.2018
10:23:10
ну вот какой-нибудь let2, только без Pair и с нормальным названием

Andrey
24.03.2018
10:23:51
не два, а несколько, было бы хорошо для синтаксиса

Igor
24.03.2018
10:29:03
Как можно красиво промапать такой java интерфейс org.w3c.dom.NodeList ?
public interface NodeList {
public Node item(int index);
public int getLength();
}

Ivan
24.03.2018
10:39:50
Вот тут уже обсуждали
Да-да, я помню, но тогда мы обсуждали как написать своё, а я тут подумал вдруг есть готовое

Mikhail
24.03.2018
10:45:42

Ivan
24.03.2018
10:49:52
Очень туманная формулировка
А что туманного? Вообще у меня постоянно такой кейс появляется, метод принимает базовый класс, а обработчики под конкретный наследник и нужно из этого метода объект задиспатчить на нужный(ые) обработчик(и).
При этом наследников много, они часто добавляются, и это место горячее

Quantum Harmonizer
24.03.2018
10:50:28

Ivan
24.03.2018
10:53:05
Да и вообще постоянно это возникает, если на эвентах живёшь

Quantum Harmonizer
24.03.2018
10:53:35

Boris
24.03.2018
10:57:36

Ivan
24.03.2018
10:59:29

Kirill
24.03.2018
11:07:38
Или тебе именно map нужен с сохранением исходного интерфейса?

Google

Ivan
24.03.2018
11:08:25
Ну вот у меня такая ситуация, я работаю в финансовом брокере, мы слушаем несколько рынков из которых приходит маркет-дата (котировки, сделки, etc), соответственно очень хочется работать на пуш и вся система построена именно на пуше. Получается достаточно часто возникает ситуация, когда с сокета прилетают байты, мы их преобразуем в объекты, а дальше на сделку нужно сделать одно, на котировку другое. Соответственно на основе одних событий рождаются другие и их так же нужно обработать

Igor
24.03.2018
11:10:09
Накостылить итератор?
Просто надо превратить его в List<NodeItem> или Sequance<NodeItem> (ну или итератор).
Не понятно как сделать это “красиво”, можно и конечно и “НЕ красиво” и вынести в ext-func (но зачем, если оно только в одном месте используется)

Boris
24.03.2018
11:21:00

Ivan
24.03.2018
11:23:18

Boris
24.03.2018
11:23:21
Каналы тоже должны хорошо зайти
Но каналы им бы ещё подрасти

Ivan
24.03.2018
11:24:13
Кстати, а у каналов разве не стоит проблемы диспатчинга?
Из канала, наверное Any приходит, нет?

Boris
24.03.2018
11:25:22

Ivan
24.03.2018
11:25:28
А, кстати, я скажу вам чем котлин тут помогает очень сильно: нормальные ссылки на методы

Boris
24.03.2018
11:26:03

Kirill
24.03.2018
11:28:28

Igor
24.03.2018
11:28:31

Boris
24.03.2018
11:28:45
В вопросе диспатчинга главный вопрос по чему мы диспатчим

Kirill
24.03.2018
11:28:51

Ivan
24.03.2018
11:29:46

Vitalii
24.03.2018
11:39:26
Никто не сталкивался с задачами по работе из Kotlin/JVM с Golang?
Есть какие-нибудь способы коммуникации, кроме JNI и вызова go через вызов shell-команд?

Egor
24.03.2018
11:47:28
Попробуй исходники MIPS посмотреть, он ровно тем самым занимается
Вызывает го из джавы, я имею ввиду

Google

Egor
24.03.2018
11:48:03
Как - не знаю, но может что-то оригинальное
Ыыыы, не MIPS, ща скажу как прога зовется
Вот, вот эта http://courses.missouristate.edu/KenVollmar/mars/

Vitalii
24.03.2018
12:08:00
Спасибо, посмотрю.

Bogdan
24.03.2018
14:08:02
ниукого не было проблемы с js, в мультиплатформеном проекте?

Andrew
24.03.2018
14:17:17

Igor
24.03.2018
14:18:18
Где были статьи от авторов rxjava что они на каких-то ворлоадах обходят котлин каналы

Жабра
24.03.2018
14:44:03
val channel = Channel<Int>()
for (i in 0..10)
channel.offer(i)
println("Is empty: ${channel.isEmpty}")
Почему выдаёт true?

Igor
24.03.2018
14:45:02
Ну потому что если capacity 0 и никто не слушает, то эвенты просто игнорятся (если кидать через offer)

Жабра
24.03.2018
14:47:28
А как сделать так, чтобы не игнорились?
val channel = Channel<Int>()
val job = launch {
for (i in 0..10)
println(channel.receive())
}
for (i in 0..10)
channel.offer(i)
job.join()
Тут его слушали, но ничего не произошло

Igor
24.03.2018
15:08:06
Ну подозреваю что у тебя нижний цикл выполнился быстрее чем запустился код внутри lauch{}
и все offer ушли в никуда
Хочешь что бы не игнорились, юзай просто send вместо offer

Жабра
24.03.2018
15:10:02

Igor
24.03.2018
15:11:37
Имхо что бы кидать в канал сообщения из “НЕ suspend” функций, без блокировки (но без гарантий (там true/false возвращается))
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental.channels/-send-channel/offer.html

Жабра
24.03.2018
15:12:58

Igor
24.03.2018
15:15:00
Если сильно хочешь offer, то сделай хотя бы канал с буфером (в твоем случае хотя размера 11)
val channel = Channel<Int>(11)

Жабра
24.03.2018
15:17:08

Boris
24.03.2018
15:17:31
fun test() {
val channel = produce {
for (i in 0..10) {
send(i)
}
}
launch {
for (i in channel) {
println(i)
}
}
}

Жабра
24.03.2018
15:18:48
Окей, приемлимо. Другой вопрос: если я хочу очистить канал без закрытия, то подойдёт ли что-то вроде
suspend fun Channel<out Any>.clear() {
while (!isEmpty) {
receive()
}
}
такого? Или костыль? Просто не нашёл чёт как чистить, но не закрывать.