
Bogdan
30.08.2018
10:36:52

Denis
30.08.2018
10:37:04

Bogdan
30.08.2018
10:37:40

Maxim
30.08.2018
10:37:52

Google

Andrew
30.08.2018
10:39:16
Подскажите, как из ktor приложения замутить сервис под Ubuntu? Может есть что-то готовое?
https://plugins.gradle.org/search?term=systemd
По готовым плагинам выбор небольшой — аж один, и тот rpm-ы делает.
Но в целом это должно без особых проблем решаться с shadowjar — пинаете shadowDistZip, пишете к нему небольшой .service-файл для systemd (это действительно несложная задача, не бойтесь вникнуть), и пакете при надобности оба компонента в deb (тут чуть сложнее, вопрос в формировании папочки debian с конфигами и скриптами и правильных флагах для вызова debuild, который из этого конечный дистр сделает).

Denis
30.08.2018
10:39:16

Gregory
30.08.2018
10:40:21
Спасибо, Андрей. Попробую

Maxim
30.08.2018
10:40:21
зачем?
потому что combineLatest сработает только в тот момент, когда изменятся оба значения

balolam
30.08.2018
10:42:21

Maxim
30.08.2018
10:42:55
Нет
хорошо, не изменятся, а заэмитятся, если быть точным

balolam
30.08.2018
10:43:27
Обратитесь к документации, вы описываете сейчас zip

Denis
30.08.2018
10:43:57

Quantum Harmonizer
30.08.2018
10:44:47

Maxim
30.08.2018
10:44:56

Quantum Harmonizer
30.08.2018
10:45:32

Google

Maxim
30.08.2018
10:46:04

Quantum Harmonizer
30.08.2018
10:46:18

Maxim
30.08.2018
10:46:27

Quantum Harmonizer
30.08.2018
10:46:36
меняется один источник — эмитится новое значение

balolam
30.08.2018
10:46:42

Maxim
30.08.2018
10:46:56

Anton
30.08.2018
10:47:05
первый да

Mikhail
30.08.2018
10:47:20
и второй
и третий

Quantum Harmonizer
30.08.2018
10:47:39
не-не

Anton
30.08.2018
10:47:42
нет. второй и третий заберет предыдущий заэмиченный с первого потока
и скомбинит с новым

Mikhail
30.08.2018
10:48:10
zip эмитит только когда оба заэмитили же ну

balolam
30.08.2018
10:48:13

Anton
30.08.2018
10:48:27

Mikhail
30.08.2018
10:49:38
а я мимопроходил и влез в разговорм не понимая о чем кто говорит ?

OlegKrikun
30.08.2018
12:23:29

Георгий
30.08.2018
12:37:49
А можно как-то делегировать в поле, которое инициализируется внутри класса, а не параметром конструктора?
interface Interface {
fun method()
}
class Trait: Interface {
override fun method() {}
}
// Работает
class TypeA(private val impl: Trait)
: Interface by impl {
}
// Не хотит. Unresolved reference: impl
class TypeB: Interface by impl {
private val impl = Trait()
}

Igor
30.08.2018
12:40:57

Google

Георгий
30.08.2018
12:42:41
Хм. Тогда такой вопрос. Как сделать инстанцирование покрасивше?
class TypeA(private val impl: Trait)
: Interface by impl
fun typeA() = TypeA(Trait());

Andrew
30.08.2018
12:43:20

Quantum Harmonizer
30.08.2018
12:43:46
просто эта фича не развивается, тяжело с ней)

Andrew
30.08.2018
12:44:44

Георгий
30.08.2018
12:46:41

Quantum Harmonizer
30.08.2018
12:47:19
можно второй конструктор или одноимённый фабричный метод

Andrew
30.08.2018
12:47:35
Ну а вообще на свой вкус, тут единого мнения нету.
В kotlinx.coroutines, к примеру, используется top-level функция fun Channel(...): Channel вместо фабрики-компаньона.

Георгий
30.08.2018
12:49:42
О, вот так красивенько получается :) Спасибо!
class TypeA
private constructor (private val impl: Trait)
: Interface by impl
{
constructor(): this(Trait())
}

