
Anton
08.06.2018
15:53:41
разве это не просто сайт издательства

Глеб
08.06.2018
15:53:58
Эм... ещё чуууть-чуть оффтопика. Там ведь можно спокойно читать эту книгу, разве нет?

Boris
08.06.2018
15:54:52

Bogdan
08.06.2018
15:55:23

Google

Глеб
08.06.2018
15:55:45
Всё, разобрался. Хитрый сайт, оказывается, делает вид, что можно читать бесплатно, а со второй главы начинает "шифровать" часть текста. А то я никак не мог понять как можно пиратить бесплатное.

Quantum Harmonizer
08.06.2018
19:26:53

Sergey
09.06.2018
05:33:08
А кто какие варианты чекстайла сейчас использует?
И как их дружите с джавовыми, если проект смешанный

Anton
09.06.2018
07:28:05
Ктлинт
Обычно дружится
Можно пакеты джавовые игнорить

Egor
10.06.2018
02:59:08
внезапно встал вопрос, не знаю, задавали его или нет
Как в top-definition функции получить ресурс как от класса? Как в джаве this.getClass().getResource(...) только в Котлине
Хотя top-definition функция подразумевается чистой, но тут речь идет о точку входа в программу

Vladimir
10.06.2018
04:53:09

Alexander
10.06.2018
06:36:07
Можно взять любой другой класс, который сущестует в данном ClassLoader-е. Например String. Для гарантии лучше использовать что-то, что определено в импортах данного файла.
Можно еще взять Thread.currentThread().contextClassLoader.getResource(...), только надо понмнить о том, что там в одном случае надо ставить `/`перед путем, в другом нет (я все время путаю, где надо, а где нет)

Google

Egor
10.06.2018
07:08:03
Спасибо, сейчас попробую
Как вариант, взять класс от object { }
Можно еще взять Thread.currentThread().contextClassLoader.getResource(...), только надо понмнить о том, что там в одном случае надо ставить `/`перед путем, в другом нет (я все время путаю, где надо, а где нет)
Хотя я в спецификации честно говоря не разбираюсь


Alexander
10.06.2018
07:11:25
Ничего неопределенного тут нет. У каждого ClassLoader-а есть свой набор ресурсов. Если в программе везде используется один и тот же ClassLoader, никакой проблемы нет. Если поведение более сложное, то я бы вообще рекомендовал его прописывать явно. В любом случае, второй вариант с Thread точно ведет себя однозначно (результат будет в теории разным в зависимости от того, откуда метод вызывается, но это же точка входа...).

Egor
10.06.2018
07:16:40
Понял, спасибо

Никита?❄️
10.06.2018
11:00:31
Кто-то может подсказать, существуют ли либы для того, что бы получать KDoc из кода?

Quantum Harmonizer
10.06.2018
11:56:44

Никита?❄️
10.06.2018
11:59:05
Dokka. Или AST Котлина.
разве докку можно юзать так: val doc = Dokka("SomeCode.kt").getMethod("foo").getDocumentation()?

Quantum Harmonizer
10.06.2018
12:09:56

Dumitru
10.06.2018
13:27:14
Считается ли вредным тоном писать web приложение на ktor без использования html файлов, а только через dsl ?

Egor
10.06.2018
13:29:05
а почему нет? Дсл - это как шаблонизатор, только средствами языка

Alexander
10.06.2018
13:42:51
Я думаю, что это как раз хороший вариант. Работать должно быстрее, чем с html шаблонами. Плюс гибкость (наследование и прочие радости), плюс строгая типизация. Если есть возможность, я бы предложил так и делать.

Quantum Harmonizer
10.06.2018
14:03:33
Делаю так, нравится.

