@scala_ru

Страница 307 из 1499
Nikita
13.12.2016
14:18:32
Начну с них, потом, наверно курс возьму на корусере, спасибо)

Nikolay
13.12.2016
14:24:30
кто-нибудь писал кастомный GraphStage[SourceShape[]], который бы постоянно забирал элементы из какого-то хранилища?

как по-нормальному сделать выборку элементов, чтобы добавлять элементы в внутренний буфер по необходимости, но не когда он пустой становится?

KrivdaTheTriewe
13.12.2016
14:27:36
https://www.infoq.com/presentations/etl-streams

Google
Dmitry
13.12.2016
14:29:07
Николай: вроде бы никак. Делаешь вторым элементом после источника стандартный буфер. Он сосёт из источника, пока буфер не наполнится. Если буфер пустой, сообщение сразу идёт дальше

Nikolay
13.12.2016
14:37:17
https://scalafiddle.io/sf/QqgYVZs/1

вот такой вариант сейчас, но мне не нравится что getElementsBatch будет делаться только когда буфер пустой, и consumer хочет больше элементов. значит он будет ждать пока мы не вытащим элементы из базы

когда я пытаюсь сделать так, чтобы элементы запрашивались по мере того, как буфер худеет, получается дикая лапша

Mikhail
13.12.2016
14:43:29
сделай тредик)

Nikolay
13.12.2016
14:43:45
м?

Mikhail
13.12.2016
14:43:52
thread

Nikolay
13.12.2016
14:45:19
иии?

Mikhail
13.12.2016
14:49:31
вобщем. в твоем варианте что конкретно тебе не нравится? ты можешь там вместо isEmpty проверять size < N и у тебя и так уже есть тредик(за счет асинка). просто помечай, что уже есть запрос и не запускай параллельно еще один гет-батч

ну и деливер соответственно не всегда требуется

ты просто можешь это сделать через обертку и спрятать бойлер плейт

тогда аут-хендлере у тебя все станет няшно и феншуйно

Nikolay
13.12.2016
14:51:38
> просто помечай, что уже есть запрос и не запускай параллельно еще один гет-батч да, я примерно так и делал, это я и назвал дикой лапшой

Google
Nikolay
13.12.2016
15:05:08
https://scalafiddle.io/sf/QqgYVZs/4

не знаю, так вот можно…

так получается нет необходимости отслеживать, есть ли запрос в процессе сейчас

Nikolay
13.12.2016
15:25:26
просто я думал что в стримах такие вещи очень просто делаются, а теперь я так не думаю

Юрий
13.12.2016
16:39:27
так пушка же как раз это и делает? или нет?
Ты немного неправильно рассуждаешь. Тебе не обязательно прописывать мета информацию в классах. Это одна из фич пушки. Веб сокеты - просто транспорт. У тебя по этому транспорту туда сюда что-то ходит. Так как ты контролируешь и сервер и клиент, то они оба знают, в каком случае какой тип куда придет или уйдет. Например, ты спросил сервер - эй, дай мне юзера, и например, передал айди запроса. Потом ждёшь и слушаешь сокет. Пришел ответ с твоим айди - значит там юзер. Все, ты можешь сделать read[User]

Юрий
13.12.2016
16:42:37
Передавай requestId, так точно не ошибешься

Сервер ответит чем-то с другим айди - ну значит это что-то другое

Diemust
13.12.2016
16:43:52
кто-нибудь пробовал в другом модуле в тестах запустить play приложение другого модуля (интеграционный тест), это можно сделать как-то просто? =)

Andrey
13.12.2016
16:46:20
Передавай requestId, так точно не ошибешься
И создавать тонны колбеков? на каждый запрос )))

Diemust
13.12.2016
16:47:06
Юрий подскажи название, что-то я видимо слеп

Юрий
13.12.2016
16:49:06
И создавать тонны колбеков? на каждый запрос )))
Достаточно просто слой абстракции сделать. Снаружи будет просто def getUser(id: UserId): Future[User]

Andrey
13.12.2016
16:49:22
Достаточно просто слой абстракции сделать. Снаружи будет просто def getUser(id: UserId): Future[User]
А что делать, если сервер захочет сам послать любое сообщение?

Юрий
13.12.2016
16:51:22
Юрий подскажи название, что-то я видимо слеп
https://www.playframework.com/documentation/2.5.x/ScalaFunctionalTestingWithScalaTest

Andrey
13.12.2016
16:52:27
Именно это и означает. Любое сообщение без запроса с клиента

Юрий
13.12.2016
16:54:19
Тут скала вообще никак не повлияет. Вот пишешь ты клиента на js. Слушаешь сокет. Пришел непонятный меседж. Что делать будешь?

Nikolay
13.12.2016
16:56:04
вы про сервер и клиент на scala?

Google
Andrey
13.12.2016
16:56:07
Сам язык не повлияет, а нормальная библиотека сериализации еще как повлияет. Например в upickle, можно определить type сообщения. И не надо строить абстракцию с костылями для определения типа.

upickle работает и на клиенте и на сервере

Юрий
13.12.2016
16:58:56
Не понял, о каких костылях речь?

Andrey
13.12.2016
17:00:08
Не понял, о каких костылях речь?
о сохранении requestId для определения типа пришедшего сообщения. Это очевидный костыль

Юрий
13.12.2016
17:01:34
Это не костыль, это нормальное решение. Как upickle решит проблему двух однотипных ответов? Вот сделал ты два раза подряд getUser. Что делать?

