
folex
29.03.2017
17:59:56
оО У меня только что билд билдился 14 минут, 10 из которых поднимался и скачивал зависимости sbt .___.
раньше такого не было

Nikolay
29.03.2017
18:00:37
Это хороший результат?

folex
29.03.2017
18:00:58
:D плохой

Google

folex
29.03.2017
18:01:31
обычно ~5 минут

Nikolay
29.03.2017
18:01:42
А sbt уже стояла?

folex
29.03.2017
18:01:52
нет, скачивало

Lev
29.03.2017
18:04:10

Nikolay
29.03.2017
18:04:21
Я помню кто-то gist запилил, где coursier используется для выкачивания зависимостей sbt. Там хороший прирост в скорости первого запуска

folex
29.03.2017
18:04:44
о, интересно, поищу, спасибо

Nikolay
29.03.2017
18:04:47
paulp ваоде

Nick
29.03.2017
18:21:33
@aleksei_t походу если через макросы делать, то с циклическими зависимостями совсем все плохо)


Nikita
30.03.2017
05:55:49
> я вот такой брал для мелких экспериментов
> https://github.com/scalaj/scalaj-http
да, я его щас и использую. он хорош, но он синхронный. собственно и ищу ему замену но с Future'ами на выходе.
> и это намного гибче, чем play-ws. Особенно когда тебе ответ от сервера нужно именно стримить, а не держать весь батч в памяти
akka'вский клиент overkill для моей задачи, даже без условия, что там вся akka со стримами приедет в зависимостях. он гибкий, но пользоваться им даже в akka больно. типа забыл закрыть стрим от данных в запросе и течёт память.
JFYI внимательнее посмотрел на все клиенты, о которых знал. в итоге пока лидируют dispatch (reboot вариант) и play ws. они похожи. в play ws используется shade всех зависимостей, что в моём случае плюс. в dispatch прямая зависимость от ning'а. новый dispatch ксати не так плох, там теперь не только криптографический DSL с добавлением данных в запрос, но и обычные методы типа add*. код нового dispatch в целом тоже ок, достаточно straightforward. может зря я и искал ему альтернативу :)
чисто стилистичекси dispatch синтаксис мне меньше нравится. и ещё он GPL v3, play ws - apache 2


Юрий
30.03.2017
06:22:17

Google

Юрий
30.03.2017
06:22:41
в какой-то момент просто на машине кончатся иноды

Nikita
30.03.2017
06:29:49
:/
он вообще не очень активный по коммитам. пока внедряю для тестов play ws, а там посмотрим
для тестов = для проверки
вот видимо эта бага: https://github.com/dispatch/reboot/issues/53
там и ещё есть какие-то текущие дискрипторы
https://github.com/dispatch/reboot/issues/119

Oleg
30.03.2017
06:33:24

Nikita
30.03.2017
06:33:38
тогда в топку dispatch, play ws надеюсь армия play'водов уже отладила
> можно подробнее про "закрыть стрим" и "течёт память"
я эксперементировал на ранних этапах с akka http client'ом, ,skf nfr
...

Юрий
30.03.2017
06:34:18
больше 3х лет прошло, а это не просто бага, а БАГА
и всем пофиг

Oleg
30.03.2017
06:34:46

Nikita
30.03.2017
06:35:10
... была такая проблема что если тело запроса, которое было в виде стрима не вычитать, то эти данные повисали. был тред в их mailist'е щас поищу.
что-то типа такого: https://github.com/akka/akka-http/issues/57#issuecomment-245636146
может конечно уже не актуально

Oleg
30.03.2017
06:36:42

Nikita
30.03.2017
06:38:32
уже не помню подробности, помню, что фиксилось не сложно. просто не самое простое поведение, которое ждёшь от http клиента.
но вроде помню, что на scala, если хотелось что-то типа http прокси, которая умно переливает данные загружаемые от пользователей поточно кусочками, без записи в память ... в таких сложных случая akka http client очень ок.
тогда все эти сложности имеют профит

Google

Nikita
30.03.2017
06:40:22
в моём случае респонс - менешь 1kb можно и в память сложит и даже пару раз скопировать, никто не заметит

Lev
30.03.2017
06:40:23

Aleksei
30.03.2017
06:40:49
армия плееводов однажды забыла при рефакторинге play-ws добавить обработку параметра на keep-alive
так что если есть ружье, оно выстрелит

Nikita
30.03.2017
06:41:24

Lev
30.03.2017
06:43:03
Емнип, этот гайд появился как раз после обсуждения той особенности поведения

Oleg
30.03.2017
06:43:21
однако, спасибо за эту issue
линейных типов этим стримам не хватает

Nikita
30.03.2017
07:10:00

