
Vyatcheslav
17.02.2017
05:47:40

Юрий
17.02.2017
05:48:36
я ковырялся в исходниках, там можно найти такую точку
посмотри, как сделан стандартный guice loader, и там будет эта точка где-то рядом, если я не ошибаюсь

Vladimir
17.02.2017
05:49:44

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

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

Oleg
17.02.2017
07:01:39
Правильный тип же

Vyatcheslav
17.02.2017
07:02:03
Потому что 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
да, ты прав :) неочевидно, но все верно

Vasily
17.02.2017
07:06:35

Юрий
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

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

Oleg
17.02.2017
07:27:48

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
Вообще, такой код хорош до момента, пока ничего не сломано

Oleg
17.02.2017
07:33:57

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

Denis
17.02.2017
07:37:51

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

Oleksandr
17.02.2017
07:38:15

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

Oleg
17.02.2017
07:38:38
Можешь добавить в trait
Эти типы
тогда наименьшим общим предком будет просто Wtf
на апи
ну как видим из него не следует

Vyatcheslav
17.02.2017
07:39:12

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

Vyatcheslav
17.02.2017
07:40:28

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

Oleg
17.02.2017
07:42:37
Неблокирующе

Oleksandr
17.02.2017
07:43:58
можно ещё заигнорить ответ монги, что тоже так себе

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

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

Oleg
17.02.2017
07:46:25
один из вариантов даблчека
для ключей хранятся инкрементальные версии
это просто одно из предположений, как это может быть реализовано