@scala_ru

Страница 240 из 1499
Boris
21.11.2016
08:56:40
Mikhail
21.11.2016
08:57:05
либо придется создавать виртуальные интерфейсы, но имхо виртуалку проще поднять - один раз настроил, снял снепшот и готово
зачем? что ты этим протестируешь? если ты тестируешь логику кластера - не важно где работают инстансы, на одной машине или на разных. если тестируешь сеть - с виртуалками сподручнее, чтобы не ебаться с локальными роутами в оси. если проводишь тест на отказ при ограниченных ресурсах и поднимаешь для этого виртуалки на локальной машине - занимаешься самообманом)

Artem
21.11.2016
08:58:42
тестировать кластер без тестирования сетки не имеет особого смысла, как мне кажется

скидываешь пласт возможных проблем и все

Google
Artem
21.11.2016
08:59:32
> чтобы не ебаться с локальными роутами в оси да, поэтому поднимаешь виртуалку и тестируешь комплексно e2e тестами

Mikhail
21.11.2016
08:59:48
вот после таких тестов и появляются статьи - "100500 ошибок которые мы сделали и в чем обманулись при тестировании"

Artem
21.11.2016
09:01:20
лол :)

Anatoliy
21.11.2016
09:21:18
Всем привет) Народ, может кто подсказать, надо сделать автоматическую сортировку по полям таблицы в Slick. Нужно это что бы был полноценный rest. Т.е. ... user?sort=+family,-name Я сейчас перевожу это в формат seq(string, boolean), но теперь на основе этого надо через slick сформировать корректно запрос, на этом и стопнулся. Может кто подсказать куда смотреть?

Mikhail
21.11.2016
09:26:01
а он не позволяет цепочку сделать? q.sortBy().sortBy() ?

Anatoliy
21.11.2016
09:38:18
это можно, но у меня есть seq(string, boolean) Из string я могу вытащить собственно название поля по которому надо сортировать, по boolean - как сортировать. Но sortBy() работает по типу sortBy(_.family.asc) и вот как это сделать - я не знаю... ведь в seq() family - это string. Как это правильно надо делать тчо бы получилось?

Vladimir
21.11.2016
09:40:55
нужно этот seq конвертнуть в Seq[slick.lifted.ColumnOrdered[T]]

*маппер написать то бишь

и потом можно будет зафолдить ее уже в Query, думаю

Anatoliy
21.11.2016
09:43:23
Хм... щас буду пробовать, правда не уверен что всё верно понял... Но - спасибо, попробую)

Эм.. а под "зафолдить" вы что имели в виду? Потому что я сейчас вижу вариант прогнать всё через foreach при этом используя var...

Vladimir
21.11.2016
09:53:56
Можно на "ты" :) val query: Query[...] = ... val sortedQuery = resultSeq.foldLeft(query)((sort, q) => q.sortBy(sort))

тож самое в целом

Google
Sergey Tolmachev
21.11.2016
10:32:47
Nikolay
21.11.2016
10:43:41
отдельный Thread Pool + jdbc Connection Pool?

Sergey Tolmachev
21.11.2016
10:44:38
синхронный scalikejdbc

там какой-то другой по-умолчанию пул вроде

как люди этот slick используют, там шаг в сторону от crud и ты попадаешь в бассейн с крокодилами

в scalikejdbc в худшем самом сложном случае можно plaintext sql написать

Nikolay
21.11.2016
10:47:00
в принципе там можно sql”select * from foo” писать

в слике можно. в некоторых случаях так и делал

Sergey Tolmachev
21.11.2016
10:48:05
там можно эти sql"..." компоновать?

в scalikejdbc можно и очень удобно строить запросы из разных кусочков полу plaintext запросов

а вообще не хочу начинать новый холивар :)

я хочу собрать deb, о чем писал в четверг! сегодня я буду всем надоедать здесь этим :D

Nikolay
21.11.2016
10:50:31
там можно эти sql"..." компоновать?
составить из отдельных кусочков запрос, не уверен на самом деле

Sergey
21.11.2016
11:05:36
Scalikejdbc, насколько я помню, норовит под все сделать prepared statements... Поэтому использовать его с каким-то пулером коннектов надо осторожно. Например, для случая postgresql + pgbouncer.

