
Luger
24.03.2018
19:39:03

Wystan
24.03.2018
19:39:18
Я смотрю в сторону чего-то типа BidiFlow.fromFunctions

Oleg
24.03.2018
19:39:28

Wystan
24.03.2018
19:39:28

Google

Luger
24.03.2018
19:39:44
Да
Вот я делал на Source.queue
как Олег выше написал
но я думал, что я херню сделал и можно красивее :(

M
24.03.2018
19:40:18

Александр
24.03.2018
19:40:21

Oleg
24.03.2018
19:40:35

Luger
24.03.2018
19:40:43

Wystan
24.03.2018
19:41:21
То есть надо делать промежуточный актор чисто для того, чтобы слать туда сообщения, а он слал их в stream?

Oleg
24.03.2018
19:41:46
У вашей ИДЕ сублаймит
отнесите её к ветеринару
нет, это не ивент сорсинг, спасибо

Wystan
24.03.2018
19:43:28
Я в процессе.

Google

Oleg
24.03.2018
19:43:33
Или просто начал хреначить, предполагая, что ты и так всё знаешь про стримы?
Source - это не поток, это не процесс, который течёт
Это Граф
с одним выходом
Любой runnable граф - это граф без входов и выходов, по умолчанию они не связаны с внешними источниками, только если те не были как-то замкнуты в степы, из которых граф создался
Когда ты материализуешь граф у тебя появляется стрим, механизмы контроля за ним, точки входа и выхода, которые ты можешь связывать уже с чем-то работающим во вне
Source.actorRef - это граф, который при материализации может запустить для тебя актор и дать тебе ссылку на него.
Внутри будет буфер, контроль бэкпрешшура и всё остальное, чтобы связаться с остальной частью материализованного стрима
Source.queue почти то же самое, но только у тебя будет очередь, на другом конце которой будет почти то же самое, что внутри графа

M
24.03.2018
19:48:08
можно руками етот самый актор публишер написать как тебе удобней

Александр
24.03.2018
19:48:09

M
24.03.2018
19:48:11
если есть нужда

Wystan
24.03.2018
19:48:20
Source.actorRef - таки понял.

Oleg
24.03.2018
19:48:56
Главное, что нужно понять, что ты не должен брать вот какой-то свой горящий процесс и трансформировать его в Source, потому что Source предположительно что-то многоразовое
Ты можешь писать такой у[REDACTED для админов]ский код только если ты разработчик akka-http или StreamRef.
Все эти исключения ярчайший показатель отвратительного дизайна сабжа и однажды наконец будут переписаны, я надеюсь

Wystan
24.03.2018
19:51:18
В принципе, да, понял. Но с этим акторрефом у меня тогда следующий вопрос.
Допустим, я на каждого пользователя создаю ActorRef, Stream храню их в мапе. А потом если что-то происходит, там есть какой-то onComplete( => удалить из мапы; отослать PoisonPill актору) ?
Или это тоже не ок дизайн, я заранее как-то при запуске должен создать все эти стримы?

M
24.03.2018
19:53:51
actorRef ! Status.Success("Done")

Oleg
24.03.2018
19:53:54

Wystan
24.03.2018
19:55:07
то есть удаляю из мапы, отправляю PoisonPill и никакой утечки не будет.

Google

Wystan
24.03.2018
19:55:13
Спасибо, все понял!

Oleg
24.03.2018
19:55:14

M
24.03.2018
19:55:21
у меня чет не взлетело
я проверял
))
https://github.com/akka/akka/issues/20421

Oleg
24.03.2018
19:55:46
Говоря про стримы, не стоит быть уверенным, что у тебя не будет утечки

Wystan
24.03.2018
19:59:08
А есть какие-то метрики из коробки, чтобы быть уверенным? Типа как когда создаешь/убиваешь акторы, можно вручную счетчики увеличивать/уменьшать на onCreate onTerminate или как там эти методы называют

Kirill
24.03.2018
19:59:22

Oleg
24.03.2018
20:03:27
хочешь быть уверенным - юзай моних

Wystan
24.03.2018
20:03:51
Хочешь быть уверенным - купи DLC

Wystan
24.03.2018
20:04:47
моних попробую в другом пет-проджекте, спасибо за любезное предложение

Nick
24.03.2018
20:06:39

