@kotlin_lang

Страница 367 из 982
Igor
10.10.2017
14:45:12
Оборачивайте все асинк IO операции в withTimeout(...) и не зависнет
И на сколько таймаут, что бы и на 3g не падало и очередь не забивало?

Boris
10.10.2017
14:45:14
Любой колбек можно обернуть в корутину за 2 минуты

И на сколько таймаут, что бы и на 3g не падало и очередь не забивало?
Ещё раз, неблокирующий ивентлуп эту проблему решает

Igor
10.10.2017
14:46:42
Google
Vic
10.10.2017
14:46:43
И на сколько таймаут, что бы и на 3g не падало и очередь не забивало?
На твой вкус, главное предусмотреть отвал по таймауту, если сама ИО операция не позволяет задать таймаут

Boris
10.10.2017
14:48:29
https://developer.android.com/reference/java/nio/package-summary.html

А это чо?

Igor
10.10.2017
14:51:13
А это чо?
Отличный набор классов, если надо реализовать 10k req/sec сервер. Для клиентских приложения, аля “загрузил котиков из сети и сохранил на диск” годится мало. Плюс почему-то на это апи забил @relizarov (в доках)

Quantum Harmonizer
10.10.2017
14:51:32
А это чо?
там кроме буферов ничего нет

Boris
10.10.2017
14:53:55
там кроме буферов ничего нет
Написано, что есть каналы

Может в какой-то новой версии

Quantum Harmonizer
10.10.2017
14:54:58
Написано, что есть каналы
а, действительно, есть, в другом пакете. 26+ ?

Quantum Harmonizer
10.10.2017
14:59:59
Google
Boris
10.10.2017
15:14:37
да, Oreo, который не так давно вышел
Чот похоже нету для андроида такого

Igor
10.10.2017
15:20:03
Хм, смотрю https://github.com/Kotlin/kotlinx.coroutines/blob/master/integration/kotlinx-coroutines-nio/src/main/kotlin/kotlinx/coroutines/experimental/nio/Nio.kt Там есть AsynchronousFileChannel и AsynchronousSocketChannel Получает что бы загрузить что-то по ASC надо самому протокол HTTP реализовать?

Boris
10.10.2017
15:34:01
Есть же асинкхттпклиент у того же апача

Но он здоровый

https://github.com/loopj/android-async-http/blob/master/README.md вот какой-то для андроида, наверное оптимизирован по количеству методов

Корутины прикрутить и ок

Дать пул из пары потоков максимум, все запросы по таймауту отваливать и будет счастье

Boris
10.10.2017
16:03:38
Да, я уже посмотрел

Вообще мало по сравнению с серверсайдом либ

Alexander
10.10.2017
16:05:29
угумс

Igor
10.10.2017
16:06:17
Да и не понятно чем оно лучше того же okhttp. NIO нет, внутри очевидно все такое же синхронное.

Boris
10.10.2017
16:32:11
Да и не понятно чем оно лучше того же okhttp. NIO нет, внутри очевидно все такое же синхронное.
Я окхттп использовал как спринговую имплементацию, как раз отказался от нее из за отсутствия поддержки асинхронных запросов, возможно если без спринговой обертки там с этим лучше

Eugene
10.10.2017
17:38:46
А кто может подсказать, что я делаю не так и почему у меня в action null находится а не нужное мне значение. Есть вот такой дата класс data class Player(val name: String, val balance: Int, val pot: Int, val status: String, val cards: List<Card>) { val action: Action = status.action() } Extension функция выглядит вот так fun String.action(): Action = when (this) {....}

Eugene
10.10.2017
17:42:30
да, нет, у меня в when возвращаются enum по всем веткам

Quantum Harmonizer
10.10.2017
17:43:20
Eugene
10.10.2017
17:44:15
Вот так выглядит функция fun String.action(): Action = when (this) { "Fold" -> Action.FOLD "Check" -> Action.CHECK "Call" -> Action.CALL "Rise" -> Action.RISE "AllIn"-> Action.ALL_IN "NotMoved"-> Action.NOT_MOVED "SmallBLind" -> Action.SMALL_BLIND "BigBlind" -> Action.BIG_BLIND else -> Action.NONE }

может неправильно строки использовал для сравнения?

Igor
10.10.2017
17:50:21
Google
Eugene
10.10.2017
17:50:53
это просто enum class Action(val action: String)

для всех action заполнен

Igor
10.10.2017
17:53:17
Ну смотри, я запустил и у меня все ОК https://try.kotlinlang.org/#/UserProjects/494hh4ce000dg3l6mvjoiokdol/df74suvpmg6o2i63s169ulepda

Vic
10.10.2017
17:54:13
"По фото не лечим" )

Кстати, зачем экстеншен здесь? Я бы метод в енуме сделал.

По сути маппинг строк на енумы в обе стороны, логично инкапсулировать в енум же

Vic
10.10.2017
17:59:40
Нет. Добавление нового енума потребует менять код в двух разных местах

А надо только в одном - в енуме

Boris
10.10.2017
18:00:20
Нет. Добавление нового енума потребует менять код в двух разных местах
да, но это очень сильно зависит от того, что за строка на которую ты мапишь значения энума

