24 October 2017
Ruslan Ibragimov converted a basic group to this supergroup «Kotlin JVM»
Igor invited Igor
Dmitry Tsydzik invited Dmitry Tsydzik
Pavel Shackih invited Pavel Shackih
Sergey Zolotov invited Sergey Zolotov
Sebastian 🚘 invited Sebastian 🚘
S?
14:46
Sebastian 🚘
14:46
экспансия
Boris Vanin invited Boris Vanin
Aλexander Syrotenko invited Aλexander Syrotenko
Ruslan Ibragimov changed group photo
me invited me
Danil Y. invited Danil Y.
Quantum Harmonizer invited Quantum Harmonizer
Yuri Orlov invited Yuri Orlov
💪😕 invited 💪😕
Михаил Резниченко invited Михаил Резниченко
Ibrohim Kholmatov invited Ibrohim Kholmatov
ГА
17:57
Глеб Альбов
еее
Nikita invited Nikita
25 October 2017
Deleted Account invited Deleted Account
Anastasia invited Anastasia
Max 🦠 invited Max 🦠
Ivan Fedyai invited Ivan Fedyai
Artyom Selyutin invited Artyom Selyutin
Артем Михайловский invited Артем Михайловский
26 October 2017
Daniel invited Daniel
BV
15:37
Boris Vanin
Вот вроде и так понятно, что здесь не будут ничего писать
15:37
Но все равно заджоинился 🙈
QH
15:38
Quantum Harmonizer
будут, ktor хорош, например
I
15:41
Igor
Может сообщение перепинить с нотификашкой? И сюда же направлять с JS/Native (если такие люди есть)
SZ
15:41
Sergey Zolotov
In reply to this message
дока гавеная пока
15:41
какие вообще есть альтернативы ему годные?
15:41
Dropwizard, Ratpack, Vertx?
QH
15:41
Quantum Harmonizer
In reply to this message
Ну, он только развивается. Я разобрался вродь.
BV
15:42
Boris Vanin
Кто уже его использовал, какие профиты, помимо котлина?
15:42
Я про ктор
QH
15:42
Quantum Harmonizer
In reply to this message
Очень прстая работа с вебсокетами, вообще не думаешь об асинхронхине.
15:42
ибо suspend
BV
15:43
Boris Vanin
А что он умеет вообще?
QH
15:44
Quantum Harmonizer
In reply to this message
маршрутизацию, NIO, HTML DSL, статтческий контент, вебсокеты
RI
15:48
Ruslan Ibragimov
In reply to this message
я же показывал как просто взять undertow и прикрутить туда корутины
15:48
В один класс
QH
15:48
Quantum Harmonizer
In reply to this message
помню что-то такое, но провтыкал
SZ
15:54
Sergey Zolotov
In reply to this message
а еще поверх netty
RI
15:56
Ruslan Ibragimov
In reply to this message
Буквально один класс - и можно использовать корутины:

class CoroutinesHandler(
private val handler: suspend (HttpServerExchange) -> Unit
) : HttpHandler {
override fun handleRequest(exchange: HttpServerExchange) {
exchange.dispatch(Runnable {
launch(CommonPool) {
handler(exchange)
}
})
}
}
Alexey Tkachenko invited Alexey Tkachenko
BV
16:03
Boris Vanin
Надо поковыряться, звучит неплохо
Dmitriy Shishmakov invited Dmitriy Shishmakov
Alex Rasskazov invited Alex Rasskazov
27 October 2017
Ilia Kuzniatsou invited Ilia Kuzniatsou
28 October 2017
Svyatoslav Bilsky invited Svyatoslav Bilsky
Владислав Ников invited Владислав Ников
29 October 2017
Сергей invited Сергей
Andrey Atapin invited Andrey Atapin
HKEY_LOCAL invited HKEY_LOCAL
2 November 2017
Ramil invited Ramil
I
16:20
Igor
Я кстати не вкурсе, в спринге страницу генерят на сервере или все перешли на spa?
QH
16:21
Quantum Harmonizer
In reply to this message
Не знаю на счёт всех, но принимаешь аргументом Model, напихиваешь данными, возвращаешь имя шаблона — и модель отдаётся в шаблонизатор.
AA
16:23
Andrey Atapin
в общем, это зависит. я сторонник spa
QH
16:24
Quantum Harmonizer
In reply to this message
А если там что-то нормальное — JVM, например?)
SZ
16:24
Sergey Zolotov
In reply to this message
изоморф же
QH
16:25
Quantum Harmonizer
In reply to this message
:/
RI
16:38
Ruslan Ibragimov
In reply to this message
А потом в рантайме кто-то будет этот jsx компилировать?
AA
16:40
Andrey Atapin
я ошибся, то был ангуляр
RI
16:43
Ruslan Ibragimov
Короче, про перформанс и серваки
Eugeny Karpov invited Eugeny Karpov
I
18:35
Igor
А помните старый видосик https://youtu.be/6y-4xJWFLl4

Пишем верстку на Kotlin DSL и вставляем Kotlin код,
который выполняется прозрачно на сервере и фронтенде.

Сбылись мечты Бреслава?
I
22:54
Igor
Кстати, думаете полетел бы такой фреймворк:

Есть два модуля с Kotlin кодом:
- (1) JavaSE - серверная часть с доступом к БД, серверному диску и тд
- (2) KotlinJS модуль для WebUI на DSL аля React

Мы размечаем некоторые suspend функции из (1) аннотациями
и из (2) можем их прозрачно вызывать (возможно и наоборот).

