@kotlin_lang

Страница 490 из 982
Quantum Harmonizer
15.01.2018
19:01:58
или очнредь
т. е. TPE из java concurrent — тоже реактивщина?

Alexander
15.01.2018
19:02:01
суть что изменения распространяются автоматически

нет

Igor
15.01.2018
19:02:51
или акка
Или как React или Elm

Google
Dumitru
15.01.2018
19:03:05
Kotlin/JS
а для ktor.io ?

Alexander
15.01.2018
19:03:07
возможно. тут я не очень компетентен

Dibro
15.01.2018
19:03:34
Alexander
15.01.2018
19:04:16
думаю react + reduce или что там сейчас вместо подходят под определение

Dumitru
15.01.2018
19:04:19
Kotlin/JVM
Спасибо, а если хочу совместить ?

Maxim
15.01.2018
19:05:14
Реактивный и нереактивный подход отличается примерно тем чем игра в пинг понг отличается он перемещения кучи шариков с пункта А в пункт Б. Все взаимодействия двусторонние, и разбиты на отдельные мелкие составляющие.

Alexander
15.01.2018
19:05:31
вот как раз нет

реаетивность не равно запрос ответ

Dibro
15.01.2018
19:05:59
Спасибо, а если хочу совместить ?
для моделей можно создать проект на Kotlin/Common и зависить от него

Quantum Harmonizer
15.01.2018
19:06:06
Спасибо, а если хочу совместить ?
два разных модуля, фронт и бэк

Dumitru
15.01.2018
19:06:25
ок

Bogdan
15.01.2018
19:08:04
Спасибо, а если хочу совместить ?
еще есть мулти платформ, но еще не доделано

Dumitru
15.01.2018
19:09:05
еще есть мулти платформ, но еще не доделано
Я знаю, но там не относится к вебу. Я про то что если возможно соединить реакт (или же сам kotlin js) в ktor.io

Google
Dumitru
15.01.2018
19:13:51
Каким образом? ktor работает на JVM, рекат — на JS.
то есть сайт придится писать только на реакте или только на кторе ?

Quantum Harmonizer
15.01.2018
19:14:10
Dumitru
15.01.2018
19:14:51
?

Dibro
15.01.2018
19:15:50
одно – вебсервер, другое – гуи фреймворк

Dumitru
15.01.2018
19:16:53
одно – вебсервер, другое – гуи фреймворк
разве сайт это не их воплощение ?, то есть сайт соединяет это...

Ну типо пишешь гуи на реакте и пишешь сервер на кторе, для того же сайта.

Dibro
15.01.2018
19:18:14
и в чем вопрос?

Dumitru
15.01.2018
19:18:44
Какой тип проекта создать если собрался сделать такой сайт )

Bogdan
15.01.2018
19:19:49
gradle

многомодульный

Dibro
15.01.2018
19:20:10
используй Gradle. один модуль для ктора, другой для реакта, и третий для моделей

Bogdan
15.01.2018
19:21:36
Pavel
15.01.2018
19:49:11
https://youtu.be/G_HZUEY0Qwo

Igor
15.01.2018
20:15:44
https://www.reactivemanifesto.org/
Может ты еще знаешь почему RxJava не FRP?

Руслан
15.01.2018
20:54:28


Sergey
15.01.2018
21:29:31
http://arrow-kt.io/

немного изврата

Google
Igor
15.01.2018
21:40:11
Да да, в скала чатике по ней уже прошлись ?

Bogdan
15.01.2018
21:42:26
Igor
15.01.2018
21:45:09
Да так поужасались реализации hkt и хранению тайпклассов в глобальной хешмапе. (впрочем ничего нового, тоже самое было и про kategory)

Pavel
15.01.2018
21:47:13
Может ты еще знаешь почему RxJava не FRP?
Rx это просто стримы и планировщики. Да и как вообще можно ставить в одном предложении functional programming и Java?

