
Oleg
19.06.2017
17:37:41
А вот неромантичный вопрос. Есть play приложение, есть эндпойнт с multipart боди парсером. С фронта шлются картинки (пачкой, на input стоит multi). Нужно к каждой сделать thumbnail и загрузить все это на S3. Как загрузятся, начинается всякая еще более скучная бизнес логика. Вопрос такой — то как play предлагает в своих доках (TemporaryFile, потом создаешь файл, moveTo, потом загружаешь все это, еще пару файлов создав для процессинга) это самый адекватный вариант? Не кидайте в меня тяжелыми предметами. Я пришел из node.js... там бы это был стрим. Я не говорю что там лучше, или хуже, я хочу понять как принятно в скале:-)
ты такой берёшь стрим, а потом мэпасинк, буффер, все дела

Nick
19.06.2017
17:38:36
Oleg сорян, но ты уже выложил презенташку ?

KrivdaTheTriewe
19.06.2017
17:38:43
Раньше определение проекта было определено через глобальный скоуп, теперь потребовалось через project in file(".") создавать,
как правильно settings задать , чтобы PB.targets in Compile := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
) вновь заработало?

Oleg
19.06.2017
17:38:54

Google

Nick
19.06.2017
17:39:09
да
А скинь в лс ссылку если не сложно

Alexey
19.06.2017
17:39:24

Nick
19.06.2017
17:39:25

KrivdaTheTriewe
19.06.2017
17:40:21

Nick
19.06.2017
17:40:37
pre4 ?

KrivdaTheTriewe
19.06.2017
17:41:13
sbt.version = 0.13.15
или тебе какую?

Nick
19.06.2017
17:41:23
Scalapb

KrivdaTheTriewe
19.06.2017
17:42:50
libraryDependencies += "com.trueaccord.scalapb" %% "compilerplugin" % "0.6.0-pre5"

Nick
19.06.2017
17:44:41
Ща обновлю у себя и гляну

Alexey
19.06.2017
17:44:46
в Play это стрим
В play я так понимаю это Iteratees, самое близкое что я нашел...

Alexandr
19.06.2017
17:45:21
Iteratees заменили уже на akka streams

Google

Alexey
19.06.2017
17:45:37
в 2.6?

Oleg
19.06.2017
17:45:41
iteratees выпилены

Alexandr
19.06.2017
17:47:06
в 2.6?
https://www.playframework.com/documentation/2.5.x/StreamsMigration25

Alexey
19.06.2017
17:48:18
Найс. Буду читать! Спасибо огромное

Nick
19.06.2017
17:52:54

KrivdaTheTriewe
19.06.2017
17:55:11
а когда кстати релиз был?
не знаю, я просто зашёл на сайт и взял посленюю версию, но как заставить работать ее из lazy val root = (project in file(".")).settings( Seq( ... ,
PB.targets in Complie := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
))
не понял

Andrey
19.06.2017
19:21:00

Aleksei
19.06.2017
19:23:01
тут https://anaconda.org/Odomontois/scalameetup/notebook

Alisa
19.06.2017
19:51:00


Alexey
19.06.2017
21:51:04
А вот еще глупый вопрос. Вся романтика стримов была убита прозой java aws sdk. Им для multipart нужно чтобы куски были по 5мб... А как еще к нему стрим прикрутить я не очень понимаю. Плюс библиотека для обработки картинок тоже не особо расположена к стримам. Если только я не упустил какую нибудь магическую связь между java InputStream и акковскими стримами. Я помозговал еще, потыкался. Скажите, пожалуйста, а очень тупо файлы в байт аррэи читать и ими оперировать? А то если с файлами работать — сначала TemporaryFile пренеси в обычный файл, а то он его удалит (в какой-то непонятный момент). Потом создай файл для того чтобы либе картиночной было куда писать результат. А потом уже пошли его в s3. А так я могу взять TemporaryFile, сделать ему readAllBytes, применить трансформации которые мне вернут опять же байты, потом сконструировать ByteArrayInputStream и отдать клиенту s3

Arthur
19.06.2017
21:55:05
Альпака коннекторы к акка стримам не подходят?

Alexey
19.06.2017
21:56:43
я в альпаку даже не смотрел:)

Ivan
19.06.2017
21:58:50
http://doc.akka.io/docs/akka/current/scala/stream/stream-io.html#streaming-file-io
вот тут внизу описано как файлы читать в akka streams

Alexey
19.06.2017
22:00:48
Я правильно понимаю что с байт аррэями плохая идея?:-)
Стримы гляну, спасибо!

Roman
20.06.2017
04:33:01
С байт арреями идея нормальная, если у тебя никто в сервис файлы по 3 гига пихать не планирует.
А так - можно либо все приседания с файлом делать внутри стримов, а потом его материализовать в OutputStream: http://doc.akka.io/japi/akka-stream-and-http-experimental/2.0/akka/stream/javadsl/StreamConverters$.html
Либо брать s3 клиент из альпакки, который умеет прям стрим заливать
Кстати, если пихать материализованный OutputStream в aws-s3-sdk, то его надо буферизовать, а то он по одному байту будет заливать

Google

Roman
20.06.2017
05:11:57
А клиент из альпакки глючный и кривой. Есть два стула, классика.