Alexander
10.06.2018
14:07:14
Есть только один минус у всей этой системы шаблоны должны быть в коде, поэтому довольно сложно построить готовый код, который бы просто подсасывал внешние файлы в `kt`формате. Надо таскать с собой компиллятор, а его API какой-то еще очень сырой (не говоря уже о размере). Я сейчас вожусь с [Orchid](https://orchid.netlify.com/). На мой взгляд, очень перспективный проект. Но Pebble бесит. Я бы с радостью использовал котлиновский dsl вместо него, но не могу придумать как (без очень сильных граблей).

Алексей
10.06.2018
14:12:37
Добрый день!
Какие библиотеки можно посмотреть для работы из котлина с интернетом как с клиентом? Планируются GET/POST для HTTP/HTTPS

OlegKrikun
10.06.2018
14:13:10

Boris
10.06.2018
14:13:12

Алексей
10.06.2018
14:13:35
Я смотрю сейчас khttp (но может ли он в https?) и networkinkt (насколько он common, то есть не андроидоориентированный?)

Google

Andrey
10.06.2018
14:14:17

Alexander
10.06.2018
14:14:48

OlegKrikun
10.06.2018
14:15:19

Boris
10.06.2018
14:16:10

Alexander
10.06.2018
14:16:11
Я понимаю, что бывает больше, но того не стоит. Проще разобраться с Pebble. Но помечтать не вредно. Вон в Груви все это отлично работает, почему бы и в котлине не работать?

Алексей
10.06.2018
14:18:02
retrofit?
А у него есть какие-то экстеншены для котлина? Там не сильно много оверхеда по сравнению с khttp и networkinkt?
Там же рефлексия вроде вовсю

Alexander
10.06.2018
14:18:14
Без редеплоя приложения?
Смотря что называть приложением. Идея статического генератора в том, что один раз компилируется генератор, а потом добавляются маркдауновские страницы и просто одной командой все компилится. В принципе можно в этот момент и байткод докомпиливать, но это какое-то усложнение. Получается данные и код в одну кучу - не хорошо.

Boris
10.06.2018
14:20:01
По данные и код в кучу не понял
Если ты разделяешь контроллер от шаблона, то где же тут куча?


Alexander
10.06.2018
14:24:34
С точки зрения генератора есть код - то есть котлиновский или явовский код, который всасывает файлы из директории и генерит из них сайт и есть сама директория с данными. Если в этой директории с данными есть код, который надо докомпилировать, то получается идейный и практический монстр. Там начинается всякая веселуха с класслоадерами и прочим. Груви с этим справляется, но он на то и скриптовый язык.
В принципе, можно сказать, что тема, то есть шаблоны страницы являются куском программы, генерятся при компилляции и не имеют отношения к данным, но тогда не понятно, как параметры в страницы подставлять. Надо опять же какой-то язык шаблонов использовать.
Груви в этом смысле един в двух лицах, они и язык и формат шаблонов. С котлин такое, боюсь, не пройдет.
Если без детальных дебрей хочется чего-то вроде http://docs.groovy-lang.org/next/html/documentation/template-engines.html в котлине.


Boris
10.06.2018
14:27:09
С точки зрения генератора есть код - то есть котлиновский или явовский код, который всасывает файлы из директории и генерит из них сайт и есть сама директория с данными. Если в этой директории с данными есть код, который надо докомпилировать, то получается идейный и практический монстр. Там начинается всякая веселуха с класслоадерами и прочим. Груви с этим справляется, но он на то и скриптовый язык.
В принципе, можно сказать, что тема, то есть шаблоны страницы являются куском программы, генерятся при компилляции и не имеют отношения к данным, но тогда не понятно, как параметры в страницы подставлять. Надо опять же какой-то язык шаблонов использовать.
Шаблон это просто функция которая на вход принимает набор каких-то параметров и возвращает стринг
Компилить с приложением очень удобно
Подгружать динамически мало масла
можно вроде депенденси инжекшена сделать, но сильно удобство теряется


Alexander
10.06.2018
14:29:33
Да кто спорит? Но вот теперь у меня есть маркдаун файл, с контентом. Как туда внутрь параметры передать? Даже для банального ${param} надо чего-то городить, а мы-то хотим, чтобы можо было туда внутрь вычисляемое выражение подставить. Без динамической компиляции вообще никак.

Google

Boris
10.06.2018
14:30:25
Статической

Руслан
10.06.2018
14:32:04

Boris
10.06.2018
14:32:19
Если какой-то там файл, то да, это сложно и смысл теряется

Alexander
10.06.2018
14:32:43
Типизация тут не при чем. Она вполне может быть статической. Вопрос в том, когда компилляция выполняется. В котлине вроде сейчас появилась поддержка JSR223.

Boris
10.06.2018
14:34:29
ну как, ты конечно можешь связять динамически два статически скомпилированных куска

Alexander
10.06.2018
14:34:37

Boris
10.06.2018
14:34:43
только из за этого сильно теряется смысл таких шаблонов

Alexander
10.06.2018
14:35:46
Я не спорю. Вопрос эстатики. Хочется, чтобы все было на котлине или котлино-подобном коде. А так приходится использовать один язык для кода и другой для шаблонизации контента.

Руслан
10.06.2018
14:36:07
Ну в общем-то в спринге нам же показывали рабочие темплейты на kotlin script уже больше года назад. я использую для конфига котлин скрипты. что мешает юзать их вместе kotlinx.html?
https://github.com/sdeleuze/kotlin-script-templating вот например

Alexander
10.06.2018
14:37:08
Я со спрингом не работаю, так что не в курсе. Спасибо за ссылку.

Руслан
10.06.2018
14:37:38
https://spring.io/blog/2017/01/04/introducing-kotlin-support-in-spring-framework-5-0 вот анонс был даже

Alexander
10.06.2018
14:37:41
Симпатишно. Это примерно то, чего я хотел

Boris
10.06.2018
14:38:34

Alexander
10.06.2018
14:39:06
И получится Груви :)

