
Vladimir
27.07.2016
20:25:34
Что-то мне подсказывает, что у плея в коробке такого нет, т.ч. просто искать отдельное решение

Anatoliy
28.07.2016
04:07:23
В коробке - нет. Потому и спрашиваю как лучше) Потому что через веб придется взаимодействовать с сервисами которые будет нужно к нему подключать
Тем или иным образом

Nikita
28.07.2016
07:08:46
Вебсокет или TCP?

Google

Wystan
28.07.2016
11:17:03
Турник или винт?

Alexandr
28.07.2016
11:22:26
Взаимодействие веб-сервисов на уровне tcp, попиксельная верстка - мало ли можно придумать

Pavel
28.07.2016
11:25:23
кстати где в Play можно вставить инициализацию своего кода, котороую нужно 1 раз проделать? Я вставил в компаньон, но наверное это не лучший способ

Igor
28.07.2016
11:26:29
любой класс пишете в нем код, потом помечаете его как asEagerSingleton() в модуле
https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Eager-bindings

Pavel
28.07.2016
11:29:26
спасибо?

Sergey Tolmachev
28.07.2016
14:10:50
тут есть те, кто пользуют akka http 2.4.8 с akka http spray json experimental?

Igor
28.07.2016
14:11:41
осталось добавить «в продакшене»

Vladimir
28.07.2016
14:12:12
есть но акка 2.4.7

Sergey Tolmachev
28.07.2016
14:12:16
в SprayJsonSupport есть implicit FromEntityUnmarshaller/ToEntityMarshaller, но в entity требует FromRequestUnmarshaller ( def entity[T](um: FromRequestUnmarshaller[T]) ). Внимание вопрос, как эта штука из доков работает? http://doc.akka.io/docs/akka/2.4.8/scala/http/common/json-support.html
у меня падает could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[...] при компиляции. но FromRequestUnmarshaller ведь и нету в SprayJsonSupport

Vladimir
28.07.2016
14:14:17
падает при компиляции роута?

Sergey Tolmachev
28.07.2016
14:14:54
ну да, где entity(as[...]) { ... }

Google

Vladimir
28.07.2016
14:15:39
импорт
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import spray.json._
Есть?

Sergey Tolmachev
28.07.2016
14:16:48
да, но в том и дело, что в SprayJsonSupport прописаны FromEntityUnmarshaller, не FromRequestUnmarshaller

Vladimir
28.07.2016
14:16:58
ну и соотвественно импор объекта где описаны jsonFormat
Чаще всего нехватате чего-то из этих трех
Взлетело?

Sergey Tolmachev
28.07.2016
14:21:09
нет
я это все понимаю, я описал конкретно ситуацию выше
судя по доке ( http://doc.akka.io/docs/akka/2.4.8/scala/http/common/json-support.html ), в entity должен влезать FromEntityUnmarshaller, но там требуется FromRequestUnmarshaller

Aleksei
28.07.2016
14:22:58
я кстати пару раз ловил себя на том что в акке информативнее читать тесты, а не доки

Sergey Tolmachev
28.07.2016
14:23:45
там есть первый пример, он не должен работать.
там
import spray.json._
...
// collect your json format instances into a support trait:
trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
implicit val itemFormat = jsonFormat2(Item)
implicit val orderFormat = jsonFormat1(Order) // contains List[Item]
}
...
post {
entity(as[Order]) { order =>
....
вот у entity должна быть ошибка
вот тест. он не то тестит)) https://github.com/akka/akka/blob/65a9e0a0f9372d2e2ecb945c8a9dae129a438f77/akka-http-tests/src/test/scala/akka/http/scaladsl/marshallers/JsonSupportSpec.scala

Aleksei
28.07.2016
14:24:43
ахахаха ) заняты там все! ява апи пилят

Sergey Tolmachev
28.07.2016
14:25:03
он подразумевает, что есть implicit FromEntityUnmarshaller . Но в реальном коде ему неоткуда взяться, в SprayJsonSupport его нет

Vladimir
28.07.2016
14:25:44
я может что-то не понимаю, но вот например:
implicit def sprayJsonUnmarshallerConverter[T](reader: RootJsonReader[T]): FromEntityUnmarshaller[T] =
sprayJsonUnmarshaller(reader)

Sergey Tolmachev
28.07.2016
14:26:22
@greenhost87 http://doc.akka.io/docs/akka-stream-and-http-experimental/2.0/scala/http/routing-dsl/directives/marshalling-directives/entity.html
def entity[T](um: FromRequestUnmarshaller[T]): Directive1[T]
FromEntityUnmarshaller != FromRequestUnmarshaller

