@scala_ru

Страница 346 из 1499
Nick
18.12.2016
21:03:29
Сегодня, я писал для скалы, поэтому нах

Oleksandr
18.12.2016
21:11:30
Мне вот интересно, а вам не жалко производительности на эт, это ж виртуальный вызов?
жалко, и это главная причина, почему эти супер-монады используются не так активно, как могли бы -- итоговый профит неочевиден, есть и плюсы, и минусы

Nick
18.12.2016
22:06:08
Да не, профит может и есть, учитывая что jit скорее всего заинлаинит довольно легко это)

Oleksandr
18.12.2016
22:15:35
интересно бы глянуть на jmh тесты на эту тему я вот не уверен, что все так радужно будет

Google
Evgeniy
19.12.2016
04:36:39
видимо имелось в виду попробовать самому реализовать

Aleksei
19.12.2016
04:37:10
а ну это и понятно

Evgeniy
19.12.2016
04:46:38
вот тут есть нечто похожее на простую реализацию https://gist.github.com/jdegoes/97459c0045f373f4eaf126998d8f65dc#free-monad но я не компилил, возможно там чего то не хватает

Aleksei
19.12.2016
04:51:04
проще некуда!

Evgeniy
19.12.2016
04:53:41
ну в катс и скалази - явно сложнее https://github.com/scalaz/scalaz/blob/scalaz-seven/core/src/main/scala/scalaz/Free.scala

Aleksei
19.12.2016
04:54:09
да просто везде вот это поинт бинд и лифт

поинт это вроде пюр да?

но отсюда вопрос

Evgeniy
19.12.2016
04:54:54
да point, pure, id все одно и тоже

Aleksei
19.12.2016
04:55:10
немного конфьюзит

каждый раз читаешь и новый набор терминов

Google
Evgeniy
19.12.2016
04:56:30
Lifting Often, for some value X, F[X] is referred to as the "lifted" version of X, because it is the same value, but placed "inside" of some functor F. For example, you can lift the function x => x * x inside List by writing List(x => x * x).

Aleksei
19.12.2016
05:06:54
выходит что Point это значение, Effect операция над значением и FlatMap это чеининг операций?

Evgeniy
19.12.2016
05:47:57
хм щас не уверен но возможно, что не совсем так может там что то типа Effect(F(Effect(F(Effect ... (Pure(a))))) типа эффект он применяет F к предыдущему Free и создает в результате новый (мое предположение верно если Effect == Suspend из катс)

Oleg
19.12.2016
06:12:59
выходит что Point это значение, Effect операция над значением и FlatMap это чеининг операций?
в классической имплементации хватило бы просто Pure и FlatMap, Effect(fx) можно выразить как FlatMap((), _unit => fx), дополнительный конструктор защищает от stackoverflow в strict функторах

Aleksei
19.12.2016
06:13:49
Ну если юнит и флэтмэп, значит эффект это мэп

Oleg
19.12.2016
06:14:59
Ну если юнит и флэтмэп, значит эффект это мэп
нет, там нет функции мэпа. Там просто ещё один слой эффекта, чтобы кучу таких слоёв потом можно было раскрутить в tail-recursive run

Aleksei
19.12.2016
06:15:53
Надо теперь придумать где это все в рабочий проект ввинтить ?

Oleg
19.12.2016
06:18:10
map фримонада не реализует, она требует функтора от первого параметра. Если нужно отрезать или фьюзить map, как вчера говорилось, ещё одним слоем используют Coyoneda

Alexey
19.12.2016
06:19:07
Ну если юнит и флэтмэп, значит эффект это мэп
вот тут еще хорошо рассказано - http://blog.higher-order.com/assets/trampolines.pdf

была уже ссылка тут

Oleg
19.12.2016
06:21:22
Надо теперь придумать где это все в рабочий проект ввинтить ?
Вот из-за таких придумщиков, проекты сначала зарастают нечитаемым scalaz синтаксисом, потом его выпиливают. В итоге ты приходишь, а тебе говорят" у нас это не любят"

Aleksei
19.12.2016
06:26:30
или найти работу где это уже применяется как вариант )

вообще для развития фп навыков я так понимаю надо читать Де Госа и Рунара?

ну и слушать мешугу

я пока начал с прослушивания мешуги

вот добрался до Де Гоеса =)

Oleg
19.12.2016
06:40:22
у нас например во всю народ юзает .some из скалази, думаешь хуже станет?
Есть едва ощутимая стилистическая разница между синтаксисом, отдающим стандартный тип и комбинаторов вроде *** &&& на значениях типа Cokleisli[Cofree[X => StateT[Function0, Int,Vector[X]],?], A, B]