А фреймворк, генерит сами вызовы поверх какого-нибудь jrpc или rest/spring (можно настраивать).
BV
22:55
Boris Vanin
In reply to this message
Где-то я такое уже видел
I
22:56
Igor
Знаю для F# два/три таких фреймворка (они и вдохновили)
BV
22:57
Boris Vanin
На gwt намекаю
22:58
Я так думаю, что наличие общего интерфейса для клиента и сервера могло бы уже приятно сыграть
I
23:00
Igor
В GWT (вроде бы) имхо большой минус что там эмуляция Swing или чего-то подобно.
React с его псевдо-html зашел бы лучше.
BV
23:00
Boris Vanin
Ну и автоимплементация такого клиента как это в feign каком-нибудь сделано
23:00
In reply to this message
Да сам gwt так себе, там просто идея прозрачных вызовов как раз
23:01
Правда эта прозрачность боком может выйти легко
23:02
Так что лучше просто общий интерфейс с возможностью по нему клиента сгенерить автоматом
23:03
А на сервере просто реализуешь этот интерфейс у контроллера
23:03
И счастье
23:06
Правда для жс бэкэнда несколько я знаю нет аннотейшнпроцессинга 😬
23:12
Причём спринг вроде умеет работать на фейновых аннотациях, так что даже два комплекта не нужно
RI
23:20
Ruslan Ibragimov
In reply to this message
Мне кажется я такое видел в http://kweb.io/
3 November 2017
Mikhail invited Mikhail
4 November 2017
Andrey Parasich invited Andrey Parasich
7 November 2017
L invited L
9 November 2017
Abbas invited Abbas
10 November 2017
Dmitriy Kuts invited Dmitriy Kuts
Foat Karipov invited Foat Karipov
13 November 2017
L removed L
Roman Brovko invited Roman Brovko
Roman Q invited Roman Q
Stanislav Slavin invited Stanislav Slavin
Dmitry Bohdanov invited Dmitry Bohdanov
🔑 invited 🔑
Roman Elizarov invited Roman Elizarov
Vadim Lesnov invited Vadim Lesnov
Николай Герасимов invited Николай Герасимов
Gleb Patsiia invited Gleb Patsiia
AS
19:45
Aλexander Syrotenko
@relizarov Добрый день. Раз вы здесь есть, то хочу задать такой вопрос. Есть ли смысл писать компилятор Kotlin в байткод V8? Хочу выбрать себе пет-проект, связанный с VM и компиляторами.
BV
20:21
Boris Vanin
мм, а чем профит? как можно использовать байт-код в8 напрямую?
20:21
т.е. компиляция в жс есть, а он уже компилится в байткод в8 насколько я это представляю
I
20:24
Igor
Да, лучше уж в BEAM
AS
20:26
Aλexander Syrotenko
In reply to this message
Убрать js из этой цепочки
QH
20:32
Quantum Harmonizer
Proof of concept?
AS
20:37
Aλexander Syrotenko
Я пока что рассматриваю на уровне идеи. Я еще не смотрел на то, можно ли подложить V8 байткод извне
BV
20:37
Boris Vanin
In reply to this message
Да я понял, только не понял как это можно использовать
AS
20:38
Aλexander Syrotenko
In reply to this message
Соберу свой хроминум, буду напрямую на Котлине писать фронт
20:38
По фану
I
20:38
Igor
In reply to this message
А как он будет в моем safari отображаться?
AS
20:39
Aλexander Syrotenko
In reply to this message
Ключевое слово - по фану 🙂
BV
20:39
Boris Vanin
In reply to this message
Вот это 🔥
AS
20:40
Aλexander Syrotenko
In reply to this message
Apache Beam - оно?
QH
20:40
Quantum Harmonizer
нет, beam — виртуальная машина erlang
20:41
In reply to this message
А в чём огонь?)
BV
20:41
Boris Vanin
AS
20:41
Aλexander Syrotenko
Спасибо, посмотрю 🙂
20:42
Просто почему зацепился за V8 - я в ней хоть немного да разбираюсь- где чего лежит и как работает
BV
20:42
Boris Vanin
In reply to this message
Как в чём, сложно придумать более популярную вм
AS
20:42
Aλexander Syrotenko
А вот Эрланг - трогал, да не более. Саму VM тем более.
QH
20:42
Quantum Harmonizer
In reply to this message
Оу. Никогда об этом не думал.
RI
20:44
Ruslan Ibragimov
Браузер поверх JVM, без тредов для юзеров (на корутинах). С фолбеком котлин кода в JS (чтобы юзер скрипты работали в мейнстрим браузерах) и носорогом и эмуляцией браузерных API для легаси (дурка.jpg)
BV
20:44
Boris Vanin
In reply to this message
Все равно придется глубоко погружаться, так что это мелочи
AS
20:45
Aλexander Syrotenko
In reply to this message
20:45
Выглядит больно 🙂
20:45
Уже представляю стартап VM для этого браузера
RI
20:46
Ruslan Ibragimov
Писать браузер на kotlin native
AS
20:47
Aλexander Syrotenko
Вот это можно
20:47
Без шуток
RI
20:48
Ruslan Ibragimov
Но зачем когда есть серво на расте
QH
20:48
Quantum Harmonizer
In reply to this message
Читал «пора убить веб»?
AS
20:48
Aλexander Syrotenko
Правда, я так и не смог по-нормальному внести изменения в старый netscape communicator, но собирался исправно
20:48
In reply to this message
Конечно читал
20:51
Ладно, спасибо всем поучаствовавшим в моем вопросе - посмотрю на Beam
RI
20:52
Ruslan Ibragimov
In reply to this message
вообще нужно пойти дальше и убить заодно традиционный десктоп и унифицировать десктоп и веб приложения
20:52
как это делает электрон, только с другой стороны
QH
20:53
Quantum Harmonizer
In reply to this message
почему-то подумалось про хром ос
RI
20:54
Ruslan Ibragimov
да, хром ос это подход тоже со стороны web -> desktop
I
20:57
Igor
In reply to this message
Не понял, как ты UI хочешь рисовать кросплатформенно?
RI
20:57
Ruslan Ibragimov
не заниматься ерундой и создавать свою платформу
BV
20:58
Boris Vanin
Хорошо когда есть чятик где можно пофлудить 🙈
RI
20:58
Ruslan Ibragimov
In reply to this message
это намек что не нужно тут флудить, или что наоборот ок? :)
BV
20:59
Boris Vanin
Да не, тут всё рано никто не общается, так что даже более чем ок
20:59
Хоть какая-то жизнь
Alexey Sulatskov invited Alexey Sulatskov
BV
21:01
Boris Vanin
А вот на счёт мысли что в браузере стоило бы сделать вм с байткодом, в котором бы выполнялся жс давно у меня блуждает, меня даже один раз на хабре за нее заминусовали в жспосте
I
21:02
Igor
Да в общем не у тебя одного
BV
21:02
Boris Vanin
Ну да, а вместо этого делают васм
RI
21:02
Ruslan Ibragimov
@fly_style как специалист в V8, он разве не кеширует по возможности скомпиленные скрипты?
BV
21:03
Boris Vanin
Между загрузками страницы?
RI
21:03
Ruslan Ibragimov
угу
BV
21:03
Boris Vanin
Я не спец, но мне кажется, что нет
AS
21:04
Aλexander Syrotenko
Насколько я знаю, то только разметку
21:04
Скрипты нет
21:04
Но только я не специалист, к сожалению 🙂
21:04
Я вообще еще студент, мне до специалиста расти и расти еще
BV
21:06
Boris Vanin
Хотя васм это почти вм, там тоже свой байткод
RI
21:06
Ruslan Ibragimov
In reply to this message
судя по этому что-то такое уже впилили и пилят, но там tldr
21:08
Мне кажется в v8 такое тоже должно быть, так что проблему открытия одного и того же сайта можно решить таким образом
AS
21:17
Aλexander Syrotenko
Проверил - кэшируется
21:17
И скрипты тоже
21:18
Правда, судя по перфу, они не скомпиленные
RI
21:18
Ruslan Ibragimov
ну да, изи же проверить. взять жирный скрипт и в девтулс глянуть тайминги
21:19
только с локалхостом или file:// может не воркать, лучше куда-нибудь закинуть
AS
21:20
Aλexander Syrotenko
In reply to this message
++, хром поругается
21:23
первая загрузка и релоад
21:26
нужно конечно точнее поинвестигать, но вроде есть заметный эффект, наверно какие-то кеши таки срабатывают
AS
21:51
Aλexander Syrotenko
Х-м-м, у меня немного не так. Видно, что кэш срабатывает, но отработка скрипта остается довольно таки долгой
RI
21:53
Ruslan Ibragimov
может браузер не может задетектить что скрипт не поменялся? в network кеш самого js виден?
AS
21:56
Aλexander Syrotenko
Я ж сначала Network и чекнул
21:56
Там стоит cached from disk
BV
21:57
Boris Vanin
In reply to this message
Так это другой кеш, это он просто файлик кеширует
AS
21:57
Aλexander Syrotenko
Хм, интересно. Разметка и картинки берутся из ОЗУ, а скрипты из диска
RI
21:57
Ruslan Ibragimov
In reply to this message
это понятно, но если браузер не закешировал сам скрипт то и байткод с большой вероятностью он закеширует
BV
22:10
Boris Vanin
Но про кеш самих скрипов вроде более менее понятно
14 November 2017
EK
13:29
Eugeny Karpov
In reply to this message
смысл есть, т.к. будет более эффективный байткод - invokedynamic, все дела
RI
13:30
Ruslan Ibragimov
я подозреваю что в V8 нету invokedynamic и байткод со специфичными вкусами
EK
13:41
Eugeny Karpov
в деталях не смотрел, но джетбрейнс писал, что байткод с v8 получается эффективнее и логично предположить использование invokedynamic для лямбд
RI
13:41
Ruslan Ibragimov
V8 - это джаваскриптовый движок, а не версия джавы. значимость invokedynamic для обычных лямбд переоценена
EK
13:48
Eugeny Karpov
гляну, спс
RI
13:50
Ruslan Ibragimov
Там кроме самого поста от Тагира есть замечательный комментарий от Липского
16 November 2017
Sergey Rostov invited Sergey Rostov
Jaloliddin Ahmedov invited Jaloliddin Ahmedov
Deleted Account invited Deleted Account
17 November 2017
Олег Рымонин invited Олег Рымонин
18 November 2017
Mr. Xml Json invited Mr. Xml Json
19 November 2017
Sergei Karpunin invited Sergei Karpunin
20 November 2017
JRoot3D invited JRoot3D
Eugene Matiash invited Eugene Matiash
22 November 2017
Alexander Stefanenkov invited Alexander Stefanenkov
1 December 2017
Deleted Account invited Deleted Account
Артем invited Артем
Oleg Kleshchev invited Oleg Kleshchev
Ramis invited Ramis
4 December 2017
Eduard Mizurov invited Eduard Mizurov
6 December 2017
RI
00:44
Ruslan Ibragimov
Бекенд вакансия подъехала https://t.me/kotlin_jobs/20
7 December 2017
Dmitriy Sokolov invited Dmitriy Sokolov
Deleted Account invited Deleted Account
8 December 2017
Artur Woskresensky invited Artur Woskresensky
Виталий Бендик invited Виталий Бендик
13 December 2017
00:24
Deleted Account
Жарко тут, размазали все коммьюнити по чатам))
I
00:35
Igor
(хороший детектор android/jvm разработчиков на kotlin 🙊)
QH
00:42
Quantum Harmonizer
In reply to this message
Просто в андроиде одни новички со своими вопросами 😀
Аркадий Шарапов invited Аркадий Шарапов
N Filatov invited N Filatov
21 December 2017
Павел Любин invited Павел Любин
28 December 2017
Vladimir Petrakovich invited Vladimir Petrakovich
31 December 2017
Anton Vlasov invited Anton Vlasov
9 January 2018
Maxim Malyshev invited Maxim Malyshev
16 January 2018
RI
11:11
Ruslan Ibragimov
Что используете для мониторинга приложений написанных на котлин (и нижележаших докеров, инстансов)?
SZ
11:39
Sergey Zolotov
micrometer, prometheus, grafana
DS
11:42
Dmitriy Shishmakov
SZ
11:43
Sergey Zolotov
у меня все в кластере kubernetes крутится, так что там внутри есть cadvisor тоже
DT
12:21
Dmitry Tsydzik
prometheus, grafana
RI
12:26
Ruslan Ibragimov
а стандартных графиков в прометеусе не хватает?
12:37
In reply to this message
прикольная штука, спасибо, про неё не знал
DS
14:27
Dmitriy Shishmakov
Да, очень полезна. Всё выводить в Прометеус и смотреть уже в дашбордах Графаны
14:28
Прометеус тоже рисует графики, но очень примитивно там
SZ
14:28
Sergey Zolotov
In reply to this message
прометеус только как сборщик и хранитель фреймов
14:28
графики там только для дебага есть
14:28
ну или посмотреть что-то ad-hoc
RI
14:28
Ruslan Ibragimov
ясно
SZ
14:28
Sergey Zolotov
только 2ю версию прометеуса не ставьте, она еще глючная сильно
DS
14:29
Dmitriy Shishmakov
Алерты можно навесить на Прометеус
14:29
Я кстати со 2ой работал, там yml стали использовать для Алертинга
14:30
Тот же хелсЧек например сделать
RI
14:30
Ruslan Ibragimov
In reply to this message
сильно? в чем выражается? я думал вторую ставить, чтобы потом не нужно было апдейтиться. и еще sd cast как-то слушал, там создатель тоже вторую говорил сразу брать)
DS
14:30
Dmitriy Shishmakov
Она совсем недавно появилась
14:30
В декабре кажется
RI
14:34
Ruslan Ibragimov
14:39
только это нашел, наверно перепутал
SZ
14:41
Sergey Zolotov
In reply to this message
мы сразу вторую ставили, были проблемы с хранением. он не всегда удаляет темповые фреймы и иногда уходит глубоко в себя сьедая весь цпу. при перезапуске не может подняться. был тикет на это, его даже закрыли. но релиза после 2.0 еще не было
14:41
поставили 1.8.х и все отлично работает уже 2й месяц
RI
14:41
Ruslan Ibragimov
хм, ну ок. тогда стоит ставить 1.8
14:44
In reply to this message
да, вот тут обсуждали 2.0/1.8
25 January 2018
RI
15:48
Ruslan Ibragimov
Немножко боянчик, и немножко оффтоп:

на digitalocean увеличили в 2 раза RAM, теперь можно больше петпроджектов на kotlin за те же деньги запускать
I
16:11
Igor
Но все равно дороже scaleway
16:13
Deleted Account
Два раза это сколько? 2гб?)
26 January 2018
Артёмка invited Артёмка
А
21:14
Артёмка
#whois
Пускай будет.
Андроид разработчик. Сам из Минска. Работаю на удаленке. Java/Kotlin(учу в процессе написания кода).
В данный момент интересует сторона бэкенда. Пробовал работать с node js. Писал лайвкаверы/ботов, апи для своих проектов.
Полезен могу быть скорее всего только по части Android.
Тут с целью интересного и продуктивного общения.
По северной части совсем зелёный.
5 February 2018
Alexander invited Alexander
6 February 2018
Andrei Baranchikov invited Andrei Baranchikov
8 February 2018
Andrey Markelov invited Andrey Markelov
Misha Alex invited Misha Alex
Deleted Account invited Deleted Account
Yuri Kizhaev invited Yuri Kizhaev
Sergey Igushkin invited Sergey Igushkin
Света Петрова invited Света Петрова
Alex invited Alex
Fuf Namid invited Fuf Namid
nikita tukkel invited nikita tukkel
9 February 2018
RI
08:45
Ruslan Ibragimov
K
Kotlin Jobs 09.02.2018 08:45:32
Вакансия: #kotlin #spring #backend
Компания: Ticketland
Локация: Москва (Павелецкая, Москва, Шлюзовая набережная, 4)
Контакты: @mozomig

Обязанности:
Создание современной автоматизированной системы закупки и управления рекламой.

Требования:
- Общий опыт коммерческой разработки от 1 года (продвинутый Junior);
- Java SE и/или Kotlin (или желание его изучить т.к разработка будет вестись на Kotlin);
- Spring (базовый уровень);
- Понимание архитектурных паттернов SOA в т.ч микросервисы (базовый уровень);
- Опыт работы с базами данных, желательно PostgreSQL
- Наш стек: Kotlin, Spring, Docker, Nomad;
- Желание учиться, развиваться, решать бизнес задачи ;

