
Alexander
13.09.2018
18:16:09
ресиверы в extension функциях - это не такая уж давно известная вещь.
в комбинации с синтаксисом из груви, который известен, но работал по-другому

Andrey
13.09.2018
18:17:27
а кто работал с вебсокетами ? я вот сначала взял ktor, не зашло, как-то неюзабельно
потом перешел на spark, но там 2 строчки которые абстракцию создают с 3 классов
в итоге выкинул spark и сервер на jetty теперь без абстракции в виде spark

Alexey
13.09.2018
18:18:19

Google

Igor
13.09.2018
18:21:21

Alexander
13.09.2018
18:21:23
В котлине есть объекты типа A.() -> Unit, которые используют первый аргумент как контекст исполнения. Это создает все мнообразие DSL-плюшек и многое другое. Я не знаю JS, но чего-то я там такого не помню
По крайней мере я использую в куче мест

Bogdan
13.09.2018
18:22:54

Alexander
13.09.2018
18:23:22
Я писал пост на форуме щас найду

Mikhail
13.09.2018
18:23:53

Igor
13.09.2018
18:24:35

Andrey
13.09.2018
18:24:43

Alexander
13.09.2018
18:25:15
Э, это динамическое присабачивание методов, это совсем не то. Я про статическое разрешение

Andrey
13.09.2018
18:30:31

Bogdan
13.09.2018
18:31:54

Andrew
13.09.2018
18:33:00
Что я вам хочу сказать, дамы и господа. Kotlin-плагин IDEA версии 1.3.20-dev-75, org.jetbrains.kotlin.multiplatform версии 1.3.0-rc-6 — идея умеет по контрол-клику бегать в stdlib нейтива, показывая декомпилированное содержимое *.knm-файлов :)

Google

Alexander
13.09.2018
18:36:07
Нашел: https://discuss.kotlinlang.org/t/spreadsheet-for-differences-between-let-with-run-apply-and-also/5029/12?u=darksnake

Andrey
13.09.2018
18:41:15
а вы про это
именно как у kotlin реализации нету, но всякие обходные пути есть в виде const obj3 = Object.assign( obj1, obj2 ) или Object.assign(this, { x, y });
вот еще
MyClass.prototype.foo = function (arg1, arg2) {
...
};

Bogdan
13.09.2018
18:43:37
что тут происходить ?

Sergey
13.09.2018
18:45:31
ну вот.. теперь на проекте suspend функций больше чем обычных

Alexander
13.09.2018
18:47:36
Вообще, на примере JS обсуждать хоть что-то статическое - это странно.

Sergey
13.09.2018
18:49:05
@HeapyHop у тебя есть какие-то лайфхаки как с junit бороться кроме как runBlocking в каждую функцию пихать?

Руслан
13.09.2018
18:51:55

Sergey
13.09.2018
18:52:21
runBlocking(TestCoroutineContext) даже вот так
но хотелось бы что-то в духе
@Test
suspend fun `Wow my cool test`() {

Руслан
13.09.2018
18:52:45
Теоретически для junit 5 написать экстеншен можно ?
Но в иде поддержка сломается

Sergey
13.09.2018
18:56:12
надеюсь с этим что-то придумают

Руслан
13.09.2018
18:56:24
https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/extension/TestInstanceFactory.html
Ну визуально кажется можно прямо сейчас запилить такой экстеншен который будет резолвить suspend методы с аннотацией тест как тесты. Но опять же - нужен будет еще и плагин для idea чтобы ранать индивидуальные тесты из неё

Sergey
13.09.2018
19:01:41
надо в исходниках ktor поглядеть

Руслан
13.09.2018
19:02:44
а что там?

Sergey
13.09.2018
19:03:37
а вот смотрю, обычный runBlocking либо функция с ним

Руслан
13.09.2018
19:08:24
Хотя экстеншенами не обойтись, нужно делать TestEngine

Google

Sergey
13.09.2018
19:08:59
fun <T> runBlockingTest(block: suspend CoroutineScope.() -> T) = runBlocking(TestCoroutineContext()) {
block()
Unit
}
такую хрень запилил в общем

Руслан
13.09.2018
19:09:44
Ну да, это нормальный вариант

Andrew
13.09.2018
19:13:52
Там suspend main везут, кстати :)

Sergey
13.09.2018
19:15:01
где?

Andrew
13.09.2018
19:21:21
где?
https://github.com/JetBrains/kotlin/commit/c3f6ba3302332a2c2bea8dd5fcc521535c5730d8

Sergey
13.09.2018
19:32:35
круто, спасибо)

Alexey
13.09.2018
19:46:01

Руслан
13.09.2018
19:52:28

Andrew
13.09.2018
19:58:16

Andrey
14.09.2018
04:05:56