Di7aK
30.08.2018
12:53:27
не переносите открывающую фигурную скобку плиз

Igor
30.08.2018
12:53:44

Di7aK
30.08.2018
12:53:46
глаза болят

Георгий
30.08.2018
12:53:54
class TypeA
private constructor (private val impl: Trait)
: Interface by impl {
constructor(): this(Trait())
}
Вот так?

Andrew
30.08.2018
12:54:01

Георгий
30.08.2018
12:54:38

Quantum Harmonizer
30.08.2018
12:54:41

Di7aK
30.08.2018
12:55:01
на цпп когда смотришь за голову держишся, переменные именуют с подчеркиваем, не константы капсом, методы так же

Igor
30.08.2018
12:55:07

Andrew
30.08.2018
12:56:02

Google

Quantum Harmonizer
30.08.2018
12:56:30
?

Георгий
30.08.2018
12:57:20

Andrey
30.08.2018
12:57:45

Mikhail
30.08.2018
12:57:56

Igor
30.08.2018
12:58:20

Георгий
30.08.2018
12:58:22

Di7aK
30.08.2018
12:58:31

Георгий
30.08.2018
12:58:33

Admin
ERROR: S client not available

Di7aK
30.08.2018
12:58:43
я не шарю

Andrew
30.08.2018
12:59:04

Георгий
30.08.2018
12:59:08

Andrey
30.08.2018
12:59:12

Георгий
30.08.2018
12:59:21
Как много способов сказать одно и то же)))

Mikhail
30.08.2018
12:59:30

Di7aK
30.08.2018
12:59:33
только я при этом все равно не понял

Quantum Harmonizer
30.08.2018
13:00:30

Andrew
30.08.2018
13:00:37
https://kotlinlang.org/docs/reference/delegation.html#implementation-by-delegation

Георгий
30.08.2018
13:00:49
Короткий способ сделать так:
interface Interface {
fun method(): Int
}
class Impl: Interface {
override fun method() = 42
}
class Foo: Interface {
private val impl = Impl()
override fun method() = impl.method()
}

Andrey
30.08.2018
13:00:58

Google

Di7aK
30.08.2018
13:01:53
я знаю в чем ваша проблема
вы пытаетесь писать документацию в википедию простому алкашу

Георгий
30.08.2018
13:03:06
Ну, делегирование - это когда твой дядя просит твоего батю по пути сгонять за сигами, а батя за сигами отправляет тебя

Andrew
30.08.2018
13:03:47
А прелесть встроенной в язык делегации, что если кроме беготни за сигами надо ещё пачку других действий выполнять, в коде строк остаётся столько же.
То есть не надо руками каждую операцию копипастить.

Quantum Harmonizer
30.08.2018
13:04:12

Di7aK
30.08.2018
13:04:17
я еще в шарпе так и понял что за делегаты такие
так что я в общем с этим не знаком

Quantum Harmonizer
30.08.2018
13:04:36

Andrew
30.08.2018
13:04:42
К шарповым делегатам это, в целом, никакого отношения не имеет.

Di7aK
30.08.2018
13:04:55
да знакомый тоже понять не мог зачем они, если есть интерфейсы

Andrew
30.08.2018
13:05:20
Там это просто список коллбеков, одна сторона туда закидывает свои коллбеки, другая сторона их все одним махом вызывает.
По крайней мере, мне так запомнилось.

Георгий
30.08.2018
13:06:35
А чем это удобнее передачи лямбды? o.O
Типа там списком?

Andrew
30.08.2018
13:07:33
Да. На один делегат может подписаться несколько разных слушателей. Для этого они и нужны, собственно.
Но я ж грю, я шарп видел сто лет назад в универе и могу сильно ошибаться :D

Di7aK
30.08.2018
13:09:45
передача лямбды это уже яваскрипт какойто

Георгий
30.08.2018
13:10:59
reentrantReadWriteLock.write {
// blah blah
}
Передача лямбды)

Igor
30.08.2018
13:11:22