Условия:
- Работа в SCRUM команде над интересными и сложными задачами;
- Официальное оформление в полном соответствии с Трудовым Кодексом РФ;
- Удобный офис с отличным видом на Шлюзовую набережную и в шаговой доступности от м. Павелецкая;
- Гибкое начало и окончание рабочего дня;
- Заработная плата всегда обсуждается индивидуально на собеседовании;
- Участие в конференциях и курсы повышения квалификации;
- Возможность бесплатно посещать развлекательные мероприятия.
DS
10:44
Dmitriy Shishmakov
Вы там работаете?
RI
10:45
Ruslan Ibragimov
Нет, размещаем в канале разные вакансии
10:45
Связанные с разработкой на Котлин
DS
10:46
Dmitriy Shishmakov
Вам задавали вопросы «за жизнь» и «и кем вы себя видите через 5 лет»?
10:46
Те кто туда пойдут будте готовы
RI
10:47
Ruslan Ibragimov
(через пять лет битка будет стоит 1млн$ и я не буду работать) - вот так можно отвечать
DS
10:47
Dmitriy Shishmakov
На Кудыкину гору тоже можно послать за такие вопросы)
Vitalii Dmitriev invited Vitalii Dmitriev
10 February 2018
17:25
Deleted Account
Здравствуйте всем. На нетбинс работаете?
RI
17:49
Ruslan Ibragimov
Нет, там плагин в печальном состоянии afaik
VD
17:55
Vitalii Dmitriev
Ну, там плагин, вроде, более-менее, но портирован под устаревшую версию Kotlin.
18:01
Deleted Account
Установил. Но не запускается
11 February 2018
НГ
21:44
Николай Герасимов
In reply to this message
скачай нормальную ide - intelij idea community edition - она бесплатная и там отличная поддержка котлина
21:48
Deleted Account
In reply to this message
Спасибо. Не знал что бесплатный есть.
Ссылку можете отправить😊😊😊
QH
21:50
Quantum Harmonizer
21:50
Deleted Account
In reply to this message
Еще биз интернета работает?
НГ
21:50
Николай Герасимов
21:50
Deleted Account
Спасибо.
НГ
21:51
Николай Герасимов
Учись гуглить
21:51
Deleted Account
In reply to this message
👍. Хорошо. Спасибо
RI
21:51
Ruslan Ibragimov
Я думал нетбинс нужен был по каким-то соображенияс типо проект гвоздями прибит к нетбинс, или хочется принципиально его использовать. Если есть выбор то конечно стоит просто взять Idea)
QH
21:52
Quantum Harmonizer
In reply to this message
нетбинс вроде бесплатно работает с EE-шным хламом
21:52
Deleted Account
In reply to this message
Не знал что есть community
RI
21:52
Ruslan Ibragimov
Их вместе отправили на свалку, всмысле отдали в опен сорс
21:52
EE, и нетбинс
21:53
Наверно в надежде на то, что кому то это нужно и будет сообщество поддерживать
12 February 2018
DS
09:06
Dmitriy Shishmakov
In reply to this message
Время покажет, что с EE будет. Пока не стоит списывать со счетов)
13 February 2018
Nikita Voinov invited Nikita Voinov
14 February 2018
VP
05:51
Vladimir Petrakovich
Подскажите, пожалуйста, в ktor клиентские вебсокеты ещё не завезли?
RI
09:53
Ruslan Ibragimov
Не видел клиентских
19:26
Deleted Account
Здравствуйте всем.
Только что начал изучать Kotlin. У странно что на одном проекте, даже одном методе работает обе языки да
19:28
QH
19:29
Quantum Harmonizer
In reply to this message
Это вопрос или что?
19:29
In reply to this message
очень плохой скриншот
19:30
Deleted Account
Да. Вопрос
QH
19:30
Quantum Harmonizer
In reply to this message
какой?
19:30
Deleted Account
In reply to this message
фотографировал с телефонам
DB
19:30
Dmitry Bohdanov
In reply to this message
Это тоже Kotlin который вызывает java методы. В конце нет ";" в System.out.print(), значит это Kotlin
19:31
Deleted Account
Одном методе работает ли обе языки
DB
19:31
Dmitry Bohdanov
In reply to this message
Нет, только один язык.
19:31
Deleted Account
In reply to this message
Ааа. Спасибо. Теперь стало ясно😊
15 February 2018
Mikhail Mustakimov invited Mikhail Mustakimov
Ivan Osipov invited Ivan Osipov
Vitaliy Mikhailov invited Vitaliy Mikhailov
Deleted Account invited Deleted Account
Axrorxo'ja Yodgorov invited Axrorxo'ja Yodgorov
Victor Vararg invited Victor Vararg
16 February 2018
Kirill Lyubimov invited Kirill Lyubimov
19 February 2018
А
12:10
Артёмка
Утро доброе)
Вопрос по ktor.
Как выполнить запрос от сервера? Например к апи вк.
QH
12:13
Quantum Harmonizer
In reply to this message
Ktor это всё-таки сервер. Вероятно, запрос можно выполнить с помощью Netty, но я бы взял привычный OkHttp.
А
12:14
Артёмка
Такие мысли и были. Спасибо большое
12:14
Deleted Account
возможно скажу сейчас какую то чушь, но нельзя ли с сервера отправить что то типа с Curl'a
12:14
?
12:14
в ktor
QH
12:16
Quantum Harmonizer
In reply to this message
Ну можно, curl всегда есть. Только тогда создаётся новый процесс.
I
12:17
Igor
In reply to this message
Он же не NIO 😐, как такое можно на сервере то юзать
SZ
12:17
Sergey Zolotov
не надо okhttp
12:17
пачку потоков будет плодить
12:21
In reply to this message
а что кстати юзаете на сервере?
RI
12:21
Ruslan Ibragimov
Там есть клиент
А
12:21
Артёмка
In reply to this message
Эмм. Окей. Если не okhttp, то что тогда?
I
12:22
Igor
In reply to this message
Java9 httpclient))
А
12:22
Артёмка
Серьезно?
SZ
12:22
Sergey Zolotov
In reply to this message
netty client, async http client, spring webclient
12:22
но это все в принципе поверх netty построено)
12:23
Deleted Account
async http client хороший)
А
12:23
Артёмка
Понял, спасибо.
А ещё нет ничего coroutine-based, если так можно выразиться?)
SZ
12:25
Sergey Zolotov
они все подходят под корутины
А
12:25
Артёмка
Оки
VP
12:29
Vladimir Petrakovich
In reply to this message
ktor - это не только сервер, но и клиент.
Документации пока нет, но он работает. Умеет работать поврех Apache Async HTTP Client, Netty и есть какой-то самописный на NIO с корутинами.
I
12:46
Igor
In reply to this message
А почему нет? Он же тоже на NIO и по бенчмаркам не хуже netty клиента
Aleh Kashnikau invited Aleh Kashnikau
А
14:36
Артёмка
Ребят, а при дебаге обязательно постоянно останавливать и потом снова запускать сервер?? Хотелось бы хотя бы, чтобы когда я нажимаю на запуск, оно убивало старый процесс и запускало новый. А сейчас получается, что оно пытается ещё один стартануть и вываливает ошибку, что не может запустить, потому что уже запущенно
QH
14:37
Quantum Harmonizer
In reply to this message
Run/Debug configurations -> Single instance only
А
14:38
Артёмка
Благодарю
14:40
В область бэкенда на джаве/котлине только начал вкатываться. Можете посоветовать чего-то почитать? Может какие статейки у кого есть в избранном на медиуме. Что-нибудь для новичка, наподобие того, как заводится апп на джаве на серверах и т.д.
Работал раньше только с нодой, немного совсем с пхп.
А
14:58
Артёмка
Добавляю зависимость в gradle: compile 'org.asynchttpclient:async-http-client:2.4.1', но почему-то она не добавляется. В чём может быть трабл?
QH
15:05
Quantum Harmonizer
In reply to this message
синхронизировать проект или заимпортить его заново
А
15:50
Артёмка
Ага, получилось. Спасибо.
15:51
Ещё вопрос появился. Вот после того, как заимпортилось, я не могу заюзать эту либу как в примерах:
Future<Response> whenResponse = asyncHttpClient.prepareGet("http://www.example.com/").execute();
У меня просто не видит asyncHttpClient.
Что-то делаю не так?
15:54
о, разобрался :D
R
17:33
Roman Q
In reply to this message
Возможно, сложно будет для начала, хотя не знаю:
https://spring.io/guides/gs/spring-boot/
QH
17:35
Quantum Harmonizer
In reply to this message
Так человек на ktor пишет.
R
17:37
Roman Q
Одно другому не мешает ) он же говорит, бэкэнд осваивает
SZ
17:37
Sergey Zolotov
для осваивания брать Ktor как-то не очень логично)
QH
17:37
Quantum Harmonizer
In reply to this message
хм, почему?
SZ
17:37
Sergey Zolotov
документации там почти нет, примеров не густо, в сети на тему ktor материала мало
QH
17:38
Quantum Harmonizer
примеры есть в их репе
SZ
17:38
Sergey Zolotov
и ktor же работает поверх netty
17:38
в чем профит от него?
17:38
когда есть spring boot, vert.x, ratpack
QH
17:38
Quantum Harmonizer
корутины же
SZ
17:39
Sergey Zolotov
ну корутины прикручиваются к любому реактивному коду
QH
17:39
Quantum Harmonizer
а тут они уже прикручены)
SZ
17:39
Sergey Zolotov
при особой настойчивости можно нативную поддержку сделать на спринг буте
QH
17:39
Quantum Harmonizer
тогда останется одна проблема: сам спринг
SZ
17:39
Sergey Zolotov
чтобы можно было делать суспенд экшены
17:39
а со спрингом что не так?)
QH
17:40
Quantum Harmonizer
Всё не так, только мешает он.
SZ
17:40
Sergey Zolotov
например?
QH
17:41
Quantum Harmonizer
MVC — плохой шаблон проектирования.
Неудобный автоматический DI, который медленно стартует, а потом падает в рантайме.
Трехэтажные аннотации вместо нормального программирования.
SZ
17:42
Sergey Zolotov
вместо автоматического dsl можешь использовать котлин конструкции
вместо аннотаций на роутинге можешь тоже функциональный роутинг сделать
17:42
MVC там не пахнет даже
QH
17:42
Quantum Harmonizer
вот, всё это есть в ktor, который маленький, простой и стартует за секунду
SZ
17:42
Sergey Zolotov
у меня бут за 3 секунды стартует, то там не 3 класса
17:42
а добротный проект
QH
17:42
Quantum Harmonizer
вся сила спринга в DI и аспектах, которые прикручены к Java «сбоку»
17:43
In reply to this message
у меня стартовал 15 с
SZ
17:43
Sergey Zolotov
аспекты там вообще не идут из коробки ж
17:43
а DI на аннотациях как ни крути удобная штука
QH
17:43
Quantum Harmonizer
In reply to this message
но это одна из ключевых, достаточно интересных штук
SZ
17:44
Sergey Zolotov
@Component повесил и тебе сразу и автовайринг, и зарегает сервис в контейнере
QH
17:44
Quantum Harmonizer
In reply to this message
@Qualifier ещё, если у интерфейса несколько реализаций
17:44
вообще, сканирование classpath — ужасный костыль
SZ
17:45
Sergey Zolotov
у нас на пхп проекте описаны все зависимости были явно, это все дело занимало больше 10 тыс строк кода, в компактном казалось бы yml
17:45
автовайринг и нормальная регистрация сервисов на спринге это как глоток свежего воздуха после такого ада
17:46
и писать вручную бинды я вряд ли захочу когда-то опять
17:46
>а потом падает в рантайме.
если он на старте не нашел сервис или что-то не смог зарегать он тут же и упадет
17:46
в рантайме какие-нибудь фабрики или прокси могут только вывалиться, но не было такого еще
QH
17:47
Quantum Harmonizer
In reply to this message
Почему не нормальным кодом?
SZ
17:47
Sergey Zolotov
а разница?
17:47
вышло б чуть больше кода
QH
17:48
Quantum Harmonizer
In reply to this message
проверки в компайл-тайме, рефакторинги
17:48
всё то, чем DSL лучше XML/YAML
SZ
17:48
Sergey Zolotov
на пхп что yml, что php, xml все это адаптеры для компилятора, который сразу собирает весь контейнер и кеширует на уровне опкода
17:48
так что без разницы. а плагины к идее умеют с yml работать как с пхп кодом
17:49
так что рефакторить точно так же можно, он yml узнает
17:49
но все же, зарегать даже больше тысячи сервисов вручную
17:49
это не очень веселое занятие
QH
17:49
Quantum Harmonizer
пхп не подходит для написания сколько-нибудь серьёзного кода, как и любой другой шаблонизатор
SZ
17:49
Sergey Zolotov
давно пхп видел?
RI
17:49
Ruslan Ibragimov
In reply to this message
а модули практиковали? если 10тыс строк это 10тыс бинов (в моем случае явного вайринга), то если раскидать по сотни модулей будет ок
SZ
17:50
Sergey Zolotov
In reply to this message
ну это я в общей сумме сказал 10 тыс строк, так то это под 50 разных yml файлов по модулям
QH
17:50
Quantum Harmonizer
In reply to this message
К сожалению, нет.
Всё удачное, что есть — из Java.
R
17:50
Roman Q
Во, годно я про спринг бут вбросил :)
SZ
17:50
Sergey Zolotov
в джаве даже nullable типов нет
17:50
а в пхп есть)
17:51
R
17:51
Roman Q
Java is too old...
RI
17:52
Ruslan Ibragimov
In reply to this message
но вообще я слабо представляю систему с 10к сервисов, с реализациями
SZ
17:52
Sergey Zolotov
в общем
17:53
я не пойму почему все так против спринга)
RI
17:53
Ruslan Ibragimov
нихилый такой монолит
SZ
17:53
Sergey Zolotov
In reply to this message
600тыс+ строк кода
17:53
на котлиновых сервисах там скромнее, по-немногу пхп код уходит в котлин
RI
17:53
Ruslan Ibragimov
ну на spring с автовайрингом у тебя бы это вечность стартовало
17:54
вот тебе и минус
I
17:54
Igor
In reply to this message
Это монолит?
SZ
17:54
Sergey Zolotov
с guice будет быстрее?
R
17:54
Roman Q
In reply to this message
Я за
SZ
17:55
Sergey Zolotov
In reply to this message
смотря что понимается под "монолит"
VD
17:55
Vitalii Dmitriev
In reply to this message
10к, разбитые на микросервисы или в одном большом проекте?
17:56
Ну или хотя бы на модули
SZ
17:56
Sergey Zolotov
все в одном проекте да
RI
17:57
Ruslan Ibragimov
In reply to this message
Я не проверял, но Guice стартует мои приложения достаточно быстро.
17:58
Ну т.е. фиг его знает как он поведет на таких больших числах. А вот спринг и на маленьких не самый быстрый. Причем скорость падает от размера класспаса
SZ
17:59
Sergey Zolotov
у меня спринг бут на 100+- моих бинов стартует за 3-4 секунды
17:59
но там нет jpa и хибера
17:59
с ними сразу +4 секунды сверху
17:59
и там еще undertow на сервлетах
17:59
с netty будет шустрее
18:00
вообще если игрались с spring boot 2, который уже с реактором и нетти у руля, то разницу в старте приложения заметили бы) оно почти моментально стартует из коробки
RI
18:00
Ruslan Ibragimov
Ну это какой-то совсем маленький проект. У меня бут на небольшом приложении стартовал не меньше 10 секунд.
18:01
В то же время приложение на guice (bootique) стартует за суб секунду
SZ
18:02
Sergey Zolotov
пока соотношения скорости старта и того что бут дает из коробки устраивает, как только упрусь в проблемы тогда буду рассматривать другие варианты
18:02
пока только память не нравится
18:02
по 200мб каждый инстанс бута где-то жрет
18:03
при ~30 живых потоках на инстанс
QH
18:45
Quantum Harmonizer
In reply to this message
Это же ты рассказывал, что пустой проект с Guice занимает 100 МБ хипа?
SZ
18:45
Sergey Zolotov
да
18:46
как будет время сделаю тестовый стенд как я это запускал и с какими параметрами jvm
18:46
может ткнете носом)
I
18:53
Igor
А не думали, попробовать Koin/Kodein?
18:54
Deleted Account
юзаю кодеин еще с альфа версии, жду 5.0 , очень доволен)
18:55
всем рекомендую
I
18:59
Igor
In reply to this message
Неплохо он растет по версии, хотя коин тоже быстро эволюционирует тк еще меньше 1.0
А
19:00
Артёмка
Смотрел кодеин и коин и как-то коин больше зашел
19:00
Deleted Account
я koin еще не пробовал но говорят он тоже хорош
I
19:04
Igor
Но с доками там не очень, местами их просто нет (ссылки ведут в никуда)
QH
19:57
Quantum Harmonizer
Делаю хлебные крошки.
В каком месте я упоролся? Можно как-то избежать десятка похожих классов для разной глубины?
19:58
Link<T> умеет рендерить ссылку на страницу с T.
20 February 2018
А
00:18
Артёмка
Ребят, а какую бд лучше заюзать? Бд нужна совсем немного, поэтому посоветуйте то, что можно быстро развернуть и быстро начать юзать
00:18
На сервере на ktor'е
00:20
Может быть какие-то либы есть, чтобы упростить всё взаимодействие с бд
QH
00:22
Quantum Harmonizer
In reply to this message
есть малышка SQLite. Плюс — всё развёртывание заключается в копировании одного файла. Минус — не масштабируется.
00:22
In reply to this message
Я использую kwery, но она довольно специфическая и сырая.
А
00:23
Артёмка
А ещё какие-либо варианты есть? Смотрел pgsql, но чёт перехотел))
QH
00:23
Quantum Harmonizer
In reply to this message
Использую PgSQL, доволен.
А
00:28
Артёмка
Понял. Спасибо
00:38
@Harmonizr а что насчёт этого скажешь? https://github.com/JetBrains/Exposed
QH
00:39
Quantum Harmonizer
А
00:45
Артёмка
хм
QH
00:48
Quantum Harmonizer
может оно и классное, но моё чувство прекрасного ущемляет)
А
01:07
Артёмка
Не могу понять, что я делаю не так. Пытаюсь подключить exposed. Вписываю compile 'org.jetbrains.exposed:exposed:0.9.1', но в проект не добавляется. При этом ещё и варнинг мне выдаёт
RI
01:11
Ruslan Ibragimov
возьми h2
01:11
sqllite совсем уже странно для сервера брать
А
01:14
Артёмка
Я буду юзать pgsql. Но я не могу просто exposed себе в проект поставить
01:22
01:22
Вот такую ошибку получаю
QH
01:23
Quantum Harmonizer
In reply to this message
надо репу добавить
01:23
(кросспост удалил)
А
01:23
Артёмка
Оки. Пробовал добавлять репу, чет не так
01:24
maven {
url "http://dl.bintray.com/kotlin/kotlin"
}
Это добавлять?
01:30
А нет, это уже добавлено. Чёрт
01:35
@Harmonizr можешь подсказать, какую репу добавить, пожалуйста?)
01:39
всё, разобрался :D
Сорри за такие вопросы тупые)
21 February 2018
А
14:50
Артёмка
Привет всем ещё раз)
Столкнулся с проблемой, что когда отправляю в ответ на запрос json, с телефона запросы делаю через ретрофит. При этом ловлю ошибку 406. Для того, чтобы работало, приходится добавлять хедер Accept: application/json вроде бы к запросу в аннотации.
Как-то ведь я должен у себя настроить этот момент на сервере? Но не могу понять как, т.к. особо инфы по ктору мало ещё в гугле.
Json отправляю как написано в примере на ktor.io по использованию gson'а
14:54
И вообще может быть есть какие-то линки у вас на бест практис по работе с json в ktor, кроме семплов?
RI
15:19
Ruslan Ibragimov
Ничего не понял. Что ты делаешь и где проблема.
А
15:37
Артёмка
Ну да, что-то я и для себя самого даже не очень понятно написал.
В общем, на запрос сервер мне отвечает json'ом. Делал по аналогии, как здесь: http://ktor.io/samples/gson.html
Проблема в том, что когда я совершаю запрос с устройства (андроид), то у меня не обрабатывается ответ и показывает ошибку 406 not acceptable.
Эту проблему решаю добавлением хедера к запросу к серверу: @Headers("Accept: application/json"). Но это выглядит, как костыль. Не должен ли сервер как-то сам ставить хедер в ответ, что это json?
RI
15:58
Ruslan Ibragimov
Это не костыль, ktor как-то очень серьезно относится к стандартам (например 418 статус код не хотят добавлять :) ). Так вот, чтобы общаться между клиент сервером есть такой механизм как Content negotiation, который как ты уже понял поддерживается ktor. Цель его - договориться о формате данных.

