@scala_ru

Страница 1437 из 1499
Юрий
27.04.2018
07:32:40
На презенташке про opaque type. > isInstanceOf очевидно не должно быть А как ты его запретишь? это конструкция языка, она должна быть поддержана и работать непротиворечиво.

Юрий
27.04.2018
07:35:01
ну я про свежую с typelevel summit вроде. Совсем недавно была

Google
Nick
27.04.2018
07:35:39
Denis
27.04.2018
07:35:57
оно упоротое какое то и не очень активное

Oleg
27.04.2018
07:36:29
а fs2 в кафку - это конзумер?

там есть выходы, кроме бешенных буферов?

Nick
27.04.2018
07:36:48
Вообще там Кафка стримы запилили, можно наверное на них навертеть

Oleg
27.04.2018
07:38:44
wat?
ну я не маг кафки, но имеется в виду заливать в кафку или читать?

Denis
27.04.2018
07:39:06
ну с заливание особых проблем нет )

я больше про читать

и кафка pull based и fs2 pull based

проблем не вижу

Oleg
27.04.2018
07:39:36
хмммм

Google
Denis
27.04.2018
07:39:44
наоборот a perfect match

Там ж вроде есть fs2-kafka
Чтобы понять мои опасния стоит знать что это не враппер на джавовым клиентом, они на scodec реализовали протокол.

Oleg
27.04.2018
07:41:43
поэтому ты не можешь его просто стереть, задаунгрейдить, забыв

Юрий
27.04.2018
07:43:11
Чтобы понять мои опасния стоит знать что это не враппер на джавовым клиентом, они на scodec реализовали протокол.
Общался с чуваками, которые это клиент использовали. Говорили, что он лучше джавового был раньше. Что сейчас - хз

Denis
27.04.2018
07:43:42
мы говорим про https://github.com/Spinoco/fs2-kafka ?

Юрий
27.04.2018
07:44:03
да

Denis
27.04.2018
07:45:40
Я к нему приглядываюсь конечно, но пока не готов )

Юрий
27.04.2018
07:47:39
чуваки из dins если что. И вроде кто-то был в этом чате

Denis
27.04.2018
08:46:09
Ну это потенциально опасно :)

Alexey
27.04.2018
08:46:19
подскажите, а что сейчас модно использовать для throttlinga в скале? минимум чтобы можно было накрутить свой механизм синхронизации между распределенными узлами. максимум, чтобы это уже было готово.

Nick
27.04.2018
08:48:05
Ну это потенциально опасно :)
Сомневаюсь , у вас кафку ж тоже не каждый день обновляют

Да и на самом деле протокол не должен меняться )

Eugene
27.04.2018
11:17:25
Скажите есть инстанс MonadError и Effect для Id? В cats

что-то не смог сходу найти

Vladimir
27.04.2018
11:22:33
нет

Coeval мониксовый можно взять

Oleg
27.04.2018
11:25:25
Effect нет у Coeval

Google
Oleg
27.04.2018
11:25:47
по понятным причинам

потому что не может быть liftIO, который у Async

Vladimir
27.04.2018
11:26:22
Await.result ?

Oleg
27.04.2018
11:26:50
там есть похожее требует что-то типа implicit BlockPermit

Vladimir
27.04.2018
11:27:21
not an alley cats, thrash cats

Oleg
27.04.2018
11:28:33
https://www.imdb.com/title/tt4218250/

Vladimir
27.04.2018
11:29:09
alien cats

Oleg
27.04.2018
11:36:16
как ты предполагаешь они должны быть реализованы?

Eugene
27.04.2018
11:53:15
Сразу throw ex делать
да именно так ))) мне для тестов запускать все в Id и не заморачиваться с Await.result

Oleg
27.04.2018
11:53:20
Полагаю, можно реализовать MonadError[Nothing]

Oleg
27.04.2018
11:53:30
через handleError

Eugene
27.04.2018
11:57:49
хорошо а как тогда в таком случае писать код, чтобы его легко было тестировать? Если я хочу higher kinded type подсунуть в качестве эффекта

