
Henadz
24.04.2018
09:47:31
и спецов потом найти на рынке для развития своей платформы
сколько гошников, а сколько скалистов

Vadim
24.04.2018
09:48:53

Google

Henadz
24.04.2018
09:49:21

Sergei
24.04.2018
09:49:40
Не ну ГО имеет свою нишу - это перформанс на высокой нагрузке, там он и используется. + распределенность
Скала - это некий бекенд, который требует валидации с т.з. дизайна хотя бы. + математические уклоны типа биг дат

Daniel
24.04.2018
09:52:18
биг дата /= математика (от слова совсем)

Henadz
24.04.2018
09:53:53

Nick
24.04.2018
09:57:07
и что такое распределенность

Nikita
24.04.2018
09:58:29

Nick
24.04.2018
09:58:34
go get raspedeli mne vse plz

Nikita
24.04.2018
09:59:41
как новый gc релизнут, го только в Debian stable останется

Nick
24.04.2018
10:00:25
zgc? шенаду?

Google

Nikita
24.04.2018
10:00:34
Шенанду
Нужно только чтобы go добавили в GraalVM
Тогда JVM захватит мир

Nick
24.04.2018
10:02:07
скорее как только научатся бинари делать мелкие
и в докере нормально работать станет)

Oleksiy
24.04.2018
10:02:35
>3 миллиарда устройств
Разве, добро уже не победило?

Henadz
24.04.2018
10:04:53

Nick
24.04.2018
10:05:46
слишком дорого картинку переделывать

λoλcat
24.04.2018
10:07:27

Henadz
24.04.2018
10:08:27

Ilya
24.04.2018
10:09:33
А нубские вопросы в этом чатике задавать позволительно?)

Nick
24.04.2018
10:09:53
конечно

Daniel
24.04.2018
10:10:03
я только этим и занимаюсь:))
тут)
ещё флужу

Ilya
24.04.2018
10:13:09
В java-классе есть 2 метода по следующими сигнатурами
1 - public static Stubber doReturn(Object toBeReturned)
2 - public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext)
из scala-класса пытаюсь выполнить следующий код
Mockito
.doReturn(products) - важное тут
.when(requesterSpy)
.receiveProductIds(urlCaptor.capture(), paramsCaptor.capture())
и получаю ошибку
ambiguous reference to overloaded definition,
both method doReturn in object Mockito of type (x$1: Any, x$2: Object*)org.mockito.stubbing.Stubber
and method doReturn in object Mockito of type (x$1: Any)org.mockito.stubbing.Stubber
match argument types (List[Int])
.doReturn(products)
Можно как-то вызвать .doReturn метод чтобы зафорсить использование метода с 1ой сигнатурой?

OlegYch
24.04.2018
10:16:57
scalamock лучше

Stepan
24.04.2018
10:17:00
https://stackoverflow.com/questions/41337468/mockito-ambiguous-reference-to-overloaded-definition

KrivdaAllStars
24.04.2018
10:18:20
го для крудов норм и когда бизнесправил не много,

Sergei
24.04.2018
10:56:03
Хз, рассуждая про ГО, я скорее говорил про идеи дизайна, типа этих https://talks.golang.org/2013/distsys.slide

Google

Sergei
24.04.2018
10:57:01
Вообще, что я видел про хай лоад, говорили что на определенном объеме нагрузки, уходят от GC и управляют помятью вручную, типа C++

Let Eat
24.04.2018
11:42:02
Господа. Решил достигнуть просветления, обчитался всех этих "кодируйте ваши инварианты в типах" , пробую применить. Вот скажем типичная статья https://blog.codecentric.de/en/2016/02/phantom-types-scala/ там есть Hacker[State] и в зависимости от State у него разные методы появляются. Все красиво. Я вот над чем туплю: этого хакера надо где-то создать и куда то передать. Отдават/принимать будут общий тип Hacker[State] ведь так? Но тогда Мне ж потом до конкретного класса не добраться изза стирания типов. Где ошибка? Как использовать эти инварианты в типах на практике? Какие слова гуглить?

OlegYch
24.04.2018
11:45:23
там же в примерах и создается и отдается
отдавать принимать будешь не общий а конкретный тип
типа Hacker[T<:Caffeinated]