Т.е. условно у тебя

`domain.com/person`

может возвращать как json, так и xml так и html

поэтому когда ты делаешь запрос ты должен явно указать что ты хочешь.
А
16:00
Артёмка
Ух ты. Понял, спасибо.
А я могу как-то к ответу добавлять свои хедеры от сервера? А то я не могу найти нигде, где б я мог прописать сам хедеры к ответу
RI
16:00
Ruslan Ibragimov
call.response.headers
16:01
еще можешь посмотреть на реализацию DefaultHeaders
А
16:17
Артёмка
In reply to this message
Спасибо, оки
23 February 2018
nt
22:23
nikita tukkel
вопрос про ktor,

есть rest-приложение, простое, типа этого:
https://github.com/ktorio/ktor/blob/master/ktor-samples/ktor-samples-jackson/src/io/ktor/samples/jackson/JacksonApplication.kt

и тест для него, тоже простой, типа этого:
https://github.com/ktorio/ktor/blob/master/ktor-samples/ktor-samples-testable/test/io/ktor/samples/testable/tests/ApplicationTest.kt

для тех URL'ов приложения, которые просто возвращают какой-то текст, тест работает нормально, а для тех, где через call.respond(мой объект)) возвращается json, в тесте приложение выкидывает
406 Not Acceptable

при нормальном запуске приложение работает правильно. как починить тесты?
QH
22:38
Quantum Harmonizer
In reply to this message
Думаю, дело в заголовках Accept.
nt
22:39
nikita tukkel
тоже копаю в этом направлении, но пока неудачно
22:44
все, домучал, вот так внутри теста заработало:
(теперь кажется очевидным, хех)
26 February 2018
А
10:39
Артёмка
Псс, ребят, а кто что юзает для мониторинга сервера на кторе? Или вообще для мониторинга jvm на ваших серваках?
RI
10:46
Ruslan Ibragimov
In reply to this message
Оп
А
11:06
Артёмка
А можно линк?
RI
14:08
Ruslan Ibragimov
На что? На прометус?
А
14:08
Артёмка
In reply to this message
а что значит это "оп"?)
RI
14:09
Ruslan Ibragimov
это значит что посмотри сообщение в реплае)
А
14:09
Артёмка
тьфу блин, простите)
RI
14:16
Ruslan Ibragimov
RI
Ruslan Ibragimov 26.02.2018 14:01:13
Я тут упоролся немного и сделал весь бекенд на корутинах
14:16
14:16
Вот так пишу хендлер
14:16
все вызовы сервисов - suspend
14:16
И потом объявляю рутовый хендлер
14:16
14:16
В итоге у меня все на корутинах
14:16
Под запросы в базу выделил elastic контекст
14:16
DT
14:23
Dmitry Tsydzik
норм
А
14:25
Артёмка
ух
14:28
Хотелось бы что-то в этом понять))
14:28
Не, ну как сказать что-то. Что-то понимаю, а что-то вот совсем нет(
RE
15:38
Roman Elizarov
In reply to this message
И как ощущения? Кстати, глядя на скриншоты возникает вопрос почему используется Java-style цепные builders вида something.get(...).post(...). ... а не Kotlin-style DSL вида something { get(...) post(...) ... }?
RI
15:46
Ruslan Ibragimov
In reply to this message
> И как ощущения?

Ну в целом хорошо, я уже давно использовал корутины тут, но теперь не только там где хендлеры работали как прокси (запрос -> http client -> ответ), а еще и в стандартных хендлерах которые ходят в базу. Подсмотрел реализацию jsonWrapper у ктор кстати, так действительно удобно отдавать данные (раньше ручками в хендлере использовал objectMapper).

Пока из минусов - захломил немного методы в сервисах оберткой withContext.

> Кстати, глядя на скриншоты возникает вопрос почему используется Java-style цепные builders вида something.get(...).post(...). ... а не Kotlin-style DSL вида something { get(...) post(...) ... }?

Вот как раз в том месте используется синхронный, стандартный RoutingHandler (https://github.com/undertow-io/undertow/blob/master/core/src/main/java/io/undertow/server/RoutingHandler.java#L40)

Т.е. у меня есть набор IoThread в которых идет первоначальная обработка (чтение запроса undertow и роутинг в данном случае), потом идут мои хендлеры - в них я диспатчу запрос из Io в свой тред пул (для них я выделил обычный fixed контекст по количеству тредов), и запросы в базу я делаю в elastic.
RE
15:54
Roman Elizarov
А еще никто undertow-kotlin не запилил с Kotlin DSL для него?
RI
16:02
Ruslan Ibragimov
А зачем? В этом месте и так хорошо.
Куда важнее иметь стандартные варианты хендлеров которые с корутинами. Т.е. асинхронный HttpHandler и HttpHandlerWrapper. И соответсвенно адаптации стандартных хенделеров.

Т.е. условно говоря есть стандартный https://github.com/undertow-io/undertow/blob/master/core/src/main/java/io/undertow/util/ChainedHandlerWrapper.java#L40

но я его не могу использовать, т.к. я не могу использовать HttpHandler. И поэтому у меня свои велосипеды на все случаи:

class ChainedCoroutinesHandlerWrapper(
private vararg val handlers: CoroutinesHandlerWrapper
) : CoroutinesHandlerWrapper {
override fun wrap(handler: CoroutinesHandler): CoroutinesHandler {
return handlers.foldRight(handler) { wrapper, wrappedHandler ->
wrapper.wrap(wrappedHandler)
}
}
}


interface CoroutinesHandler {
suspend fun handleRequest(exchange: HttpServerExchange)
}


interface CoroutinesHandlerWrapper {
fun wrap(handler: CoroutinesHandler): CoroutinesHandler
}
27 February 2018
А
20:44
Артёмка
Ребят, а вы тесты пишете, когда на кторе что-либо делаете?
RI
20:47
Ruslan Ibragimov
(ну тут вопрос шире, пишете ли вы тесты вообще 🌚)
А
20:50
Артёмка
Ну или так
RI
23:46
Ruslan Ibragimov
Ну ладно, раз все молчат, то буду отдуваться за всех - грешен, иногда пишу тесты)
А
23:48
Артёмка
Просто интересно, несколько это необходимо.
28 February 2018
RI
00:56
Ruslan Ibragimov
Ну в целом это нужный скил который делает твой код лучше.
01:03
Дальше можно рассуждать почему проекты не имеют тестов вообще или не имеют 100% покрытия, и что 100% покрытие еще ничего не значит.
А
01:05
Артёмка
Хм. Надо бы тогда поучиться тесты писать
01:06
Но ведь код, покрытый тестами != хороший код?
RI
01:07
Ruslan Ibragimov
Если код тестируется - это хороший знак.
01:07
Это значит что ты написал в функциональном стиле, или использовал DI и у тебя инверсия контроля.
А
01:09
Артёмка
Почему все так любят эти DI?
01:09
Куда ни глянь, почти везде dagger, koin, kodein и т.д.
RI
01:10
Ruslan Ibragimov
Потому что это достаточно удобный способ писать тестируемый код
А
01:16
Артёмка
получается только лишь для того, чтобы писать тесты?
RI
01:37
Ruslan Ibragimov
Нет, просто это взаимосвязанные вещи
А
01:37
Артёмка
Понятно, спасибо
RI
01:40
Ruslan Ibragimov
Ну вот для примера, у меня есть такой вот сервис
01:40
01:40
я использую DI чтобы заинжектить config из которого возьму ключ (secret)
01:42
01:42
А в тесте я могу передать какой-то конфиг и протестировать работу сервиса
01:42
по факту secret прилетает из System.getenv("NAME_OF_ENV_VAR")
А
01:43
Артёмка
хм, прикольно)
RI
01:43
Ruslan Ibragimov
и я бы мог прямо в сервисе сделать вызов этого getenv
01:43
01:44
но тогда бы не смог так протестировать код
01:45
Вот на пальцах зачем DI, как можно тестировать и почему тесты улучшают качество кода
DT
15:23
Dmitry Tsydzik
иногда вместо написания тестов достаточно предположить, а как код можно протестировать. если код сложно тестировать, скорее всего, это такой себе код
I
15:32
Igor
In reply to this message
А мог бы параметром передать “key” прям в функцию
и не потребовалось бы ни интерфейсов ни моков.
RI
15:34
Ruslan Ibragimov
In reply to this message
Ну тогда его вызывающий код должен был бы получить из конфига, и его в свою очередь стало бы сложнее тестировать 🤔 ну или колличество параметров выросло
BV
19:26
Boris Vanin
Я в часто пишу утилиты и делаю Ди для них просто руками просто передавая всё в конструктор, удобно очень
QH
20:44
Quantum Harmonizer
In reply to this message
есть примеры?
1 March 2018
BV
04:46
Boris Vanin
In reply to this message
Это всё в закрытых репах, но там нечего показывать. Просто в создаёшь или в методе или в классе все зависимости подряд и передашь в конструкторы то что создал до этого
DS
10:13
Dmitriy Shishmakov
Тесты ещё можно рассматривать как открытую документацию. Хорошее сопровождение улучшает понимание проекта.
10:13
Бывает что-то забудешь, посмотришь в тесты и всё сразу понятно
SS
10:15
Stanislav Slavin
Тесты - это спецификация вашей бизнес логики. Потому что даже если потеряется код с бизнес-логикой, но останутся тесты, которые ее покрывают, то по ним можно будет все восстановить.
RI
10:15
Ruslan Ibragimov
10:16
Undertow больше не лайтвейт
10:20
Вторую версию зарелизили, но дока еще по сути старая http://undertow.io/undertow-docs/undertow-docs-2.0.0/index.html http://undertow.io/blog/2018/03/01/Undertow-2.html
VD
11:09
Vitalii Dmitriev
In reply to this message
Он уже давненько не очень легковесный 🌚
RI
11:10
Ruslan Ibragimov
надо померять. но хип он дейсвительно почти не ест
Lev Shagalov invited Lev Shagalov
6 March 2018
Andrey Sidorenko invited Andrey Sidorenko
VM
13:02
Vitaliy Mikhailov
Товарищи, разъясните что я не так делаю.
Есть SpringBoot 1.5.3 + Kotlin
Из сервиса делаем запрос через RestTemplate - postForObject.
Но тут вылезла проблема. PostForObject принимает класс, НО
val t = object : ParameterizedTypeReference<Map<String,Any>>(){}
t.type.javaClass