Alexander
20.06.2017
06:35:23
а чем alpakka s3 глючная? Пока заюзали для стрим даунлода, работает.

Roman
20.06.2017
07:06:19
Из того, что я видел - https://github.com/akka/alpakka/issues/348
И ещё https://github.com/akka/alpakka/issues/316
Но так то жить можно, да.

Alexander
20.06.2017
07:16:12
похоже в мастере уже пофиксили, судя по коммитам в ишью

Nick
20.06.2017
07:25:25
Не юзайте aws вот и все)

Grigory
20.06.2017
07:25:47

Oleg
20.06.2017
07:29:56
Не юзайте программирование, вот и всё
Постоянные баги же

Aleksei
20.06.2017
07:30:14
не слушайте советы!

Nick
20.06.2017
07:31:34

Alex
20.06.2017
07:34:32
все баги от разработчиков, следовательно, не будет разработчиков - не будет багов

Maxim
20.06.2017
07:35:04
аминь

Daniel
20.06.2017
07:35:38

Nick
20.06.2017
07:35:58

folex
20.06.2017
08:18:14
Этот момент, когда ты настолько довел идею, что она больше ничего не компилирует, и просто виснет на любую попытку компиляции %)
Но от трех до пяти перезпусков идеи и clean'ов проекта спасут

Oleg
20.06.2017
08:18:54

folex
20.06.2017
08:19:20
не, я из идеи тесты запускаю, люблю очень их менюшку про тесты

Google

folex
20.06.2017
08:19:37
а с use sbt там сбтшный вывод просто

Oleg
20.06.2017
08:19:52
нет, тесты так же запустятся
просто компилиться будет в SBT

folex
20.06.2017
08:21:13
хм, с релизом 2017.1 пробовал. Значит надо еще раз попробовать :)

Denis
20.06.2017
08:22:08

Enver
20.06.2017
08:28:27
Кто-то запилил кучу js оберток - https://github.com/DefinitelyScala

Юрий
20.06.2017
08:31:27
вполне возможно, что бОльшая часть из них просто не будут работать так, как нужно

Oleg
20.06.2017
08:35:54
Ну зато подойдёт как норм репо-хаб, куда люди, которые сделают-таки нормальные обёртки запулреквестят своё
типа webjars следующего поколения

Юрий
20.06.2017
08:37:59
https://github.com/DefinitelyScala/scala-js-long
Лол, даже для либы, которая добавляет в жс лонги, сделали фасад.

Arthur
20.06.2017
09:32:48
вопрос по акка персистанс, у меня есть актор встречи и актор который находится над всеми встречами чтобы роутить команду куда надо и делать валидации типо "встреча должна иметь уникальное имя". У меня есть два варианта работы с менеджером встречь, первый это создавать акторы встречь во время проигрывания событий или делать это on demand. Какой вариант предпочтительней? Насколько долго подымается персистанс актор в случае если в нем до 100 ивентов?

Vladimir
20.06.2017
09:35:43
несущественно быстро

Arthur
20.06.2017
09:36:49
по идее я могу себе позволить подымать актор только когда он реально будет нужен? и это будет адекватный респонз тайм до 200-300 миллисекунд

Denis
20.06.2017
09:36:54
100 ивентов вычитывается за один батч в кассандре, и очень быстро сворачивается в нужный стейт

Vladimir
20.06.2017
09:37:01
да

Denis
20.06.2017
09:37:05
да

Arthur
20.06.2017
09:37:08
спасибо

Denis
20.06.2017
09:37:32
но как всегда ответ - лучше сделать замеры

Arthur
20.06.2017
09:37:54
само собой, просто я никогда такого не делал и спрашиваю делают ли так впринципе

Google

Denis
20.06.2017
09:39:50
А твой менеджер тоже персистентный?

Arthur
20.06.2017
09:39:57
да
мне надо знать имена встречь для валидации

Denis
20.06.2017
09:41:22
То есть при создании встречи ты будешь
1. Записывать имя в менеджер
2. Создавать саму встречу
?

Arthur
20.06.2017
09:42:56
сеичас при создании я планирую сохранить событие о том что встреча была создана (на основе этого события строить сет имен встреч)
а потом по нужде подымать актор

Denis
20.06.2017
09:43:07
Просто учти что ты делаешь два изменения за один запрос и они могут зафейлиться, то есть может быть состояние что в менеджере встреча есть а вот сохранить ивент создания самой встречи не получилось (сеть глюкнула)
аа
так ок
то есть кеш имен будет eventual consistent?

Arthur
20.06.2017
09:44:07
вроде нет же, актор не будет процессить новые команды пока не зарековерит старые ивенты
и дальше по порядку все
в менеджмент акторе будет хранится стейт всех данных для валидации на создание встречи
и он будет всегда актуален так как строится на основе событие ВстречаСоздана

Denis
20.06.2017
09:49:07
А кто в итоге владелец события ВстречаСоздана? Встреча или Менеджер?

Arthur
20.06.2017
09:49:40
менеджер
сама встреча знает о том что создана потому-что актор был создан

Vadim
20.06.2017
09:49:58
может не очень круто получиться, ибо пока у тебя этот менеджер будет занят записями встреч, запросы на созданные проксироваться не будут

Denis
20.06.2017
09:50:07
А параметры создания ей не нужны?