Anatoliy
21.11.2016
11:06:26
Можно на "ты" :) val query: Query[...] = ... val sortedQuery = resultSeq.foldLeft(query)((sort, q) => q.sortBy(sort))
Прошу прощения, отходил. Вот сейчас я собственно получаю sortFuncs: Seq[slick.lifted.ColumnOrdered[T]]* , в итоге остается val table: TableQuery[MTI] sortFuncs.foldLeft(table).... Так? или опять что-то не так делаю?

Nirland
21.11.2016
11:13:09
Парни подскажите пожалуйста какую нибудь дельную книгу по распределенным системам, ну чтоб там начиная с кап теоремы звканчивая рафтом

folex
21.11.2016
11:34:01
@Nirland http://book.mixu.net/distsys/single-page.html

Google
Sergey
21.11.2016
11:35:05
> Sergey Tolmachev а что в этом плохого, если использовать запросы с параметрами? На уровне протокола постгреса вызов prepared query - это в упрощенном виде передача по протоколу идентификатора запроса и списка параметров. Соответственно, если bouncer отдаст коннект, где запроса с таким id не будет - это приведет к понятным последствиям.

Anatoliy
21.11.2016
11:43:15
думаю, да
Эм... не работает...

Sergey
21.11.2016
11:51:08
Sergey Tolmachev
21.11.2016
11:51:32
я не знаю, как это работает под капотом, но как-то это работает с этим :)

Vladimir
21.11.2016
11:57:10
Эм... не работает...
но собирается?

Anatoliy
21.11.2016
11:59:09
но собирается?
неа, я тут вот такой вариант нашел: http://scadiddle.blogspot.ru/2013/06/paging-and-sorting-with-slick-and-scala.html Сейчас думаю как бы его переделать под вариант с одним общим методом, но тут уже не так сложно. Осталось придумать вариант с передачей не только как сортирвоать, но и функции с тем как искать :) И будет всё хорошо)

ужас, ну так его переделать надо что бы ужаса не было)

Timothy
21.11.2016
12:01:21
https://github.com/fcomb/fcomb/blob/develop/fcomb-persist/src/main/scala/io/fcomb/persist/PaginationActions.scala#L28-L45 у меня такой generic метод

q.sortBy { t => val c = f(t).applyOrElse(column, unknownSortColumnPF) val sortOrder = order match { case SortOrder.Asc => Ordering(Ordering.Asc) case SortOrder.Desc => Ordering(Ordering.Desc) } ColumnOrdered(c, sortOrder) }

Anatoliy
21.11.2016
12:01:58
на самом деле хороший пример в примере Play REST в Activator'е, но вот именно его я и пытаюсь на слик переложить, уже все остальное переложил, только сортировка осталась

https://github.com/fcomb/fcomb/blob/develop/fcomb-persist/src/main/scala/io/fcomb/persist/PaginationActions.scala#L28-L45 у меня такой generic метод
если не ошибаюсь он возвращает просто список из полей и ипов сортировки типа asc/desc, так?

Timothy
21.11.2016
12:06:54
если не ошибаюсь он возвращает просто список из полей и ипов сортировки типа asc/desc, так?
нет, он берет Query[_, _, _] (Например таблицу юзеров), потом список таплов (поле, тип портировки) и применяет их к этому query, возвращая новый query

т.е. применяет .sortBy

https://github.com/fcomb/fcomb/blob/develop/fcomb-persist/src/main/scala/io/fcomb/persist/OrganizationGroupsRepo.scala#L103-L107 вот пример сортировки по колонкам

не нужно писать проверку на каждое поле и на asc/desc

лучше способ без макросов я не нашел

Anatoliy
21.11.2016
12:08:37
Вот я примерно это и хотел... только мозгов не хватает видимо пока самому такое делать. Буду изучать тогда ваш пример)

Timothy
21.11.2016
12:10:06
если что, могу помочь ибо там все без доки

Google
Anatoliy
21.11.2016
12:11:55
Буду благодарен, ибо разбираюсь я на... достаточно низком уровне по моему мнению..)

Timothy
21.11.2016
12:15:27
это все работает из play?

Anatoliy
21.11.2016
12:15:38
да

Собственно начинал я с play-api-rest который можно взять через Activator. Но я хочу это видеть в работе через slick. Как идут данные внутри - я разобрался. А вот с самим сликом пока не могу. Собственно что делаю: Для каждой таблички есть подобные методы: val sortingFields = Seq("id", "login") def sortingFunc(fieldsWithOrder: (String, Boolean)): (UserTableDef) => ColumnOrdered[_] = { fieldsWithOrder match { case ("id", ASC) => _.id.asc case ("id", DESC) => _.id.desc case ("login", ASC) => _.login.asc case ("login", DESC) => _.login.desc } }

