@kotlin_lang

Страница 758 из 982
Bogdan
15.07.2018
12:01:07
Так, тему замяли, но бампну-ка я этот вопрос. Тоже интересно, кто что практикует.
я для себя решил второй, так как я привык к моделям, да и первый не сильно нраваится, но вопрос актуален

Alexander
15.07.2018
12:01:51
Так, тему замяли, но бампну-ка я этот вопрос. Тоже интересно, кто что практикует.
Я работаю с JavaFX, но без баз данных. Во-первых, я рекомендую использовать не чистый JavaFX, а модели из TornadoFX. Они по-моему снимают часть вопросов.

Google
Bogdan
15.07.2018
12:09:23
Я работаю с JavaFX, но без баз данных. Во-первых, я рекомендую использовать не чистый JavaFX, а модели из TornadoFX. Они по-моему снимают часть вопросов.
я его и юзаю и это не снимает вопроса, та я могу обойтись VievModel, но они снованы на обычных моделях, почему их нельзя скрестить, потомучто модели из Exposed пишут сразу в бд, вот и вопрос - нормально ли создавать 2-е одинаковые модели, одна для бд другая для бд

Alexander
15.07.2018
12:11:54
У меня нет личного опыта, но если моделей много, можно напороться. Все изменения надо будет делать в двух местах. Лучше сделать DSL генератор, который будет сам генерить и View и DB-модель и обойтись без орма.

Alexander
15.07.2018
12:24:46
По-моему, это не будет работать. Но я не уверен

Bogdan
15.07.2018
12:26:42
По-моему, это не будет работать. Но я не уверен
да выглядит странно, для текущего случая тем более

Alexander
15.07.2018
12:35:39
Явовские рефлекты поля котлиновского интерфейса видеть не будут

Да и вообще какая-то химера получается

Можно использовать всеми не любимые класс делегаты

Igor
15.07.2018
13:29:47
А в anko-sqlite ктo-нибудь делал composite primary key?

Google
Konstantine
16.07.2018
08:09:12
Andrew
16.07.2018
08:10:49
Каналы которые ниошные?
https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#channels

Eugeny
16.07.2018
08:12:32
Спасибо

Прочитал. Ну, нормально. Для простых флюксов подойдёт. Один момент - корутины в каналах же нормальные hot корутины? То есть начинают работать с момента send?

Ivan
16.07.2018
08:43:00
Зачем делать флаг, если он уже на треде есть по умолчанию? Что касается автоматического цикла, так он ресурсы будет жрать, зачем надо?
Потому что работа с интерраптед флагом требует офигенной внимательности и удержании в памяти разработчика всех методов которые сбрасывают флаг и которые этого не делают, а в многопоточных программах и так хватает мест про которые нужно подумать,по этому, имхо, конечно, но просто добавить volatile флаг много проще и удобнее.

Зачем делать флаг, если он уже на треде есть по умолчанию? Что касается автоматического цикла, так он ресурсы будет жрать, зачем надо?
А про автоматическиий цикл я имел в виду что-то вроде foreverLoop(::doSomething) и чтобы его можно было прервать, при этом прервётся так же на очердной итерации

Badya
16.07.2018
08:47:15
Чем рх зло то?)
Имхо если не понятно чем рх зло, то для тебя он и не зло)

Konstantine
16.07.2018
08:48:38
Имхо если не понятно чем рх зло, то для тебя он и не зло)
Для меня отличная технология. Просто сейчас модно стало его поносить, но никто нормально не может сказать, что с ним не так.

Anton
16.07.2018
08:49:03
да ты меньше слушай эти вбросы и не обращай внимания)

Quantum Harmonizer
16.07.2018
08:49:31
Для меня отличная технология. Просто сейчас модно стало его поносить, но никто нормально не может сказать, что с ним не так.
Я могу нормально сказать и поносил его до того, как это стало мейнстримом. Точнее, не его самого, а повальное его использование для асинхронности в Android.

Rx, может, и крутая штука, но для решения очень узкого круга задач. И он вовсе не про ту асинхронность, которая нам нужна в андроиде.

Yehor
16.07.2018
08:50:54
class Dependency { var someString: String? = null } class Foo(val dependency: Dependency) { val bar = dependency.someString } val dependency = Dependency() dependency.someString = "string 1" println(dependency.someString) val foo = Foo(dependency) println(foo.bar) dependency.someString = "string 2" println(dependency.someString) println(foo.bar) // expected "string 2 кто может подсказать почему переменная получает значение по геттеру только во время инициализации класса, а не при каждом запросе к переменной? даже есть установить var а не val

1337
16.07.2018
08:50:55
хз реактор ахуенный

Badya
16.07.2018
08:51:06
Для меня отличная технология. Просто сейчас модно стало его поносить, но никто нормально не может сказать, что с ним не так.
Я лично до сих пор предпочитаю императив вместо декларатива (модно поносить и императив)