Возвращает вообще не то. Никаким боком не получается получить класс от сюда.
Получилось использовать метод exchange, но он принимает ParameterizedTypeReference. Но вот мне он не нужен в данном случае.
Что можно сделать?
QH
13:03
Quantum Harmonizer
Вообще не знаю, о каком API тут речь, но в .javaClass будет анонимный подкласс ParameterizedTypeReference.
13:06
Видимо про вот этот. Он принимает класс, а в классе не хранится информации о параметрах
VM
13:07
Vitaliy Mikhailov
Да, всё верно. Я этот метод выываю.
RI
13:07
Ruslan Ibragimov
т.е. все равно что делать Map::class.java или Map.class в джаве
VM
13:08
Vitaliy Mikhailov
то как я пытаюсь получить класс - возвращает
class sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
RI
13:09
Ruslan Ibragimov
Ну короче чтобы jackson смог конверить в мапу с правильными параметрами ему нужен ParameterizedType вроде. ParameterizedType : Type и Class : Type
13:10
я не уверен что это API может вот так
13:10
если может, и ты знаешь как это сделать например на джаве - покажи и на котлин перевести не проблема будет
VM
13:11
Vitaliy Mikhailov
На джаве оно как раз так и делается. Это я попытался своими силами на котлин перевести. Сейчас на джаве покажу.
QH
13:11
Quantum Harmonizer
In reply to this message
Code -> convert Java file to Kotlin file
VM
13:22
Vitaliy Mikhailov
Хм, действительно, я походу чего то напутал со всем этим. Оно и в яве так и работает. Я почему то помню что где то уже так делал, наверное это был не RestTemplate. Прошу прощения за беспокойство.
7 March 2018
YR invited YR
8 March 2018
MansorY invited MansorY
Bogdan Panchenko invited Bogdan Panchenko
Dima invited Dima
D
23:19
Dima
Привет, расскажите о чем группа?
23:20
И в чем отличие от основной группы о котлин?
QH
23:20
Quantum Harmonizer
см. описание
M
23:20
MansorY
In reply to this message
Кинь основную
QH
23:21
Quantum Harmonizer
In reply to this message
см. описание
M
23:23
MansorY
In reply to this message
Котлин еще не допилен до уровня java?
BP
23:23
Bogdan Panchenko
@Harmonizr а давно эту создали? Или изначально была ?
QH
23:23
Quantum Harmonizer
In reply to this message
Это что значит?
23:23
In reply to this message
Не очень.
M
23:24
MansorY
In reply to this message
Писали вроде, что котлин полность java-y не заменяет еще
QH
23:24
Quantum Harmonizer
In reply to this message
Кто писал, как аргументировал?
M
23:25
MansorY
In reply to this message
Вроде на хабре или гитаймсп, точно не помню
23:25
In reply to this message
Типо некоторые фишки не раблтают
D
23:25
Dima
In reply to this message
Конечно
BP
23:26
Bogdan Panchenko
In reply to this message
дата публиции очень важна)
QH
23:26
Quantum Harmonizer
In reply to this message
Да уж, очень информативно.
M
23:27
MansorY
In reply to this message
Ну извени, не запоминаю ссылки.))
BP
23:49
Bogdan Panchenko
у меня довольно глупый вопрос, возник он давно, но не решался его задать. Если у меня есть список и мне к нему нужно прмить filter, нужно ли мне делать asSequence, и если у меня кро фильтровки еще некоторые действия идут ?
QH
23:52
Quantum Harmonizer
In reply to this message
Сиквенсы работают как стримы. Если нужно больше одного действия, сиквенсы не создают промежуточные коллекции и будут дешевле.
BP
23:52
Bogdan Panchenko
In reply to this message
спасибо
9 March 2018
SZ
00:01
Sergey Zolotov
In reply to this message
тут за всякие спринги и кторы затираем
D
00:02
Dima
Я прочитал уже.
SZ
00:02
Sergey Zolotov
в общем котлин на бекенде
RI
00:03
Ruslan Ibragimov
In reply to this message
Но у них есть константная стоимость как и у стримов, так что если небольшие коллекции то выйгрыша не будет от стримов/сиквенсов. Тут как раз инлайн стандартных коллекциц решает
QH
00:04
Quantum Harmonizer
In reply to this message
А client-side — FX, например?
VD
00:04
Vitalii Dmitriev
In reply to this message
Не только, скорее везде, где есть настоящая JVM.
Aleksei Korzhenkov invited Aleksei Korzhenkov
10 March 2018
Dave invited Dave
12 March 2018
BP
03:08
Bogdan Panchenko
кто может объяснить зачем котлин-компилятор делает дополнительный ресивер ?
03:09
код вызова
03:09
в итоге 2 переменые вместо одной
QH
08:18
Quantum Harmonizer
In reply to this message
Такое происходит в месте, где встраивается тело inline-функции. Просто особенность такая.
BV
11:48
Boris Vanin
жвм это всё равно скорее всего выбросит, так что не думаю, что тут есть причины для паники
QH
11:50
Quantum Harmonizer
In reply to this message
Да, работает приблизительно одинаково, что с перекладыванием из переменной в переменную, что без.
BP
11:50
Bogdan Panchenko
In reply to this message
Я не паникую, просто интересно
Deleted Account invited Deleted Account
16 March 2018
Aleksandr invited Aleksandr
Oleg Yukhnevich invited Oleg Yukhnevich
Dmitrii Zavorin invited Dmitrii Zavorin
Алина Долгих invited Алина Долгих
Kira Alche invited Kira Alche
meanmail invited meanmail
Highway Police invited Highway Police
Valeriy invited Valeriy
Pavel Chernyak invited Pavel Chernyak
Ivan Vinogradov invited Ivan Vinogradov
Кирилл Романенко invited Кирилл Романенко
25 March 2018
Deleted Account invited Deleted Account
2 April 2018
VD
10:14
Vitalii Dmitriev
Кто-нибудь уже работал с девятым томкатом?
Есть подводные камни?
Готов для пода?
PC
10:15
Pavel Chernyak
Для пода в кубере вполне готов. А так - работает.
RI
11:02
Ruslan Ibragimov
In reply to this message
А зачем сегодня томкатом пользоваться?
VD
11:02
Vitalii Dmitriev
Деплоить варки 🌚
RI
11:03
Ruslan Ibragimov
А зачем war-ки делать?
D
11:03
Dima
почему не фэт джар?
VD
11:03
Vitalii Dmitriev
In reply to this message
Потому что сделаны до нас.
RI
11:03
Ruslan Ibragimov
А, легаси. Ну ладно
11:04
In reply to this message
А как fat jar и jigsaw дружат? Я уже давно перешел на installDist в gradle, так и в докер лучше слоями ложится
D
11:05
Dima
не в курсе, у меня знакомство с 9-кой началось с незапускаемого андертоу
11:05
In reply to this message
где бы прочитать про это?
RI
11:05
Ruslan Ibragimov
У меня undertow + kotlin на девятке без проблем завелись
5 April 2018
R
09:13
Roman Q
На java 10 вылетает ошибка на шаге kotlin compiling при сборке gradle'ом.
BV
09:16
Boris Vanin
In reply to this message
По этому поводу лучше баг завести
09:16
kotl.in/issue если я правильно помню
R
09:32
Roman Q
Согласен, постараюсь на выходных
7 April 2018
Никита 🙃 invited Никита 🙃
Н
22:19
Никита 🙃
Всем привет!
Я тут из ведра пытаюсь пересесть на бэк и решил упороться в ktor.io. Так вот, что можете посоветовать в БД для андроид-разраба знакомого с ObjectBox только, да Realm'ом немного и что бы с Ktor'ом хорошо дружило?
I
22:25
Igor
Те NoSQL? Ну mongodb, только хз как оно с котлином
QH
22:25
Quantum Harmonizer
фу, монга же без схемы
Н
22:26
Никита 🙃
In reply to this message
Слышал что то о ней краем уха, но в сети нашёл только или MongoDB + Spring или всякие порты Монго на котлин, чёт такое
I
22:28
Igor
In reply to this message
Так это же и есть ее плюс 🌚
22:29
Нах нужны схемы, когда можно замутить CQRS + Event Soursing
Н
22:32
Никита 🙃
А может SQLite взять?)
22:39
Кстати, а насколько ktor готов для использования в проде?
QH
22:40
Quantum Harmonizer
In reply to this message
ну, он работает
22:41
In reply to this message
для меня основной его минус — нелюбовь к UUID, к которым я так привык
Н
22:41
Никита 🙃
Ну, я впервые об этом слышу, так что для меня норм)
Но я потыкал, выглядит в целом не так тяжело как я думал и интересно)
23:00
Deleted Account
А ktor где нибудь уже используется в компаниях? Не в рамках пет прожектов
Н
23:05
Никита 🙃
In reply to this message
Вряд-ли. Даже на офф сайте страница с опен соурсными репами пустая
23:05
QH
23:06
Quantum Harmonizer
о, надо добавить мой. Я и не знал, что эта страница есть
8 April 2018
VP
08:28
Vladimir Petrakovich
In reply to this message
Есть экспериментальный Exposed (для Kotlin), есть вся экосистема Java - JDBC, jOOQ, Hibernate (советую второе), для MongoDB официальный асинхронный драйвер (неблокирующий), который можно подружить с корутинами.
А
10:46
Артёмка
graphql :D
Н
10:47
Никита 🙃
In reply to this message
Спасибо)
VD
11:39
Vitalii Dmitriev
In reply to this message
Плюсую за jooq. Либо можно взять JDBC, если в учебных целях, поразбираться с ним клёво, если не трогал. Потом можно будет переписать (а можно будет и не переписывать).
D
13:03
Dima
помимо спринга, что в качестве di используете?
RI
13:11
Ruslan Ibragimov
Guice
D
13:16
Dima
А расскажите пожалуйста сценарии для ktor?Кто-нибудь использовал? Хотелось бы котлин попробовать с каким-нибудь родным фреймворком. Ну и как гусь себя чувствует в связке с ним.
RI
13:34
Ruslan Ibragimov
Не очень понял вопрос
DY
13:39
Danil Y.
In reply to this message
в репозитории ktor есть сэмпл с guice https://github.com/ktorio/ktor/tree/master/ktor-samples/ktor-samples-guice
D
13:51
Dima
In reply to this message
спасибо, смотрю
RI
14:30
Ruslan Ibragimov
Сэмпл с джусом там так себе, не добавляет простоты и понимаемости как мне кажется
KA
14:34
Kira Alche
In reply to this message
Даже залез почитать код.. думаешь можно было попроще гуся туда засунуть?
D
15:00
Dima
In reply to this message
хочу поднять альтернативу спринг+джава на котлине
15:01
для расширения кругозора
15:01
знакомые говорили ктор популярность набирает в котлин коммьюнити
RI
15:16
Ruslan Ibragimov
ktor это не замена спринга
KA
15:18
Kira Alche
Spring MVC заменить может
15:21
In reply to this message
Под какой кейс?
D
16:46
Dima
In reply to this message
Руслан, какие кейсы тогда покрывает этот фреймворк, можно простые примеры?
RI
16:59
Ruslan Ibragimov
+- Все которые покрывает типичный web framework, но с тем отличием что тут честный асинхронный сервер-клиент заточенный под написание кода с корутинами
VD
17:12
Vitalii Dmitriev
In reply to this message
Spring + Kotlin
10 April 2018
Н
11:52
Никита 🙃
А не подскажите, может знает кто пример какой ktor + Hibernate/jooq + Gradle? А то как то тяжело пошло изучение доков этого всего поcле смузийного ObjectBox ведра :) Слишком много каких то траблов у меня с этим всем 😅
VP
11:53
Vladimir Petrakovich
In reply to this message
А какие траблы, если это всё перпендикулярно?
jOOQ + Gradle в официальной доке есть.
ktor с этим вообще не связан (ktor + gradle тоже в доке).
VD
11:56
Vitalii Dmitriev
In reply to this message
Провайдишь зависимсти любой библиотеки в dependencies Gradle для проекта. Посмотри, указан ли у тебя нужный репозиторий в repositories.
Н
11:59
Никита 🙃
In reply to this message
Да там офф дока на 300+ страниц А4😅
VD
12:00
Vitalii Dmitriev
Тебе ж не всю читать, только про подключение.
VP
12:00
Vladimir Petrakovich
In reply to this message
Ну да, есть такое. Так там не только про то, как его скрестить с gradle)
P.S. Всё равно придётся всю читать скорее всего
Н
12:01
Никита 🙃
 Running the code generator with Gradle

