
Nikita
11.10.2016
13:33:09
привет
ктонибудь вплотную работал с akka stream

Eugene
11.10.2016
13:34:03
насколько "вплотную"?

Daniel
11.10.2016
13:34:45
если есть вопрос, то просто задай его

Google

Daniel
11.10.2016
13:34:56
кто-нибудь найдется

Nikita
11.10.2016
13:34:57
ну чтобы прям ух)
вопрос в следующем
я прравильно понял
fast source -> slow flow
это решается автоматически
то есть пока не будет отработан flow source не будет выдавать данные на flow
и корректно ли процессить на этапе flow - или это дело sink

Борис
11.10.2016
13:40:31
пока flow не будет готов принять данные, source не будет их посылать

Nikita
11.10.2016
13:41:39
но всетаки flow это этап трансформации
где идеологически верно "процессить" в sink?

Mikhail
11.10.2016
13:43:35
что значит процессить?
флоу тоже процессит

Google

Mikhail
11.10.2016
13:43:47
просто синк на выходе ничего не дает
а флоу обязан отдать дальше что-то - трансформированное или нет - не важно, но выплюнуть должен
хотя конечно он может в крысу сыграть и все дропать внутри)
тогда дальше тоже не пройдет ничего)

Nikita
11.10.2016
13:44:47
"процессить" - то есть выполянть какуето логику или сохранение
вообще sink то для чего нужен
у меня вся эта конфепция в голове немного перемешалась

Mikhail
11.10.2016
13:45:44
у них там дока специфическая, они там местами сами не знали чего рассказать - видимо так воодушевлены были. в итоге в кашку накидали всего)

Борис
11.10.2016
13:45:52
синк обычно определяет резльтат отработки всего стрима, это может быть просто фьючура на завершение или фьючура с последним элемент стрима или какая нибуть сумма элементов и тд

Nikita
11.10.2016
13:46:21
в случае если мне нужно распаралелить source
например тот же map reduce ораганизваотть (шаг map)
mapAsync
даст мне паралельную обработку
напрмиер 10
mapAsync(10)

Mikhail
11.10.2016
13:47:23
а ты читал раздел про параллели в доках? ))

Nikita
11.10.2016
13:47:32
я все читал
чтобы вкурить

Mikhail
11.10.2016
13:47:35
она не настолька плоха, чтобы уж совсем от нее отказываться)

Nikita
11.10.2016
13:47:40
и кажется зря

Google

Mikhail
11.10.2016
13:54:27
ты понимаешь, что когда ты вызываешь map или mapAsync - ты по факту ничего не делаешь, а всего лишь создаешь новый узелочек в цепочечке? а в какой момент от какого узла к какому узлу передаются данные - решает процессор стримов (или как они его там - материалайзером называют вроде). у узлы - это такие классы реализующие некоторые внутренние интерфейсы с сигналочками - что мол я типа готов отдать наружу что-то или типа давай мне на вход что-нибудь. но естественно ему никто ничего не даст пока материалайзер не придет к выводу что пора, но и сам материалайзер не даст и не заберет у узелочка - если он об этом не просигнализирует
и вот этот материалайзер бегает как надсмотрщик и смотрит кто что сигнализирует (может и не бегать конечно, я просто аналогию провожу) и передает от одного к другому

Nikita
11.10.2016
13:55:24
хм - очень внятно объяснил


Mikhail
11.10.2016
13:56:33
mapAsync - это просто преопределенная реализация внутреннго интерфейса, которая на вход принимают твою функцию, но обязательно такую - чтобы результат был Future[T] - и вот на выход этот узелочек просигнализирует только после того как футур выполнится и просигнализирует, что можно забрать на выходе T
тобишь это просто реализовали за тебя бойлерплейчик)
а вот там где ты про параллельную обработку спрашивал - так там похитрее, там узелочек принимает в себя данные и на выходе по сути ничего не отдает - по крайней мере значения
он отдает на выходе описание одного или нескольких отдельных стримов грубо говоря)
поэтому потом в цепочечку ты должен встроить мердж - чтобы он принял на вход себе N-ое кол-во стримов и внутри себя смерджил, отсортировал если требуется (чтобы не терять например очередность пакетов) и начал сигнализировать по очередно отдавая принятые из разных подстримов пакетики
и вот все вместе - эти цепочечки, с подцепочечками - они там вроде это графом называют)
но это я описал больше с позиции работы со стримами впринципе, в акке внутри конечно дополнительно всякие финты ушами есть и еще всякого понаворочено, внутрянка мне не понравилась(( у них там оверинжиринг сплошной как обычно, если в исходниках пошататься )
но если за рамки тех случаев что в доках описаны - сильно не выходить по потребностям - то сойдет)


Alexey
11.10.2016
14:43:26

