@scala_ru

Страница 1295 из 1499
Daniel
15.02.2018
19:55:04
вот еще старый рассказ

похоже для касандры только один вариант - джавовый драйвер и велосипед свой

всунуть IO чтобы везде оставить конкретные реализации без общего интерфейса очень полезно

у них есть универсальная концепция Context для каждой базы они реализуют свои (для кассандры Async, Sync и Mirror) раньше у них для асинка были скаловые фьючи (обертка над CompletableFuture), для остального результат в версии 2.0 они притащили IOMonad (своя реализация) типа абстрагироваться от вычисления из коробки осталось ScalaFutureIO и SyncIO для прочего иерархия такая у контекстов (названия могут быть неточные и пара связей, но суть остается) Context — MirrorContext | | CassandraContext — CassandraMirrorContext | CassandraSessionContext | | AsyncCassContext SyncCassContext так вот IOMonad никто не содержит из них Асинхронный контекст прибит к ScalaFutureIO Синхронный и зеркало к SyncIO теперь привычная реализация для черной обезьяны - это какой-нить CassandraDao(ctx: ???) Контекст передается аргументом, потому что казалось бы разумно его вытащить и для тестов вместо Async всобачить Mirror. Но результат у методов ctx.run разный, а новый ctx.runIO объявлен в IOMonad и как результат отсутствует у общего предка контекстов попробовал вытащить дсл часть из "дао", потому что её можно протестировать независимо, но это новый трейт рядом в который тоже надо инжектить ctx (который содержит не только ценные методы но и 3-4кг имплиситов, поэтому его содержимое еще надо добавить целиком в скоуп import ctx._) но это в итоге шляпа и новый бойлерплейт вокруг дсл квилла

Google
Daniel
15.02.2018
19:55:04
а да, я от этого еще эмоционально не отошел и все время забываю, что хотел свою реализацию для ИО сделать, чтобы сразу в твиттеровские фьючи конвертировать, но в контексте уже вшиты скаловые

А - абстракция

и прекрасный ответ от мейнтейнера и автора этой монады > you can create a new context similar to the existing async one that returns twitter futures

по иронии судьбы он работает в твиттере

Daniel
15.02.2018
19:55:27
но там все контексты штампуются довольно однотипно просто в каждом случае своя реализация языка

Daniel
15.02.2018
19:57:42
но там все контексты штампуются довольно однотипно просто в каждом случае своя реализация языка
Ну так-то да, но просто вот с рантайм ошибками ни разу не сталкивался

Andrey
15.02.2018
20:00:05
@danslapman а ты асинхронным драйвером для постгри пользуешься?

Grigory
15.02.2018
20:34:13
а мы будем его вытаскивать из кассандры)
Поддержу кстати, жава дривера хватает

Андрей
15.02.2018
21:12:39
идея не умеет скалу в джаву из буффера? только наоборот? - чёт поздно и возможно туплю….

Google
Nikolay
15.02.2018
21:13:24
умеет джаву в скалу из буфера

копипасть, она тебе предложит конвертировать, но сделает так, что ты заплачешь

она как та собака из комикса

Viacheslav
15.02.2018
23:18:12
пасаны ваще свагерята! Всем привет. Кто-нибудь юзал swagger + finch? Можно из/для финчА сгенерить сваггер эндпоинты/апишку или чо там генерят?

Daniel
15.02.2018
23:32:32
и Олегу пока не дали зеленый свет на оупенсорс, 2ая проблема

Daniel
15.02.2018
23:48:30
А можно ссылку?
https://github.com/finagle/finch/issues/581 но порывшись нашел ишью уже про сваггер и там в комментах упоминают стороннии реализации https://github.com/finagle/finch/issues/73

V
16.02.2018
00:41:22
// Мне кажется, мы стали забывать... import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global val l = List(Future(1), Future(2), Future(3)) val myFuture: Future[List[Int]] = Future.sequence(l) val newFuture: Future[List[Int]] = Future.traverse(l)(identity)

Oleg
16.02.2018
05:12:25
стали забывать, что traverse identity == sequence?

Kirill
16.02.2018
05:15:24
Вот это поворот!

Anatoly
16.02.2018
06:47:36
Кто-нибудь встречал статьи на Medium или Hackernoon c иллюстрациями собственно ручно нарисованными про то как работают технологии? Я помню была подобная статья про Kafka, но найти не могу

Alexander
16.02.2018
07:48:58
статьи нужны типа таких ? https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1

Alexey
16.02.2018
08:05:51
https://itunes.apple.com/us/app/paper-by-fiftythree/id506003812?mt=8

я рисовал таким

но удобно только на ипаде

с телефона сложно

Oleg
16.02.2018
08:29:04
кто-то понимает, почему в cats.data.ZipList сделан только Apply . а не Applicative? https://github.com/typelevel/cats/blob/ef64ff8d4e8f186c7cc7564d37eb734273cd70fc/core/src/main/scala/cats/data/ZipList.scala

