
Igor
10.10.2017
14:45:12

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

Igor
10.10.2017
14:46:42

Google

Vic
10.10.2017
14:46:43

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

Ruslan
10.10.2017
14:52:28
и обратно

Boris
10.10.2017
14:53:55
Может в какой-то новой версии

Quantum Harmonizer
10.10.2017
14:54:58

Boris
10.10.2017
14:56:31

Quantum Harmonizer
10.10.2017
14:59:59

Google

Boris
10.10.2017
15:14:37

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 вот какой-то для андроида, наверное оптимизирован по количеству методов
Корутины прикрутить и ок
Дать пул из пары потоков максимум, все запросы по таймауту отваливать и будет счастье

Alexander
10.10.2017
16:02:02

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

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) {....}

Quantum Harmonizer
10.10.2017
17:40:06

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
"По фото не лечим" )
Кстати, зачем экстеншен здесь? Я бы метод в енуме сделал.
По сути маппинг строк на енумы в обе стороны, логично инкапсулировать в енум же

Boris
10.10.2017
17:59:05

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

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

Eugene
10.10.2017
18:26:12
ну я вот тоже к этому склоняюсь
Если интересно, то могу весь текущий код на github закинуть

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

Igor
10.10.2017
18:31:06

Vic
10.10.2017
18:32:07

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 вот интересно, какая будет судьба у этого предложения

Quantum Harmonizer
11.10.2017
07:00:09


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()


Quantum Harmonizer
11.10.2017
07:01:34
класс:
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
А в каком?

Quantum Harmonizer
11.10.2017
07:03:23
А в каком?
pastebin/codeshare/gist, а совсем маленькие куски — оборачивать в три бэктика (`):
println("вот так")
класс:
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()
стоит поставить @RealmClass на класс