Alexey
11.10.2016
14:43:44
Если твердо знаем что и не появится

Oleksandr
11.10.2016
14:44:02
тогда и называть "не найдено" надо иначе
слишком легко спутать с дефолтным методом на apply

Mikhail
11.10.2016
14:44:59
эм. если мапа типизированная - значит и дефолт валуе тоже должен быть этого же типа)
а делать кеш общего типа Any - как-то странно)

Oleksandr
11.10.2016
14:45:47
так тип есть

Mikhail
11.10.2016
14:46:03
а если не делать - то всегда можно и так по пути опшина пойти - сделать object от этого типа (аналог None) - но в целом это конечно и будет похоже на Map[Option[T]]

Oleksandr
11.10.2016
14:46:21
или был бы Option[Any]

Google

Alexey
11.10.2016
14:46:28

Mikhail
11.10.2016
14:46:40
но с Map[Option[T]] - все равно есть проблема если нет дефолт валуе)
и так и так - от задачи как всегда прыгать надо)

Oleksandr
11.10.2016
14:47:33

Mikhail
11.10.2016
14:47:34
а вдруг там еще ситуация, что пока мы что-то делали - для ключа что-то может появиться - чего раньше не было)

Oleksandr
11.10.2016
14:47:54
ну дело вкуса, в общем)

Alexey
11.10.2016
14:48:56

Nikita
11.10.2016
15:31:51
Mikhail спасибо! немного прояснил ситуацию в голове

Lxk
11.10.2016
16:41:14
коллеги кто кверит SOQL - какие юзаете библиотеки / писали сами?

Admin
ERROR: S client not available

Lxk
11.10.2016
16:41:46
вот чел пошел в интересном направление http://developers.redhat.com/blog/2015/06/11/type-safe-salesforce-queries-soql-in-scala/
но как то не доделал, а за шейплесс братся страшно пока

Wystan
11.10.2016
19:16:27
Посоны. Чо там Ибрахим с зарплатой в Дубае говорил? 80к мидлу + бонусы будут? Может, свалить к арабам @ принять ислам.

Eugene
11.10.2016
19:18:32
но зачем? ©

Wystan
11.10.2016
19:19:54
Иди в армию, говорили они, увидишь мир.

Alex
11.10.2016
19:22:28
говорили они

Nick
11.10.2016
19:30:38

Wystan
11.10.2016
19:31:02

Nick
11.10.2016
19:36:54

Wystan
11.10.2016
19:38:47
Там NDA перед собесом надо подписать - не для меня. Не о чем будет в конфе потрындеть, когда откажут.

Google

Nick
11.10.2016
19:39:21

Alexander
11.10.2016
20:07:50

Denis
12.10.2016
09:11:45
Кто знает можно в SBT из теста убрать некоторые зависимости основного проекта?

folex
12.10.2016
09:21:19
Хм, я знаю как добавить, а вот как убрать...

Diemust
12.10.2016
09:23:05
эксклуд в тестовой зависимости?

Denis
12.10.2016
09:23:29
нет в основной

Vladimir
12.10.2016
09:23:33
Что-то мне подсказывает, что придется явно определить scope у всего, что не нужно убирать

Diemust
12.10.2016
09:23:48
libraryDependencies in run
так можно писать еще

Pavel
12.10.2016
10:07:54
Коллеги, а как проще всего в Play ограничение на кол-во запросов по конкретному action запилить?
Мне в голову приходит завести статичную переменную и через synchronize проверять/инкрементить её. Но хз, может есть лучший способ

Denis
12.10.2016
10:09:22
лучший способ на nginx
или тут бизнес логика?
или просто rate limit?

Alexandr
12.10.2016
10:11:08
Количество запросов в какой промежуток времени? И что должно происходить с запросами, которые превысили лимит?

Denis
12.10.2016
10:11:44
в каком разрезе даже я бы сказал )

Alexandr
12.10.2016
10:15:08
Я применял вот такую штуку.
https://github.com/inoio/play-requests-limiter
Оно контролирует, чтобы количество _одновременных_ запросов не превышало определенное число, а все остальное ставит в очередь.
В nginx описанное выше сделать невозможно, там на эту тему только достаточно топорные решения.

Denis
12.10.2016
10:19:52
ну очередь тоже не всем нужна

Alexandr
12.10.2016
10:20:54
Там это легко регулируется

Diemust
12.10.2016
10:21:52
подойдет, если что-то типа надо ограничить запросы per userId?

Mikhail
12.10.2016
10:21:57
> Alexandr
В nginx описанное выше сделать невозможно, там на эту тему только достаточно топорные решения.
http://nginx.org/ru/docs/http/ngx_http_upstream_module.html
max_conns
заводится отдельный апстримчик для конкретного акшена и к нему лимитятся конкуренты - вуаля, все что выше - ставится в очередь