Vic
10.10.2017
18:00:48
Нарушение первой буквы SOLID как по мне. А ты посмотри на строки, это почти valueOf

Igor
10.10.2017
18:01:19
Нарушение первой буквы SOLID как по мне. А ты посмотри на строки, это почти valueOf
Ну так надо ее и юзать если там 1k1. Иначе ты тащишь в enum не его ответвенность.

Boris
10.10.2017
18:01:34
например, если есть сущность в сервисном слое со статусом, а в статусе у тебя лежат строки цсс-классов которыми, ты будешь рисовать статус, то бэд

Vic
10.10.2017
18:02:48
Ну, контекста мы не знаем. Но сейчас этот код smells как говорится, имхо

Я бы использовал в гуях имена енумов с точностью до кейса и написал бы в енуме метод, который делает а-ля valueOf с умным кастом из любого кейса (кемел, снейк андерскоре/дэш, етс.)

Чтоб и css и прочие нормально могли на них ссылаться в привычном кейсе

Как snakeyaml парсит проперти

Eugene
10.10.2017
18:10:00
я кажется начинаю склоняться в сторону того что косячие Gson, и не заполняет этот филд, когда ему говоришь fromJson

Vic
10.10.2017
18:11:06
Использую гсон с дата классами, не замечал проблем

Google
Eugene
10.10.2017
18:13:56
ну скажем так, филд action не приходит в json, я вот и пытаюсь его вычислить, после того как он будет заполнено поле status, возможно что я неправильно в данном случае использую данную возможность языка

Vic
10.10.2017
18:17:31
Не, я наврал. Я гсоном дата класс не конструирую. А как гсон дата класс с валами собирает? Разве там не должны быть вары и ноаргс конструктор?

Eugene
10.10.2017
18:19:59
ну как-то у него частично это получается сделать, кроме вот выполнения вот этой конструкции

в общем заменил на вот такое val action: Action get() = status.action() Коряво конечно, но сейчас некогда с этим разбираться :)

Vic
10.10.2017
18:24:19
Покажи как объект собираешб

Eugene
10.10.2017
18:25:18
val plaeyr = gson.fromJson<Player?text, Player::class.java)

Igor
10.10.2017
18:25:57
ну как-то у него частично это получается сделать, кроме вот выполнения вот этой конструкции
Наверное он ставит это поле через рефлекшен, а в json не находит вот и зануляет его.

Eugene
10.10.2017
18:26:12
ну я вот тоже к этому склоняюсь

Если интересно, то могу весь текущий код на github закинуть

Vic
10.10.2017
18:26:35
Сдается мне он в обход конструктора создает инстанс, затем через реылекшен сеттит бэкинг филды, а экшен твой криво инитится

Точнее никак

Igor
10.10.2017
18:31:06
Если интересно, то могу весь текущий код на github закинуть
Да вроде и так все понятно. Можешь добавить атрибут что бы оно игнорилось в json.

Eugene
10.10.2017
18:32:59
ну вот да, через скрытое поле наверное и сделаю

Парни, а подскажите кто-нибудь как можно такое проделать - проверить, что для всех элементов листа соблюдается условие, что разница между текущим и следующим элементом равна 1?

то что через for такое можно сделать, это не проблема, интересует, можно ли как это с помощью библиотеки языка сделать

Vic
10.10.2017
21:20:21
Зипаешь так, потом проверяешь

Это если тебе хочется в фп-стиле

Eugene
10.10.2017
21:23:28
ага, спасибо большое

Google
Павел
10.10.2017
21:26:30
А можно сделать функцию pairwise :)

Vic
10.10.2017
21:28:48
В 1.2 будет zipWithNext

Ex-pairwise

val c = listOf(1,2,3,4,5) val ok = c.zip(c.drop(1)).all { (a, b) -> a+1 == b } println(ok)

Egor
10.10.2017
22:56:14
Даггер

Alon
11.10.2017
06:49:41
Всем доброго дня. столкнулся с проблемкой realm + kotlin тут вопросы можно позадвать?

Sergey
11.10.2017
06:57:16
https://github.com/Kotlin/KEEP/pull/87 вот интересно, какая будет судьба у этого предложения

Alon
11.10.2017
07:01:00
Имеется проблемка: W/System.err: java.lang.IllegalArgumentException: Book is not part of the schema for this Realm W/System.err: at io.realm.internal.modules.CompositeMediator.getMediator(CompositeMediator.java:169) W/System.err: at io.realm.internal.modules.CompositeMediator.getTableName(CompositeMediator.java:87)

класс: open class Book( @PrimaryKey var id: Int=0, var country: String? = null, var subject_id: Int? = null, var title: String? = null, var header: String? = null, var breadcrumb: String? = null, var year: String? = null, //var classes: RealmList<Class> = RealmList(), var classes: List<Int>, //var authors: RealmList<Class> = RealmList(), var authors: List<String>, var description: String? = null, var publisher: String? = null, var category: String? = null, var parts: List<String>, var cover: Cover? = null, var tasks_view: String? = null, var url: String? = null, var updated_at: Int? = null, var price: Price? = null ) : RealmObject()

Alon
11.10.2017
07:02:24
А в каком?

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