@kotlin_lang

Страница 366 из 982
Дмитрий
10.10.2017
08:43:35
Привет, а вы используете https://antonioleiva.com/kotlin-android-extensions/

Виталий
10.10.2017
08:45:00
А он нормально работает? Багов нет?

Quantum Harmonizer
10.10.2017
08:45:11
Google
Виталий
10.10.2017
08:46:06
А плюсы есть кроме экономии одной строки findViewById?

Quantum Harmonizer
10.10.2017
08:46:29
А плюсы есть кроме экономии одной строки findViewById?
сразу правильный тип, не нужно кастить

Виталий
10.10.2017
08:47:21
ну c compileSdkVersion 26 тоже вроде такой проблемы нет

Quantum Harmonizer
10.10.2017
08:47:58
ну c compileSdkVersion 26 тоже вроде такой проблемы нет
есть, тебе нужно явно указать тип, причём указать его правильно

JRoot3D
10.10.2017
09:19:17
а так можно? о_О

Konstantine
10.10.2017
09:21:14
А он нормально работает? Багов нет?
Единственный минус, не соответствие имен код стайлам. Id обычно с подчеркиванием, а переменные камелкейсом. ?

Виталий
10.10.2017
09:22:29
ну можно id кэмел кейсом писать

Konstantine
10.10.2017
09:23:30
Тогда не соответствие код стайлам в хмл)

DarkMentat
10.10.2017
09:28:55
как раз соответствие)

кодастайла для хмл толком и нету, у гугла половина так, половина так

JRoot3D
10.10.2017
09:30:49
Тогда не соответствие код стайлам в хмл)
в хмл, если у контрола имя с двух слов то камел кейсом айди формирует...

Google
JRoot3D
10.10.2017
09:32:10
С каких пор?
ну добавь radioButton и глянь на его айди

DarkMentat
10.10.2017
09:32:13
Зато у людей почти всегда так, гугл не весь мир)
мы всегда камелКейсом идшники пишем)

JRoot3D
10.10.2017
09:32:23
я с андроидом недавно...

Quantum Harmonizer
10.10.2017
09:43:09
Единственный минус, не соответствие имен код стайлам. Id обычно с подчеркиванием, а переменные камелкейсом. ?
Очень странно утверждать, что твои собственные привычки именования — это минус какой-либо технологии. А то, что в R.id константа в snake_case — не смущает?

Igor
10.10.2017
13:20:39
Народ на каком пуле вы гоняете IO операции в корутинах? Нужно обернуть простое-синхронное API без колбеков. На CommonPool вроде же нельзя, тк он для heavy-cpu операций.

Михаил
10.10.2017
13:22:29
на комон :D

Igor
10.10.2017
13:24:10
на комон :D
Сложный мемас. Как вариант попробовал это (тут android, но не суть) AsyncTask.THREAD_POOL_EXECUTOR.asCoroutineDispatcher() Типа я должен завести свой CoroutineContext для IO?

Vic
10.10.2017
13:37:49
на комон :D
+1, правда я не на ведроиде

Igor
10.10.2017
13:55:18
Что никто не корутины не юзат для IO или прям на CP гоняют?

Igor
10.10.2017
13:56:41
val ioContext = newSingleThreadContext() не?
Не уверен, запросов же может быть много и не хотелось бы что бы один зависший, лочил все остальные. Ну или плодить по newSingleThread на каждый запрос тоже не хочется.

? animufag ?
10.10.2017
13:57:50
а я подумал синхронное апи подразумевает, что непредусмотрено для многопоточной среды

Igor
10.10.2017
13:58:46
Нет, для простоты можно представить что надо обернуть что-то типа URL(“https://…”).readText()

Руслан
10.10.2017
14:02:21
тут к сожалению никак лучше не сделать

Руслан
10.10.2017
14:12:27
И потом какие-нибудь параллельные стримы будут тормозить

Quantum Harmonizer
10.10.2017
14:12:35
Используйте Common и не бойтесь
ну, подумаешь, зависнет всё)

