@scala_ru

Страница 155 из 1499
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
я бы сказал, что в 100%
Например мы искали что то и не нашли. Закэшировали результат "не найдено"

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
Завести свой Maybe?
это как не maybe есть результат "ничего не нашлось"

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

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

Alexey
11.10.2016
14:48:56
это как не maybe есть результат "ничего не нашлось"
Да. Результат = нашли None. Но в целом да, разницы особой нет. Просто use case для такого типа данных привел

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
говорили они

Wystan
11.10.2016
19:31:02
Дома ток не взрывай
Да это если бы я в фсб пошел...

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

Google
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

заводится отдельный апстримчик для конкретного акшена и к нему лимитятся конкуренты - вуаля, все что выше - ставится в очередь

Страница 155 из 1499