M
24.03.2018
20:06:54
https://youtu.be/qaiwalDyayA
хочешь быть уверен отнеси данные в руках на бумажке %(

Oleg
24.03.2018
20:07:23
в эффектах стримов нет
а ФС2 - пулл, всё равно толкатели ручками писать

Александр
24.03.2018
20:09:31

Google

Oleg
24.03.2018
20:09:39
Monix utterly destroys both fs2 and scalaz-stream on anything that isn't super hilariously heavily chunked, at which point fs2 can edge out an advantage. And by "utterly destroys" I mean "1500x faster". Literally.
djspiewak
https://github.com/functional-streams-for-scala/fs2/issues/768
Поэтому пока Румын лично не придёт переделывать фс2, нечего даже смотреть на них
Или лысый....

M
24.03.2018
20:14:33
лысый из бразерс

Admin
ERROR: S client not available

Wystan
24.03.2018
20:15:28

M
24.03.2018
20:21:27
http://loicdescotte.github.io/posts/play-akka-streams-twitter/

Alex
24.03.2018
20:46:33

Daniel
25.03.2018
07:17:38
https://github.com/pheymann/typedapi

Oleg
25.03.2018
07:18:07
бросали
надо быстрее со своим разобраться, пока сюда люди не понаехали
ну и пока он безвреден, пока не умеет сваггер

Nick
25.03.2018
07:30:20


Oleg
25.03.2018
07:30:50
ну т.е. самая первая цель, которую атакуют все эти typelevel DSL - расширяемая интроспекция.
Т.е. без синтаксиса в типах у тебя выбор приблизительно такой.
a) Monoidal, i.e. Applicative-like F[A] х F[B] -> F[A х B]
хорошо поддаётся анализу структуры, хорошо выражается параллельность, и легко написать ДСЛ но ты не можешь, например, пользоваться эффектом из A, чтобы вычислить B. Значит автоматически отметаешь все монадически ништяки эффектов
б) Monoidal-Categorial, i.e. Arrow-like
(A -#> B, B -#> C) -> (A -#> C)
(A -#> B, C -#> D) -> ((A х C) -#> (B х D)
хорошо поддаётся анализу структуры, и ты можешь чейнить эффекты, контролировать паралллельность и т.п., но ДСЛ написать для такого - просто ппц. даже в хашкеле так себе это всё выглядит
в) Monadic, i.e F[F[A]] -> F[A] или (F[A], A -> F[B]) -> F[B]
всё отлично чейнится, с помощью прибамбасов, можешь как-то выразить параллельность, но т.к. для того, чтобы получить "продолжение своей структуры" после A тебе нужно засунуть реальное значение в свою функцию, поэтому ты не можешь естественным способом изучить целиком структуру, не запустив
На тайплевеле ты можешь описать в какой-то специальной форме весь свой синтакцис, и по желанию скомпилировать в любую из таких форм.
Поэтому если тебе не нужно выяснять "а какой параметр будет читать этот метод, после того, как прочитает вот этот, и что он в итоге возвращает" до, собственно запуска своего рута ты можешь удовлетвориться Monadic DSL для akka-http, а основная мотивация выяснить такое в отношении ДСЛ для хттп - выдать схему всех твоих запросов. Например, сваггер


Alex
25.03.2018
08:59:22
ребят вопрос возможно немного не в ту группу
никто не сталкивался с такой проблемой на айфоне: когда открывается менюшка выбора фотографий останавливается вебсокет
то есть когда чувак открывает на каком-либо сайте галерею (например для загрузки фото/файлов) на сайт, то вебсокет останавливается

Google

Alex
25.03.2018
09:01:16
и перестает слать какие-либо сообщения
точнее даже вообще вся сеть останавливается
такой отстой

Grigory
25.03.2018
09:19:25
а я так понимаю что у тебя сафари в бекграунд типа уходит?
а понял; да баг какойнить
Небось и правда по тайм-ауту отваливается
Но вроде так все браузеры даже на десктопе себя ведут, эксперты типа @fomkin могут лучше сориентировать

Alex
25.03.2018
09:29:14
да походу с этим ничего не сделать
я пробовал обычные http запросы слать тоже самое
на десктопе норм

Oleg
25.03.2018
10:06:06
ну а пока здесь обсуждают айфоны, пойду обсужу скалу в ПОНВ

Daniel
25.03.2018
10:15:55

Robert
25.03.2018
10:20:35
скаланы, подскажите в чем дело, хочу сделать функтор для псевдонима типа и компилятор говорит что имплисита для Step нет, это нормально? =)
type CorrectResponse[T] = Either[Error, T]
type Step[T] = Future[CorrectResponse[T]]
Functor[Step].map(response)(adults)
если написать вот так то заводится:
implicit def stepFunctor = new Functor[Step]{
override def map[A, B](fa: Step[A])(f: A => B) = Functor[Future].compose[CorrectResponse].map(fa)(f)
}
импорты лдя инстансов either и future есть