
Quantum Harmonizer
07.03.2018
09:24:03

You
07.03.2018
09:24:04
Jakarta EE, попрошу извинить

Anatoly
07.03.2018
09:27:47

Google

Владимир
07.03.2018
11:20:08
Тогда в also у тебя гарантированно захваченная nonnull переменная

Mikhail
07.03.2018
11:22:22
Type Checks and Casts: 'is' and 'as' - Kotlin Programming Language
https://kotlinlang.org/docs/reference/typecasts.html#smart-casts

Ivan
07.03.2018
11:22:25
Ребят, а никто с сиквенсами на корутинах не баловался? У меня 2 вопроса:
1) он может быть конечным? Или по определению бесконечен?
2) если берёшь следующее значение несколькими потоками одновременно, то там внутри всё-равно же начинается concurrency и нужно корректно синхронизировать весь алгоритм получения следующего значения

Mikhail
07.03.2018
11:22:29

Ivan
07.03.2018
11:24:33
И в целом, есть какие-нибудь бест практисы на тему ленивого форк джоина? Или я о чём-то странном мечтаю?

balolam
07.03.2018
11:25:32

Ivan
07.03.2018
11:28:09
и я хочу сделать forEach
Я тут только что подумал, типа можно просто на некоторой итерации не делать yeld... ?

Лёша
07.03.2018
11:30:37
я так понимаю, он будет бесконечен до тех пор, пока есть кому принимать значение)

Ivan
07.03.2018
11:32:26

Google

Ivan
07.03.2018
11:33:40
Сорян за использование чатика как уточку )
Хотя второй вопрос остался (про синхронизацию)

Mikhail
07.03.2018
11:36:08

Dmitry
07.03.2018
11:38:06
ладно бы канал

Лёша
07.03.2018
11:38:20

Ivan
07.03.2018
11:42:07
А, не, я знаю разницу, с каналом не получится лениво

Dmitry
07.03.2018
11:54:30
A sequence that returns values through its iterator. итератор не всегда потокобезопасен
про каналы и "лениво"
fun main(args: Array<String>) {
val c = Channel<String>()
launch {
c.send("hello world")
c.close()
}
runBlocking {
for (msg in c) {
println(msg)
}
}
}

Andrew
07.03.2018
12:01:49
https://github.com/Kotlin/kotlinx.coroutines/issues/254
Роман объясняет, почему целиком лениво не получается.

Ivan
07.03.2018
12:50:24
о, большое спасибо, буду смотреть!

Bogdan
07.03.2018
15:23:06

Aleksandr
07.03.2018
15:29:58
ребят, подскажите плиз
нежно люблю типизированные языки, а котлин вообще ня

Google

Aleksandr
07.03.2018
15:30:36
можно ли его сейчас применять на фронте?

Nameless
07.03.2018
15:30:54
надо у дедов спросить
(почему нет? что такое фронт?)

Aleksandr
07.03.2018
15:31:20
frontend

Sergey
07.03.2018
15:31:21

Nameless
07.03.2018
15:31:33

Sergey
07.03.2018
15:31:40
но если хочешь норм саппорта, то тебе в слак, там есть отдельная комната для него

Aleksandr
07.03.2018
15:31:49
браузер

Nameless
07.03.2018
15:31:53
в браузере kotlin.js, на сервере kotlin.jvm

Alexey
07.03.2018
15:33:22
Ох уж эти влажные мечты

Sergey
07.03.2018
15:33:47
по поводу?

Alexey
07.03.2018
15:34:08
По поводу переиспользования кода на беке и фронте

Sergey
07.03.2018
15:34:13
у нас фронтэнды уже посматривают на котлин
ну не всего кода же
а DTO как минимум

Alexey
07.03.2018
15:34:24
Пока что, все кто это делает, страдают, имхо

Sergey
07.03.2018
15:34:45
один раз описали обьекты апишки, и юзаешь и там и там

Nick Senchurin
07.03.2018
15:35:40

Aleksandr
07.03.2018
15:36:00
я не столько хочу переиспользовать, сколько иметь приличное ооп

Sergey
07.03.2018
15:36:11
почему не TS?

Google

Aleksandr
07.03.2018
15:36:35
как по мне, ts очень своеобразное решение
вообще с типизацией, на мой взгляд, в js скорее нерешаемая проблема
вот есть либа, например, moment.js. для того, чтобы с ней удобно работать в рамкахх ооп - надо подгрузить файл описания типов