Zayniddin
14.09.2018
05:32:01
Good morning everbody
#question #creatingDirectories
I created folders inside folder in ExternalStorage , All folders have been created well , but when I check folders for .isDirectory() , it returns true only for first parent folder (MyAppFolder) and when checking other any inner folders for .isDirectory() returns false , my code is :
val fileDirectory = File(Environment.getExternalStorageDirectory().path
+ File.separator + "MyAppFolder"
+ File.separator + "InnerFolder")
if (!fileDirectory.exists()) {
fileDirectory.mkdirs()
}
var myDownloadedFile = File(fileDirectory, fileName)
if (!myDownloadedFile.exists()) {
myDownloadedFile.createNewFile();
}
is this logic is true way for creating folder inside folder , any suggestions ? thanks beforehand
P.S. answers can be in russian language , I understand russian a little

Di7aK
14.09.2018
05:39:09
вложенные папки надо создавать поэтапно, а не все сразу

Mikhail
14.09.2018
06:58:22

Eugeny
14.09.2018
09:12:24

Boris
14.09.2018
09:43:58

Eugeny
14.09.2018
09:45:23
Юзал для написания ui стримингового микросервиса - было норм
Для чего-то более сложного уже редакс потребуется, иначе офигеешь от иерархий стейтфул компонентов. Его можно написать, чтобы также работал с перезагрузкой нужных компонентов - архитектура не сложная, но это время

Руслан
14.09.2018
09:49:25
Будет круто продолжить обсуждение kotlin/js и redux в тематическом чате @kotlin_js

Google

Eugeny
14.09.2018
09:49:37
Ну и ещё на нем писал реактовский туториал с tictactoe когда изучал kotlin js reactor с минимаксом. Логика на Котлине js норм

Andrey
14.09.2018
09:54:02

Igor
14.09.2018
10:01:04

Admin
ERROR: S client not available

Mikhail
14.09.2018
10:04:17

Bogdan
14.09.2018
10:09:02

Igor
14.09.2018
10:10:42

Mikhail
14.09.2018
10:12:35

Igor
14.09.2018
10:15:40

Mikhail
14.09.2018
10:16:04
Это Epoxy
в нем они генерят dsl для компонентов, да

Alexander
14.09.2018
11:05:30
Можно ли как-то запустить тесты для xtandalone common модуля или для этого обязательно делать платформный модуль? По логике последнее, но мало ли...

Dmitry
14.09.2018
11:10:57
Запустить на чем? -)

Alexander
14.09.2018
11:12:25
Об этом и вопрос

Руслан
14.09.2018
11:35:09
Конечно же на сферической виртуальной машине в вакууме
Ну вообще можно же коммон код пускать на всех доступных платформах ?Поэтому если сейчас например у тебя есть js и jvm, то там и запускать. Почему бы и нет

Bogdan
14.09.2018
11:39:22

Alexander
14.09.2018
11:40:12
Ну, если все правильно, оно должно быть невозможно, поскольку не известно, какая платформа. Но в теории, можно исползовать что-то по-умолчанию. Например JVM

Bogdan
14.09.2018
11:42:33

Alexandr
14.09.2018
11:45:09
у них в доке вроде написано что у тестов есть коммонс, который реализован для платформ, это значит что пишем тесты, а они будут запущенны в платформенных либах

Google

Alexandr
14.09.2018
11:45:17
да, так оно и есть

Alexander
14.09.2018
11:49:09
Да это без проблем. Просто для этого надо делать отдельный платформный модуль. Но вообще это логично

Alexandr
14.09.2018
11:50:21
ну без платформенного модуля ты этот код не используешь
это раз
два, а вдруг под какой то платформой будет фэйл? не исключено

Alexander
14.09.2018
11:51:03
Второе - это понятно. Первое - а хочется common библиотеку

Alexandr
14.09.2018
11:51:25
в смысле?
тесты пошарятся с common кодом на сколько я знаю, эти тесты включатся в тестовый набор всех её реализующих платформенных либ и просто запустятся
нет смысла тестить common код без платформы
как минимум потому что есть expected, который в common никак не запустишь

Alexander
14.09.2018
11:53:27
Я имею в виду релизить коммон код без платформного ваасче

Alexandr
14.09.2018
11:58:19
не, тут все просто и правильно, в коммон либе в качестве бинаря шарится IR код, который еще может и что то ожидать, проект (не платформенная либа) уже ждет артифакт в готовом для подключения формате, даже если это kotlin/jvm - компилятор не принимает на вход IR по умолчанию.
можно конечно подключить multiplatform плагин конкретной платформы к проекту напрямую и сказать что он его имплементит... это же уже не либа, может взлетит, но скорее всего будет подглючивать. да и к тому же неправильно это

Andrew
14.09.2018
12:18:10