@scala_ru

Страница 502 из 1499
Vyatcheslav
17.02.2017
05:47:40
https://www.playframework.com/documentation/2.5.x/ScalaCompileTimeDependencyInjection Application entry point
load'у нужен Application, а не Future[Application], вот в чем загвоздка. Вот если б совсем-совсем entry-point, чтобы можно было вызвать в class Main extends App {} , то да

Юрий
17.02.2017
05:48:36
я ковырялся в исходниках, там можно найти такую точку

посмотри, как сделан стандартный guice loader, и там будет эта точка где-то рядом, если я не ошибаюсь

Google
Denis
17.02.2017
05:49:51
Точка guice

Vyatcheslav
17.02.2017
05:49:56
походу оно: https://github.com/playframework/playframework/blob/38abd1ca6d17237950c82b1483057c5c39929cb4/framework/src/play/src/test/scala/play/api/libs/TemporaryFileCreatorSpec.scala#L87

Vladimir
17.02.2017
05:50:07
В конфигее можно указать свой и там творить всякое

Vyatcheslav
17.02.2017
05:50:30
В конфигее можно указать свой и там творить всякое
так ты указываешь класс, в котором синхронный load :)

Sergey
17.02.2017
05:50:56
А что толку, загрузишь ты сначала в базу что то а потом стартуешь приложение. (пользователи видят 404 10 сек) Или сначала стартуешь приложение (пользователи видят "Загрузка" 10 сек) а потом загружаешь

Vyatcheslav
17.02.2017
05:50:57
надо именно свой entry-point делать. Но вообще, скорее всего задачу придется решать иначе :)

Юрий
17.02.2017
05:51:33
Вообще, можно заблокировать фьючу, чё такого то?

или грешно?

Vladimir
17.02.2017
05:51:52
+ все равно для норм работы данные надо

Nick
17.02.2017
05:51:59
Грешно

Vyatcheslav
17.02.2017
05:52:00
да не, просто вдруг есть "более лучший" путь :)

Sergey
17.02.2017
05:53:05
Однозначно есть ) Это сейчас похоже на аццкие костыли.

Nick
17.02.2017
05:53:39
Однозначно есть ) Это сейчас похоже на аццкие костыли.
У тебя все похоже на костыли если это не акка

Google
Sergey
17.02.2017
05:54:47
Nick
17.02.2017
05:55:27
Подружить можно все что угодно

Юрий
17.02.2017
05:57:22
Так говорите, будто Any => Unit не костыль

Vyatcheslav
17.02.2017
06:00:50
*картинка с кривой рожей*

Nick
17.02.2017
06:03:24
Vyatcheslav
17.02.2017
06:06:54
костыль конечно, не костыль как минимум ThisActorMessage => Unit, где sealed triat ThisActorMessage

[немного оффтопа] Кстати, попробовал для поиска duckduckgo.com, помню тут про него говорили. Даже для английского языка качество поиска так себе :( Часто приходится искать в гугле [/оффтоп]

Немного наброшу говна. sealed trait Wtf object Wtf { case object Foo extends Wtf case object Bar extends Wtf case object Baz extends Wtf } val xs = Set(Wtf.Foo, Wtf.Bar) // scala.collection.immutable.Set[Product with Serializable with Wtf] = Set(Foo, Bar) Собственно, WTF, товарищи? Петрашко говорил, что мощная система типов жы

Aleksey
17.02.2017
06:59:06
Может из за того что сет нековариантный?

Vyatcheslav
17.02.2017
07:00:24
Vyatcheslav
17.02.2017
07:02:03
Что не так?
Очевидно, xs должно иметь тип Set[Wtf]

Потому что Wtf - это общий супертип для Wtf.Foo и Wtf.Bar

а "Product with Serializable with Wtf" - это говно какое-то

Oleg
17.02.2017
07:02:55
Нет не очевидно, т.к. case добрасывает родителей в object

Всё правильно вывел

Vyatcheslav
17.02.2017
07:03:51
не понял "добрасывает родителей"

а…

Oleg
17.02.2017
07:04:58
Ключевое слово case добавляет имплементации Product и Serializable в класс и объект

Google
Vyatcheslav
17.02.2017
07:05:10
дада, я понял )

Oleg
17.02.2017
07:05:26
Можешь добавить в trait

Эти типы

тогда наименьшим общим предком будет просто Wtf

Vyatcheslav
17.02.2017
07:06:02
да, ты прав :) неочевидно, но все верно

Юрий
17.02.2017
07:17:11
Это утверждение верно для линукса
Я говорил скорее о кросс-платформе

кто сегодня делает приолжения для одной платформы?

Vasily
17.02.2017
07:18:45
Кровавый энтерпрайз