Diemust
28.07.2016
14:30:40
насколько помню, там же цепочка FromEntity -> FromRequest -> что-то еще

Sergey Tolmachev
28.07.2016
14:31:35
помотри пожалуйста, как это делается)
type FromEntityUnmarshaller[T] = Unmarshaller[HttpEntity, T]
type FromRequestUnmarshaller[T] = Unmarshaller[HttpRequest, T]]

Diemust
28.07.2016
14:34:06
ну я когда давно спрей ковырял, у меня было что-то подобное, почти всегда просто какого-то имплисита не хватает. Ну да ладно, может мое и не связано)

Google

Vladimir
28.07.2016
14:35:42
если пойти дегамо то вызовы будут вот такие:
implicit def sprayJsonUnmarshaller[T](implicit reader: RootJsonReader[T]): FromEntityUnmarshaller[T] =
sprayJsValueUnmarshaller.map(jsonReader[T].read)
implicit def messageUnmarshallerFromEntityUnmarshaller[T](implicit um: FromEntityUnmarshaller[T]): FromMessageUnmarshaller[T] =
Unmarshaller.withMaterializer { implicit ec ⇒ implicit mat ⇒ request ⇒ um(request.entity) }
def withMaterializer[A, B](f: ExecutionContext ⇒ Materializer => A ⇒ Future[B]): Unmarshaller[A, B] =
new Unmarshaller[A, B] {
def apply(a: A)(implicit ec: ExecutionContext, materializer: Materializer) =
try f(ec)(materializer)(a)
catch { case NonFatal(e) ⇒ FastFuture.failed(e) }
}
Spray и akka-http как его грубо говоря вторая версия, очень любят implicit преобразования по поводу и без. Поэтому когда что-то не компилируется в роутах это на 99% проблемы с импортом необходимых имплиситов


Sergey Tolmachev
28.07.2016
14:42:58
я импортнул свои jsonformat в класс, а вынес вверх файла и заработало >_<

Vladimir
28.07.2016
14:44:55
ЧТД :)

Sergey Tolmachev
28.07.2016
14:45:24
но какого черта >_< импорты были до блока использования всего этого
спасибо!)
я разобрался с помощью -Xlog-implicits.
<sprayJsonUnmarshaller: error> is not a valid implicit value for akka.http.scaladsl.unmarshalling.FromEntityUnmarshaller[...] because:
reference to sprayJsonUnmarshaller is ambiguous;
it is imported twice in the same scope by ...
я дважды заимпортил SprayJsonSupport с разными форматами.

Wystan
28.07.2016
16:26:32
А кто-нибудь знает, что такое trial day в буржуйских компаниях при приеме на работу? Это надо поехать в офис, допустим, в амстердаме и там целый день тусить в офисе? или там будет череда собеседований? или там просто охранник как в ночном клубе и нужно дресс-код пройти?

Nikita
28.07.2016
16:26:50
целый день тусить

Wystan
28.07.2016
16:27:31
В чем смысл? Просто что кандидат без психических отклонений?
Трудно представить что один день как-то покажет как я решаю задачи из их бэклога.
Может, там как в мара сальватруча нужно продержаться 15 минут, пока тебя пинают по почкам монадами.

Nikita
28.07.2016
16:35:46
я думаю что да)
посмотреть что кандидат адекватный

Ivan
28.07.2016
16:40:21
дня наверно маловато но если за него заплатят то лучше тупо собеседования

Ivan
29.07.2016
10:41:56
Коллеги, кто-нибудь в курсе, есть ли какое-нибудь сокращение для .map(_.map(_ ...)) ? (flatMap тут не подходит, потому что разворачивает результат, а мне нужно конечное значение замепить)

Grigory
29.07.2016
10:49:38
можешь использовать for; но врядли это красивее

Viacheslav
29.07.2016
10:51:19
(for{..., x<-mapX} yield x).getOrElse(123) так пойдёт?

Denis
29.07.2016
10:51:48
Лучше как было )

Oleksandr
29.07.2016
10:52:08
линзы?

Google

Viacheslav
29.07.2016
10:52:32

Ivan
29.07.2016
10:52:40
здесь for нужен судя по поставноке

