
Denis
09.06.2016
14:13:53
В акке ввели Done
типа Future[Done]

Daniel
09.06.2016
14:14:44
насколько понимаю, как раз чтобы не было каста в юнит?

Denis
09.06.2016
14:14:59
Ну и intention как бы лучше передается )

Google

Daniel
09.06.2016
14:15:07
done просто болванка как и юнит, насколько помню

Vladimir
09.06.2016
14:16:25
Если она компилятором не откидывается, то она уже свое дело делает

Daniel
09.06.2016
14:17:57
я все равно за опцию компилятора
1) не аккой единой
2) накосячить можно случайно и не заметить

Nikita
09.06.2016
15:11:46

Юрий
09.06.2016
15:12:23
Очень странный кейс
Тоже не вижу проблем

Nikita
09.06.2016
15:14:26
это как раз и было мотивацией тайпсейфа для смены Unit на Done

Юрий
09.06.2016
15:21:36
Если говорить о фреймворке типа акки, то да. Но что плохого в использовании Future[Unit] у себя в коде? О каких ошибках идет речь?

Denis
09.06.2016
15:43:34
А кто нибудь юзал gRPC ?

Wystan
09.06.2016
18:04:22
А почему нельзя конкретный тип вернуть? Об чем речь:(

Юрий
10.06.2016
03:49:00
А почему нельзя конкретный тип вернуть? Об чем речь:(
А если конкретный тип не нужен? Например, у вас есть слой доступа к данным. Из вашего слоя бизнес логики вы дергаете метод - удали запись юзера. Внутри слоя доступа к данным вы делаете запрос к бд, ждете ответ, разбираете этот ответ (а там не Future[Unit], там какой-нибудь Future[DbResponse]). И уже результат в бизнес слой возвращаете в виде Future[Unit], потому что бизнес слою интересно только сам факт того, прошло ли удаление удачно, или нет. А если прошло неудачно - то с какой ошибкой. И это как раз случай Future[Unit]. А теперь повторю вопрос - где тут подвох, о котором говорили выше?


Vyatcheslav
10.06.2016
05:51:13
Нужно стараться избегать Unit, потому что любое выражение "проглатывается". К примеру, пишем future.map, внутри что-то делаем. Потом решаем, что просто что-то делать не достаточно, хотим внутри футуру зафигачить, но вдруг нас тут отвлекают и мы забываем map заменить на flatMap, переходим в другое место и фигачим код дальше. Ха-ха. Если б был бы указан конкретный тип, то компилятор бы ругнулся


Luger
10.06.2016
06:16:29
всем привет. Slick+hikariCP+postgresql , делаю кучу запросов подряд, выдает вот такую радость:
Pool stats (total=10, active=0, idle=10, waiting=0)
но :
HikariPool-10 - Cannot acquire connection from data source
org.postgresql.util.PSQLException: ����������: ����������������, ������ �������������� ���������� ����������������
естесственно, у постгре не осталось свободных коннектов, из 100 забито 100.
очень глупый вопрос, а как в слике корректно очищать ресурсы?
потому как если делать db.close то это , как я понял не коннект закрывает а вообще пул останавливает.
This shows that after every request the db connection is returned to the pool within db.run(...) and db.close is not required.
видимо , я не умею готовить слик %)

Google

Daniel
10.06.2016
06:18:58
обычно это значит, что кто-то напихал фьюч куда не стоит, из-за чего слик не может следить за пулом

Luger
10.06.2016
06:34:17
а куда не стоит? db.run возвращает фьючу, в onComplete я делаю respond ответа на страницу.

Daniel
10.06.2016
06:40:50
честно говоря третий не юзал, может там что-то уже по иному
во 2ом никаких стримов не было, по неопытности фьючу засунул в транзакцию, из-за чего слик не мог освобождать ресурсы (фьюча мгновенно возвращается, но коннект еще не свободен в этот момент)
ну и у других аналогичный косяк часто видел

Vladimir
10.06.2016
06:59:00
В тестах репозиториев на mysql такое было. Просто стартует много тестов и слик вываливается с такой же ошибкой.

Luger
10.06.2016
08:27:16
ну, вообще, падают те запросы, в которых необходимо выполнить два запроса в одной транзакции.
точнее:
есть запрос X , написанный на plain sql(специфический очень), есс-но в слике его нельзя использовать как подзапрос, возвращает он DBAction.
db.run {
val userGroupsQuery = groupsDao.recursiveGroupsForUser(userId) map (_.map(_._1))
val query = userGroupsQuery.flatMap{ groupsId =>
val access = testDao.searchAccessQuery(userId, testId, groupsId)
val testQuery = tests.filter{t =>
(t.testid in access)||
(t.testid === testId && t.creatorid === userId)
}.map(_.testid)
tasks.filter(t => t.taskid === taskId && (t.testid in testQuery)).result
}
query.map(_.headOption)
}
вот пара таких запросов и вешают все


Alexandr
10.06.2016
08:55:50
?

Luger
12.06.2016
09:17:35
нашел я свою проблему, извините, что отвлек своей простыней - я нарукожопил при создании пула

Pavel
12.06.2016
10:19:08
Наверное избитый вопрос по play, но я тем более удивлён, что не нашел на него ответ:
если у меня есть пул коннекшнов к БД и я хочу работать с ним самостоятельно (не средствми play), как добиться того, чтобы в dev режиме не происходил реконнект после reload?
Пробовал inject-ить класс, инициирующий коннекшн, но он пересоздается каждый раз ☹️

Dim
12.06.2016
10:35:54
Что все так на этом Play'e зациклены? Finatra, Scalatra, Collosus, akka-http, finch, Xitrum, полно же...

Daniel
12.06.2016
10:37:01
с плеем тысячу лет не встречался, но насколько помню никак

Pavel
12.06.2016
10:54:51

Nikita
12.06.2016
10:58:56
после полугода работы с akka-http иногда начинаешь скучать по плею и встроенным в него плюшкам

Dim
12.06.2016
11:01:55
В большинстве перечисленных мною фреймворков только одна подстава - это не fullstack фрэймвоки, собираем свой космический корабль сами.
Ну в Finatra подстава с Футурами, они там твиттеровские и приходится использовать Bijection и специфичные имлициты.

Denis
12.06.2016
11:08:59
https://ru.wikipedia.org/wiki/Футура

Alexandr
12.06.2016
11:39:20
По-моему, Play тут ни при чем. Там для работы с БД используются отдельные библиотеки, которые точно также можно использовать и с другими фреймворками

Pavel
12.06.2016
11:41:19
это да. Просто reload всех классов вызывает реконнект к базе - по определеннй причине мне бы этого не хотелось. Ну и вообще странно, что в мануале по play в первых строках не сказано, как этого избежать. Мне кажется - распространенный случай

Daniel
12.06.2016
11:54:11
При изменении сорцов релоад вызывает пересборку и рестарт. Это одна из плюшек плея. Очевидно, что никакое состояние в памяти не сохранится.

Google

Alexandr
12.06.2016
11:56:14
Т.е., нужно чтобы при рестарте приложения, коннект каким-то магическим образом сохранялся?)