Let Eat
24.04.2018
11:50:35
типа Hacker[T<:Caffeinated]
Я бы рад, но как создать хакера тогда? Вот пришел запрос, там json , я смотрю в поля и создаю хакера. Но эта функция возвращает Hacker[State] (иначе никак или я чего то не вижу?) .

Alexey
24.04.2018
11:51:27
У тебя в программе должно быть явно известно какой тип вернёт функция, потому что тип известен только в компайл тайме

OlegYch
24.04.2018
11:51:33
какой тип передашь такой и вернет

Alexey
24.04.2018
11:51:38
Если это узнаётся в рантайм, то идём мимо

Oleg
24.04.2018
12:13:30
Похоже на извечный вопрос "зачем мне все ваши зависимые типы, если по сути моя программа это String => Future[String]

Mikhail
24.04.2018
12:15:16


Oleg
24.04.2018
12:27:40
Я бы рад, но как создать хакера тогда? Вот пришел запрос, там json , я смотрю в поля и создаю хакера. Но эта функция возвращает Hacker[State] (иначе никак или я чего то не вижу?) .
Я попробую.
Вначале у тебя извне ведь приходить не json, так?
А что-то вроде Array[String] или Source[ByteString] или типа того
Ты запускаешь некоторый процесс который превращает это во что-то вроде Either[JsonError, Json] можно также записать как JsonError Either Json. Оба результата - и Left(error) и RIght(json) валидны. Но тебя гораздо больше интересует второй. Ветка обработки, связанная с ним гораздо длинее и интереснее.
Точно так же, имея Json ты можешь откопать в нём какое-то поле "caffeinated": true или "caffeindated" : false и и получить
BoringCase Either Hacker[Caffeinated] Either Hacker[Decaffeinated] .
Один раз проверив необходимое качество в Json, ты можешь запомнить на уровне типа, что твои данные этому качеству соответствуют. И все дальнейшие вычисления могут "сохранять" этот факт на уровне типов. Тебе не придётся каждый раз проверять значение какого-то поля caffeinated в рантайме.
Т.е. весь длинный путь в каждой ветке от одного State до другого ты можешь пройти, сохраняя инварианты в типах.


Alexey
24.04.2018
12:43:31
никто не вкурсе собирались ли завезти -Xlint:strict-unsealed-patmat в обычную скалу из тайплевел?


Let Eat
24.04.2018
13:04:22
Я попробую.
Вначале у тебя извне ведь приходить не json, так?
А что-то вроде Array[String] или Source[ByteString] или типа того
Ты запускаешь некоторый процесс который превращает это во что-то вроде Either[JsonError, Json] можно также записать как JsonError Either Json. Оба результата - и Left(error) и RIght(json) валидны. Но тебя гораздо больше интересует второй. Ветка обработки, связанная с ним гораздо длинее и интереснее.
Точно так же, имея Json ты можешь откопать в нём какое-то поле "caffeinated": true или "caffeindated" : false и и получить
BoringCase Either Hacker[Caffeinated] Either Hacker[Decaffeinated] .
Один раз проверив необходимое качество в Json, ты можешь запомнить на уровне типа, что твои данные этому качеству соответствуют. И все дальнейшие вычисления могут "сохранять" этот факт на уровне типов. Тебе не придётся каждый раз проверять значение какого-то поля caffeinated в рантайме.
Т.е. весь длинный путь в каждой ветке от одного State до другого ты можешь пройти, сохраняя инварианты в типах.
Спасибо, это хорошее объяснение, я подумаю, потом перечитаю и может пойму что конкретно мне кажется не совсем понятным. Пока хочется ответить "но ведь..." , только сформулировать конкретно не могу. По ощущениям такой способ годится для небольших вариаций, если у хакера много состояний (женатость, пол, гражданство и проч), которые еще и зависят друг от друга (мгогоженство разрешено только для мужчин саудитов) то Either умаяться можно. Это вопрос образа мышления, который я пытаюсь разглядеть, чем конкретных приемов.