Eugeny
16.07.2018
08:52:29
Cold в разработке.
То есть пример с инфинит "стримом" очень быстро вынесет память по oom?

Google
Andrew
16.07.2018
08:53:04
То есть пример с инфинит "стримом" очень быстро вынесет память по oom?
Нет, корутина саспендится, если из канала никто не читает.

Quantum Harmonizer
16.07.2018
08:53:39
Это надо бомбить на людей. Технология тут причем, особенно когда она хорошая.
Положим, отличная технология. Но в андроиде она нахрен не нужна.

Konstantine
16.07.2018
08:53:57
Eugeny
16.07.2018
08:54:39
Нет, корутина саспендится, если из канала никто не читает.
Сразу? То есть если отправить просто send 10 раз, то 10 раз корутина не отработает?

Konstantin
16.07.2018
08:55:04
Отлично ложиться на многие места:)
Отлично ложится процессинг стримов. А вот асинхронщину проще гнать чем-то еще

Igor
16.07.2018
08:55:24
Сразу? То есть если отправить просто send 10 раз, то 10 раз корутина не отработает?
У тебя она на первом же заснёт, если никто не читает с другой стороны (или если ты не поставили явно размер буфера)

Andrew
16.07.2018
08:55:32
Сразу? То есть если отправить просто send 10 раз, то 10 раз корутина не отработает?
Зависит от конкретного канала. Если он с буфером на 10+ элементов, то сразу, если нет -- нет.

Eugeny
16.07.2018
08:56:22
А, понял

Для асинхронщины просто корутины, которые стартуют сразу. Если параллельная обработка, то send нужное количество раз и подписаться на receive и при первом receive стартанут все 10 корутин в канале, так?

Andrew
16.07.2018
08:59:33
Для асинхронщины просто корутины, которые стартуют сразу. Если параллельная обработка, то send нужное количество раз и подписаться на receive и при первом receive стартанут все 10 корутин в канале, так?
Каналы априори последовательно принимают и последовательно отдают элементы. Если ты запустишь 10 корутин, каждая из которых сделает receive -- то будет тебе 10 асинхронных операций (сколько конкретно параллельных -- зависит от контекста корутин).

Igor
16.07.2018
08:59:33
Отлично ложиться на многие места:)
Технология сложная и никак не форсит от размазывание ее везде по коду (и даже в бизнес логику ее засовывают). А на самом деле очень мало кейсов, где она реально полезна.

Andrew
16.07.2018
09:03:02
А, то есть вообще никакого параллелизма из коробки. Ну как rxjava с флетмапом обсерваблов костылем
Корутины изначально об асинхронности, за параллелизм отвечает контекст, на котором стартуют корутины. Контекст (точнее, диспетчер) можно создать, например, из экзекьютора с нужными параметрами по потокам, а можно обеспечить контекст, привязанный к конкретному UI-потоку для Android, JavaFX, etc. Можно сделать себе несколько разных диспетчеров -- отдельный под I/O, отдельный под вычисления тяжёлые, и будет тебе аналог шедулеров из рх.

Andrew
16.07.2018
09:09:40
Хотя NIO ж вроде есть в ведре, если я не ошибаюсь, пусть и без NIO2.

Yehor
16.07.2018
09:12:11
присваивание отрабатывает один раз, во время инициализации
спутал присваивание с геттером, позор на мою голову, спасибо.

Google
Alexander
16.07.2018
09:49:47
А, то есть вообще никакого параллелизма из коробки. Ну как rxjava с флетмапом обсерваблов костылем
Есть, если просто делать запуск launch иди async несколько раз, то они по умолчанию выполняются параллельно (как уже было сказано, в зависимости от диспатчера). Просто каналы не про это.

спутал присваивание с геттером, позор на мою голову, спасибо.
Распространенная ошибка. Я так периодически накалываюсь. Там немного путает, что функция работае одинаково и с присвоением, и с телом. а проперти нет.

Eugeny
16.07.2018
09:51:41
Ну, если прямо надо, то просто луп корутин и foreach await().

Alexander
16.07.2018
09:52:48
Вот кстати IO диспатчер явный признак хреновости платформы (Андроид), тк нормальное io должно быть из коробки асинхронным (nio в джаве)
Что ж вы так все андроид-то не любите. Старый он. Когда писали, ничего не было толком. А обратная совместимость - страшный зверь, сожравший яву.

Ну, если прямо надо, то просто луп корутин и foreach await().
Правильнее делать цикл с запуском корутин, а результаты скидывать в канал и дальше делать все преобразования в виде map-reduce на каналах. Но можно и await в цикле.

Quantum Harmonizer
16.07.2018
09:54:13
Alexander
16.07.2018
09:55:29
Много там всего слишком. Собственно та же проблема, что и в яве. Надо заново все переписать, отказаться от R и еще много чего, но во-первых дорого, во-вторых, сколько времени пройдет, пока кто-то начнет на этом писать?

