@kotlin_lang

Страница 966 из 982
Kirill
22.10.2018
07:12:19
нет

Alexandr
22.10.2018
07:13:39
нет
метод fillData покажите как объявлен

Kirill
22.10.2018
07:14:02
@CallSuper open fun fillData(data: Data, position: Int, isEnabled: Boolean) {

override fun fillData(data: ProfPeriod, position: Int, isEnabled: Boolean) {

Google
Andrey
22.10.2018
07:14:47
Kirill
22.10.2018
07:15:33
override fun fillData(data: ProfPeriod, position: Int, isEnabled: Boolean) { super.fillData(data, position, isEnabled) startAt = data.start?.toMonthYear() ends_at = data.end?.toMonthYear() fillPeriods() itemView.btn_del.isVisible = isDeletable(position) itemView.divider_del.isVisible = isDeletable(position) }

Alexandr
22.10.2018
07:15:36
fillData (Lcom/yamagoo/android/yamagoo/domain/dao/user/ProfPeriod;IZ) - так компилятор ругается на метод с одним параметром типа ProfPeriod

Kirill
22.10.2018
07:16:41
как понять, что конкретно ему не нравится

Alexandr
22.10.2018
07:18:01
спросить в слаке, там сидит народ, который пишет компилер. либо завести таск на ютреке, похоже на баг

туда же прикрепить код, который приводит к ошибке

Kirill
22.10.2018
07:18:28
оки, спасибо

Жабра
22.10.2018
08:00:54
А рекурсию в suspend-функции и раньше нельзя было делать? Или это сейчас сломалось?

Alexandr
22.10.2018
08:02:29
А как ругается?

Жабра
22.10.2018
08:03:57
А как ругается?
А, нашёл проблему. Ругается если вызывать coroutineScope { ... } Пишет

Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly

Alexey
22.10.2018
08:04:41
Жабра
22.10.2018
08:10:42
Ну дак это подефолту для рекурсии
Но возникает только при наличии coroutineScope

Google
Alexey
22.10.2018
08:24:01
Но возникает только при наличии coroutineScope
suspend fun foo(i: Int) = { if(i == 0) 0 else foo(i) }

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

Жабра
22.10.2018
08:24:40
suspend fun foo(i: Int) = { if(i == 0) 0 else foo(i) }
Да, но только от suspend в данном случае нет смысла, если не запускать корутины, а корутины надо куда-то подписывать

Жабра
22.10.2018
09:20:25
А как сейчас прицепить какой-нибудь обзёрвер, который вызовет определённый код, когда Job будет отменён? Вижу invokeOnCompletion, но это не то.

Sergey
22.10.2018
09:39:38
чуваки, такой вопрос: на сколько в среднем у людей с бекендов все ок с пониманием того что такое неблокирующие операции?

Yuri
22.10.2018
09:44:47
в среднем по любой теме обычно все плохо

Алексей
22.10.2018
09:45:40
Эт как...

Денис
22.10.2018
10:07:47
чуваки, такой вопрос: на сколько в среднем у людей с бекендов все ок с пониманием того что такое неблокирующие операции?
Что такое "в среднем"? Типа, очевидно, что среднее зависит от выборки, а она как бы очень сильно отличается обычно.

Денис
22.10.2018
10:09:20
в среднем для людей, которые посещают конфы
Если конфы для уже состоявшихся разработчиков - большинство как минимум поймёт, о чём речь.

Sergey
22.10.2018
10:37:18
андроидщики точно знают что будет если заблочить главный поток, а вот что такое неблокирующий IO я не уверен)

Andrey
22.10.2018
10:38:10
Quantum Harmonizer
22.10.2018
10:41:54
Pavel
22.10.2018
10:58:58
андроидщики точно знают что будет если заблочить главный поток, а вот что такое неблокирующий IO я не уверен)
Не блокирующий io позволяет на уровне приложения не блокировать текущий поток и не создавать новый. На Винде и .net это идёт из коробки и делается за счёт специальных io портов, которые работают на уровне ядра ос. Грубо говоря это что-то типо очередей, которые принимают запрос на какую-то io операцию и континюэйшн в том или ином виде (какие-нибудь низкоуровневые хэндлеры). С jvm наверняка все сложнее, зависит от jvm, os и прочего.

Sergey
22.10.2018
10:59:34
так-то не особо понятно, как у нас его использовать и нужно ли
вроде в последних версиях там тоже NIO подвезли, зачем-то)

Quantum Harmonizer
22.10.2018
10:59:55
вроде в последних версиях там тоже NIO подвезли, зачем-то)
Оно хорошо, но нам нет профита поддерживать два варианта.

Google
Sergey
22.10.2018
11:26:51
в среднем про такое никто не знает, если говорить про жаву
думаешь особо не понимают зачем нужны пляски вокруг netty?

Mikhail
22.10.2018
11:27:30
все операции блокирующие, так проще

и на большинстве проектов профита от перехода на неблокирующие либы не будет

Quantum Harmonizer
22.10.2018
11:32:35
все операции блокирующие, так проще
собственно, именно так появляются success stories вроде «перевели сервер на ноду, стало быстрее»

Mikhail
22.10.2018
11:33:53
ну если стало быстрее, то можно было просто потоков добавить в жавовом приложении

Alexandr
22.10.2018
11:34:56
ну если стало быстрее, то можно было просто потоков добавить в жавовом приложении
ну количество процов то не обгонишь, дело как раз в ожидающих операциях