Aleksei
30.03.2017
07:10:40
Забыли пробросить параметр для keep-alive )
Там что то типа таймаут ставишь

Aleksei
30.03.2017
07:11:14
И если воткнуть -1 то будет ждать бесконечно
А тут бац и этот -1 перестал работать

Nikita
30.03.2017
07:13:26
не пойму с какой стороны они это забыли? типа установка Connection: Keep-Alive заголовка в запросе? вроде по RFC в http1.1 keep alive предполагается по-умолчанию. или они не смотрят на keep alive заголовки в ответе от сервера, откуда приходит ответ и всегда делают новый конект?
keep alive с бесконечностью кстати, редко встречается. может даже RFC это запрещает. сервера обычно всё ж закрывают коннект через несколько секунд-минут.

Nick
30.03.2017
07:17:58
@aleksei_t лучше добавить правило меньше 200к бакинских в год не предлагать

Vadim
30.03.2017
07:55:33
Oleg а не знаешь в котах нету готового Eval.Later, который бы периодчески заново вычислялся?

Oleg
30.03.2017
07:56:15

Google

Oleg
30.03.2017
07:57:00
это не периодически, но дальше ты знаешь

Vadim
30.03.2017
07:57:06
мне типо кэша надо)

Oleg
30.03.2017
07:57:27
кеш с инвалидацией или зависимостью от времени - само по себе эффект
поэтому либо грязный Eval.always, либо своя правильно оформленная монадка

Admin
ERROR: S client not available

Vadim
30.03.2017
07:59:15
оке, пасиб)

Denis
30.03.2017
09:23:02
https://twitter.com/alexelcu/status/847112545026670593

Alexander
30.03.2017
10:00:03
А чем дата тайп от монады отличается?

Denis
30.03.2017
10:07:24
монада это тайп класс
дата тайп - просто тайп
тайп класс описывает типы у которых есть свойства характерные для этого класса

Alex
30.03.2017
10:24:34
монада это грубо говоря интерфейс

Igor
30.03.2017
11:11:13

Alex
30.03.2017
11:11:23
тоже

Aleksey
30.03.2017
11:12:13
Может быть проще говорить что монада и функтор это алгебры?

Alexandr
30.03.2017
11:12:58
Да, точно

Alex
30.03.2017
11:14:01
по моему F-алгебра сразу тащит с собой тип данных
хотя нет, можно и параметризовать
почему не?
и где там что монада это не эндофунктор?

Google

Alex
30.03.2017
11:18:00
он говорит что не любая монада аппликатив, потому что как раз таки аппликатив типа не обязательно эндофунктор
не мог ганди такого говорить, я уверен!

Alexandr
30.03.2017
11:19:03
Значит, я неправильно понял. Такое вполне возможно.
upd: почистил, чтобы не вводить в заблуждение.

Alex
30.03.2017
11:20:00
чо оставил бы народу почитать, все равно любопытные вещи
скину сам тогда :)
https://vpatryshev.wordpress.com/2017/01/07/three-popular-fp-myths/

Alexandr
30.03.2017
11:20:44
Ну да, цикл надо было оставить.
Чищу, потому что мусора и шума и так достаточно в сети

Alexander
30.03.2017
11:20:51

Alex
30.03.2017
11:21:14
на самом деле я почитал внимательно и именно там он другое говорит, но такой аргумент тоже есть :)

Aleksey
30.03.2017
11:27:45
Кстати, я уже наверно спрашивал, но забыл. Почему в догс лист инвариантный? https://github.com/stew/dogs

Grigory
30.03.2017
11:35:55
чтоб валилось (это только догадка конечно, может цели были более высокие):
val list: List[Any] = List[Int](1,2,3)

Alex
30.03.2017
11:36:15
ну это из скалази пришло
там у них постоянно такие проблемы были

Aleksey
30.03.2017
11:43:35
Меня в этом деле вот что смущает:
sealed trait Foo
case object A extends Foo
case object B extends Foo
case object C extends Foo
sealed trait Lst[A]
case class Cons[A](head: A, tail: Lst[A]) extends Lst[A]
case object Nl extends Lst[Nothing]
val xs: Lst[Foo] = Cons(A, Cons(B, Cons(C, Nl)))
<console>:18: error: type mismatch;
found : Nl.type
required: Lst[Foo]
Note: Nothing <: Foo (and Nl.type <: Lst[Nothing]), but trait Lst is invariant in type A.
You may wish to define A as +A instead. (SLS 4.5)
val xs: Lst[Foo] = Cons(A, Cons(B, Cons(C, Nl)))
Как с этим жить?

?Ivan
30.03.2017
11:44:53
+A написать у Lst