@scala_ru

Страница 1265 из 1499
Grigory
07.02.2018
06:06:45
Значит shapeless... спасибо
так честно говоря, контекста не очень много ты добавил, давай примером псевдо кода что есть и что хочется сделать

ilnur
07.02.2018
06:14:59
Конфиг { "inputFiles" : "/home/ilnur/Загрузки/csvToDataset/src/main/resources", "outputFile" : "/home/ilnur/Загрузки/csvToDataset/src/main/resources/result/", "transformationType" : { "where" : [0, 1], "equalTo" : [0, 1] }, "columns" : [ "String", "Int" ] } в массиве columns - схема

далее

парсим

Google
ilnur
07.02.2018
06:15:37
case class Config(inputFiles: List[Path], outputFile: String, where: Where, equalTo: EqualTo, columns: List[String])

далее читаем файлы private val inputFiles = config.inputFiles.map { path => env.readCsvFile[(String, Int)](path.toString) }

только типы я тут указал "вручную" [(String, Int)]

не знаю как список туда передать в конце концов columns: List[String]

Oleg
07.02.2018
06:18:16
Значит shapeless... спасибо
не нужно так быстро решать слово шейплезз здесь поминают многие, а куски кода кидают три человека

ilnur
07.02.2018
06:20:31
ок

Oleg
07.02.2018
06:24:00
только типы я тут указал "вручную" [(String, Int)]
но идея такая. "Динамическим" мы называем то, что может изменяться с течением времени, "Статическим" - то, что сохраняет своё состояние, известное априори. Если ты желаешь, чтобы информация, которую ты получишь, управляла твоим процессом, описанным на скалке, где типизация, напомню, статическая, у тебя два выхода 1 - компилить программу после того, как список типов станет тебе известным. Возможно, каждый раз при запуске потока. 2. смириться с динамической природой твоей структуры и использовать библиотеки не требующие явного полного определения типа строки. Можно только убедиться при чтении, что в источнике есть столбцы нужных тебе типов, и использовать этот факт уже статически в дальнейшем коде.

В 1-м случае тебе могут помочь и шейплес, и макросы, и компайлер/билд плагины

Но я рекомендую второй

ilnur
07.02.2018
06:29:01
спасибо за развернутый ответ

?

Wystan
07.02.2018
06:55:45
Прямо совсем в общем случае вряд ли какое-то разумное решение можно придумать. Если первая строчка csv файла - это лист хедеров, то я бы сделал case class со всеми возможными хедерами. Ну и кастомный ридер, что, основываясь на первой строчке. их заполняет. А уж дальше с кейс-классами просто работать

Dim
07.02.2018
07:19:30
@tailrec def sliceEqual[A](s: Seq[A], acc: Seq[Seq[A]] = Seq()): Seq[Seq[A]] = { s match { case fst :: rest => val (l, r) = s.span(fst==) sliceEqual(r, acc :+ l) case Nil => acc } }

Google
Dim
07.02.2018
07:20:36
Делюсь решением одной задачки) В обще делает из "ваау, ух ты крууутоо!" => "вау, ух ты круто!"

Oleg
07.02.2018
07:27:45
когда поправишь, переделай на foldLeft

Vladimir
07.02.2018
07:31:29
propertybased test InputSeq == OutputSeq.flatten

Vadim
07.02.2018
07:41:18
моя непонимать смысла функции)

Daniel
07.02.2018
07:42:06
я думал я дурак, полез тестить

Oleg
07.02.2018
07:42:27
Vadim
07.02.2018
07:42:50
groupConsecutiveOccurences
ничего не поменялось)

Daniel
07.02.2018
07:43:20
groupConsecutiveOccurences
дошло, спасибо

Grigory
07.02.2018
07:47:30
ничего не поменялось)
группирует одинаковые обекты подряд

Oleg
07.02.2018
07:47:35
ничего не поменялось)
не совсем точно, но близко https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D0%B8%D0%BD_%D1%81%D0%B5%D1%80%D0%B8%D0%B9

Vadim
07.02.2018
07:52:54
группирует одинаковые обекты подряд
ну даже если такова задумка - то оно так не работает)

а вкурил - пасиб олег)

Nikita
07.02.2018
08:27:35
Объясните пожалуйста, знатоки. Чем именно отличается потоковый вывод типов в скала от механизма вывода типов в стиле Хиндли - Милнера? И что значат слова Одерски: В сравнении со стилем Хиндли - Милнера имеющийся в Scala механизм вывода типов обходится с объектно-ориентированной системой подтипов намного изящнее?

Oleg
07.02.2018
08:30:38
классический пример рекурсивная функция - в хиндли милнере ты можешь полагать, что все ветки условного выражения или матчинга одного типа. С субтайпингом, ты ищешь наиконкретнейший общий тип, что в случае с рекурсией приводит к уравнению с твоей функцией в обеих частях

ну и т.д. и т.п.

Oleg
07.02.2018
08:37:02
Но в скалке всё ещё сложнее. Там есть path dependent types, что ещё не завтипы, но ставит те же ограничения на направление вывода типов

Google
Oleg
07.02.2018
08:37:55
Но лучше пойти а чатик завтипов и спросить у пацанов в теме