Юрий
17.02.2017
07:19:51
не, ну понятно, что можно найти. Но я говорю о _нормальной_ разработке

Vladimir
17.02.2017
07:19:59
В Play завезли асинхронный кэш https://www.playframework.com/documentation/2.6.x/ScalaCache#accessing-the-cache-api

Oleg
17.02.2017
07:26:20
В Play завезли асинхронный кэш https://www.playframework.com/documentation/2.6.x/ScalaCache#accessing-the-cache-api
фууу какой он низкоуровневый,но как раз подойдёт как бэкенд к Tinkoff macroCache

Oleksandr
17.02.2017
07:26:22
давайте ещё асинхронные сеттеры и геттеры делать

Oleg
17.02.2017
07:27:48
а зачем фьюча? он там что, распределенный?
У тебя сам процесс вычисления при cache miss может быть асинхронный

Vladimir
17.02.2017
07:27:58
Там EhCache под капотом, в теории он может быть распределнным

Oleg
17.02.2017
07:28:09
Допустим, ты в монгу лезешь, если не не найдено

getOrElseUpdate[A](key: String, expiration: Duration = Duration.Inf)(orElse: ⇒ Future[A])(implicit arg0: ClassTag[A]): Future[A]

Oleksandr
17.02.2017
07:30:07
стремная штука, но какой-то резон есть

Oleg
17.02.2017
07:31:13
почему вот так нравится людям обсирать то, что они только что увидели. Не делая скидку, что они могли просто не понять за те 1.2378 секунды, что потратили на анализ, понять область применения

Google
Oleksandr
17.02.2017
07:31:32
я понял, и оно мне не нравится

Oleg
17.02.2017
07:31:41
Вот как ты можешь понять, что ты понял

Oleksandr
17.02.2017
07:31:52
например, там сломана атомарность

Oleg
17.02.2017
07:32:33
Nikita
17.02.2017
07:32:46
Oleg
17.02.2017
07:33:18
атомарность транзакционно-дюрабельной конкуретности кеша

Oleksandr
17.02.2017
07:33:18
каким образом?
что будет, если другой поток засетает что-то, пока фьюча делается?

Vasily
17.02.2017
07:33:29
Вообще, такой код хорош до момента, пока ничего не сломано

Admin
ERROR: S client not available

Oleksandr
17.02.2017
07:34:26
что угодно, отличное от будущей фьючи

Oleg
17.02.2017
07:34:36
но теоретически если есть два мисса на один кей, кеш может понять, что ему нужно вычислять только одну

Не пойму, где ты увидел, что оно сломано

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

Oleksandr
17.02.2017
07:36:35
я не про два миса говорю поток 1 не увидел велью и пошел в монгу, оттуда возьмет 1 поток 2 засетал тем временем 2 итого все получают из кеша 2, а первый -- 1, причем 1 потом вытеснит 2

Oleg
17.02.2017
07:36:54
не обязательно

set(key: String, value: Any, expiration: Duration = Duration.Inf): Future[Done]

remove(key: String): Future[Done]

вот remove может дожидаться get ов на этот же key

и set

Google
Oleg
17.02.2017
07:38:06
как ты просто глядя на туториал смог понять, что оно сломано?

Denis
17.02.2017
07:38:18
посмотри все популярные библиотеки, там все ADT так объявлены

Oleg
17.02.2017
07:38:38
Можешь добавить в trait

Эти типы

тогда наименьшим общим предком будет просто Wtf

на апи
ну как видим из него не следует

Oleg
17.02.2017
07:39:20
следует лишь то, что кто-то делает преждевременные выводы

Vyatcheslav
17.02.2017
07:40:28
тогда наименьшим общим предком будет просто Wtf
да-да, тебе тоже спасибо большое )

Oleksandr
17.02.2017
07:40:59
либо банальный сет/гет будет блочить, либо вон та фигня выше с не тем велью

Oleg
17.02.2017
07:42:37
либо банальный сет/гет будет блочить, либо вон та фигня выше с не тем велью
Как я уже сказал, геты могут даблчекаться после возврата на инвалидацию.

Неблокирующе

Oleksandr
17.02.2017
07:43:58
Как я уже сказал, геты могут даблчекаться после возврата на инвалидацию.
1 с монги прийдет через 5 сек 2 вот уже тут и есть запрос на велью что делать?

можно ещё заигнорить ответ монги, что тоже так себе

Oleg
17.02.2017
07:44:53
Приходит из монги - версия ключа совпадает? 1да - вернуть 2 нет - посмотреть был делит или сет,

и вернуть то, что было позже

Oleksandr
17.02.2017
07:46:01
что ты называешь "версией ключа"?

Oleg
17.02.2017
07:46:25
один из вариантов даблчека

для ключей хранятся инкрементальные версии

это просто одно из предположений, как это может быть реализовано

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