Google
Quantum Harmonizer
10.10.2017
14:12:50
вообще, глобально доступные пулы — странноватая идея

balolam
10.10.2017
14:12:55
Руслан
10.10.2017
14:13:08
вообще, глобально доступные пулы — странноватая идея
Отличная идея, если все асинхронно сделать

А почему они должны тормозить?
Потому что пулы не резиновые, io медленное

balolam
10.10.2017
14:13:31
вообще, глобально доступные пулы — странноватая идея
Это что бы ты мог примерчик заранить сходу

Quantum Harmonizer
10.10.2017
14:13:53
Это что бы ты мог примерчик заранить сходу
newCachedThreadPool() — и вперёд, запускать примеры

balolam
10.10.2017
14:13:55
А ничего что сетевая операция блокирующая?

Quantum Harmonizer
10.10.2017
14:14:16
Медленнее? В смысле?
Медленное. Оно занимает кучу времени и при этом не использует проц.

Руслан
10.10.2017
14:14:38
А что, поток как-то при этом используется?

Igor
10.10.2017
14:14:49
Это что бы ты мог примерчик заранить сходу
Можно посмотреть исходники: он там юзает либо общий ForkJoinPool, либо пул лимитированные на “кол-во ядер”-1

balolam
10.10.2017
14:15:25
Не вижу проблем. Покажите мне мобильное приложение где будут проблемы?

У вас там фоновая работа в каждую микросекунду времени?

Руслан
10.10.2017
14:15:53
Не вижу проблем. Покажите мне мобильное приложение где будут проблемы?
Отличное предположение что by default говорят про мобилки :)

https://ruslan.ibragimov.by/2014/11/26/pervye-grabli-java-8/#executing-streams-in-parallel

balolam
10.10.2017
14:16:08
? animufag ?
10.10.2017
14:16:24
Не вижу проблем. Покажите мне мобильное приложение где будут проблемы?
видимо подразумевается что у всех мобильные приложения с короткоживущими вычислительными задачами в Common

Igor
10.10.2017
14:16:26
Не вижу проблем. Покажите мне мобильное приложение где будут проблемы?
Ну смотри у тебя 2 ядерный телефон на android < 7.0 Все - любые IO (ни не только) операции будут идти последовательно и если хоть одна зависнет, у тебя ВСЕ (тк пул общий) встанет.

Google
balolam
10.10.2017
14:16:28
Я отвечаю с контекста вопроса, а не пытаюсь разводить Балаган

Руслан
10.10.2017
14:16:38
Я отвечаю с контекста вопроса, а не пытаюсь разводить Балаган
> Как вариант попробовал это (тут android, но не суть)

balolam
10.10.2017
14:17:18
> Как вариант попробовал это (тут android, но не суть)
А я не спорю с вами, я говорю, что ничего плохого и с Common не случиться

Руслан
10.10.2017
14:17:35
Тем более на мобилках стоит забивать коммон пулы, ведь там самый быстрый интернет как известно

Quantum Harmonizer
10.10.2017
14:18:21
Не станет, а подождёт пока timeout не истечёт
класс, 10 секунд простоять в очереди

balolam
10.10.2017
14:18:29
Эх, тогда как раньше народ с асинк тасками жил, там вообще по дефолту в один поток?

? animufag ?
10.10.2017
14:18:46
Тем более на мобилках стоит забивать коммон пулы, ведь там самый быстрый интернет как известно
я не понимаю этой иронии. коммон пул это что-то особенное? не просто н тредов для твоего приложения?

Quantum Harmonizer
10.10.2017
14:19:19
balolam
10.10.2017
14:19:42
я не понимаю этой иронии. коммон пул это что-то особенное? не просто н тредов для твоего приложения?
Вот именно, максимум там приоритеты потоков установлены, которые по большей части игнорируются ОС