Aleksei
19.12.2016
06:41:40
Есть едва ощутимая стилистическая разница между синтаксисом, отдающим стандартный тип и комбинаторов вроде *** &&& на значениях типа Cokleisli[Cofree[X => StateT[Function0, Int,Vector[X]],?], A, B]
согласен, но я точно в залупу лезть не буду со своим фп, мне уже намекнули что хочешь фп - ищи хаскель. и сказали что скалази у нас нет и не будет, а он есть.

Andrey
19.12.2016
06:42:58
... или Kleisli[Free[Mpose[...]]]

Google
Nick
19.12.2016
08:17:04
Жесть какая)

Попахивает конечно адски

Anatoliy
19.12.2016
08:40:51
Всем привет! Народ, а можно как-то при общении через вебсокет узнать с какой страницы пришел запрос?)

Anatoliy
19.12.2016
08:42:18
Каким образом? Мне надо обращаться на что-то вроде ws://example/ws?path=... так что ли?

Просто это вообще нормально или не очень?

Юрий
19.12.2016
08:42:46
в тело запроса добавляй, вместо с полезной нагрузкой

Alexandr
19.12.2016
08:43:06
А в чем проблема то добавить это в json?

Anatoliy
19.12.2016
08:43:12
Не понимаю. Т.е. уже после установки соединения?

Я цепляю актор на каждый WS, но при подключении я не вижу откуда оно пришло

Сразу после установки соединения - я могу это сделать. Я же хочу создать актор который бы сразу работал с нужной страницей и знал об этом

Alexandr
19.12.2016
08:44:25
Но js, который отправляет запрос, знает, с аакой страницы он отправляется

Anatoliy
19.12.2016
08:44:48
Но js, который отправляет запрос, знает, с аакой страницы он отправляется
Мне надо обращаться на что-то вроде ws://example/ws?path=... так что ли?

Anatoliy
19.12.2016
08:45:44
откуда берется json?

Andrey
19.12.2016
08:45:53
что-то идея выглядит нездоровой

зачем бэку знать такие подробности о ui?

Alexandr
19.12.2016
08:46:43
откуда берется json?
Сообщения, которые шлются через веб-сокет - это что?

Anatoliy
19.12.2016
08:48:04
После установки соединения я общаюсь используя json, это верно. Но блин мне надо создать актор который бы сразу знал какой странице он соответствует. Что бы если надо было уведомить пользователя он сам уже принимал решение надо отправлять конкрентно ему уведомление или нет. Т.е. у каждого пользователя может быть открыто несколько страниц. И мне надо вывести уведомление только на одной из них. При этом есть актор пользователя, а есть - браузера. У пользователя может быть дофига и больше браузерных акторов. Я отправляю данные актору пользователя, а он - актору браузера, и уже там принимается решение что именно должно уйти в сам браузер, и должно ли

Как-то так я пока это вижу

Google
Anatoliy
19.12.2016
08:48:23
Сообщения, которые шлются через веб-сокет - это что?
да что угодно, но конкретно у меня - json

т.е. актор браузера по сути является шлюзом, и не более. Он просто пересылает то что ему отправляют. Но что бы знать что ему отправлять надо знать какой странице он соответствует

Юрий
19.12.2016
08:49:48
У тебя клиент - это single page application?

Anatoliy
19.12.2016
08:49:57
Нет

Юрий
19.12.2016
08:49:57
или у тебя на каждую страницу перезагрузка всего?

Anatoliy
19.12.2016
08:50:16
перезагрузка всего

Юрий
19.12.2016
08:50:52
перезагрузка всего
ну тогда нормально при установке соединений отправлять эту инфу один раз. Ну или как ты предложил, добавить через query parameter (хотя выглядит слегка странно это конечно)

Admin
ERROR: S client not available

Anatoliy
19.12.2016
08:52:51
Ты можешь открвать вебсокет куда угодно. На пример cо страницы https://example.com/page/123 открывай в wss://example.com/push/page/123. Дальше хэндли урл и вуаля.
Эм... а как мне это сделать что бы он открывал что угодно? У меня сейчас просто идет вот так: GET /ws controllers.IndexController.ws

И соответственно я просто не понимаю как в плее сказать что вебсокет может приниматься откуда угодно....

Anatoliy
19.12.2016
08:53:59
Не, у меня же play слушает вебсокет только на /ws, как ему сказать что бы слушал везде?

