Danila Matveev
у кафки нет тотального порядка, гарантия есть только в разрезе одной партиции топика
Nikolay
Если сделать всего одну партицию, то вот и ордеринг
Anonymous
с таким успехом лучше сделать 0 партиции и передавать меседжи внутри одного процесса
Vitaly
Будущее cabal в надежных руках.
Давайте тотализатор организуем: сделают нам новый cabal или нет
Alexander
с другой стороны я могу попробовать убрать требования порядка, но это думать надо
Alexander
Давайте тотализатор организуем: сделают нам новый cabal или нет
сделают, но он будет неюзабельный и им никто не будет пользоваться и никто не будет знать что он есть
A64m
это уже сейчас так
Alexander
это уже сейчас так
но будет более лучший и его более лучше не знать будут
IC
в recursion-schemes нет монадных фолдов или я куда-то не туда смотрю?
Ilya
Прикольно, оказывается можно делать сумму типов-записей data F = A {a :: Int, b :: Double} | B или даже data F = A {a :: Int, b :: Double} | B {a :: Int}
IC
Всё базовые
IC
Ката, Ана, хило
Ilya
Ката, Ана, хило
а Data.Fix не подойдет?
Ilya
там как раз эти есть
IC
Так то они у меня и в велосипеде есть. Я скорее удивлён, что их в кметтоверсе нет искаропки.
Зигохистоморфный
Ката, Ана, хило
последный выразим через перые два
Зигохистоморфный
cataM :: (Recursive t, Traversable (Base t), Monad m) => (Base t a -> m a) -> (t -> m a) cataM phi = c where c = phi <=< (traverse c . project) anaM :: (Corecursive t, Traversable (Base t), Monad m) => (a -> m (Base t a)) -> (a -> m t) anaM psi = a where a = (fmap embed . traverse a) <=< psi hyloM :: (Functor f, Monad m, Traversable f) => (f b -> m b) -> (a -> m (f a)) -> a -> m b hyloM phi psi = h where h = phi <=< traverse h <=< psi
IC
Уже лучше. А таки почему этого в пакете нет?
Зигохистоморфный
было ишью про это
Alexander
а чем это лучше http-reverse-proxy в subj
Alexander
?
Anonymous
Ну, какое-нить решение на ноде. Какое проще и делает то, что нужно. Очень просто установить на разных осях
Alexander
а почему в tasty опции сами из test-tree не собираются, что это вообще за нафиг?
Anonymous
а чем это лучше http-reverse-proxy в subj
Это - готовый пример тупой прокси.
Alexander
http-reverse прокси тоже готовый.. и есть только одна ось
Alexander
та прокся умеет http2 stream?
Anonymous
Не знаю.
Alexander
просто тупой прокси у меня и сейчас есть, через http-reverse-proxy, т.е. если менять то на то, что точно лучше
Leonid 🦇
модули к nginx на хаскеле
Alexander
Эх, до чего ж этот мир web-разработки сложный. Или я такой тупой. Все еще пытаюсь придумать, как должен выглядеть нормальный способ передачи файлов с сервера на клиент через Servant. Коллеги подсказали, что существует X-Accel-Redirect (для nginx), но я пока не могу въехать, что мне нужно сделать на сервере и клиенте. Допустим, я на клиенте делаю запрос get /download/1.pdf. Мне нужно, чтобы мой сервер взял запрос, определил нужные параметры и сформировал собственный запрос к внешнему сервису, подставив еще тайные API ключи. Далее результат с внешнего сервиса нужно перенаправить клиенту как файл. Совершенно неясно, в каком месте нужно подставлять API ключи и вот тот названный хидер (`X-Accel-Redirect`). Еще, судя по статьям, нужно править конфиг nginx, чтобы там был маппинг ресурса, который запрашивается клиентом, на ресурс, про который знает сервер. И причем тут вообще Servant. Может кто-нибудь мне доходчиво объяснить?
Leonid 🦇
могу
Alexander
На стороне серверного приложения (Haskell) я прекрасно получаю файл как ByteString из внешнего ресурса. Могу даже его Сервантом отдать как OctetStream. Правильно ли это, фиг знает
Alexander
модули к nginx на хаскеле
я думал, но пока не могу убедить devops-ов
Leonid 🦇
в общем nginx получает GET /download/1.pdf и проксит в твой сервис. твой сервис резолвит аутентификацию там и урл по которому nginx может вытащить файл
Leonid 🦇
твой сервис возвращает x-accel-redirect с урлой и пустым телом.
Leonid 🦇
nginx идёт по урлу и возвращает пользователю содержимое
Leonid 🦇
редиректить можно на internal путь
Alexander
"Мой сервис" == "мое серверное приложение" с Haskell и Servant? Или "Мой сервис" == "внешний сервис, требующий еще и ключи"?
Leonid 🦇
хоть на сервант, хоть на wai, хоть снап
Leonid 🦇
твой сервис это то что ты пишешь а не что там s3 предоставляет (или еще кто)
Leonid 🦇
я правда не скажу как добавлять заголовки к этому запросу.
Alexander
nginx идёт по урлу и возвращает пользователю содержимое
Ага, кажется, я понял. В этом урле придется зашить API ключ к внешнему сервису. Вроде бы, он такое позволяет (а вообще, он хочет хидер с ключом)
Leonid 🦇
вообще можно наверно через proxy_set_header намутить
Alexander
я правда не скажу как добавлять заголовки к этому запросу.
У Servant там есть машинерия для этого. Попробую разобраться
Leonid 🦇
у nginx его может не быть
Leonid 🦇
но я подозреваю что он все заголовки из ответа твоего сервиса передаст дальше
Alexander
редиректить можно на internal путь
Вот этот момент только мне не ясен в виду ограниченных познаний HTTP и nginx
Leonid 🦇
это из nginx когда они мачит локации типа location /download_files/ internal; proxy_pass https://s3.amazon.whatver/ internal значит что он будет матчить этот путь только для x-accel-redirect но не для запросов от пользователей
Leonid 🦇
к HTTP это отношения не имеет
Alexander
url, который я отдаю назад с x-accel-redirect, должен быть абсолютный? Или он должен быть относительный с базой, которая в proxy_pass?
Leonid 🦇
это уже к манам nginx
Alexander
Окей. Спасибо!
Alexander
@quetzal @lonokhov а для websocket такое будет работать?
Leonid 🦇
эээ, ну по идее да. только тебе надо будет из запроса в ответ передать Upgrade заголовки
Leonid 🦇
но это не точно
Alexander
если можно так сделать то круто, тогда бы можно было нахаляву убрать проксирование из haskell приложения и отдать его nginx-у
Alexander
без модулей и т.п.
Leonid 🦇
если тебе хаскель только для аутентификации то там ваще просто
Alexander
аутенфикация + пообщаться с k8s чтобы найти ноду с сервисом или запустить
Leonid 🦇
ну я вот не уверен про заголовки
Leonid 🦇
в доках ничего нет
Alexander
в общем смысл такой примерно (выкидывая кучу деталей)
Alexander
юзер говорит сервису - зоделай мне сервис
Alexander
сервер отвечает, зоделал держи токен
Alexander
юзер делает вебсокет соединение с адресом на основе возвращаемого значения
Alexander
сервер находит нужный сервис и все тупо проксирует
Alexander
это нормально конечно, но я бы хотел убрать проксирование из сервиса, сильно бы упростило жизнь memory footprint и GC pressure
Leonid 🦇
location /websock { proxy_pass http://haskell-resolver; #должен редиректить на /redirect и прокидывать заголовки типа Upgrade } location /redirect { internal; proxy_set_header Upgrade $upstream_http_upgrade; proxy_set_header Huita $upstream_http_huita; proxy_pass http://websocket/services/ }
Leonid 🦇
попробуй так
Alexander
сохранил
Leonid 🦇
т.е. юзер идёт на ws://server.com/websock
Leonid 🦇
ну это я так написал, из головы.
Leonid 🦇
https://stackoverflow.com/a/24989442 вот ту еще