Sergey
07.03.2018
15:39:23
если у тебя там jquery и прочая хрень - тогда это бесполезно
а если реактовый SPA, то они даже в обычном жсе описывают типы для стейта

Aleksandr
07.03.2018
15:41:28
вот да. хорошо, есть DefinitelyTyped - но проблема в том, что не факт, что файл описания типов актуален

Admin
ERROR: S client not available

Sergey
07.03.2018
15:41:54
мне вот что не нравится, это то что нужно кучу биндингов писать
на любую либу подключенную
но я еще не игрался с kotlin/js, так что хз даже, может это не большая проблема

Aleksandr
07.03.2018
15:42:55
соотв, нужно ожидать, рассматривать и обновлять пару "библиотек" вместо одной. или хакать без типов, если в либе ценная правка бага или еще что-то, и надо необходимо обновить
а если на либу нет файла типов - можно пробовать или генерить самому, что отдельный квест, или работать "из-под обычного js"
чудеса с цепочкой запросов - отдельная жуть; слава партии за async/await

Sergey
07.03.2018
15:46:50
есть же корутины

Aleksandr
07.03.2018
15:47:55
но основная проблема в том, что крайне много библиотек в принципе построены на функциональной архитектуре, и работать с ними с точки зрения ооп еще одно неблагодарное дело - лаконичные вызовы в примерах не так-то просто оборачивать и преобразовывать в ооп-образное решение
ну и разумеется, что ts надо пересобирать под js и включать поддержку дебага, что еще одна невеликая, но раздражающая прослойка работ
естественно и прискорбно, что эти проблемы я ожидаю увидеть и в колтине под js


Жабра
07.03.2018
16:33:59
Подскажите, пожалуйста: есть вот такой код
Socket(contact.currentIp, contact.currentPort).use { socket ->
BufferedWriter(OutputStreamWriter(socket.getOutputStream())).use { out ->
out.write(message)
out.flush()
BufferedReader(InputStreamReader(socket.getInputStream())).use { inp ->
serverResponse = inp.readLine()
}
}
}
В прошлом проекте я использовал этот код, и отправка-приём сообщений происходили нормально. Сейчас же, сервер получает сообщение только есть убрать BufferedReader, в противном случае он видит что соединение произошло, но висит и ждёт сообщение.
Почему так может происходить? Убрал reader - сервер получает сообщение.

Google

Жабра
07.03.2018
17:06:35
Всё, нашёл решение. Надо было out.write("$message\r")
Чтобы указать что на этом всё

Pavel
07.03.2018
18:36:11
Под windows это? А под Unix заработает "\r"?
Лучше после out.flush() закрыть } чтобы use закрыл стрим

Жабра
07.03.2018
19:02:43

Pavel
07.03.2018
19:25:37
Просто как правило использование вот так в тупую \r может приводить к весьма странным последствиям на разных платформах. Ибо это carrige return а не \n. Просто readLine() принимает любой символ конца строки
Можно \r заменить на out.newLine()

Ivan
07.03.2018
20:22:49

Andrew
07.03.2018
20:37:01

Roman
07.03.2018
21:17:26
Не равнозначны.

Dmitry
07.03.2018
21:18:45

Sergey
07.03.2018
21:21:40
@fogone вспоминая https://gist.github.com/fogone/e940de35f755c13299a65733c4b3be59#file-github-kt-L60
почему для параллельного map не сделать
produce(context, capacity = parallel) {
(0 until parallel).map {
launch(context) {
consumeEach {
send(transform(it))
}
}
}.forEach { it.join() }
}
?

Ivan
07.03.2018
21:50:45
Не равнозначны.
Роман пришёл и всех заинтриговал )
Я так понимаю неравнозначность будет в том что если у сиквенса запросить 10 значений он вычислит 10 и всё, а канал пойдёт вычислять 11 значение и затупит только на отсылке этого 11го, если не будет консьюмера

Sergey
07.03.2018
21:57:04
buildSequence там вообще своей жизнью живет

Ivan
07.03.2018
21:58:57

Alex
07.03.2018
22:49:45
и да, не забудь, если ты в exec(ляляля) влазишь, там может быть сложнее, пример, при подключении к COM порту прописании AT команд в модем, разделитель, это новая комманда, для отправки аргуменда нужно зажействовать Alt+Z