Я так понял это немного не то?
(сорь за дурацкие вопросы, самого такие бесят, но чёт туплю(
12:01
In reply to this message
Да я так, небольшой пет проект хочу сделать всего лишь 😅
VP
12:03
Vladimir Petrakovich
In reply to this message
Ну да, плюс в каждом разделе про кодогенератор написано, как это конфигурить в gradle
11 April 2018
DZ
22:04
Dmitrii Zavorin
22:04
Всем, хай, кто может подсказать, чяднт?
22:05
это ktor-exercises
AS
22:34
Andrey Sidorenko
Не уверен, но полагаю что location требуется для subroute'ов
Но тип для get все равно требуется указывать

То есть конкретно в данном примере не нужно location<MovieInfo> { ... }
Достаточно обойтись get<MovieInfo> { ... }
22:36
То есть, полагаю, в случае если останется location<MovieInfo> { get<MovieInfo> { ... } } путь будет таким:
/movie/{name}/movie/{name}
12 April 2018
Olha invited Olha
BP
17:53
Bogdan Panchenko
ребят как думаете стоит отавит так или сдель отдельный класс, в вен потом будет добавлятся
propertyEditorFactory = object : DefaultPropertyEditorFactory() {
override fun call(item: PropertySheet.Item?): PropertyEditor<*> {
return when (item) {
is UserItem -> P()
else -> super.call(item)
}
}
}
15 April 2018
BV
19:57
Boris Vanin
есть такой вопрос для людей, которые используют ктор. Если у меня есть эндпоинт типа entity/{id}, есть ли какой-то вменяемый достаточно автоматический способ получить этот id в переменую в обработчике?
20:06
хотел наконце посмотреть ктор и дай-ка думаю заодно посмотрю какое-то не-релейшнл решение для хранения, начал гуглить и вижу xodus от джетбрейнз, думаю, ну наверняка крутая штука -- эмбеддбл и nosql -- прям как я в поиск вбивал, поплевался, поплевался и снес. такая история. поставил монгу, у неё и корутины для асинхронного клиента и маппинг в дата-классы, жаль только эмбеддед в джаве не умеет работать :-)
AS
20:19
Aλexander Syrotenko
Я попробовал ktor, и остался прям совсем не в восторге. Наверняка, я не понял как его готовить, и пересел в том проекте на спринг бут + котлин, вышло неплохо
BV
20:24
Boris Vanin
просто со спрингом+котлин всё ясно -- это очень хорошая связка, я-то пытаюсь посмотреть новое что-то
20:25
типа легковесных каких-то решений, хотя оно уже натянуло столько либ, что я бы легковесным его не стал называть :-)))
20:26
пока сам ктор мне норм, нравится, что он очень просто и гибко конфигурится прямо из кода, что он из коробки саспендбл, но вот не всё прозрачно с параметрами пока и некоторыми мелочами
20:26
запускается быстро
BP
20:27
Bogdan Panchenko
In reply to this message
Пока доков и примеров нет, важно пробовать и работать с ними, джб работает с комюнити
QH
20:27
Quantum Harmonizer
примеры есть
BV
20:27
Boris Vanin
примеры чего?
20:27
аа
20:27
понял
20:27
ну как, вообще там доки худо-бедно есть
BP
20:28
Bogdan Panchenko
Под конкретную задучу, объединять то наша задача
AS
20:31
Aλexander Syrotenko
In reply to this message
Вот мне очень хотелось бы увидеть нечто вроде express из мира ноды, очень годный веб-фреймворчек
20:31
Хотя, опять-таки, я наверное где-то ошибся, и не так его сварил
BV
20:33
Boris Vanin
ну а что там не так? с параметрами конечно не очень удобно, видимо это единственный способ из коробки:
val login = call.parameters["login"]
QH
20:33
Quantum Harmonizer
!!
AS
20:38
Aλexander Syrotenko
In reply to this message
Отдача фронтэнда, со статическими файлами вышел каламбур
20:39
Может, right way это написание HTML через Kotlinx.html, но я делал не так
QH
20:39
Quantum Harmonizer
In reply to this message
а что с ними?
20:40
In reply to this message
шаблоны я на нём и писал, клёво
BV
20:40
Boris Vanin
ну, мне вот тоже надо статическую папку отдавать
AS
20:40
Aλexander Syrotenko
In reply to this message
Да я ж тебя как раз и спрашивал за это, день мудохался, пока не получилось
BV
20:40
Boris Vanin
я пока еще до этого не дошел
QH
20:40
Quantum Harmonizer
In reply to this message
память как у рыбки(
AS
20:40
Aλexander Syrotenko
Забей, это не то, что надо помнить)
16 April 2018
SZ
11:38
Sergey Zolotov
сколько минимум памяти нужно ktor в проде?
11:38
конечная память, вместе с метаспейсом, нативной памятью и тд
11:38
то что Xmx16M поставить можно то понятно)
QH
11:39
Quantum Harmonizer
In reply to this message
Это же всё от приложения зависит.
SZ
11:39
Sergey Zolotov
ну скажем хеллоу ворлд типа такого https://github.com/ktorio/ktor/tree/master/ktor-samples/ktor-samples-youkube
QH
11:40
Quantum Harmonizer
In reply to this message
C -Xmx16M ... 32M жить будет. Сколько при этом нативщины и метаспейса — не знаю.
SZ
11:40
Sergey Zolotov
спринг бут с Xmx24M всего 200мб кушает
11:40
ну, 192 если быть точнее
11:41
это на netty
17 April 2018
Oleg Klimenko invited Oleg Klimenko
Н
13:09
Никита 🙃
In reply to this message
Увидел что ты используешь ehcache для БД, да?
А данные не потеряются, если сервер упадёт?
13:09
(я джун, который ничего не понимает, но которому интересно)
13:12
Упс. Это не твоё. Кажется я ещё не проснулся
Н
15:18
Никита 🙃
Помогите джуну. Смотрю Exposed от JetBrains.
Там что бы подключить её приведёт такой пример:
Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

