
Alexey
31.03.2018
13:41:04
Микросервисы?
По разному, просто сложная и развесистая инфраструктура

Ivan
31.03.2018
13:46:27

Alexey
31.03.2018
13:50:30
Функциональные стримы

Google

Ivan
31.03.2018
13:51:39
ааа, в скале переизобрели rxjava

Alexey
31.03.2018
13:52:07

Ivan
31.03.2018
13:52:35
def converter[F[_]](implicit F: Sync[F]): F[Unit] - епт

Igor
31.03.2018
13:55:14
Ой давайте не свалиться в осуждение скалы, а кому не имется можно пройти в @scala_ru или @pofftop

Igor
31.03.2018
13:57:31

Александр
31.03.2018
14:16:23
Топ, спасибо
@android_ru, @jvmchat, @javastart

Ivan
31.03.2018
15:17:21
Слушайте, а чем разница между ktor и okhttp?

Quantum Harmonizer
31.03.2018
15:18:54

Ivan
31.03.2018
15:18:55
Я просто читаю интерьвью с Бреславом, он там говорит, мол, круто что делают

Quantum Harmonizer
31.03.2018
15:19:48

Boris
31.03.2018
15:20:10
Окхттп кстати очень просто в корутины оборачивать

Google

Ivan
31.03.2018
15:20:12
Как-это? А асинхронные запросы?

Boris
31.03.2018
15:20:31
Использую его во всех своих проектах

Quantum Harmonizer
31.03.2018
15:20:39

Ivan
31.03.2018
15:21:33
Корутины для этого и завозили, чтобы принимаешь запрос, делаешь 3 других, компануешь результат, одаёшь на изначальный запрос
Ну Роман именно за это топил

Boris
31.03.2018
15:21:47
Один метод и у тебя уже клиент провайдит саспендабл отправку

Kirill
31.03.2018
15:22:04

Ivan
31.03.2018
15:25:10

Kirill
31.03.2018
15:25:44
Леонид может ответить. Он его делает

Ivan
31.03.2018
15:27:10
Okhttp?

Kirill
31.03.2018
15:27:24

Ivan
31.03.2018
15:27:52
Ktor
Ага, спасибо, не знал про него
Ну в общем, идею я понял, ктор изначально сервер, окхттп изначально клиент.
Спасибо

Руслан
31.03.2018
15:40:57
Ktor
Ktor он вполне себе и клиент, это отдельная либа
Есть разные реализации под jvm: apache, jetty, java.net
В пределе будут имплементации для js/native

Leonid
31.03.2018
15:50:00

Boris
31.03.2018
15:51:00

Quantum Harmonizer
31.03.2018
15:51:31
внезапно любой синхронный клиент + тред пул можно обернуть в корутины :trollface:

Google

Leonid
31.03.2018
15:54:41

Quantum Harmonizer
31.03.2018
15:55:44
Ну, появляется возможность использовать такой клиент из корутин. (Что мы и делаем в Android.)
Кстати, кто-нибудь использовал nio в Android? Какие-никакие каналы и байт-буферы там есть.

Igor
31.03.2018
15:56:26

Boris
31.03.2018
15:56:55

Quantum Harmonizer
31.03.2018
15:56:58

Leonid
31.03.2018
15:57:15

Руслан
31.03.2018
15:57:30

Igor
31.03.2018
15:57:51

Boris
31.03.2018
15:58:10

Quantum Harmonizer
31.03.2018
15:58:33

Igor
31.03.2018
16:07:34

Alexey
31.03.2018
16:10:10
А поверх нетти есть чо с вменяемым апи?

Quantum Harmonizer
31.03.2018
16:15:04

Alexey
31.03.2018
16:17:18

Quantum Harmonizer
31.03.2018
16:19:29
Не подскажу.
Кто что делает, если нужно, чтобы модуль библиотеки использовал приватные (internal) API ядра библиотеки?
Package-private нет, да и split package нельзя. @PublishedApi не особо поможет. Или я что-то делаю в корне не так?

Brian
31.03.2018
16:21:35
Из хттп клиентов очень удобный khttp

Руслан
31.03.2018
16:22:35