Nikolay
13.12.2016
17:02:21
в случае запрос-ответ - ориентироваться на requestId нормально. если сервер пушит данные на клиент - понятное дело что нужна метаинформация

Юрий
13.12.2016
17:02:38
Лол, это все проблемы одного слоя - слоя доступа к серверу

Andrey
13.12.2016
17:03:00
Что делать? а тут вариантов миллион. Все зависит от требований. И это не может решать библиотека сериализации

Юрий
13.12.2016
17:03:54
Ну то есть пришли к тому, что upickle таки не решает проблему в общем случае

Andrey
13.12.2016
17:06:21
Ну то есть пришли к тому, что upickle таки не решает проблему в общем случае
Пришли к тому, что вы смешиваете все в одну кучу. Рассказываете как с помощью пушки определить какое сообщение придет через requestID. Я указал как в другой, более удобной библиотеке это сделать без костылей в виде requestID. Вы тут же начли рассказывать про проблемы слоя доступа... где логика Билли?

Сериализация сообщения != слой доступа к серверу

Andrey
13.12.2016
17:07:17
Это разные проблемы и решать их надо по разному

К слову, умение библиотеки сериализации самостоятельно определять тип сообщения. Не противоричит наличию requestID в слое доступа

Юрий
13.12.2016
17:08:01
Я вообще отвечал на вопрос выше, подходит ли пушка для случая, когда сервер пушит сообщения. Мой ответ - да подходит.

Andrey
13.12.2016
17:08:48
Вот. Подходит, но с неудобствами в виде неумения самой пушки понять, какое сообщение ей надо десериализовать. юпикл это умеет

Andrey
13.12.2016
17:11:48
upickle определяет типы при чтении точно также, как и пушка.
А зачем вы тогда учите человека определять тип через requestID ? О_о

Юрий
13.12.2016
17:13:11
Ну потому что просто типа не достаточно для работы с сокетом, а вопрос про это был

Google
Andrey
13.12.2016
17:14:04
Понятно, но это частный случай конечно

Юрий
13.12.2016
17:14:29
Ну без этого не обойтись для полноценной работы

web.num
13.12.2016
17:31:18
Всем привет, подскажите метод который находит подстроку в строке пожалуйста!

Aleksei
13.12.2016
17:33:58
в смысле находит?

индекс вхождения или просто типа есть или нет?

web.num
13.12.2016
17:41:39
есть или нет

как много методов в StringOps...

Nikita
13.12.2016
17:43:30
string1.contains(string2)

web.num
13.12.2016
17:45:07
string1.contains(string2)
благодарю

Admin
ERROR: S client not available

Aleksei
13.12.2016
17:46:57
утром фримонады, вечером контэйнс =)

Alex
13.12.2016
17:47:27
Вечерний контэйнс)

Kirill
13.12.2016
17:48:22
Это же хорошо, что тут есть как entry-level, так и задроты

Anatoliy
13.12.2016
17:48:35
Ну потому что просто типа не достаточно для работы с сокетом, а вопрос про это был
почему недостаточно? берем и решаем что отправлять будем используя JSON подобной структуры: { "type":"example", "data": { .... } } Дальше просто проверяем что находится в type и на основе этого уже проводим десериализацию.... Или можо проще и без этой обертки?

Nikolay
13.12.2016
17:55:47
Ну, я бы так и сделал

Pp
13.12.2016
18:11:26
http://paste.debian.net/902043/

почему такое может не работать?

http://doc.akka.io/docs/akka/2.4.11/scala/testing.html#Using_Multiple_Probe_Actors

вроде сделал все как в примерах в документации

web.num
13.12.2016
18:39:21
какая красота пополнять динамический массив : mArray.+= моиДействия; Прям ваще ненарадуюсь.... Слышал о манадах, говорят буду в восторге от них ?

Google
Timothy
13.12.2016
18:42:14
>.+= нет, только fold иначе забанят

web.num
13.12.2016
18:43:21
? ну вот....

Alex
13.12.2016
18:46:33
можно без точки

web.num
13.12.2016
18:47:24
можно без точки
это стеб над новичком? ?

выше сказали только fold ?

Nikolay
13.12.2016
18:48:14
это стеб над новичком? ?
смотри в глаза. var используешь?

web.num
13.12.2016
18:48:33
да

Nikolay
13.12.2016
18:49:08
все, зобаним точно

web.num
13.12.2016
18:50:13
ой да лдно вам.... я еще в дошколятах в scala.....

Nikolay
13.12.2016
18:50:57
web.num
13.12.2016
18:51:40
окЪ

Anatoliy
13.12.2016
18:53:40
смотри в глаза. var используешь?
это можно сделать без var? protected[this] var users: HashSet[ActorRef] = HashSet.empty[ActorRef] ... override def receive: Receive = LoggingReceive { case Create(id, out, rh) => val child: ActorRef = injectedChild(childFactory(out, rh), s"userActor-$id") users = users + child sender() ! child

Nikolay
13.12.2016
18:54:26
Можно через context.become

Почитай в доке

Nikolay
13.12.2016
18:54:52
как?
я не знаю конкретно про твой пример, но в куче языков нету var вообще

Anatoliy
13.12.2016
18:55:00
Nikolay
13.12.2016
18:55:04
и все можно сделать без него, в scala и подавно

Kirill
13.12.2016
18:55:34
и все можно сделать без него, в scala и подавно
но...как же...стдлибная реализация foldLeft...

Nikolay
13.12.2016
18:56:57

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