Mikhail
24.04.2018
13:10:43
Спасибо, это хорошее объяснение, я подумаю, потом перечитаю и может пойму что конкретно мне кажется не совсем понятным. Пока хочется ответить "но ведь..." , только сформулировать конкретно не могу. По ощущениям такой способ годится для небольших вариаций, если у хакера много состояний (женатость, пол, гражданство и проч), которые еще и зависят друг от друга (мгогоженство разрешено только для мужчин саудитов) то Either умаяться можно. Это вопрос образа мышления, который я пытаюсь разглядеть, чем конкретных приемов.
во-первых женатость, пол, гражданство - это разные характеристики и у каждой свой собственный набор состояний, а не разные состояния одной характеристики (как было в хакере). а значит незачем их пихать все в одно. во-вторых - многоженство разрешено только для мужчин саудитов - не стоит так сильно забегать вперед, да и вобще не стоит слишком сильно упарываться в таких вещах - говнокод он и на типах - говнокод)

Alexey
24.04.2018
13:13:17


Let Eat
24.04.2018
13:14:48
Ну или Extends ... With ... With ... With...

Google

Mikhail
24.04.2018
13:20:02

Oleg
24.04.2018
13:21:06

Alexey
24.04.2018
13:21:48

Mikhail
24.04.2018
13:22:18
@rossmohax чем тебе не угодили кейс классы?
case class Hacker(coffeeState:CoffeeState, ..... )
? я к тому - откуда у тебя такое маниакальное желание все на типы в скале перевести?

Alexey
24.04.2018
13:22:28
Нужно помещать в класс какой то evedence, который уже можно сматчить в рантайме

Admin
ERROR: S client not available

Oleg
24.04.2018
13:22:38

Alexey
24.04.2018
13:22:53

Let Eat
24.04.2018
13:23:17

Grigory
24.04.2018
13:24:21
посоны хочу лифтануть функцию до функтора кошками
(K, List[B]) => (K, List[B])
и чет не хочет лифтить
скалаз лифтила прост парой импортов а тут не схватывает
простой пример чтото типа
(((_: Int) * 3) map {_ + 100}) (1)
работает в том же скоупе где я хочу поднять пред функцию

Oleg
24.04.2018
13:25:11

Grigory
24.04.2018
13:25:52
я хочу map использовать
оно чтото типа fa andThen f должно быть

Oleg
24.04.2018
13:26:12
У Function1?

Grigory
24.04.2018
13:26:14
да

Oleg
24.04.2018
13:26:30
import cats.instances.function._ ?
import cats.syntax.functor._

Mikhail
24.04.2018
13:27:15

Let Eat
24.04.2018
13:27:25

Grigory
24.04.2018
13:27:50

Google

Grigory
24.04.2018
13:27:56
наверное пересекались имплиситы
спасибо Олег

Nick
24.04.2018
13:28:37

Alex
24.04.2018
13:29:10
"заставит" значит что без проверок не скомпилится просто

Grigory
24.04.2018
13:29:41
ну это есдинвтенное обяснение

Let Eat
24.04.2018
13:39:08
"заставит" значит что без проверок не скомпилится просто
Это и имею ввиду: заставит вставить рантайм проверку. Я непротив, лишь бы по рукам бил в нужный момент. Писать программульку по фен шую как рекоммендует @rudogma вроде могу представить как, но вот как из рантайма перескочить в компайлтайм пока не могу увидеть , видимо надо взять паузу и обдумать :)

Alex
24.04.2018
13:41:32
это надо шейплес курить, но вообще без завтипов оно всё будет муторно :)
что-то типа https://github.com/fthomas/refined наверное будет неплохим решением
ну или можно угореть по связкам со сторонними пруверами, типа там
https://github.com/epfl-lara/leon
https://github.com/epfl-lara/ScalaZ3/
https://github.com/larsrh/libisabelle

Let Eat
24.04.2018
13:47:32

Mikhail
24.04.2018
13:47:52

Alex
24.04.2018
13:48:02
ну вообще сам шейплесс немного про другое, а именно про generic алгоритмы
там ключевой момент - witness-типы
которые недавно вмержили в виде http://docs.scala-lang.org/sips/42.type.html

Konstantin
24.04.2018
13:49:07
всем привет! Я с очередным нубовским вопросом.
я правильно понял, что yield всего-лишь формирует список при работе с циклами?