Igor
15.01.2018
21:48:03
Rx это просто стримы и планировщики. Да и как вообще можно ставить в одном предложении functional programming и Java?
Ну там же java8-лямды ? Благодаря которым можно писать “декларативный код, который обрабатывает поток событий”.

Vic
15.01.2018
21:56:38
KEEP-87 заглох

Глеб
15.01.2018
22:30:31
Привет! У меня простой вопрос по корутинам. Скажем, у меня есть функция loadFileSync(url:String) , и есть массив из url. И я хочу вызвать много loadFileSync() (параллельно) и, дождавшись завершения всех загрузок, продолжить делать дальнейшие дейсвтия: urls.map { loadFileSync(it) } Наверное, можно заключить эту лямбду в async, а потом для всего этого вызвать много await-ов: urls.map { arr += async {loadFileSync(it)} } arr.map{it.await()} //а может и не будет работать А как это сделать правильно?

Руслан
15.01.2018
22:37:51
urls.map { url -> async(CommonPool) { loadFileSync(url) } }.map { it.await() }

получается шедулим все загрузки на CommonPool, обратно получаем Deferred, и потом ожидаем завершения всех.

на самом деле не супер оптимально потому что мы продолжим работу с полученным листом только когда все запросы завершатся, но зато просто и для многих задач подойдет

если хочется прям чтобы очень оптимально, то можно посмотреть работу с каналами тут: https://github.com/tsydd/jprof-ny2018

Немного оффтоп, но наше джава комьюнbити проводило новогодний контест, и там нужно было посчитать кол-во упоминаний слова "java" на сайте сообщества jprof.by. Так вот из семи вариантов - 2 на котлине, и первое место занял тоже котлин вариант (ссылка выше), а еще он быстрее самого быстрого джавового в 5 раз, хотя либа jsoup была у многих)

Глеб
15.01.2018
22:45:07
Хм, ну мне оно и нужно, в принципе. Я просто почему-то думал, что есть что-то еще более очевидное , чем async/await, с учетом того, что результат loadFileSync не важен. Спасибо, посмотрю ?

Руслан
15.01.2018
22:46:13
ну в любом случае если нужно дождаться - то нужно делать await

можно последний map заменить на forEach