вчера хотел скалану показать, как я делаю транспоуз через травёрс, и обнаружил, что зиплист-то не аппликатив

а скалаз было зашкварно

Google
sherzod
16.02.2018
09:34:42
вчера хотел скалану показать, как я делаю транспоуз через травёрс, и обнаружил, что зиплист-то не аппликатив
судя по форме он Applicative def apply[A](value: List[A]): ZipList[A] = new ZipList(value) def ap[A, B](ff: ZipList[A => B])(fa: ZipList[A]): ZipList[B] =

А ясно, в котах есть слабая версия аппликатива. Проглядел что в apply List[A].

Daniel
16.02.2018
09:46:09
лол, запустил бенчмарки в strawman: > Run progress: 22.94% complete, ETA 2 days, 11:24:24

и это уже спусят почти сутки

Oleg
16.02.2018
10:27:44
судя по форме он Applicative def apply[A](value: List[A]): ZipList[A] = new ZipList(value) def ap[A, B](ff: ZipList[A => B])(fa: ZipList[A]): ZipList[B] =
ну зиплист классически аппликатив, но именно в котах решили сделать инстанс коммутативэпплай

видимо потому что "прост"

https://github.com/typelevel/cats/pull/1938#pullrequestreview-74505197

с зипстримом всё ок, а зипвектор тоже инвалидный

Aleksei
16.02.2018
11:10:58
кстати кто не в курсе, мы открыли флудльню где можно все https://t.me/scala_flood

Bulat
16.02.2018
11:22:27
нинужин

Vadim
16.02.2018
12:23:23
Я вот думаю

если у нас есть метод

some[A](a:Option[A]):Future[A]

предположим

мы подадим на вход Option[Int]

сможет ли оно вернуть Future[Seq[Int]] ?

схавает?

Alexey
16.02.2018
12:24:57
мне кажется ты немного запутался )))

откуда Seq??

Google
Vadim
16.02.2018
12:25:18
смотри,вопрос вот в чем

метод из Option[A] -> Future[A]

Grigory
16.02.2018
12:25:35
заведи второй параметр B

some[A, B](a:Option[A]):Future[B]

Vadim
16.02.2018
12:26:04
блин

Aleksei
16.02.2018
12:26:10
ну еще надо будет тогда передать f: A => B

Alexey
16.02.2018
12:26:19
some[A, B](a:Option[A]):Future[B]
Без шейплеса сложно будет

Vadim
16.02.2018
12:26:23
ща

я кароче наверное мысль свою плохо выражаю

я уже 15 минут думаю

и не работаю

надо попробовать

Aleksei
16.02.2018
12:26:48
невероятно плохо и при этом очень многословно, в скасти сделай сниппет понятнее будет =)

Alexey
16.02.2018
12:27:21
или просто рассказать что ты хочешь получить, а не то как нам допилить решение которое тебе пришло в голову

Vadim
16.02.2018
12:27:34
простите =(

Alexey
16.02.2018
12:27:52
да, не, нам тоже весело, но это не приближает тебя к решению твоей проблемы

а куда пропал foldM для Set???

https://github.com/typelevel/cats/commit/1f0cba0490d22dc945a38f39c21f0a616202b574#diff-eea7ea856b0e132389c70620f0ad3afa :(

решили что не нужен fold для set

Google
Vladimir
16.02.2018
12:42:21
курица не птица, сет не монада

Oleg
16.02.2018
12:42:45
https://github.com/typelevel/cats/blob/master/alleycats-core/src/main/scala/alleycats/std/set.scala

сет из-за хеширования неблагозаконная монада

import alleycats.std.set._

Dmitry
16.02.2018
12:44:56
Так вроде ж алейкет задеприкейтили, не?

Oleg
16.02.2018
12:45:48
нет, наоборот, его втащили в основную репу, задепрекейтил старый отдельный репозиторий

Dmitry
16.02.2018
12:46:25
Ну да, я про это собсна. А название пакета сохранилось?

Oleg
16.02.2018
12:47:30
нет

Alexander
16.02.2018
15:47:37
а что за alleycats, просветите?

Daniel
16.02.2018
15:48:25
судя по названию, грязные непослушные котики

Nikita
16.02.2018
17:18:20
а что за alleycats, просветите?
https://github.com/non/alleycats

вообще их уже помержили в cats, но нормальный ридми не завезли почему-то

Oleg
16.02.2018
19:01:59
а что за alleycats, просветите?
набор инстансов, нарушающих законы

юзайте на свой страх и риск

конкретно traversable для set нарушает foldMap f . fmap g = foldMap (f . g)

потому что слева после map сет перетусует элементы и фолдиться они будут в другом порядке, нежели справа Но для коммутативных моноидов тебе должно быть плевать, поэтому иногда ты захочешь поюзать такой вот треверсабл

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