в том числе на базу

например если запрос отрабатывает секунд по 10-15)

Mikhail
22.10.2018
11:36:37
ну количество процов то не обгонишь, дело как раз в ожидающих операциях
ну если все потоки ждут на блокирующий операциях, то можно добавить еще, будет больше потоков ждать, общая производительность увеличится, если конечно ресурс, котрого ждут, будет справляться

если запрос в базу обрабатывается 10 секунд, то переход на неблокирующую либу это никак не изменит

Sergey
22.10.2018
11:38:06
зависит от приложения канеш, но в целом если без боли можно неблокирующие юзать - то почему бы и нет

Alexandr
22.10.2018
11:38:45
я переводил на completable feature спринговое приложение, немного профита было

*это был 2015-2016(не помню)

Sergey
22.10.2018
11:40:34
Mikhail
22.10.2018
11:41:00
почему же? если поток вернется в пул?
вернулся, забрал новый запрос на обработку, снова пошел в базу, все упирается в базу, профит будет если есть другие типы запросов, желательно вообще без базы

Mikhail
22.10.2018
11:42:16
если 100 потоков будут сидеть ждать ресурса и у тебя цепочка из таких вот приложений, ждущих друг друга.. то это трата ресурсов
да, трата, но 100 потоков это вообще ни о чем, чуток памяти только сожрали, гораздо затратнее напрягать программиста, чтобы написать для этого неблокирующий код

Google
Sergey
22.10.2018
11:43:08
а если корутинки... то тут что блокирующий, что неблокирующий код. все равно одинаковый будет

но так то ты прав да

Mikhail
22.10.2018
11:45:48
неблокирующий код тоже бывает разный, самое тупое - отдельный пулл потоков, задача выполняется типа асинхронно, в результате имеем оверхехед на переключение контекста и производительность меньше, чем у блокирующего варианта

Sergey
22.10.2018
11:47:30
с ktor щас так и происходит, из netty worker -> default dispatcher прыгает постоянно

Mikhail
22.10.2018
11:48:30
я заморочился и сделал неблокирующую работу с базой из того же потока, который и хттп запрос выполняет



Sergey
22.10.2018
11:52:21
вот что мне нравится с последними оптимизациями, у корутин диспатчер для CPU и IO юзают один пул. и если нужно выполнить IO операцию, то он не будет переключаться на другой поток

Mikhail
22.10.2018
11:56:49
интересно, как это работает.. io обычно ждать нужно

Admin
ERROR: S client not available

Mikhail
22.10.2018
11:57:21
даже если оно неблокирующее, все равно поток должен ждать эвентов на чтение/запись

Sergey
22.10.2018
12:04:34
shared pool?

он поток забирает себе как IO и разрешает для CPU зашедулить новый поток, если не хватает

https://github.com/Kotlin/kotlinx.coroutines/issues/261 тут хорошо описано

Nameless
22.10.2018
12:31:59
чотенько

Quantum Harmonizer
22.10.2018
12:33:27
ОФИГЕВАТ

Видел, что ты форкнул драйвер. Удивляюсь, что прошло совсем немного времени с того момента.

Nameless
22.10.2018
12:34:14
ОФИГЕВАТ
в vertx возможно что из того же потока все и работает, просто абстракций больше

(инфа не сотка)

Mikhail
22.10.2018
12:36:46
Марат
22.10.2018
12:41:47
Кто может подсказать ide под постгрес на мак?

Google
Kirill
22.10.2018
12:42:07
datagrip

Марат
22.10.2018
12:42:08
Чет инет покопал, ничего путного

Ей щас пользуюсь

Но нашел такую штуку что она отображает не все таблицы и вьюхи в схеме

Quantum Harmonizer
22.10.2018
12:43:38
DBeaver

Паша
22.10.2018
12:46:25
Но нашел такую штуку что она отображает не все таблицы и вьюхи в схеме
это странновато, вообще-то, попробуй лучше зарепортить в JB. И ты точно говоришь про public.* ?

Dmitry
22.10.2018
12:49:21
Но нашел такую штуку что она отображает не все таблицы и вьюхи в схеме
ну там в настройках подключения можно указать какие схемы показывать

Марат
22.10.2018
12:49:45
Это я делаю

И из схемы которую выбрал подтягиваются например 10 таблиц, а по факту их 15

Ну ладно, тут не этому тема посвящена, спасибо за помощь )

Denis
22.10.2018
13:48:44
Ну ладно, тут не этому тема посвящена, спасибо за помощь )
Добрый день. у меня есть Абстрактный презентер`и `Презентер А. Презентер А наследуется от . В конструктор абстрактного презентера нужно передать класс, который инжектится с помощью даггера в теле презентера А . Подскажите, как это реализовать? сделать @inject constructor```в ```презентере А ? или можно как-то по-другому сделать?

Denis
22.10.2018
13:52:38
класс нужно инжектить в конструктор презентера А
class PresenterA @Inject constructor(myClass: MyClass): AbstractPresenter(myClass) таким образом, правильно?

Mikhail
22.10.2018
13:53:05
угу

Denis
22.10.2018
13:54:29
угу
а если в конструкторе презентра А есть еще другие переменные, которые не нужно инжектить

всё норм будет?)

т.е. они просто передаются туда без инжектинга

Mikhail
22.10.2018
13:55:15
где они передаются?

будет не норм

вот вы где передаете, вот туда и инжектите

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