
Vadim
04.12.2017
10:48:22
те кто давал интервью - я думаю не совсем честно что нету меншона что вы участвовали - напишите мне пж в личку со ссылкой на вас, и я вас добавлю в голоса

Nikolay
04.12.2017
10:50:22
скалалазы! кто хочет пойти на питерский scala meetup, но еще не записался - у вас еще есть возможность попасть - там осталась пара свободных мест

Daniel
04.12.2017
10:51:23

Kirill
04.12.2017
10:51:43
а в чем профит оборачивать 10к строк мутабельного кода в IO? получается что внутри этого io будет происходить и открытие файла, и чтение, и закрытие, не особо композируемо, не?

Google

Denis
04.12.2017
10:52:52
Это была IO[Joke]

Grigory
04.12.2017
10:53:02
рибята а кто на последней идее?
чето dump project structure from sbt долгий

Nikolay
04.12.2017
10:53:22
а вообще проходит?

Grigory
04.12.2017
10:53:41
проходит да
но он каждый раз на рефреше билд файла и это ппц

Nikolay
04.12.2017
10:54:06
а у тебя случайно нет открытой sbt в терминале?

Grigory
04.12.2017
10:54:08
можно это вырубить / легаси мод включить какой?
есть
но с вырубленной тоже самое и как это должно влиять?)

Alexander
04.12.2017
10:54:24

Nikolay
04.12.2017
10:54:26
1.0.X версия?

Google

Grigory
04.12.2017
10:54:30
0.13.x

Aleksey
04.12.2017
10:54:35

Nikolay
04.12.2017
10:54:57

Grigory
04.12.2017
10:55:12
и каждый раз после рефреша слетает скала вершн
ну типа сдк заново надо задавть для проекта
._.

Kirill
04.12.2017
10:55:21

Grigory
04.12.2017
10:59:25
@rockjam а ты не знаешь подробносетй что это за новый этап?
или ссылку на пр / доку

Oleg
04.12.2017
11:01:08

Nikolay
04.12.2017
11:01:15
ты про какой этап? dump project structure from sbt
нет, честно говоря не знаю. у меня была проблема - что когда запущена sbt 1.0.X и там стартует сервер, то idea не может зарефрешить проект, потому что sbt console не может забиндиться на тот же порт что и sbt в терминале

Grigory
04.12.2017
11:02:45

Aleksey
04.12.2017
11:02:46

Grigory
04.12.2017
11:02:55
спасибо всеравно за инфу про sbt 1.x

Roman
04.12.2017
11:08:25

Aleksandr
04.12.2017
11:17:50
Всем привет, вопрос не по теме, но может есть у кого-нибудь знакомый фрилансер пишущий на Ruby?

Grigory
04.12.2017
11:18:16
почему не про го вопрос то (так жирно что даже тонко)

Alexander
04.12.2017
11:18:55

Google

Daniel
04.12.2017
11:19:30

Oleg
04.12.2017
11:19:38
У каждого эффекта свои фичи. И свой скоупинг
Batch - вообще Applicative

Grigory
04.12.2017
11:19:49
Aleksandr давай в руби чате спросишь, это же логичнее, чем в скала чате искать руби дева

Aleksandr
04.12.2017
11:20:20

Oleg
04.12.2017
11:20:34
Transaction композит всё, что будет внутри одной транзакции, чтобы не заставлять тебя явно commit\rollback

Grigory
04.12.2017
11:20:37

Daniel
04.12.2017
11:20:46

Grigory
04.12.2017
11:21:15
я ни на что не намекаю, но можно и восопльзоваться поиском в интернете по ключевым словам.

Alexander
04.12.2017
11:21:28
У каждого эффекта свои фичи. И свой скоупинг
у меня скоупинг усложняется тем, что я могу иметь Session[Publisher], и сессия будет закрыта тогда, когда он отработает, а не когда его как значение достанут из монады... Если это про это

Oleg
04.12.2017
11:22:05
Session[Publisher] ?
Вот идея в том, что ты не делаешь Publisher

Oleg
04.12.2017
11:22:42
Ты спокойно можешь сделать какой-нибудь там
StreamT[Session, ByteString]

Alexander
04.12.2017
11:23:16
StreamT - это любопытно

Oleg
04.12.2017
11:25:25
Ну тогда тебе интересен
этот https://oss.sonatype.org/service/local/repositories/releases/archive/co/fs2/fs2-core_2.12/0.9.6/fs2-core_2.12-0.9.6-javadoc.jar/!/fs2/Stream.html
для ленивых
или этот
https://github.com/travisbrown/iteratee/blob/master/core/src/main/scala/io/iteratee/Enumerator.scala
для бодрячка

Alexander
04.12.2017
11:27:10
? значит ли это, что Session как тип будет торчать в интерфейсах?
ну вместо Publisher[T] будет ещё упоминаться Session

Oleg
04.12.2017
11:31:27
Ну логично было бы. Этим ты как раз и объявляешь, что твой эффект заключается в том, что ты предлагаешь комбинировать действия внутри Session, и предоставляешь какой-то
Session[T]{
runSession(...): IO[T]
}
который создаст новую сессию, запустит всё, что скомбинировано и закроет её.
И для того, чтобы можно было туда и простой IO засовывать, реализуешь явно LiftIO[Session]
Как мы обсуждали, Недельку хотел сам какой-то StreamT делать, но @clayrat сообщил, что ждал ждал и не дождался прогресса
такой вот https://github.com/monix/monix/blob/wip-streams/monix-tail/shared/src/main/scala/monix/tail/Iterant.scala