Руслан
10.10.2017
14:19:56
я не понимаю этой иронии. коммон пул это что-то особенное? не просто н тредов для твоего приложения?
Ну прикинь, у тебя в коммон пуле вот такие "быстрые" запросы по мобильному интрнету, и там же асинхронные таски и стримы параллельные. Ничего хорошего тут даже ожидать не стоит

Quantum Harmonizer
10.10.2017
14:20:30
Igor
10.10.2017
14:21:02
Эх, тогда как раньше народ с асинк тасками жил, там вообще по дефолту в один поток?
Ой там отдельная песня, в зависимости от версии логика поведения была очень разная. Сейчас там есть THREAD_POOL_EXECUTOR и SERIAL_EXECUTOR и ты можешь хоть явно выбирать. А еще есть ModernAsyncTask на которых работают AsyncTaskLoader (из support), вот они изначально НЕ лимитированы на один поток.

newCachedThreadPool() — и вперёд, запускать примеры
А вот он скорее всего не заработает нормально с delay и yield тк для них нужен ScheduledThreadPool (те норм, но не универсальное решение)

Boris
10.10.2017
14:24:37
У ио своя специфика, для него лучше иметь неблокирующий ивентлуп

Boris
10.10.2017
14:25:15
А хендлить уже где хочешь

Хоть в кп

Igor
10.10.2017
14:25:55
Ну да, реактор
Можно подробнее?

Руслан
10.10.2017
14:28:21
Можно подробнее?
Вот так пойдет? :) https://en.wikipedia.org/wiki/Reactor_pattern

Google
Руслан
10.10.2017
14:30:48
Можно подробнее?
Если ты думаешь что сейчас решится твоя проблема с синхронным апи - то нет, не решится) Я думаю ты и так знаешь что такое реактор, @fogone просто сказал как должно быть, а не как жить с тем что есть

Quantum Harmonizer
10.10.2017
14:31:35
У ио своя специфика, для него лучше иметь неблокирующий ивентлуп
Что понимать под неблокирующим в данном контексте?

Руслан
10.10.2017
14:36:17
Что понимать под неблокирующим в данном контексте?
Ну у тебя есть io тред(ы), в нем(их) например ты получаешь запросы/пишешь ответы и можешь делать только маленькие неблокирующие задачи. Если нужны блокирующие задачи (jdbc например) то эти задачи выносятся на отдельный пул воркеров (который достаточно большой, чтобы держать нагрузку, около 10 тредов на ядро, эмпирически).

Boris
10.10.2017
14:38:27
Ну да, лучше конечно готовую реализацию брать

Руслан
10.10.2017
14:39:47
Есть еще крутая штука типо cpu pinning(или еще называют афинити), это когда ты io тред прямо к конкретному ядру привязываешь, и получаешь бенифиты от того что у тебя кеши лучше работают, контекст свич на этом потоке никогда не происходит и т.д.

Igor
10.10.2017
14:40:12
Но имеется в виду неблокирующее IO, NIO, да?
Вот, уже давно ищу подобную либу на коррутинах. Находил только старые прототипы в гитхабе Бреслава

Руслан
10.10.2017
14:40:14
Это из той же серии что выключать гипетрединг, чтобы получить предсказуемую летенси

Руслан
10.10.2017
14:40:46
вспомнилось XNIO
ну вот я тоже хотел пальцем туда показать, xnio в undertow юзается

Boris
10.10.2017
14:40:59
Корутины вообще перпендикулярны этому всему

Igor
10.10.2017
14:42:20
Корутины вообще перпендикулярны этому всему
Но почему-то никто до сих пор не прикрутил ?‍♀️

Руслан
10.10.2017
14:42:27
"Способ делать неявные колбеки", как тебе формулировка @fogone ?

Vic
10.10.2017
14:42:35
ну, подумаешь, зависнет всё)
Оборачивайте все асинк IO операции в withTimeout(...) и не зависнет

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