Nikita
19.12.2016
08:54:48
Могу ошибиться, но я бы попробывал /ws/*

Юрий
19.12.2016
08:55:16
GET /ololo/:trololo controllers.Ololo.get(trololo: String)

Anatoliy
19.12.2016
08:55:18
Могу ошибиться, но я бы попробывал /ws/*
а чем оно тогда отличается от обычного параметра GET что предложил я?

Юрий
19.12.2016
08:55:19
тип того

Anatoliy
19.12.2016
08:55:30
GET /ololo/:trololo controllers.Ololo.get(trololo: String)
а чем от моего предложения отличается тогда?

Юрий
19.12.2016
08:55:34
можно и так и так

Google
Anatoliy
19.12.2016
08:56:06
аналогичен тому что предлагал я, просто было предложение обращаться по WS прямо по адресу открываемой страницы, и как делать это - я не понимаю пока....

Юрий
19.12.2016
08:58:52
ну выше же написали, ты можешь по любому урлу обращаться. Главное чтобы сервер это умел

а построение урлов в плее есть в доке

Max
19.12.2016
10:06:24
Всем привет вопрос по protocol buffer Есть ли библиотеки помимо этих? https://github.com/scalapb/ScalaPB https://github.com/sbt/sbt-protobuf Они пишут прямо исходники скалы в определенные файлы - я так понял что это вообще общая идея протобафа - нагенерить кода который будет педалить байтовый протокол - как бы максимально быстро а почему в скале это реализовано как и в остальных языках - почему не реализовать через макросы или лучше просто генерацию .proto файлов?

Grigory
19.12.2016
10:08:18
генерация классов в любом случае по схеме; какая разница как классы генериться по схеме будут? это как-то на сокрости сгенерированного протокола отразится?

Max
19.12.2016
10:09:55
схема ввиде кода на скале помоему гораздо более управляема я хочу сам писать кейс классы - ну как это сделано во всех json библиотеках

ну да ладно - я не ратую за такой вариант - генерят классы мне из .proto пусть генерят я просто уперся в то, что я не могу повторно перегенировать классы - я наверняка криворукий - получаю ошибку ... is already defined as object... я вытащил .proto в отдельный сбт подпроект и собираю там

Denis
19.12.2016
10:31:38
Схема первичней твоих кейс классов, так как именно она шарится

Max
19.12.2016
10:32:44
ок

Alexey
19.12.2016
10:54:41
Други, а какие http либы поддерживают routing dsl с возможностью из него сгенерить swagger/raml описание?

Anatoliy
19.12.2016
11:14:10
Народ, помогите разобраться пожалуйста что не так. Создаю при подключении к WS актор завязанный на него. Опять же при этом подключении получаю куки, по кукам проверяю существует ли уже активный актор пользователя с такими куками. Если нет - создаю. Потом создаю уже актор связанный с WS(актор браузера) и даю ему при создании ссылку на актора пользователя которому он принадлежит. в preStart актора браузера пишу что бы он уведомил актора пользователя о своем существовании. Актор пользователя эту инфу получает. Но - при попытке отправить уже инфу о существовании актора браузера(что-бы соединение с WS установилось) - идет таймаут, причем всегда.... не понимаю в чем ошибка...

Вот тут падает судя по всему, на строке sender(): userActor.map { userAc => val child: ActorRef = injectedChild(browserFactory(sessionName, out, userAc, rh, path), s"browserActor-$id") browsers = browsers + child log.debug(s"Получили акторы пользователя: $userAc и браузера: $child") sender() ! child }

Юрий
19.12.2016
11:16:46
Мне кажется, ты пытаешься обратиться к sender внутри асинхронной операции. Так нельзя. Читай про pipeTo

Anatoliy
19.12.2016
11:17:23
Эм.. вам не кажется, пошел читать, спасибо

Эм... но ведь есть обращения в футурах...

Mikhail
19.12.2016
11:19:47
Мне кажется, ты пытаешься обратиться к sender внутри асинхронной операции. Так нельзя. Читай про pipeTo
можно конечно и работать будет) только для начала надо понимать замыкания, время выполнения и последствия)

Юрий
19.12.2016
11:20:17
Эм... но ведь есть обращения в футурах...
Тебе просто везло. Гарантий никаких нет. Про это все есть в доках

Mikhail
19.12.2016
11:20:39
userActor.map - порнография какая-то)

Anatoliy
19.12.2016
11:22:38
https://gist.github.com/Visteras/6c217b22374600ce4606b981666f438a Пытался просто получить актор, и соответственно его сгенерить если не выходит...

Aleksei
19.12.2016
11:23:46
у нас тут что то типа правила кидать код ссылками на ресурсы где его читаемость чуть чуть повыше чем в телеграмме =)

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