Quantum Harmonizer
31.03.2018
16:23:30

Google

Quantum Harmonizer
31.03.2018
16:24:20
И вообще, хочется публичным классом экстендить internal-класс :)

Руслан
31.03.2018
16:24:54
Это значит что кажется так не делают

Vladimir
31.03.2018
16:37:16

Quantum Harmonizer
31.03.2018
16:37:46
Если какая-нибудь библиотека будет использовать мой приватный API, а у клиента будет новая версия, полёт конечностей по хипу неизбежен...

Vladimir
31.03.2018
16:40:11

Quantum Harmonizer
31.03.2018
16:41:22

Vladimir
31.03.2018
16:42:28

Руслан
31.03.2018
16:42:40

Quantum Harmonizer
31.03.2018
16:43:04

Руслан
31.03.2018
16:43:34
Нет, ты просто декларируешь api, все другие модули его могут использовать.

Quantum Harmonizer
31.03.2018
16:44:17

Vladimir
31.03.2018
16:45:34

Руслан
31.03.2018
16:46:53
Действительно, я упустил

Quantum Harmonizer
31.03.2018
16:48:13
сложна) я вот только что искал, и подумал, что таки нельзя.

Vladimir
31.03.2018
16:51:16
@LeonidStashevsky
Позвольте такой вопрос: я правильно понял, что в ktor будет своя реализация TLS "с нуля"?

Leonid
31.03.2018
16:52:36

Boris
31.03.2018
17:01:33
Ок
проверил кейз с наследованием от тайпалиаса и всё оказывается уже работает, так что похоже кроме более размытого типа никаких проблем сейчас с использованием тайпалиаса не вижу. Возможно кейз был более сложный, но я сейчас уже найти его не могу
всё равно не совсем понятно, почему нужно использовать безымянные типы, если я хочу иметь именованный тип -- да, я делаю тапйалиас, но передать в него можно любую функцию подходящую под сигнатуру
хотя возможно в этом нет ничего страшного

Google

Quantum Harmonizer
31.03.2018
17:05:21

Vladimir
31.03.2018
17:06:29

Leonid
31.03.2018
17:07:17

Boris
31.03.2018
17:09:40

Vladimir
31.03.2018
17:10:37

Boris
31.03.2018
17:12:09
т.е. вполне естественно объявить интерфейс Interceptor, с другой стороны так же естественно инстанцировать его упрощенным способом. Особенно это актуально если этот код будет из джавы использован, там ведь тайпалиасы никакие не видны и интерцептор это будет просто Function1

Leonid
31.03.2018
17:13:03

Boris
31.03.2018
17:13:19
но так же я согласен, что ради небольшого количества кейзов может и не стоило вводить отедльный кейворд, тем более, что с наследованием от тайпалиасов вроде разобрались

Leonid
31.03.2018
17:15:27
@frostbit Насколько решение получилось кросплатформеным - спорно. Я тестировал реализацию в клиенте на android(api >= 26, jdk8) работает. Но увы но сейчас нужна jdk8

Vladimir
31.03.2018
17:16:40

Boris
31.03.2018
17:17:35

Руслан
31.03.2018
17:42:19
https://www.youtube.com/watch?v=ocS-UVZG5iE

Ivan
31.03.2018
17:43:04
Как в котлине обойтись без скалячьих for-comprehension? Например, для кода типа:
getOne()?.let { one ->
getTwo()?.let { two ->
getThree()?.let { three ->
DataContainer(one, two, three)
}
}
}
Есть распространенное красивое решение?

Mikhail
31.03.2018
17:43:55
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) } }
}

Ivan
31.03.2018
17:44:27
Ну т.е. вынести ту же самую колбасу в библиотечную функцию

Mikhail
31.03.2018
17:44:34
Ага

Ivan
31.03.2018
17:44:44
И при добавлении еще одного параметра нагородить еще одну колбасу?
Я видел такое в библиотеке komprehensions

Mikhail
31.03.2018
17:45:00
Или тебе надо поставить Arrow и пользоваться Option.map

Семен
31.03.2018
17:45:09
можно разрешить DataContainer принимать nullable классы)