Grigory
29.07.2016
10:52:55
я бы написал общий метод для всех вложеных функторов)
def map2[F[_], G[_], A, B](fg: F[G[A]])(f: A => B)
(implicit ev0: Functor[F], ev1: Functor[G]): F[G[B]] =
ev0.map(fg)(g => ev1.map(g)(f))

Oleksandr
29.07.2016
10:53:52
(scalaz Lens)
(не очень понял проблему, но симптомы похожие)

Ivan
29.07.2016
10:56:45
да уж, пожалуй оставлю как есть :)

Vladimir
29.07.2016
10:57:07
:)))

Viacheslav
29.07.2016
11:00:10

Egor
29.07.2016
11:00:20
hi big enough because i.ihoki
The KLM flight

Admin
ERROR: S client not available

Юрий
29.07.2016
11:00:42
Я тоже сталкивался с такой проблемой. Выхода в общем случае не нашел. Можно для какого-то конкретного случая сделать функцию.
Я про map map map

Alex
29.07.2016
11:01:38
да зачем линзы, хватит композиции функторов

Pavel
29.07.2016
11:02:00
рекурсивный обработчик написать? Что-то типа
list match { case List[List[T]] => list.map(recur); case _ => list }

Alex
29.07.2016
11:02:33
scala> val ll = Functor[List].compose[List]
scala> List(List(1,2),List(2,3),List(3,4))
res4: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4))
scala> ll.map(res4)(_ + 1)
res5: List[List[Int]] = List(List(2, 3), List(3, 4), List(4, 5))

Warren
29.07.2016
11:02:54
поддерживаю линзы или композицию функторов
все проблемы уже решены до нас
для линз я видел очень легковесные библиотеки, не обязательно scalaz прикручивать
пригождается очень часто

Google

Daniel
29.07.2016
11:04:44
ll.map(res4)(_ + 1) потрясающе интуитивно)

Ivan
29.07.2016
11:10:20
Для одного единственного случая в проекте, не считаю целесообразным что-то прикручивать. Но спасибо за варианты.

Vladimir
29.07.2016
11:11:43
не тру... надо сразу скалаЗ весь тащить :) что бы было красиво (сарказм)

Alex
29.07.2016
11:12:58
тащите кошки, они модульные

Pavel
29.07.2016
11:14:41
объясните мне, простаку, в чём может быть практический профит от scalaz-cats, кроме вот подобных довольно редких (на мой взгляд) случаев?

Aleksey
29.07.2016
11:16:01

Pavel
29.07.2016
11:16:15
ну это не практический профит )

Nikita
29.07.2016
11:16:33
в том что после написания кода с использованием scalaz/cats тебя становиться очень тяжело уволить

Alex
29.07.2016
11:16:47
профит как от любых абстракций

Pavel
29.07.2016
11:16:50
во, вот это хороший аргумент

Ivan
29.07.2016
11:16:52
а вот реальный профит

Foo
29.07.2016
11:17:00

Alex
29.07.2016
11:17:13
сабтайпинг

Foo
29.07.2016
11:17:20
ни в том, ни в другом я до сих пор не понял, что нужно импортировать, чтобы имплиситы нужные прогрузились

Alex
29.07.2016
11:17:40
import scalaz._, import Scalaz._ :)

Aleksey
29.07.2016
11:18:12
ну это не практический профит )
Еще как практический. Ты чувствуешь себя хаскелистом. Быть хаскелистом это круто и почетно. У тебя поднимается самооценка, ты чувстуешь, что жизнь хороша. Ты становишься продуктивнее. Бизнес зарабатывает больше денег. Все счастливы.

Pavel
29.07.2016
11:19:04
профит как от любых абстракций
я вот ловлю себя на мысли, что мне всё это настолько непонятно, что легче "говнокодить" по старинке - без scalaz/cats. Ну типа как если человек привык всю жизнь отвёрткой пользоваться, сложно ему привить любовь к 70-скоростной электрической отвёртке с моторчиком

Alex
29.07.2016
11:19:35
главное чтоб было счастье

Ivan
29.07.2016
11:19:49
блин я тоже вначале втыкаю на \/ а потом беру Try и вроде ок все

Alex
29.07.2016
11:21:07
https://github.com/scala/scala/pull/5135
\/ теперь нинужен!!1

Daniel
29.07.2016
11:22:36
будет не нужен когда 2.12 зарелизят)

Vladimir
29.07.2016
11:27:11
А еще ты можешь юзать кошек и скалз что бы тебя не смогли заменить на проекте

Alex
29.07.2016
11:27:47
и еще джоб секьюрити себе можно обеспечить