@scala_ru

Страница 560 из 1499
Valery
13.03.2017
12:23:37
фух

Sergey
13.03.2017
12:23:39
слик неплох

Aleksey
13.03.2017
12:24:59
в серьезных приложения как тогда делают? не пишут же методы для каждого критерия или это нормальная практика?
Ну твое решение нормальное вполне, хоть и попахиват. def findBy(name: String = null, owner: String = null): Future[Option[models.Project]] = { val query = projects find { project => Seq( Option(name).map(project.name === _), Option(owner).map(project.owner === _) ) foldLeft(false) { case (acc, Some(res)) => acc || res case (acc, None) => acc } } db.run(query.result) } Наверно есдиственный случай, когда использование null оправдано. В принципе такие вещи можно макросами генерить. Тогда вообще норм.

Sergey
13.03.2017
12:27:12
В слике очень плохо с наборными фильтрами

Google
Sergey
13.03.2017
12:27:25
Lifted запрос с опциональными фильтрами невозможно читать, а Plain не композируется

Viktor
13.03.2017
12:27:27
мде

переизобрел active-slick

ошибки в тех же местах

видимо это косяк org.postgresql

Nick
13.03.2017
12:30:41
Oleg правда я и в doobie уже вляпался в неочень красивый batchupdate

Nikolay
13.03.2017
12:32:04
Oleg правда я и в doobie уже вляпался в неочень красивый batchupdate
взял бы монгу - не было бы таких проблем

Nick
13.03.2017
12:32:18
точно, забыл ж

Grigory
13.03.2017
12:32:50
и акку

Viktor
13.03.2017
12:33:13
java и сюда свои кривые ручонки дотянула

