
Aleksei
13.06.2017
04:59:50
согласен
я самый восточный, у меня +1!
просто ссылка на нашу группу где то светанулась, я бы вот обновил ее чуток

Diemust
13.06.2017
05:25:21

Google

Юрий
13.06.2017
05:35:40

Daniel
13.06.2017
05:43:06

Mikhail
13.06.2017
06:09:10

Nikolay
13.06.2017
07:31:08

Aleksey
13.06.2017
08:50:18
Господа и дамы, остался один слот для доклада на Московский митап. Пишите мне в личку @fomkin или на почту aleksey.fomkin@gmail.com

Nick
13.06.2017
08:57:55

Daniel
13.06.2017
08:59:16
по ссылке ж написано

Nick
13.06.2017
08:59:41
• Олег Нижник. Typelevel DSL для создания веб-сервисов
надо ехать посоны

folex
13.06.2017
09:01:32
А есть возможность в скале выводить ворнинг/ошибку на несовпадение типов в == и contains? А то я тут поменял в кейсклассе тип поля, и у меня всё скомпилилось, но все проверки сломались. Неприятненько.

Nikolay
13.06.2017
09:04:37
А ворнингов при компиляции не было?

Bulat
13.06.2017
09:05:21
sed 's/==/===/g' ? :)

Google

Юрий
13.06.2017
09:06:25

folex
13.06.2017
09:06:31

Nikolay
13.06.2017
09:07:26
А в wartremover нет такого флага?

folex
13.06.2017
09:07:31
exists(_ == )?

Евгений
13.06.2017
09:08:53

folex
13.06.2017
09:09:32
А в wartremover нет такого флага?
в документации про contains сходу не нахожу, но им попробовать все равно стоит. Год назад как-то не взлетело. с того момента не использовал. Спасибо :)

KrivdaTheTriewe
13.06.2017
09:15:34

Aleksei
13.06.2017
09:16:13

Nikolay
13.06.2017
09:18:47

Nick
13.06.2017
09:18:58

KrivdaTheTriewe
13.06.2017
09:19:13

Aleksey
13.06.2017
09:19:21

Nick
13.06.2017
09:20:34
я уже прочитал

Евгений
13.06.2017
09:39:49
но было бы классно

Daniel
13.06.2017
09:52:53
он попросит проголосовать пейпалом)

Nikolay
13.06.2017
09:54:28
это новая модная голосовалка?

folex
13.06.2017
09:55:47
это старая немодная рандомно-банящая рандомно-фризящая-твои-деньги опердень, которой не стоит пользоваться

Google

Andrey
13.06.2017
10:23:32

Nikolay
13.06.2017
10:57:11
https://www.youtube.com/watch?v=-2aMaAPQ35s - смотрел кто-нибудь?

Grigory
13.06.2017
10:58:05
Chris' Build Tool - лучший билд тул.

Nikolay
13.06.2017
10:58:10
интересно, elegant builds - это совпадение, или не совсем?

Aleksey
13.06.2017
11:08:11

Юрий
13.06.2017
11:24:29
https://www.youtube.com/watch?v=-2aMaAPQ35s - смотрел кто-нибудь?
Я смотрел. Доклад неплохой. Вообще, cbt выглядит многообещающе. Я его ооочень давно как-то трогал, онг был сырой сырой. А вот сейчас смотрю в докладе - там многое поменялось и стало лучше. Ну и чувак годно расскзывает про то, почему билд тулзы - это не так просто, как кажется на первый взгляд.

Nikolay
13.06.2017
11:32:11
я до сих пор не могу для себя решить - нормальная это идея - целиком описывать билд стандартными средствами scala, или нет. как это будет работать для новичков - которые сам язык пока только изучают и наверное билд будут копипастой создавать. как билды будут разрастаться и розниться в зависимости от стиля написания в разных командах/проектах. в случае с sbt скажем, билды примерно похожи у всех - потому что DSL

Vadim
13.06.2017
11:37:57
но новички один фиг копипастой создают)

Nikolay
13.06.2017
11:38:34
ну, с отступлениями конечно - типа куда положить зависимости, как вынести общие настройки, но все равно примерно похоже организованы билды

.
13.06.2017
11:40:32

Nikolay
13.06.2017
11:42:07
декларативное описание в этом случае несколько выигрывает. видишь { "scalaVersion": "2.12.2" } - это как-то более интуитивно понятно, чем override val scalaVersion = "2.12.2"

Юрий
13.06.2017
12:09:11
Я думаю тут сильно зависит конкретики. дсл для новичка - это магия. Чистый скала код - это просто что-то незнакомое, что в целом можно осознать. Мне вообще кажется, что сама скала - это отличный дсл для очень многих задач.

Nikolay
13.06.2017
12:16:27
Ну, мапа вполне понятная вещь для новичка

Nick
13.06.2017
12:30:13