urls.map { url -> async(CommonPool) { loadFileSync(url) } }.forEach { try { it.await() } catch (e: Exception) { // handle } }

и добавить хоть какое-то логгирование, или убрать try/catch и падать в этом месте. но это уже от логики зависит

Andrew
16.01.2018
06:37:27
И не запускать I/O операции на CommonPool, а выделить пол это cachedThreadPool

Vladimir
16.01.2018
06:40:42
Вопрос по ktor: при использовании NettyApplicationEngine можно как-то подкрутить SslContext (например, указать trust manager)?

Google
Alexei
16.01.2018
06:51:49
я бы для файлов попробывал все таки https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental.selects/select.html

предидущее решение как по мне ничем не отличается от блокируещего чтение в сингл тред пуле

Alexei
16.01.2018
07:49:22
https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#selecting-deferred-values

Roman
16.01.2018
07:51:04
Это хороший способ обработать результат, но в задачке результат ведь не нужен.

Alexei
16.01.2018
07:52:51
так насколько я понимаю евейт заблочит тред и чтение будет последовательным(конечно же только при условии что асинк лениво выполняется)

Руслан
16.01.2018
07:54:04
await не блочит тред, но да - вычитка будет последовательная. но в задаче это не важно, т.к. там достаточно CompletableFuture.all(...promises)

И не запускать I/O операции на CommonPool, а выделить пол это cachedThreadPool
А откуда знание что cachedThreadPool это самое то для I/O?

Roman
16.01.2018
08:00:56
Ну любой выделенный тред пул - лучшее место для io, чем CommonPool.

Alexei
16.01.2018
08:00:57
так вродь и комон пул забивать ио тож не по феншую?

Roman
16.01.2018
08:01:45
В том примере - победителе кстати именно так: весь io выполняется на тред пуле okhttp, а обработка на CommonPool.

Руслан
16.01.2018
08:03:25
так вродь и комон пул забивать ио тож не по феншую?
Я могу с этим согласится, хотя если на CommonPool закидывать I/O через ManagedBlocker то разницы не будет ведь.

Другое дело что с корутинами так не получится сделать, наверно

Руслан
16.01.2018
08:06:01
https://stackoverflow.com/questions/37512662/is-there-anything-wrong-with-using-i-o-managedblocker-in-java8-parallelstream

Igor
16.01.2018
08:06:07
А через netty можно было написать тут загрузку файлов? Он вроде бы вообще не блокирующий.

Roman
16.01.2018
08:07:16
Можно, но не очень то полезно.

Прироста в скорости врядли добьемся, мне почему-то кажется, что даже будет хуже.

Руслан
16.01.2018
08:07:47
https://stackoverflow.com/questions/37512662/is-there-anything-wrong-with-using-i-o-managedblocker-in-java8-parallelstream
Вот тут конечно для стримов пример, и там как-то криво но чет лучше ничего не нашел

По сути ManagedBlocker говорит FJP когда выделить новый тред, потому что какой-то таск точно заблокирует тред в пуле

Google
Roman
16.01.2018
08:10:26
Ничоси.

Вот это фича. Не знал. Похоже это реально будет работать.

Сложно только и нифига не очевидно. Корутины и тред пулы все же понятнее.

Andrew
16.01.2018
08:19:44
А откуда знание что cachedThreadPool это самое то для I/O?
о ManagedBlocker не знал, ибо пришёл с андроида, а вообще логично же, что common pool можно заблокировать полностью, а cached pool -- нет, хотя много одновременных операций и будут очень неэффективны. я не спорю, что неблокирующий ввод/вывод -- наилучшее решение, но не везде его легко заиметь. потому имхо cached pool -- меньшее из зол.

Andrew
16.01.2018
08:33:24
fixed на 10 разве не забьётся 10ю блокирующимм операциями? Или я чего-то в этой жизни не понимаю?

Roman
16.01.2018
08:34:38
Конечно. Но это ведь именно то, что нам и нужно.

Andrew
16.01.2018
08:36:52
я понимаю, что 640 КБ хватит всем, но наверное, зависит от конкретных кейсов.

Руслан
16.01.2018
08:36:53
Забьет. Вопрос в том что мы хотим, наплодить много тредов - что не ок, или сделать очередь + не так много тредов

Andrew
16.01.2018
08:39:04
да, убедили. я на всё смотрю через призму своей текущей задачи, где у меня многопоточность сделана через одно место, а надо как можно быстрее из последовательных портов выгребать данные, иначе железу становится плохо.

Igor
16.01.2018
08:48:35
А jdk.incubator.http.HttpClient работает через NIO?

Руслан
16.01.2018
08:50:12
Это же апи?

Igor
16.01.2018
09:04:45
В смысле апи? Это из java9 Судя по сорцам jdk.incubator.http.HttpClientImpl$SelectorManager - кажется что через NIO

Тут еще в докладе Куксенко про него интересная информация, что несмотря на NIO, он все равно юзает cached-thread-executor для разных операций и на один запрос генерит до 12 тредов в нем. По этому лучше ему явно задавать Executors.newFixedThreadPool(2)

Konstantine
16.01.2018
09:39:46
Вроде был какой-то оператор, как in только с обратным порядком, не?

А, всё, не так подошел к вопросу. Лист просто реверснутым делал.

Vitalii
16.01.2018
09:41:47
downTo?

Konstantin
16.01.2018
09:42:55
downTo?
ну это если по range гонять, а если а foreach style то да, вроде только список реверсить.

Igor
16.01.2018
09:52:35
Да с jpoint

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