Valery
13.03.2017
12:34:00
val projectGen = LabelledGeneric[ProjectDAO.this.dbTables.ProjectTable] def findBy234(criteria: (Symbol, String)*): Future[Option[models.Project]] = { val query = projects.filter { project => val rec = projectGen.to(project) criteria contains { case (key, value) => rec(key) === value // ^^^ - error: Application does not take parameters } } db.run(query.result) } тут что-то базовое видимо

Aleksey
13.03.2017
12:36:03
ух. он небось только в компайлтайме доступен.

Oleg
13.03.2017
12:36:16
rec(key) === value вот это не скомпилится

Google
Aleksey
13.03.2017
12:36:16
позабыл я шеплес, да.

Oleg
13.03.2017
12:36:39
key здесь чистый Symbol, а нужен синглтон

Valery
13.03.2017
12:37:28
val currentPrice = rec('price) price - здесь синглтон?

Oleg
13.03.2017
12:37:35
да

там имплицитная конверсия в Witness.Lt

Nick
13.03.2017
12:38:06
позабыл я шеплес, да.
еще б идея умела с ним работать полностью

Oleg
13.03.2017
12:39:20
т.е. тебе нужно на этапе компиляции доказать, что любой символ из твоего Seq[(Symbol, String)] является полем твоего рекорда, что, как мне видится, невозможно

Valery
13.03.2017
12:39:47
то есть получается - что это впринципе невозможно

Oleg
13.03.2017
12:39:56
возможно в принципе

Valery
13.03.2017
12:39:59
динамически фильтровать таблицу?

дааа, просто так не заедешь в скалу)

Oleg
13.03.2017
12:41:20
динамически фильтровать таблицу?
плюс, я насколько помню в слике же столбцы простыми def ами у класса, а не полями case class т.е. всё упадёт ещё тогда, когда не найдётся LabelledGeneric

Valery
13.03.2017
12:42:08
ага def owner = column[String]("owner")

Kirill
13.03.2017
12:42:33
не знаю насколько адекватное решение, но работает def findBy(criteria: (String, String)*) = db.run { projects .filter(project => criteria.foldLeft(LiteralColumn(false).bind) { case (query, (k, v)) => query && (project .column[String](k) === v) }) .result }

findBy("name" -> "project", "owner" -> "vasya")

Oleg
13.03.2017
12:42:37
LabelledGeneric по дефолту не ищет такое, нужно свой материалайзер писать

Valery
13.03.2017
12:43:12
как код зеленым цветом отправлять? или он только для меня зеленый

Nikolay
13.03.2017
12:43:22
в ` таких штуках

Valery
13.03.2017
12:43:34
у меня красный

Google
Aleksey
13.03.2017
12:43:40
в ` таких штуках
Добро пожаловать в телеграм

Oleg
13.03.2017
12:43:49
как в markdown

Aleksey
13.03.2017
12:43:53
Вот в таких ```

Mikhail
13.03.2017
12:43:58
Там как-то все плохо с этим. Но решение есть. val unusedRepo = Some(Resolver.file("Unused transient repository", file("target/unusedrepo"))) val dontPublishSettings = Seq( publish := {}, publishTo := unusedRepo, publishArtifact := false ) У всех проектов которые не надо папблишить надо прописать .settings(dontPublishSettings:_*)
как все печально. но меня интересует не столько запрет копирования, сколько импорт сразу всех модулей в другом проекте за счет одного центрального. собственно сделал в дефолтмодуле dependsOn(mod0, mod1, mod...) - оно собирает пом который надо, с депенденсями указанными, но что-то в новом проекте не резолвит эти депенденси - странно

Kirill
13.03.2017
12:45:16
боюсь на не строковых колонках оно упадет в рантайме

у нас пишут все фильтры ручками

особой боли не испытываем

Valery
13.03.2017
12:47:10
о

скомпилилось

Valery
13.03.2017
12:47:37
спасибо

Nick
13.03.2017
12:47:54
@fomkin а ты шеиплесс то юзаешь в своих проектах?

Valery
13.03.2017
12:48:05
да похоже ручками написать более правильно

Aleksey
13.03.2017
12:48:26
Oleg
13.03.2017
12:55:13
Nick
13.03.2017
17:08:05
А у scalatest fixtures насколько глобальны?

Евгений
13.03.2017
19:09:10
а зачем здесь Null в дефолтах?
Чтоб можно было искать только по одному из параметров, например

Google
Nikolay
13.03.2017
21:59:07
https://twitter.com/contrarivariant/status/841406364891119617

https://github.com/scala/scala/pull/5774 круто если это будет в 2.12

Oleg
14.03.2017
05:59:04
Не плохо.
да же очень

Nick
14.03.2017
07:01:20
https://twitter.com/scaladays/status/841293753260339203

Андрей
14.03.2017
07:07:49
да же очень
Это жёстче CoC'а

Andrey
14.03.2017
07:09:10
Не плохо.
Запятая забыта? ))

Artem
14.03.2017
09:32:35
был ли у кого опыт использования http://async-io.org/? точнее кластеризации этой штуки или может быть добрые люди посоветуют что-то для поддержки множества WS соединений с fallback и кластеризацией, т.к. придется держать в одним момент времени 100к+ сокетов

https://github.com/Atmosphere/atmosphere про вот это речь

Admin
ERROR: S client not available

Nikolay
14.03.2017
10:48:11
как идиоматично в akka-streams делать периодическое(по времени или количеству элементов) логирование? Мутабельный GraphStage с счетчиком и таймером? или как-то иначе?

Dmitry
14.03.2017
10:58:11
собрать из стандартных компонентов

Oleg
14.03.2017
11:05:39
Mikhail
14.03.2017
11:06:58
как идиоматично в akka-streams делать периодическое(по времени или количеству элементов) логирование? Мутабельный GraphStage с счетчиком и таймером? или как-то иначе?
если по счетчику - так это просто промежуточный стейдж, который пропускает дальше без преобразования и считает у себя там что-нибудь. если по времени - то это не вижу смысла привязывать вобще как-то к стриму

Oleg
14.03.2017
11:09:11
http://doc.akka.io/docs/akka/2.4.17/scala/stream/stages-overview.html#groupedWithin

+ http://doc.akka.io/docs/akka/2.4.17/scala/stream/stages-overview.html#log

Mikhail
14.03.2017
11:11:52
ну да, это и есть мутабельный GraphStage с счетчиком и таймером. почему нет смысла в случае с таймером?
потому что мешанинка получается и композиция нарушается - мешать реализацию стейджа и запуск блока кода по таймеру. если ты хочешь счетчик по таймеру логировать - ничто не мешает тебе сделать этот самый универсильный стейдж со счетчиком - который наружу показания сможет отдавать и не будет зависеть от того как именно ты это используешь - для считывания по таймеру или по внешнему событию и т.д.

Nikolay
14.03.2017
11:12:56
а, логирование по таймеру не стоит - ты про это?

в одном stage

Google
Mikhail
14.03.2017
11:15:25
в одном stage
да, про таймер. но побочный таймер не влияющий на сам ран стрима я бы вобще не вставлял в стейджи

представь, что у тебя стрим это водопад - постоянно что-то течет(или не течет - всяко бывает, то течет, то нетечет). если хочется счетчик - тебе конечно его надо вставить прям в водопад (колесико которое будет отщелкивать пропущенный через себя обьем). но если тебе по таймеру надо брать показания этого счетчика - нет смысла таймер пихать внутрь водопада

Nikolay
14.03.2017
11:19:24
в таком случае куда?

Борис
14.03.2017
11:20:14
GraphStage все еще описывается кучей бойлерплейта же? Тогда отсылка в независимый актор-счетчик куда более простое решение

Mikhail
14.03.2017
11:20:53
дальше это только от тебя и от общей архитектуры зависит. главное чтобы у тебя была возможность в любой момент времени считать показания счетчика. разделяй и влавствуй)

GraphStage все еще описывается кучей бойлерплейта же? Тогда отсылка в независимый актор-счетчик куда более простое решение
черезчур избыточно обрабатывать дополнительную очередь только для того, чтобы инт инкрементить. к тому же даже если там при реализации стейджа есть бойлерплейт - он все равно может быть переиспользован после первичной реализации на любом из стримов уже без бойлерплейта

Oleg
14.03.2017
11:22:03
А мы все проигнорировали меня?

Mikhail
14.03.2017
11:23:04
А мы все проигнорировали меня?
то, что ты скинул - не соответствует тому, что он описал в хотелках

Oleg
14.03.2017
11:23:31
чему не соответствует?

Aleksei
14.03.2017
11:24:29
тому, что он описал в хотелках, видимо

Oleg
14.03.2017
11:25:49
если не хотите хранить Seq, можно использовать batch

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

Mikhail
14.03.2017
11:26:53
ну мы же про случай с какой то агрегацией по времени говорим?
отправляя во внешний актор 1(единичку, поскольку для счетчика отправлять целиком пришедший элемент - наверное уже совсем зашкварчик будет) - ты тем самым заставляешь акку менеджить поток сообщений этих единичек. но зачем? у тебя стримы и так уже шуруют, зачем еще параллельно заставлять менеджить очереди?

если не хотите хранить Seq, можно использовать batch
моя твоя вобще не понимать какую задачу ты решаешь. Насколько я понял Николая, он хочет по времени или по счетчику снимать какое-то агрегированное значение (видимо для подсчитывания какого-либо throughput в том или ином виде с учетом времени) и отвечал ему исходя из этих соображений. Что именно ты пытаешься донести и о чем - не понима

Artem
14.03.2017
11:33:26
groupedWithin затормозит стоим, не?

Борис
14.03.2017
11:33:29
Дык если речь только про метрики можно map{ x => meter.mark(); x} просто делать)

Mikhail
14.03.2017
11:33:30
именно эту работу и делает groupedWithin
"Chunk up the stream into groups of elements received within a time window, or limited by the given number of elements, whichever happens first." - это влияет на водопад

Oleg
14.03.2017
11:33:47

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