Nikolay
13.06.2017
12:32:21
В прошлый раз вроде и был ютуб

Aleksey
13.06.2017
13:11:26

Andrey
13.06.2017
13:17:02
Да в переископе плохо слышно и видно... это для всяких вечеринок где детали не важны

Mikhail
13.06.2017
13:21:15
скаланы, а встречаются ли у вас выражения типа Future[Future[T]] или может даже большей вложенности Future[Future[..... Future[T]...]] ? если да, то как вы их плэйните Future[....Future[T]] => Future[T] ? )

Aleksey
13.06.2017
13:21:46

Google

Pavel
13.06.2017
13:22:09
ээ, flatMap ?

Nikolay
13.06.2017
13:24:09
Future[Future[..... Future[T]...]] - по форме напоминает поговорку "когда рак на горе свистнет"

Mikhail
13.06.2017
13:25:13

Daniel
13.06.2017
13:25:13
только когда натуральные числа на типах реализовывал %)

Diemust
13.06.2017
13:28:12

folex
13.06.2017
13:28:48
Дождется

Mikhail
13.06.2017
13:36:57
да точно, сорян - попутал что-то, не с того конца зашел)
я просто тут себе делал считалочку уровня вложенности нестед имплиситов на шейплесс.нат и заодно применил это с фьючами, где был случай, когда флатмап у меня не заходит в силу определенных причин - поэтому попутал ? думал насколько интересны людям трюки с такими вещами)

Grigory
13.06.2017
13:39:49

Mikhail
13.06.2017
13:42:48
хотя погодите ка, вот о чем я
val future = Future(Future(Future(Future(5))))
for ( r <- future.flatten){
r: Future(Success(Future(Success(5))))
хотя я хочу сразу
r:Int = 5
}
да, дожидается. но не плейнится)
или не экстрактиться само, хз как лучше сказать)

Oleg
13.06.2017
13:43:37
future.flatten.flatten.flatten

Mikhail
13.06.2017
13:44:30

Alexander
13.06.2017
13:44:34
нет

Denis
13.06.2017
13:45:28

Nikolay
13.06.2017
13:46:16

Oleg
13.06.2017
13:46:35
я не помню, чтобы хоть раз писал flatten у фьючи
даже однократно

Mikhail
13.06.2017
13:47:05

Google

Oleg
13.06.2017
13:48:12

Mikhail
13.06.2017
13:52:37

Oleg
13.06.2017
13:53:15

Mikhail
13.06.2017
13:55:06
каждая функция в своём таске будет запускаться
да. согласен) уже забыл, что о футурках изначально разговор завел. но все равно ручками такое писать. ладно, сейчас перекушу - положу на гист пример со счетчиком уровня и плейном футурок)

Daniel
13.06.2017
14:13:20
лучше расскажи как ты так умудрился завернуться

Oleg
13.06.2017
14:15:47

Denis
13.06.2017
14:19:35
??


Mikhail
13.06.2017
14:34:25
вот пример со счетчиком уровня имплиситов https://gist.github.com/Rudogma/a4f6deaddd368e86676aacfea3dcda9a
лучше расскажи как ты так умудрился завернуться
если взять счетчик уровней имплиситов, то ноги растут из обработки большого потока разнообразных данных на всех этапах (порождение, отправка-прием, хранение, обработка, аггрегация) и там эксперементирую с тайплевел вещами (оттуда же растут трюки с переиспользованием стабов, потому что все должно быть более менее красиво, но все таки заточено на фрупут с минимумом мусора для гц). а для футурок - растет из прикладной хотелки, когда поднимаю микросервисы в пару строк и мне хочется за пару минут написать несколько строк и запустить в прод без тестов
def apimethod(p1, p2, p3) = async(group-to-synchronize){ some code + return somefuture } // что естественно как минимум вернет Future[Future[ и возможно даже еще уровень, но уже гораздо реже конечно ]]
это как бы все, что мне требуется для добавление одного микрометода в один микросервис и чтобы быть уверенным, что бизнес-логика синхронизирована относительно определенного положения звезд(комбинации параметров) на небе. просто требования бизнеса - адаптируйся и делай быстрее других или будешь позади)


Diemust
13.06.2017
15:31:36
а чем медленнее с помощью for писать? или я так и не понял кейса х)

Mikhail
13.06.2017
15:40:06

Nick
13.06.2017
15:40:46
Future.fmap(Future.fmap(Future)))

Diemust
13.06.2017
15:41:18
я хочу понять, зачем мне писать val f = Future(Future(Future(5)))

Mikhail
13.06.2017
15:41:35

Oleg
13.06.2017
15:42:28

Diemust
13.06.2017
15:42:34
ну у меня просто не будет такого метода или чего-то еще, у которого будет возвращаемый тип Future[Future[Future[Int]]]

Nick
13.06.2017
15:42:51
я вот может тож не правильно понял