Pavel
12.06.2016
11:56:39
именованные JDBC datasource каким-то образом остаются в памяти - потому что они потом ругаются, что уже существуют datasource с таким именем
вот я и подумал, что раз они как-то переживают рестарт (по сути - переживает рестарта HashMap, которая хранит соответствие имя->datasource), значит каким-то образом можно "сохранить" некий класс при рестарте
тем более - там же не обычный рестарт, там ClassLoader подменяется - в общем, какая-то магия

Luger
12.06.2016
12:15:54
кто-нибудь использует у себя akka-quartz-scheduler?

Dim
13.06.2016
00:57:58
Да, юзаем это поделие.

Luger
13.06.2016
05:14:44

Dim
13.06.2016
05:17:18
Можно, доберусь до кода/компа сообщу как, если вы раньше не увидите)

Luger
13.06.2016
05:18:45

Bulbu
13.06.2016
06:33:02
привет! Кто-то знает как в scalacheck генератор String заставить генерировать только читаемые строки?
postgres недоволен

Wystan
13.06.2016
08:29:34
Gen.alphachar?

Bulbu
13.06.2016
08:57:05
спасибо, нашел уже
Gen.identifier

Aleksey
14.06.2016
09:15:23
Друзья, все еще ищу докладчиков на московскую встречу скалалазов https://data-monsters.timepad.ru/event/339285/ Можно писать прямо в телеграм или на почту aleksey.fomkin@gmail.com

