@scala_ru

Страница 37 из 1499
Vladimir
29.07.2016
11:37:39
просто потому что кто-то забыл или потому что идут вложенные вызовы... а если Future[\/] начинается вообще угар и содомия

Alex
29.07.2016
11:38:49
тогда уже проще Task взять

Grigory
29.07.2016
11:48:03
https://github.com/functional-streams-for-scala/fs2

Alex
29.07.2016
11:51:05
да, грядет RC1 :)

Google
Grigory
29.07.2016
11:52:14
? таски конечно чертвоски удобные

Vladimir
29.07.2016
11:56:39
ага... все эти стримы очень удобные и всё такое... но часто вам в реальных бизнес задачах нужно перегонять данные с одной коллекции в другую с процессингом? ведь надо признаться что почти все пишут REST API к базе данных с прослойкой бизнес логики

Alex
29.07.2016
11:57:37
> REST API к базе данных https://github.com/stliang/functional-microservice-example

Vladimir
29.07.2016
11:59:31
И вы таки хотите сказать что вот это: https://github.com/stliang/functional-microservice-example/blob/master/core/src/main/scala/ToDo.scala не воплощение пиздеца?

Ivan
29.07.2016
12:00:47
да вроде норм

Vladimir
29.07.2016
12:01:09
Ну ок...

Alex
29.07.2016
12:01:25
вас смутила фамилия швейцарского математика?

Viacheslav
29.07.2016
12:02:20
\/,-\/,\/- смайлики, смайлики светлого мая привет (с)

Vladimir
29.07.2016
12:03:44
с чего бы начать... наверное с того что за такие название переменных принято пальцы ломать def list: ToDoK[List[Item]] = for { a <- config b <- a.repository.list.liftKleisli } yield b

Viacheslav
29.07.2016
12:04:18
названия локальны и так понятно что они такое, так что норм

Vladimir
29.07.2016
12:04:20
Вот представьте что человек только пришел в язык, а вы ему вот это показываете и говорите ну чё? как?

Alex
29.07.2016
12:04:20
а, запятые не по уставу

Warren
29.07.2016
12:04:44
а если человек до этого ещ

Google
Igor
29.07.2016
12:04:49
я надеялся что там слово сложится в столбик

Warren
29.07.2016
12:04:50
ё не программировал то вообще

Igor
29.07.2016
12:05:36
for { s <- config h <- currentTime u <- randomUUID k <- currentTimeMillis a <- a.repository.create(i).liftKleisli } yield a как-то так :)

Ivan
29.07.2016
12:05:40
когда я раньше ревьюил код взрослые дядьки всегда говорили мне обращай в первую очередь внимание на бизнес логику и потом уже на оформление, поэтому придирался к названиям переменных я всегда в последнюю очередь

Vladimir
29.07.2016
12:06:13
Имена переменных нужны когда вы через пол года чините баг в проекте

тогда вы вспомните всех свидетелей монад и любителей функторов