т.е. я смотрю какие поля разрешены к сортировке и выдаю их в формате seq(string, boolean)

Если там косяк - значит выдаю косяк

Mikhail
21.11.2016
12:18:00
case ("id", ASC) => _.id.asc case ("id", DESC) => _.id.desc не ужели нельзя взять колумн и потом к нему применить asc || desc ?

Timothy
21.11.2016
12:19:18
ASC|DESC это что за тип?

Anatoliy
21.11.2016
12:19:19
Можно, но я пока делаю по примеру, и просто хочу сделать что бы оно работало

Boolean

Timothy
21.11.2016
12:19:32
а

Mikhail
21.11.2016
12:19:41
лучше енум

Timothy
21.11.2016
12:19:42
я думал там enum

Mikhail
21.11.2016
12:20:00
или в виде обжектов, но не бул

Anatoliy
21.11.2016
12:20:11
object Sorting { final val ASC = false final val DESC = true }

пока там так

Timothy
21.11.2016
12:20:19
sealed trait SortOrder object SortOrder { final case object Asc extends SortOrder final case object Desc extends SortOrder }

Mikhail
21.11.2016
12:21:05
fieldsWithOrder: (String, Boolean) -  над названиями как всегда поработать надо. тупл называть "поля" во множественном числе - странновато

Anatoliy
21.11.2016
12:22:34
Соглашусь про названия, но я опять же пока беру названия из примеров, целые куски кода оттуда беру

Google
Anatoliy
21.11.2016
12:22:46
А так да, проблемы всегда проблемы

Собственно что дергаю в методе котроллера: Users.page(1L, sortingFields, p, s) //Сортировка def page(id: Long, sortingFields: Seq[(String, Boolean)], p: Int, s: Int) = Future.successful { val tbl = table //Тут по идее условие для filter должно быть val filterFunc: UserTableDef => Rep[Boolean] = { u => (u.id === id) } //Тут дергаем уже общий для всех моделей метод и скармливаем ему функцию с фильтров и данные по сортировке super.page(p, s)(filterFunc)(sortingFields.map(sortingFunc): _*) Page(Seq(User(1, "login", "passwd", Some("email"),false)),1,1,1) }

Вот этот общий метод: ` def page[T](p: Int, s: Int)(filterFunc: T => Rep[Boolean])(sortFuncs: Seq[slick.lifted.ColumnOrdered[T]]*) = { var res = table sortFuncs.foldLeft(res)((r,q) => r.sortBy(q) ) res.filter(filterFunc) //Ну и тут по идее надо вернуть Page где sorted уже запрос с сортировкой и фильтрами // Page( // items = (sorted.drop((p - 1) * s).take(s)), // page = p, // size = s, // total = (sorted.size) // ) }

Вот примерно как-то так. Где-то я не туда завернул, а где - понять не могу

Aleksei
21.11.2016
12:31:25
а есть же какие то веб сервисы для шаринга кода прямо вот в реальном времени да?

Mikhail
21.11.2016
12:32:08
ага, даже в идею плагинчиком цепляется

и можно краудсорсингом в лайве заниматься

но честно говоря быстро надоедает, не функционально

Aleksei
21.11.2016
12:32:57
ну сюда копипастить код тоже не очень крутая практика

ну или хотя бы моноспейсед если немного кода

или ссылка на пастбин

Timothy
21.11.2016
12:34:09
c9 умеет

Mikhail
21.11.2016
12:35:51
если сюда вставить то и скалафиддл всякие есть) я что-то про коллаборацию вспомнил - парное программирование удаленное)

https://floobits.com/

Timothy
21.11.2016
12:37:29
wow, даже имакс есть

Mikhail
21.11.2016
12:38:13
вот этот как-то давно пользовал, для опенсорса шарить и водить чела по коду удаленно вполне удобно, но не более) выделяешь кусок кода - у него тоже выделяется, болтаете обсуждаете туда сюда гуляете)

Grigory
21.11.2016
12:41:37
Рябят по спарку вопрос; как получить адрес локальной директории воркеров для конретного джоба? чтото типа по дефолту это /tmp/spark/app-appid

вообще даже драйвера

Iaroslav
21.11.2016
12:46:22
spark.local.dir из конфига вытащить?

аа, конкретной джобы/экзекьютора?

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