Wystan
15.06.2016
18:04:48
Чо как вам первый день скала дейс?

Const
15.06.2016
19:40:35
Отлично!
А что, уже начался?

Wystan
15.06.2016
19:41:55
Одеркски признал что дот нотация рулит и он со своим x map f был не прав
Самая важная новость.

Google

Aleksey
15.06.2016
19:43:34
То есть теперь
items map { item =>
}
Это не кошерно?

Slava
15.06.2016
19:44:35
Хз, по-моему, очень кошерно. Количество визуального мусора по крайней мере минимально, а это большой плюс для читаемости

Wystan
15.06.2016
19:44:52
Надо будет специально помечать infix если ты хочешь писать с пробелом. да некошерно. Кстати, можно будет писать pairItems map ((x,y) => ..) без {case (x,y) => ...}

Viacheslav
15.06.2016
19:45:04
остается ; добавить в конец строк и можно идти Гослингу сдаваться

Admin
ERROR: S client not available

Denis
15.06.2016
19:45:10
;)

Wystan
15.06.2016
19:45:17
Ну да холиварная темка.

Aleksey
15.06.2016
19:45:29
Брошу все, уйду в хаскель.

Denis
15.06.2016
19:45:43
лучше в идрис

Wystan
15.06.2016
19:45:45
И будешь на шее у мамки сидеть без работы

Slava
15.06.2016
19:45:46
Все мы там будем

Wystan
15.06.2016
19:46:50
Вообще интересное у него выступление было (частично повторяет какое-то январское). по мелочи много чего добавят в язык вместе с дотти.

Aleksey
15.06.2016
19:46:54
Хаскель - сила, скала - могила.

Wystan
15.06.2016
19:48:25
Кто не в компайл-тайме, тот под нами!

Aleksey
15.06.2016
19:49:17
лучше в идрис
Еще лучше язык Макса Сохатского в продашкен. Там где HoTT и вот это все.

Wystan
15.06.2016
19:50:10
Но я кстати не вижу никаких движух особых и преимуществ в хаскеле. ну так взгляд со стороны. есть вот ликвид хаскель чтобы по вене пускать:
https://ucsd-progsys.github.io/liquidhaskell-tutorial/01-intro.html
Но для простых смертных чего-то типа акка/спарк/плей, чтобы сразу начать ехать - беда
А здесь вот объяснят, наверное, за стримы, akka typed, cluster sharding, akka persistence и прочие микросервисы. В общем, движение!

Nikolay
15.06.2016
21:22:50

Google

Alex
15.06.2016
21:36:10
с распределенкой в хаскеле традиционно беда
это язык для написания компиляторов :)
языку сохацкого до гомотопических типов по моему еще как до луны :)
у них там основная победа в хитром кодировании рекурсии
а шо касается точек в скале, я их не ставлю только для методов типа max или union, где есть какой то намек на симметрию аргументов
но то конечно дело вкуса

IEvgenii
16.06.2016
06:25:14
Обьясните на примере почему в языке нету гомотопических типов ?

Wystan
16.06.2016
06:56:47
Hott начал активно развиваться в 2006-08, позже чем скала чисто по времени. Ну, а главное - strategic Scala Style: Principle of Least Power - язык не будет комплектоваться такими оверкиллами ботаников как dependet types, higher inductive types и применениями в гомотопии. для математиков это основная фишка - гомотопичность двух путей доказательства, но для практического языка - где это вообще может пригодится? Лучше скажи пример, где hott нужен :)

Denis
16.06.2016
07:15:08
dependent types - оверкилл для ботаников?

Dim
16.06.2016
07:19:47
мне бы тоже настоящих dependent types в Scala...

Grigory
16.06.2016
07:22:47
да они настоящие весьма
просто грязно определяются

Dmitriy
16.06.2016
07:27:20
Внимание, очень нубский вопрос. Как запустить sbt проект демоном? Есть стандартные средства? Или через шел скрипты только делать?

IEvgenii
16.06.2016
07:27:25
это вещи которые люди в реальных проектах не пользуются
я бы сказал что математические теории и все что имеет прямое отношение к математике должно быть запрещено для программирования в "индустрии"
в Go пошли по подобному принципы и потому язык быстро стал популярным