Viacheslav
29.07.2016
12:07:23
for { s <- config h <- currentTime u <- randomUUID k <- currentTimeMillis a <- a.repository.create(i).liftKleisli } yield a как-то так :)
дык хоть через 5 лет, h=currentTime понятно же и так. пока yield d jlye cnhjxre dc` jr

водну строчку все ок

Aleksey
29.07.2016
12:07:35
Ну что вы в самом деле как будто у нас тут фортран с коболом. Имя переменной это всего-лишь имя. Особенно когда у тебя мощная система типов и IDE.

Viacheslav
29.07.2016
12:07:45
во во

Aleksey
29.07.2016
12:08:16
Я понимаю срачи про имена, когда у нас API. Там важно, что бы названия передавали смысл.

Ivan
29.07.2016
12:08:28
в этом примере и так все ясно что это быстро сделанный пример и переменные как раз и отображают что это пример и названия их не так и важны

Aleksey
29.07.2016
12:16:20
Недавно ковырял word2vec гугловский. Он на сях, там процедуры на 200 строк, реюз структур и переменных с называниями i, j, d, M. Первые 15 мин было не комфортно, но потом нормально пошло. В момент перехода от «ничего не понятно» в «ах вот оно что» я подумал что круто, когда человек понимает что он делает. Стройная мысль остается стройной мыслью, даже если она выражена в запутанном коде. Гораздо хуже, когда джависты которые ничерта не понимают что они делают лепят фабрики-стратегии в языке, где есть замыкания и паттерн-матчинг. Обычно у этих джавистов очень подробные названия переменных.

Viacheslav
29.07.2016
12:19:06
http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html

Vladimir
29.07.2016
12:19:12
Но согласитесь что было бы проще, если бы имена переменных в этом Cи коде несли бы смысл? вы бы с экономили 15 минут... ну и это у вас вышло 15 минут, а у другого человека могло уйти много часов... Про джавистов... да это большая беда мне несколько раз приходилось работать с такими людьми... на собеседовании они блистали знаниями паттернов и всего прочего... а бизнес задачи решить были не способны

Viacheslav
29.07.2016
12:19:46
а скалисты были способны?

а джаваскриптисты способны? Вопрос такой: Программисты на каком языке способны решать бизнес задачи?

если ты поборник абстракций то язык не важен

Alex
29.07.2016
12:20:42
UML

Viacheslav
29.07.2016
12:20:48
))

Google
Ivan
29.07.2016
12:21:04
ахахха

хороша шутка

Viacheslav
29.07.2016
12:22:21
кто нибудь проходил? https://www.scala-exercises.org/shapeless/polymorphic_function_values

Alex
29.07.2016
12:22:35
о кстати да

надо бы глянуть

Vladimir
29.07.2016
12:22:52
Еще одна чудо трава :)

Alex
29.07.2016
12:23:26
эта трава уже и в компилятор прорастает https://github.com/scala/scala/pull/5310 ;)

Aleksei
29.07.2016
12:47:22
Про фабрики очень в цель :-( лучше переменные i,j чем фабрика фабрик фабричных методов

Mr.
29.07.2016
18:27:58
как реализовать паттерн Producer\Consumer если у нас очередь иммутабельна?

в функциональном стиле

Oleksandr
29.07.2016
19:25:21
дался вам этот "функциональный стиль" если задача явно лучше решается по-старинке, то так и стоит делать

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

Vladimir
29.07.2016
22:42:56
А есть кто пользовался https://github.com/magro/kryo-serializers

Sergey Tolmachev
30.07.2016
09:59:31
я как-то давно, вроде все было гладко

Vladimir
30.07.2016
10:01:54
У меня проблема с тем что падает сериализация Value Class

Падает вполне логичным class cast, но как это победить я не что-то не могу придумать

Тоесть у меня есть case class EntityId(value: String) extends AnyVal И вот при сериализации крио выдаёт что не может скастить String в EntityId

Igor
30.07.2016
10:18:48
нужно наверное писать custom serializer

падает наверное при десериализации?

btw в скале крио рекомендуют использовать в связке с https://github.com/twitter/chill , там уже есть сериализаторы для многих случаев

Google
Vladimir
30.07.2016
10:27:35
Хорошо, посмотрю в эту сторону, как только код начнет снова компилироваться

Wystan
30.07.2016
11:08:55
Эх были бы сериализаторы которые бы собирали статистику предлагали бы новую версию с хафман энкодингом

Vladimir
30.07.2016
11:10:28
С такими желания можно далеко зайти )

Wystan
30.07.2016
11:14:17
Когда-нибудь машины будут брейнстормить глубокими нейронными сетками задачи и потом писать на аналоге Coq сами код. А на джава/ооп артефакты из прошлого будут смотреть как мы щас на шаманов или египетских жрецов.

но джава программисты все равно останутся, как щас христианство.

folex
30.07.2016
11:15:04
Интересно зачем машинам Coq, это ж для людей

Wystan
30.07.2016
11:16:46
Аналог в том плане, что тоже предлагает экспоненциальное количество вариантов а нейронка выбирает что-то из них

Mr.
30.07.2016
11:37:26
trait AsFunc { def as[O]: Option[O] } class DialogContext { private val variables = collection.mutable.HashMap[String, Any]() def apply[T](name:String):AsFunc = { val value = variables.get(name) new {} with AsFunc { def as[O]: Option[O] = { value match { case Some(v) => Option(v.asInstanceOf[O]) case None => None } } } } def update[T](name:String, value:T): Unit = { variables(name) = value } } Есть такой код, и есть еще такой: val context = new DialogContext() context("foo") = "bar" val bar = context("foo").as[Int] println(bar) Вместо None возвращается Some("bar") , почему-то case Some(v) => Option(v.asInstanceOf[O]) не хочет кастовать

Admin
ERROR: S client not available

Mr.
30.07.2016
11:53:10
дальше еще интереснее: val bar:Option[Int] = context("foo").as[Int] в баре почему-то хранится строка, хотя тип явно указан Int

лол, что за бред

Aleksey
30.07.2016
11:57:01
Ну это же приведение типа, а не конвертация.

Должно быть вообще ClassCastException.

Mr.
30.07.2016
11:58:40
должно, но нету

смысл таков, что я складываю в контекст объекты разных типов, а потом хочу удобно их достать и сразу привести к нужному типу

ппц ну дела конечно

Aleksey
30.07.2016
12:01:49
Выполнил твой код в репле.

Mr.
30.07.2016
12:01:55
МДАААА классКаст появился только когда я захотел сложить строку с числом println(bar.get + 5)

Aleksey
30.07.2016
12:01:56
Есть исключение.

Google
Mr.
30.07.2016
12:02:33
а у меня нет, куда копать?

Daniel
30.07.2016
12:12:06
наверно туда откуда as взялся, хз что это за DialogContext

Anatoliy
30.07.2016
12:13:03
А можно для особо одаренных сказать как репл в винде можно запустить?)

Aleksey
30.07.2016
12:13:30
Для начала надо поставить линукс или купить мак :)

Троллмод офф

Daniel
30.07.2016
12:13:37
sbt console

или если стоит то просто scala

Anatoliy
30.07.2016
12:14:02
линукс есть, но переключаться сейчас на него не хочется)

А всё что стоит на винде - это IDEA

Всё, больше ничего

Aleksey
30.07.2016
12:17:52
а у меня нет, куда копать?
Вообще я бы копал в отказ от класскастинга. Я бы сделал что-нибудь типа sealed trait DialogContextItem object DialogContextItem { case class Text(value: String) extends DialogContextItem case class Numeric(value: Double) extends DialogContextItem case class Timestamp(value: Long) extends DialogContextItem case object Empty extends DialogContextItem }

Anatoliy
30.07.2016
12:20:42
Эм... может я туплю, но хранить в базовых типа Any нельзя?

Mr.
30.07.2016
12:20:51
Это общий каркас для бота, новые типы будут появляться при создании конкретного бота

Mr.
30.07.2016
12:22:38
Идея такая: я пишу единую систему, затем отдельно пишу бота, прикручиваю к нему необходимые трейты и отправляю бота в систему, где он будет запущен в работу

Это как?

Vladimir
30.07.2016
12:23:26
Храни в JSON :)

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