для запуска подсовываю Task, а для тестов чтобы не думать про это подсовываю Id например

Или все запускают тесты с Task и это норм?

Oleg
27.04.2018
11:59:19
ну ту часть, которая требует Async

тебе нужен асинхронный эффект

ты же сам его потребовал

Google
Oleg
27.04.2018
12:00:03
Если какой-то кусок требует MonadError, передавай туда Try, Either или Coeval

Юнит-тесты, они ведь юниты тестируют. Не все же единицы твоей программы требуют асинхронного управления?

Eugene
27.04.2018
12:01:46
да конечно не все, какие то куски просто Monad даже

ладно спасибо, обратился к общественному разуму стало понятнее куда идти дальше )

Oleg
27.04.2018
12:12:06
фундаментально экспертизу в дирижировании F[_] я не предоставлю Сам пока не использую FT их основательно, а вот @notxcain использует. Он, наверное, может рассказать, как аккуратно разрезать части логики так, чтобы большая часть из них требовала меньших гарантий

Eugene
27.04.2018
12:13:27
да вот было бы очень интересно

Denis
27.04.2018
12:14:14
для запуска подсовываю Task, а для тестов чтобы не думать про это подсовываю Id например
Ты подсовываешь то что отвечает твоим требованиям, чаще всего в тестах это State

Admin
ERROR: S client not available

Oleg
27.04.2018
12:14:59
А если у него в требованиях Effect в куче мест?

не надо так ?

Eugene
27.04.2018
12:23:00
видимо и тесты запускать в Effect'е сейчас стою на распутье - либо делать сигнатуры с F[_] или забить на это и тесты писать с Await.result

видимо стоит забить на F[_] и гвоздями везде прибить Task в ответах

Denis
27.04.2018
12:23:38
А если у него в требованиях Effect в куче мест?
Это вообще редко должно встречаться

Oleg
27.04.2018
12:23:54
Это вообще редко должно встречаться
Ну так философская проблема именно в том

Denis
27.04.2018
12:24:06
Философы ))

Oleg
27.04.2018
12:24:08
Как правильно разархитектурить всё, чтобы имея уже такую проблему

Начать шуршать и двигать сильные требования куда-то в более узкие места

Denis
27.04.2018
12:25:48
Начать шуршать и двигать сильные требования куда-то в более узкие места
Да, у меня есть место где я мог заинжектить Timer[F], но заинжектил sleepBeforeBlaBla: F[Unit] и тем самым упростил тестирование

Ну это как всегда tradeoff

Google
Eugene
27.04.2018
12:26:22
в примере http4s+doobie не парятся с этим и просто в тестах делают unsafeRunSync https://github.com/jaspervz/todo-http4s-doobie/blob/master/src/test/scala/service/TodoServiceSpec.scala

Denis
27.04.2018
12:27:16
Ну там особо нет вариантов

потому что репозиторий прибит гвоздями к IO

и потом юзают стабы

не надо так

ужас

Eugene
27.04.2018
12:28:12
да а вот как надо тогда?

если репа возвращает IO, сервис тоже возвращает IO, есть goodpractices как оформить такую простую архитектуру?

Denis
27.04.2018
12:30:31
Делаешь TodoRepository[F[_]], в тестах делаешь версию где F[A] = State[TestState, A], инжектишь его в сервис, пишешь тест, делаешь val finalState = test.runS(initialState), ассертишь что finalState обладает некими свойствами

Кирилл
27.04.2018
12:31:01
/420

Denis
27.04.2018
12:31:24
/420

но ведь 15:30 :(

Denis
27.04.2018
12:33:18
конечно, у тебя реальный эффект только на реальны границах IO (не тип)

сеть, файлы, память, время!

а там уже выбирай какой хочешь конкретный тип

Eugene
27.04.2018
12:34:16
хорошо спасибо

Denis
27.04.2018
12:34:30
обращайся

Grigory
27.04.2018
12:51:57
дам там можно подсунуть будет IO.pure { null.asInstanceOf[T] }

Страница 1437 из 1499