Руслан
10.06.2018
14:39:19
Ну тащить с собой компилятор, а это десяток мегабайт зависимостей пока

Boris
10.06.2018
14:40:04
типа груви, если строковый генератор и совсем не, если дсл

Alexander
10.06.2018
14:41:19

Google

Boris
10.06.2018
14:42:13
так его же в режиме скрипта можно использовать, там API устоявшийся

Руслан
10.06.2018
14:42:17
там создаешь scripting engine ~ 1 строчка
и испольуешь его ~ 1 строчка
не уверен зачем для скриптов еще какой-то api компилятора использовать
причем компилятор ты совсем не трогаешь в этих местах

Boris
10.06.2018
14:43:46
вот да

Руслан
10.06.2018
14:44:40
Вот пример https://github.com/bootique/bootique-kotlin/blob/master/bootique-kotlin-config/src/main/java/io/bootique/kotlin/config/KotlinScriptCompiler.kt#L16-L24

Boris
10.06.2018
14:44:48
тем более, что там уже написана динамическая прослойка

Alexander
10.06.2018
14:45:23
Ну компилятор-то все равно тащить надо. К тому же, там проблема передачи параметров в скрипт. Я честно говоря не пробовал. Последний раз в этом направлении тыкался полгода назад. Искал аналог GroovyShell

Boris
10.06.2018
14:47:54
там как раз проблем нету
с передачей параметров
в мапу кладешь и наслаждаешься

Alexander
10.06.2018
14:49:23
Надо будет потыкаться. У меня в другом проекте коммандная стока на груви и он меня переодически бесит

Boris
10.06.2018
14:52:05

Sergey
10.06.2018
15:22:56
еще бы Jenkinsfile поддерживал котлин

Boris
10.06.2018
16:11:17
Хотя вообще я думаю было бы нет так уж сложно прикрутить туда котлин

Dumitru
10.06.2018
18:05:46
Как же я вас люблю ))
а почему нет? Дсл - это как шаблонизатор, только средствами языка
Я думаю, что это как раз хороший вариант. Работать должно быстрее, чем с html шаблонами. Плюс гибкость (наследование и прочие радости), плюс строгая типизация. Если есть возможность, я бы предложил так и делать.
Делаю так, нравится.