Grigory
07.02.2018
09:20:52
Scalalaz #38 - Haskell Yeaah с Алексеем Пироговым http://scalalaz.ru/series-38.html Кто еще не видел, ну а кто не видел то без пина и не было наброса сюда ибо всякие митапы и тому подобное.

Юрий Спойлер: фомкин слился и поэтому твой вопрос до сих пор без ответов

Aleksei
07.02.2018
09:23:33
спился =)

Grigory
07.02.2018
09:26:30
*мои вопросы ;)
да, но вообще да - я посмотрел нет в завимиостях ничего

кто-то приврал просто или перебрал

Александр
07.02.2018
09:43:31
Oleksandr
07.02.2018
10:30:16
https://softwaremill.com/comparing-scala-relational-database-access-libraries/

Oleg
07.02.2018
10:58:15
старьё, даже в ништяках есть

Pavel
07.02.2018
11:20:06
В kamon (akka) можно как-то поменьше метрик слать? По акторам очевидно как фильтрануть, а метрик все равно 100500. В datadog все приходит, остальные жалуются. В доках ничего, как бы я ничего не упускаю(?).

Oleg
07.02.2018
11:31:10
ой профунктор тоже старьё кидает, про зеленоградского стива джобса

Daniel
07.02.2018
11:32:08
после обвала курса биткоина не может продлить подписку на свежие мемасы

Alexey
07.02.2018
11:34:44
старье про либы для баз варски обновил, вот все и кидают

Daniel
07.02.2018
12:59:34
Там в твитторе новая волна разборок на тему харассмента и лямбда конфа, кто-нибудь вникал от чего полыхнуло вновь?

Vadim
07.02.2018
13:00:31
господа,есть вопрос

Google
Vadim
07.02.2018
13:02:45
предположим что фьюча есть, в akka routing, которая в зависимости от результата должна возвращать одну из версий rest модели. Есть ли какой то способ выполнить метод complete(akka routing dsl) из фьючи ?

Alexey
07.02.2018
13:04:10
по хорошему тебе надо написать директиву, которая вернёт тебе ToReponseMarshaller в зависимости от результата

Aleksei
07.02.2018
13:05:16
@IceTFoer https://markatta.com/codemonkey/blog/2016/08/03/actor-per-request-with-akka-http/

глянь может подойдет

Vadim
07.02.2018
13:06:03
момент

Alexey
07.02.2018
13:06:12
ему нужен маршаллер как я понимаю разный

Aleksei
07.02.2018
13:06:32
а я подумал что он хочет передавать реквест контекст в сервис и там внутри во фьюче его комплитить

кто прав?

Alexey
07.02.2018
13:06:46
да, условие целиком нужно )

Vadim
07.02.2018
13:07:19
есть директива`onSuccess`

Aleksei
07.02.2018
13:07:37
логично

а есть onComplete

=) короче нужно больше вводных

Vadim
07.02.2018
13:10:42


вот примерно что я хочу

Alexey
07.02.2018
13:11:24
map

выдели функцию Request => Future[Response] и используй ее в роутинге. потом реализуй. ну и стримы тебе в этом примере не нужны от слова совсем. просто сделай отправку в очередь: Data => Future[Unit]

Vadim
07.02.2018
13:14:58
ща подумаем,спасибо =)

Alexey
07.02.2018
13:17:55
вот такое тебе нужно: def sendToQueue(x: String): Future[Unit] = ??? def handleRequest(x: String): Future[Response] = { sendToQueue(x).map(_ => successResponse).recover { case th => failureResponse } } entity { e => complete(handleRequest(...)) }

Google
Alexey
07.02.2018
13:18:20
синтаксис сам поправишь )

Vadim
07.02.2018
13:20:38
чет ты не то советуешь - а как мандить с http кодом?

Alexey
07.02.2018
13:21:26
но ведь ответ может быть парой код и значение

для этого даже специальный маршаллер есть. для тапла

Vadim
07.02.2018
13:24:15
фигаж

Alexey
07.02.2018
13:24:41
ну ))

Aleksei
07.02.2018
13:27:10
ога

Ok -> Result =)

Vadim
07.02.2018
13:29:39
Я идею понял,это главное.Спасибо :)

Aliaksandr
07.02.2018
13:35:34
можно написать 2 маршаллера и в complete передавать Future implicit val marshaller: Marshaller[Model0, HttpResponse] = Marshaller.withFixedContentType(ContentTypes.`application/json`)(model0 => HttpResponse(StatusCodes.OK, model0)) implicit val customThrowableMarshaller: Marshaller[Throwable, HttpResponse] = Marshaller.withFixedContentType(ContentTypes.`application/json`) { case MyException(model1) => HttpResponse(StatusCodes.OK, model1) case _ => HttpResponse(StatusCodes.InternalServerError) } complete(future)

Gennady
07.02.2018
13:58:57
среда - неудачный день для пивной вечеринки (

Vadim
07.02.2018
13:59:38
я пасс,до дома ехать далеко.Оставаться в баре в среду не ок

Daniel
07.02.2018
14:00:55
по голосовалке было человек 5, не считая инициаторов

может кто-то еще так придет

Vadim
07.02.2018
14:01:40
забавно будет если никто не придет =)

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