На фоне этого у меня вопрос:
1. Где можно почитать и понять что туда надо писать?
AV
15:20
Anton Vlasov
In reply to this message
о. я ковырял, ща
DY
15:21
Danil Y.
это jdbc url и полное имя класса jdbc драйвера
15:21
что писать - зависит от БД
AV
15:22
Anton Vlasov
а нет, я все потерял - не скину.
но там за часа два гугления все разбирается
в кратце нужен бд драйвер для твоей бд, как джарник подключить
потом коннектится к нему как указано в доке откуда ты ее скачал
Н
15:23
Никита 🙃
Свучит сложно, пойду смотреть. Спасибо.
15:23
In reply to this message
А какую ты выбрал?
AV
15:23
Anton Vlasov
Постгресе
15:23
Там вся магия для меня была именно в этих строчках для БД, а остальное норм
Н
15:24
Никита 🙃
In reply to this message
А она норм для джуна?
AV
15:24
Anton Vlasov
Я в бд знаю только один курс универа, так что норм, че бы нет. разберешься)
15:24
во всяком случае, у тебя целое комьюнити чтобы научиться
15:25
h2 бд она все в одном текстовом файлике хранит вроде и только для тестов юзается обычно
Н
15:26
Никита 🙃
Окей, посмотрю)
( У меня прям сейчас идёт курс по бд в универе, а я сижу на галере, вёсла гребу :) )
BP
16:30
Bogdan Panchenko
In reply to this message
Не знаю что такое сам, а тест название твоей бд
Deleted Account invited Deleted Account
18 April 2018
BV
23:57
Boris Vanin
Оказалось, что статический ресурс в кторе процессить очень просто
23:58
У Call-а есть метод который создаёт ресурс, его в респонд отдаёшь и радуешься
19 April 2018
KA
17:47
Kira Alche
In reply to this message
А папку с ресурсами так можно?
BV
18:25
Boris Vanin
Ну.. можно, такой хендлер для звёздочки сделать
KA
21:11
Kira Alche
Жизнь налаживается
20 April 2018
DS
14:05
Dmitriy Shishmakov
Подскажите какую маленькую БД сейчас модно использовать в 2018 с поддержкой транзакций? Данные должны жить в памяти после старта процесса. SQLite ли до сих пор?)
RI
14:06
Ruslan Ibragimov
В h2 есть транзакции?
KA
14:07
Kira Alche
Вроде на месте
D
16:33
Dima
In reply to this message
h2, но она однопоточная в эмбеддед режиме
QH
16:50
Quantum Harmonizer
SQLite тоже однопоточная
21 April 2018
QH
17:56
Quantum Harmonizer
O_0 нельзя захватить write lock, пока этим же потоком захвачена read lock. Баг JDK?
BP
17:58
Bogdan Panchenko
In reply to this message
ну вроде на то они и блокировки
I
18:08
Igor
In reply to this message
Это фича 🌚
BV
18:35
Boris Vanin
In reply to this message
Конечно нельзя, как можно безопасно читать если ты в это время будешь писать?
BP
18:35
Bogdan Panchenko
In reply to this message
+, купил книгу по жавке, а автор ее переписал)
QH
18:37
Quantum Harmonizer
ну, я ведь в этом же потоке читаю
18:37
ожидаемо, что буду видеть dirty state
18:37
хоть бы исключение кидало вместо дедлока
BP
18:37
Bogdan Panchenko
In reply to this message
а оно не знает в каком ты потоке хоешь читать как я понимаю
18:38
In reply to this message
+
18:38
или в лог выводило
BV
18:40
Boris Vanin
In reply to this message
Т.е. ты пытаешься ридлок внутри райтлока взять?
QH
18:40
Quantum Harmonizer
In reply to this message
наоборот
18:41
я уже читаю, и тут становится понятно, что надо записать
BV
18:41
Boris Vanin
In reply to this message
Тогда надо райтлок брать, если писать собираешься
QH
18:41
Quantum Harmonizer
In reply to this message
так я заранее не знаю, собираюсь ли)
BP
18:41
Bogdan Panchenko
In reply to this message
ну тогда, я так думаю, это просто недорабтка
QH
18:42
Quantum Harmonizer
под ридлоком я делаю CASы из произвольного количества потоков, и при определённых условиях мне нужно взять райтлок, и пусть весь мир подождёт
BP
18:42
Bogdan Panchenko
In reply to this message
ну если не бдуешь просто непиши, или так нельзя?
BV
18:42
Boris Vanin
In reply to this message
Ну а ждк и подавно не знает 😁
QH
18:42
Quantum Harmonizer
In reply to this message
Если не буду, не пишу. А если буду?)
BP
18:43
Bogdan Panchenko
In reply to this message
не я прото, врайт блок дает возможность читать?
QH
18:44
Quantum Harmonizer
In reply to this message
да, но я не могу захватывать его каждый раз, когда есть шанс, что мне понадобится записать
BV
18:44
Boris Vanin
In reply to this message
Так зачем тебе ридлок с касами?
18:45
In reply to this message
Выбери себе что-то одно или локи или касы
QH
18:45
Quantum Harmonizer
In reply to this message
вообще не вариант
BV
18:52
Boris Vanin
In reply to this message
Не понимаю как ты их совмещаешь
18:52
Если ты всё рано взял ридлок, зачем тебе кас?
QH
18:53
Quantum Harmonizer
In reply to this message
потому что ридлок могут захватить много потоков одновременно
BP
18:54
Bogdan Panchenko
In reply to this message
у тебя задача типа много кто читает, но иногда нужно записать, и что бы эту запись увидели все кто читают? +-
BV
18:55
Boris Vanin
In reply to this message
И что? Кас то ты как используешь?
QH
18:55
Quantum Harmonizer
In reply to this message
много кто пишет (под ридлоком касами, ага), но иногда кто-то такое запишет, что всем придётся подождать
18:55
In reply to this message
Ну, по назначению. Обновляю значение под гонкой.
BV
18:56
Boris Vanin
In reply to this message
Ты же не читаешь в это время эти значения под ридлоком?
QH
18:57
Quantum Harmonizer
In reply to this message
CAS, т. е. и читаю, и пишу
BP
18:58
Bogdan Panchenko
@fogone я насколько понял, это что то типа доступа к фалу зразу нескольких пользаветелей, читать могут все, но иногда кто-то да что-то запишет
QH
18:59
Quantum Harmonizer
но только все пишут)
BP
18:59
Bogdan Panchenko
если что меня поправят
19:01
In reply to this message
на работе похожая фишка, отдел, из 5-ти человек работает с ексель файлом, много кто пишет, но в разные ячейки. Нет альтернативных либ?
19:01
потомучто врядли без костылей это обойдешь
19:02
можно написать свои функции, которые имеют аналогичный код тоько без проверку на блокировку рид
BV
19:04
Boris Vanin
In reply to this message
Я ничего не понял, так как ты используешь и кас и Лок одновременно?
19:06
У меня есть подозрение, что ты делаешь что-то не то
QH
19:10
Quantum Harmonizer
На примере той же таблицы.
Чтобы писать в ячейку, захватывается ридлок. Стопицот потоков имеют возможность писать в ячейки одновременно, используя CAS.
Но первый, кто записывает инфу, и последний, кто стирает, должны выполнить дополнительные действия однопоточно, под райтлоком.
BV
19:12
Boris Vanin
In reply to this message
Это не ответ на мой вопрос
19:13
Не понимаю зачем брать ридлок, чтобы потом писать касом, только чтобы потом райтлок можно было взять?
QH
19:15
Quantum Harmonizer
А что нужно брать, чтобы писать касом? В нормальной ситуации — ничего. Но мне нужно иметь возможность заставить всех ждать.
BV
19:23
Boris Vanin
In reply to this message
Ну да, чтобы писать касом брать ничего не надо. Блин, надо идти, напишу, когда вернусь
19:23
Сори
BV
20:40
Boris Vanin
In reply to this message
Ох, там серьезно кода
BV
21:03
Boris Vanin
Интересно, расскажи, что ты пытаешься сделать? Обработать параллельную установку значения?
QH
21:08
Quantum Harmonizer
In reply to this message
Пишу очередную реализацию ФРП.
На некий сабджект можно подписаться и отписаться. Здесь...
val a = concurrentMutablePropertyOf("hello")
val b = a.map(String::toUpperCase)

...значение b вычисляется из значения a, т. е. b должен быть подписан на a. Но имеет смысл подписываться только тогда, когда на b тоже хоть кто-нибудь подписан, в противном случае лучше стать добычей для сборщика мусора.
Добавление/удаление подписчиков отлично работает параллельно, с помощью CAS. Но когда подписывается первый, надо подписаться на оригинал, а когда последний отписывается, надо отписаться. И если кто-то будет дрочить подписку/отписку первого подписчика под гонкой, есть большая вероятность неправильно подписаться/отписаться, поэтому это единственное место, которое не lock-free.
BV
21:12
Boris Vanin
Аха, теперь сильно понятней стало
21:15
Я бы сделал блокировку на подписку/отписку, почему ты решил тут касы использовать? Да и почему думаешь на это место будет какая-то бешеная нагрузка?
QH
21:16
Quantum Harmonizer
делаю касы потому что могу)
21:17
блокировки всё-таки дорого захватывать, пачку подписал — уже притормозил
BV
21:23
Boris Vanin
Ну вот я с джавафх работал, там подписка и отписка это не такая уж частая операция, если только ты конечно не для игрового движка делаешь, но там кадровая специфика
QH
21:25
Quantum Harmonizer
In reply to this message
Вдохновлялся JavaFX как раз :)
Делаю для всего, в т. ч. Android. При создании вьюхи — пачка подписок.
BV
21:26
Boris Vanin
In reply to this message
Но ты же все равно берешь блокировку, пусть и на чтение
QH
21:26
Quantum Harmonizer
ага 😿
BV
21:27
Boris Vanin
In reply to this message
Пачка это сколько? Да и будут ли они в разных потоках?
QH
21:27
Quantum Harmonizer
In reply to this message
Не будут в разных. Многопоточные проперти вообще только для application-level.
BV
21:30
Boris Vanin
Мой тебе совет сделать разные реализации для многопоточного и однопоточного доступа, и в многопоточном просто брать блокировку на запись во время подписки/отписки
21:32
Это не так долго как может показаться, ведь это не такая уж частая операция сравнительно с обновлением значений обычно
21:41
Может это то место которое стоит оптимизировать по необходимости, ведь канкаренси это сложно, сложная канкаренси добавляет кучу неявных багов и проблем
QH
21:42
Quantum Harmonizer
In reply to this message
Там довольно хитрым образом одни и те же классы используются для одно- и многопоточки ;)
BV
21:48
Boris Vanin
Ну да, я это понял, такому сложному коду нужно упрощение, обычно самый простой способ это внести логику в реализацию для случая который ты все время проверяешь, типа тред == нал, ну и не оптимизировать раньше времени
QH
21:49
Quantum Harmonizer
Не, тут всё состоит из оптимизаций чуть более, чем полностью. Иначе никак)
BV
22:00
Boris Vanin
In reply to this message
Как бы не вышло это ещё дольше чем без них 🙈
22:06
Хотя реактор он весь одна большая оптимизация
BP
22:20
Bogdan Panchenko
In reply to this message
мммм, крутую штуку делаешь, тоже задумывался сделать для всего
BV
23:18
Boris Vanin
Делал для игрового движка реактивный движок + проперти, но у меня там значительно проще было
22 April 2018
BP
01:52
Bogdan Panchenko
In reply to this message
движок для чего ? Просто попробывать?
BV
10:56
Boris Vanin
In reply to this message
Ни одной игры на нем в гплей так и не попало
10:56
Иногда свободное время просто заканчивается
29 April 2018
BP
20:27
Bogdan Panchenko
@Harmonizr вопрос по tornadofx, ты работал с ItemViewModel, если да то как ты работал со списком ?
QH
20:50
Quantum Harmonizer
In reply to this message
Не работал с tornadoFX.
BV
20:51
Boris Vanin
Я работал, про какой список речь?
BP
20:53
Bogdan Panchenko
In reply to this message
обычный список
BV
20:54
Boris Vanin
20:54
Как то так
BP
20:57
Bogdan Panchenko
In reply to this message
это не то
20:57
In reply to this message
ItemViewModel биндится к обычной модели, его пдюсы в том что мы можем закимитить изменения или откатить
BV
20:58
Boris Vanin
In reply to this message
Да? Может именно поэтому я спросил, что за список тебя интересует
20:59
вот тут эта вишка
BV
21:06
Boris Vanin
Да не, ты напиши, что ты хочешь получить
BP
21:07
Bogdan Panchenko
переменая terms
21:07
In reply to this message
21:08
вот так вроде работает но добавить елемент я немогу
21:08
java.lang.UnsupportedOperationException
21:08
получаю
BV
21:12
Boris Vanin
Чот картинки не грузятся 😒
BP
21:13
Bogdan Panchenko
class VariableModel(
variable: Variable = Variable("empty")
) : ItemViewModel<Variable>(variable), ItemProperties {

private val _terms = variable.terms.observable()

val name = bind { variable.observable(Variable::getName, Variable::setName) }
val min = bind { variable.observable(Variable::getMinimum, Variable::setMinimum) }
val max = bind { variable.observable(Variable::getMaximum, Variable::setMaximum) }
val value = bind { variable.observable(Variable::getValue, Variable::setValue) }
val terms = bind { SimpleListProperty(FXCollections.observableArrayList(variable.terms)) }

override fun listItem(): List<PropertySheet.Item> {
return mutableListOf(
PropertyItem("Name", name),
PropertyItem("Minimum", min),
PropertyItem("Maximum", max),
PropertyItem("Value", value)
// PropertyItem("Terms", terms)
)
}

init {
}
}
BV
21:15
Boris Vanin
И на чём валится?
BP
21:20
Bogdan Panchenko
In reply to this message
получил желаемое
21:20
но теперь красный лог
21:20
и он связан с css
BV
21:21
Boris Vanin
In reply to this message
👍
BP
21:26
Bogdan Panchenko
model.terms.value.forEach { println(it) } из-за этого вода вот такой лог
6 May 2018
Валера invited Валера
20 May 2018
Alex ILakeful invited Alex ILakeful
14 June 2018
RI
11:51
Ruslan Ibragimov
T
The Daily Kotlin 14.06.2018 11:50:59
Наткнулся тут на интересный проектик под Spring Umbrella: spring-fu

Микрофреймворк, на Котлине, в функциональном стиле без аннотаций, без сканирования classpath. Выглядит как сорвеменный и легкий. В общем посмотрите сам:

https://github.com/spring-projects/spring-fu
VD
11:52
Vitalii Dmitriev
In reply to this message
А как твой проект поживает? Ты, вроде, что-то для Undertow писал, если не путаю ничего.
RI
11:53
Ruslan Ibragimov
In reply to this message
Latest commit on Apr 15 :) Катастрофически не хватает времени что-то серьезно писать
I
12:01
Igor
In reply to this message
Выглядит прикольно, только не пойму что в нем "функционального"?

Вроде и flux упоминается, а внутри все теже репозитории/di и сайд-эффекты
RI
12:05
Ruslan Ibragimov
In reply to this message
Тут не про чистый фп, а про функциональный стиль)
12:06
Вроде регистрации бинов, и объявления роутов
QH
12:08
Quantum Harmonizer
Регистрация бинов в функциональном стиле О_о
RI
12:08
Ruslan Ibragimov
Ага)