Google

Alex
04.12.2017
11:37:05
он щас вроде релизом 3.0 занят

Denis
04.12.2017
11:39:16
И как только выйдет cats 1.0 выйдет monix 3.0

Oleg
04.12.2017
11:39:44
мммммм, интересно
реально в 3.0.0-M1 есть tail
ну тогда вот тебе и ещё один

Admin
ERROR: S client not available

Alexander
04.12.2017
11:50:21
Iterant выглядит отлично

Kirill
04.12.2017
11:51:07
пацаны, можно на пальцах, разве концепция io не заключается как раз в реюзабельности? то есть даже с loan pattern, как говорит Олег, вызов условного send вернет io, которое будет оперировать над одним и тем же Response - читать его заново, а это по задаче не подходит. Нет?

Denis
04.12.2017
11:54:07
просто во время выполнени получишь exception
Никто же не говорит что IO[Int] всегда превратится в Int
loan pattern уменьшает вероятность ошибки

Kirill
04.12.2017
11:56:03
Так ты можешь зареюзать
Ну понятное дело, что attempt можно будет вызвать, но какой в этом смысл, если этот io будет всегда оперировать над одним и тем же результатом, который примет функция Response => IO

Denis
04.12.2017
11:56:07
и ответственность за один вызов функции Response => IO[A] кладется на плечи реализации функции sendRequest

Alex
04.12.2017
11:56:37

Denis
04.12.2017
11:57:09

Kirill
04.12.2017
11:58:08
Я думал, что как раз хочется избавиться от ситуации, когда есть функция, которая принимает какой-то Response, читает из него что-то, обернув вычисление в IO, и возвращает это IO, и если вызвать attempt 2 раза на IO, то получится плохо
IO ведь только описывает, как мы хотим прочитать респонс, и не делает никакой работы

Denis
04.12.2017
11:59:26
верно, но и еще говорит о том что будет всякий нечистый ввод вывод

Google

Denis
04.12.2017
11:59:37
и что результат зависит от состояния внешнего мира
так вот мир поменялся между вызовами ))
Это так же как обсуждать что с баланса в 1 рубль нельзя дважды списать по рублю, хотя сигнатура будет
withdraw: (AccountId, Money) => IO[WithdrawalResult]

Kirill
04.12.2017
12:02:14
А, в этом и цель? Понял, логично. Я думал, автору как раз не нравится, что если два раза вызвать attempt, может быть плохо, и он хочет так, чтобы и получение Response и его обработка были двумя разными IO, которые бы композировались и можно было бы вызывать несколько раз

Denis
04.12.2017
12:03:33
IO говорит что
for {
_ <- withdraw(acc, 1)
_ <- withdraw(acc, 1)
} yield ()
и
val withdrawAcc1 = withdraw(acc, 1)
for {
_ <- withdrawAcc1
_ <- withdrawAcc1
} yield ()
это одинакоый код

Kirill
04.12.2017
12:05:04
Да, это я знаю, базовый пример любой подобной либы с эффектами

KrivdaTheTriewe
04.12.2017
12:27:33
https://www.confluent.io/blog/toward-functional-programming-analogy-microservices/

Alexey
04.12.2017
12:27:54
норм статья

Alexander
04.12.2017
12:37:33
А, в этом и цель? Понял, логично. Я думал, автору как раз не нравится, что если два раза вызвать attempt, может быть плохо, и он хочет так, чтобы и получение Response и его обработка были двумя разными IO, которые бы композировались и можно было бы вызывать несколько раз
получается, что при создании IO замыкается на строгий результат другого IO, вместо того, чтобы выполнить заново всю цепочку IO, это несколько отличается от примера с балансом в 1 рубль
но в скале ленивость неудобна, поэтому сильно упорото получается

Kirill
04.12.2017
12:42:19
получается, что при создании IO замыкается на строгий результат другого IO, вместо того, чтобы выполнить заново всю цепочку IO, это несколько отличается от примера с балансом в 1 рубль
А почему строгий результат другого IO? По идее, если есть IO[Request], IO[Request => Response], IO[Response], то, получается, их можно невозбранно композировать и вызывать до бесконечности, и будет каждый раз новый Request. Или ты не о том?

Alexander
04.12.2017
12:44:34
у меня есть IO[Response], который замыкается на конкретный Response, который может быть прочитан один раз. Или можно сделать, чтобы он не замыкался, а вычислял его, но тогда надо всё делать ленивым, и выглядит это странно в скале, но я пока не определился

Александр
04.12.2017
12:53:50
на таксо покатался, теперь не подонатить)

Alexander
04.12.2017
13:00:16
Олег, я правильно понимаю, что с Iterant можно реализовать автозакрытие сессии, после считывания? Iterant[Session, A]? Не совсем понимаю, как это происходит

Eugene
04.12.2017
13:15:36
может кто-то подскажет - есть возможность задавать в админке скрипты, которые выполняются по кнопке и выдают данные
сейчас это groovy сприпты, интерпретируются через GroovyShell и к ним подключены входные данные+некоторые полезные функции, которые можно дергать из скриптов
в целом работает, но интероп в некоторых случаях неудобный и громоздкий
есть ли что-то, что позволит писать скрипты сразу на скале
смотрел ammonite, но там больше про shell, repl и тд.

Nikolay
04.12.2017
13:17:40
https://github.com/m3dev/twitter-util-eval