Admin
ERROR: S client not available

Alexander
16.07.2018
09:56:04
Хотя есть довольно положительный опыт перехода Эплов на свифт. Там тоже боялись, что не пойдет.

Igor
16.07.2018
09:59:49
Andrew
16.07.2018
10:00:50
В смысле что вместе с приложением носить половину рантайма ?
Как будто андроид с саппорт-либами к этому не идёт.

Igor
16.07.2018
10:01:18
А мне нравится, был же robovm со своей JVM в комплекте на ios

Alexander
16.07.2018
10:04:40
В смысле что вместе с приложением носить половину рантайма ?
Шаред либы - это страх и мрак, но видимо рано или поздно их надо будет вводить. Вообще, если учесть, что gradle сильно пустил корни в андроид разработку, почему не пойти дальше и использовать его для менаджмента шаред либ андроиде.

dimiii
16.07.2018
10:10:09
Положим, отличная технология. Но в андроиде она нахрен не нужна.
>не нужна нахрен, нахрен не нужна, потому что ....

Quantum Harmonizer
16.07.2018
10:11:26
>не нужна нахрен, нахрен не нужна, потому что ....
Потому что для простой асинхронщины всё есть во фреймворке. Если интересен развёрнутый длинноответ, напомни вечером, после работы перешлю.

Bogdan
16.07.2018
10:11:57
>не нужна нахрен, нахрен не нужна, потому что ....
Как я понял потому что реакак это не асинхроное программирование, а его именно используют так

Andrew
16.07.2018
10:13:07
Потому что для простой асинхронщины всё есть во фреймворке. Если интересен развёрнутый длинноответ, напомни вечером, после работы перешлю.
А что ты предлагаешь для долгоиграющих фоновых задач использовать? Сервисы с лоадерами в чистом виде?

dimiii
16.07.2018
10:13:42
Потому что для простой асинхронщины всё есть во фреймворке. Если интересен развёрнутый длинноответ, напомни вечером, после работы перешлю.
Я на андроид лишь с любопытством поглядываю, мне было интересно лишь немного более подробной аргументации (всё есть во фреймворке - (андрюше т/е?) - достаточно). Хотя могу предположить, rx декорирует удобно и унифицировано.

Google
Konstantin
16.07.2018
10:18:56
А что ты предлагаешь для долгоиграющих фоновых задач использовать? Сервисы с лоадерами в чистом виде?
Ну rx вообще будет работать только пока работает процесс. И когда процесс будет убит...

Andrew
16.07.2018
10:33:11
Ну rx вообще будет работать только пока работает процесс. И когда процесс будет убит...
Да, я не подумал об этом. Тогда и правда экзекьюторы уместны.

WorkManager ??????
Вязаться на плейсервисы для планирования задач — ну не знаю, никогда этого не понимал.

OlegKrikun
16.07.2018
10:34:22
Andrew
16.07.2018
10:38:18
Ну значит не боролся ещё с бэкграунд лимитами
Не боролся. Я и ведром уже сто лет не занимался, к счастью.

OlegKrikun
16.07.2018
10:41:05
Не боролся. Я и ведром уже сто лет не занимался, к счастью.
Ну ща там мало вариков, если надо что то действительно в бэкграунде делать, а не в другом потоке покуда приложение открыто =)

Mikhail
16.07.2018
10:42:01
ну Evernote android-job
Он же под капотом все равно вяжется на play services если хочешь его использовать на 4ках, разве нет?

OlegKrikun
16.07.2018
10:44:02


есть ещё вот такая шняжка https://github.com/Doist/JobSchedulerCompat

Anton
16.07.2018
10:45:02
на 4ках вроде наоборот там алармменеджер

OlegKrikun
16.07.2018
10:45:30
на 4ках вариантов тока два аларм и через плейсервисы

Quantum Harmonizer
16.07.2018
10:46:32
интересно, а... ой, блин, мы ж не в андроидном чате

OlegKrikun
16.07.2018
10:48:19
А так, я вот в тока начавшемся проекте заюзал workmanager (с надеждой что оно не будет сломанно в будущем =))) и доволен как слон пока что

Anton
16.07.2018
10:50:35
через год что нибудь новое придумают и обьявят его deprecated ?

Igor
16.07.2018
10:51:39
Тoваpищи, стoлкнулся с интеpеснoй дилеммoй: есть priority-job-queue, в кoтopoй нужнo в jobах испoльзoвать тoлькo Serializable паpаметpы пo oчевидным пpичинам. И вoт есть у меня oдин такoй job, в кoтopый идет Either<UpdateModel, CreateModel> гpубo гoвopя. Мoжете пoделиться свoим мнением, наскoлькo плoхая затея делать Either: Serializable ?

OlegKrikun
16.07.2018
10:51:52
через год что нибудь новое придумают и обьявят его deprecated ?
не исключенно, но я всё равно чот то похожее каждый раз мучу =)

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