> Functional bean registration instead of JavaConfig for both internals and application
RI
14:49
Ruslan Ibragimov
In reply to this message
Кстати одно другому не мешает https://github.com/spring-projects/spring-fu/pull/62
SZ
15:08
Sergey Zolotov
еще б добавили корутинки
15:08
а это аж след года ждать, пока их релизнут и запилят интеграцию с реактором
RI
15:12
Ruslan Ibragimov
ну spring-fu корутины использует
15:13
SZ
16:55
Sergey Zolotov
сколько у вас в проде реально памяти занимает ktor приложуха небольшая?
16:56
а то у меня как-то меньше 180мб не выходит это сделать
16:57
нужно целую кучу разных утилит для инфраструктуры делать, а если каждая будет жрать ~200мб, то выйдет как-то жирно) на go или питон скриптах в этом плане попроще, там по несколько мб им нужно
QH
16:57
Quantum Harmonizer
In reply to this message
javanese.online сейчас 120 МБ, но только потому что там статистика посещений прямо в хипе
SZ
16:58
Sergey Zolotov
ktor + guice?
QH
16:59
Quantum Harmonizer
никакого guice, конечно же
A
18:13
Alex
In reply to this message
спартанский сайт, у статей даже дат нет, написано на века)
18:19
In reply to this message
GET типо suspend функция?
QH
18:19
Quantum Harmonizer
In reply to this message
думаю, что она принимает suspend-функцию, как в ktor
А
18:26
Артёмка
In reply to this message
О, а как эти стрелочки на линиях включить?
RI
18:28
Ruslan Ibragimov
In reply to this message
Начать писать ~как мудак~ как Spring с табами вместо пробелов, и включить опцию "Show whitespaces" в настройках IDE.
А
18:30
Артёмка
In reply to this message
Шо?
18:30
Первой части сообщения вообще не понял
RI
18:31
Ruslan Ibragimov
Ну вот тут пробелы, а там табы. Что непонятного то
BP
18:31
Bogdan Panchenko
In reply to this message
вместо n-пробелов, использовать табы (спецсимвол)
I
18:31
Igor
In reply to this message
Зачем тебе этот визуальй мусор?
А
18:34
Артёмка
In reply to this message
Ну попробовать же хочется, вы чего 🤷
18:35
Не зайдет — выключу
RI
18:35
Ruslan Ibragimov
Эта опция только для страдающих ОКР
BP
18:35
Bogdan Panchenko
In reply to this message
ОКР ?
BP
18:42
Bogdan Panchenko
In reply to this message
мдааа, есть симптомчик(
VD
19:22
Vitalii Dmitriev
In reply to this message
Так не будет у тебя стрелочек, точки у тебя будут.
19:22
In reply to this message
Тильды -- зачеркнутый текст.
Странные чуваки из спринг пишут с табами, что не заходит Руслану.
Ваш Кеп.
15 June 2018
AV
04:51
Anton Vlasov
я наоборот привык к табам, и был шокирован когда узнал что идеа автоматически таб на пробелы заменяет))
но это не беда, потому что единсвтенное что мне не нравится в пробелах это 4 раза их нажимать для отступов
А
04:52
Артёмка
+1.
Юзаю тоже табы
17 June 2018
DB
13:17
Dmitry Bohdanov
DB
Dmitry Bohdanov 17.06.2018 12:28:27
Добрый день. Часто получаю stacktrace в kotlin проекте на несуществующих строках. Например в файле 200 строк, а ошибка на 300й. Это какая-то оптимизация компилятора? И как можно избежать такого?
13:17
https://discuss.kotlinlang.org/t/stacktrace-points-to-line-after-end-of-file/4129 Да. Вот тоже пытаются решить такую проблему
13:17
Говорят что связано это с inline оптимизацией. То есть после компиляции количество строк получается больше
QH
17:37
Quantum Harmonizer
In reply to this message
Да, и IDE умеет правильно указывать на такие строки.
DB
17:54
Dmitry Bohdanov
Это хорошо. Но stacktrace у меня в логах на сервере
RI
18:30
Ruslan Ibragimov
"Analyze Stacktrace"
18:30
Anton 📦 ᯌ 🄴 invited Anton 📦 ᯌ 🄴
Alexander Zapevalov invited Alexander Zapevalov
Alexandr Ischuk invited Alexandr Ischuk
Islom Alimov invited Islom Alimov
Alexander Levin invited Alexander Levin
Dumitru Preguza invited Dumitru Preguza
Alexander invited Alexander
18 June 2018
Алексей Овсянников invited Алексей Овсянников
Лёша Лазарев invited Лёша Лазарев
Roman Q invited Roman Q
Victor Alenkov invited Victor Alenkov
Serhii Pylypchuk invited Serhii Pylypchuk
SZ
19:12
Sergey Zolotov
хм, походу ktor запускается на 21мб памяти
19:25
не, но 80мб тоже неплохо
DP
21:05
Dumitru Preguza
Какой примерно VPS надо купить для сервера ?
21:05
Скажем для сайта автошколы
RI
21:07
Ruslan Ibragimov
Digitalocean за 5$
DP
21:08
Dumitru Preguza
Спасибо
27 June 2018
RI
17:04
Ruslan Ibragimov
Обсуждали как-то миграции и kotlin dsl. И что миграции в коде не нужны. Так вот у меня сейчас задача замержить две таблички (условно tags1 и tag2) в одну, и обновить все ссылки на них. Так вот на смеси котлина и sql мне намного проще это сделать.
17:06
т.е. у меня есть


table1 <-> table1_to_tag <-> tag1
table2 <-> table2_to_tag <-> tag2


а нужно сделать


table1 <-> table1_to_tag <-> 
tag (union tag1, tag2)
table2 <-> table2_to_tag <->
17:07
И как-то на чистом SQL вообще не хочется такую миграцию писать, я голимый DBA
29 June 2018
DP
21:06
Dumitru Preguza
SZ
22:10
Sergey Zolotov
разве нужно искать причины чтобы перейти на котлин?)
VD
22:38
Vitalii Dmitriev
In reply to this message
Неплохо. Особенно на фоне разных других опросов: котлин популярнее, и это радует.
DP
22:40
Dumitru Preguza
In reply to this message
есть и противоположные мнения:
22:41
😔
DP
22:41
Dumitru Preguza
AP
Alexey Pushkarev 28.06.2018 10:07:18
Ну все посоны, скоро будем на флаттере писать. О нем уже везде вещают. Котлин больше не тренд.
22:41
ВМ
Виталий Маркус 28.06.2018 10:07:51
Вот реально прям в самую точку
KA
22:50
Kira Alche
Кто-нибудь пробовал кидаться бинарниками в кторе?
Размышляю не собираюсь ли я заняться странным
QH
23:23
Quantum Harmonizer
In reply to this message
В каком смысле?
KA
23:25
Kira Alche
In reply to this message
Думаю кидаться массивами байт в теле. То бишь protobuf использовать без grpc
23:35
Давным давно просто взял zmq и кидался, но захотелось странного
30 June 2018
VP
08:50
Vladimir Petrakovich
In reply to this message
Hype driven development?
DP
10:12
Dumitru Preguza
yeap
QH
12:12
Quantum Harmonizer
In reply to this message
ну норм, у HTTP с этим проблем быть не должно
KA
12:13
Kira Alche
In reply to this message
Ктор хочет кидаться строками в utf8, у меня ощущение оверхеда
QH
12:19
Quantum Harmonizer
In reply to this message
call.respondWrite
BV
12:48
Boris Vanin
Http и есть http, у него свои особенности. Например это текстовый протокол
QH
14:48
Quantum Harmonizer
In reply to this message
Ну это про заголовки. Картинки при этом нормально летают.
2 July 2018
KA
10:52
Kira Alche
Если точнее, то я про DataConversion feature.. буду разбираться как работает
Andriy invited Andriy
3 July 2018
Kirill L invited Kirill L
5 July 2018
Alexandr Emelyanov invited Alexandr Emelyanov
6 July 2018
Dmytro Tryfanenko invited Dmytro Tryfanenko
9 July 2018
KL
14:14
Kirill L
Привет, подскажите, gradle не может зарезолвить репозитории либы Jackson(например, «'com.fasterxml.jackson.module:jackson-annotations:2.9.6»), пробовал через впн, не помогает. MavenCentral подключен.
Подскажите куда копать, где искать косяк)
AV
14:16
Anton Vlasov
In reply to this message
Возможно прописываешь maven() не там
KL
14:17
Kirill L
Вне buildscript{}
14:17
а должно?
AV
14:30
Anton Vlasov
Там и должно, значит в другом ошибка
KL
14:33
Kirill L
помогла смена формата записи на такой:
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.6'
14:33
странная тема
QH
14:33
Quantum Harmonizer
оригиал: com.fasterxml.jackson.module:jackson-annotations:2.9.6
14:34
кажется, прболема в слове module
KL
14:34
Kirill L
понял
14:34
спасибо, что подсказали)) надо внимательней быть
10 July 2018
Ruslan Hanza invited Ruslan Hanza
Jamshid Ildarov invited Jamshid Ildarov
11 July 2018
Qurashboy Erqulov invited Qurashboy Erqulov
Viktor invited Viktor
V
19:02
Viktor
Всем привет. Подкиньте пожалуйста годную статью как задеплоить ktor с gradle-ом на heroku. Не может зарезолвить DevelopmentHost
AS
19:04
Alexander Stefanenkov
DP
19:05
Dumitru Preguza
Мне помогло это видео https://youtu.be/mHrhKri01n8, парень столкнулся с теми же проблемами что и я
V
19:06
Viktor
In reply to this message
'''web: java -jar target/helloworld.jar'''
В этом проблема. jar я собираю, в build/libs лежит. В Procfile запуск DevelopmentHost из этого jar-ника указан.
DP
19:07
Dumitru Preguza
Дай скриншот ошибки
19:07
target - это реальный путь там ?
V
19:09
Viktor
In reply to this message
Да, там реальный путь. Есть мнение, что jar по каким то причинам не генерится хотя jar таска выполняется
DP
19:09
Dumitru Preguza
web: java -jar -Dserver.port=$PORT build/libs/webapp-1.0.jar у меня так
V
19:09
Viktor
О, спасибо. Попробую так
DP
19:09
Dumitru Preguza
А ты упаковал в fat jar ?
V
19:09
Viktor
Да
19:10
Единственное у меня там
web: java -jar build/libs/*.jar
12 July 2018
НГ
12:14
Николай Герасимов
Решил попробовать бэк написать - spring boot + kotlin
@PostMapping
fun saveUser(user: User): User = userService.saveUser(user)


@D
ocument
class User(
@Id
val id: String?,
@Indexed(unique = true)
val login: String,
val password: String,
val name: String,
val surname: String,
val middleName: String?,
val email: String,
val phoneNumber: String?,
val roles: List<Role>
)
О
шибка - Parameter specified as non-null is null: method ru.gernik.auth.domain.User.<init>, parameter login

в
запросе уходит такой json -
{
"id": "qwe123",
"login": "test",
"password": "1234",
"name": "qwerty",
"surname": "asdf",
"roles": ["USER"]
}
V
12:15
Viktor
In reply to this message
email
AE
12:15
Alexandr Emelyanov
1. энтити в контроллерах - плохо.
2. jackson-kotlin подрублен?
KL
12:16
Kirill L
In reply to this message
что для бд юзаешь?
AE
12:16
Alexandr Emelyanov
судя по всему монга или касандра. @Document на сущности
НГ
12:16
Николай Герасимов
In reply to this message
да знаю что плохо, это так для примера, чтобы котлин пощупать. jackson-kotlin подрублен
12:17
In reply to this message
да, монга
AE
12:18
Alexandr Emelyanov
у тебя на email должен был ругнуться
НГ
12:19
Николай Герасимов
In reply to this message
ну такое чувство, что сериализация не работает, т.к на первое non-null поле ругается. email добавил в запрос, та же ошибка
QH
12:20
Quantum Harmonizer
In reply to this message
добавил email: null?)
НГ
12:21
Николай Герасимов
In reply to this message
не, в body запроса добавил
AE
12:21
Alexandr Emelyanov
In reply to this message
проверь подрубился ли модуль. вытащи ObjectMapper
13 July 2018
VP
14:55
Vladimir Petrakovich
А это вообще законно в ktor в intercept() делать такое?
withContext(myContext) {
proceed()
}

myContext - это текущий coroutineContext с добавленным элементом.
RI
15:29
Ruslan Ibragimov
Ну я по сути так делаю чтобы делать request scope
15:29
Только не в ktor, но идея 1 в 1
SZ
15:55
Sergey Zolotov
In reply to this message
да, там даже пример был
VP
15:59
Vladimir Petrakovich
In reply to this message
Спасибо, не заметил.
Какой же классный этот Pipeline
SZ
16:00
Sergey Zolotov
жаль нельзя сделать полноценный wrap
16 July 2018
KL
10:16
Kirill L
Привет, кто-то пробовал dokku для деплоя?
Max Railian 🚀 invited Max Railian 🚀
Kirill Knize invited Kirill Knize
Deleted Account invited Deleted Account
Наиль Гилазиев invited Наиль Гилазиев
Almazbek invited Almazbek
17 July 2018
Vlad Kiva invited Vlad Kiva
НГ
16:59
Наиль Гилазиев
Кто-нибудь ktor c kotlinx.serialization подружил?
20 July 2018
KA
00:09
Kira Alche
@nailgilaziev а есть смысл их дружить? Раньше по тестам они не были быстрее существующих решений
SZ
01:44
Sergey Zolotov
их подружат в процессе подготовки миграции ktor на нейтив)
16:11
Deleted Account
Hi everyone I started to learn ktor
16:11
which books are usefull for me?
VD
16:11
Vitalii Dmitriev
Documentation is enough.
16:11
Deleted Account
))