программируя на скале
Oct. 21st, 2019 08:00 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сегодня трахался с одной фигней. И вот код ходит куда-то на сервер, а приносит в ответ "неправильный json". Шо за json, я ничего такого не посылаю. А ошибка приходит. Стал изучать вопрос. А чо он неправильный, а там http4s берет какой-то Message[T], пытается из него сделать ByteBuffer, и обламывется, т.к. ByteBuffer оказывается пустой. Из чего он делается - Message состоит из каких-то Fragments; и вот один фрагмент пустой.
Что за фрагмент, чо он пустой, непонятно, но внутри его сидит SingleChunk, в котором сидит Chunk, и про него известно, что он пустой. Ну окей, ну покажите мне, что было-то. А не показывают. Там, конечно, цикл, но цикл навалян через рекурсию (типа так круче), а рекурсия оптимизирована через трамплин. В результате стектрейса нету, промежуточные данные не видны, Message не виден, потому что это макрос. А откуда вызвали, тоже непонятно, потому что трамплин, и весь стектрейс проебан.
Что за фрагмент, чо он пустой, непонятно, но внутри его сидит SingleChunk, в котором сидит Chunk, и про него известно, что он пустой. Ну окей, ну покажите мне, что было-то. А не показывают. Там, конечно, цикл, но цикл навалян через рекурсию (типа так круче), а рекурсия оптимизирована через трамплин. В результате стектрейса нету, промежуточные данные не видны, Message не виден, потому что это макрос. А откуда вызвали, тоже непонятно, потому что трамплин, и весь стектрейс проебан.
И вот каким-то чудесным образом я где-то замечаю, что сервер-то послал HTTP 400. Ну правильно. И, конечно, в таком случае никакого джейсона. Но http4s на это все кладет с высокой колокольни, и начинает "парсить джейсон".
Ну на эту тему даже тест есть. Только этот тест не ловит HTTP 400, а ловит ошибку. Ага, ошибка! Ура.
Такие дела.
А внутри cats, свободные монады, IO монада, завернутая в EitherT.
А смысл?! Если HTTP 400 вы не ловите.
Что-то после раста все это смешно выглядит.
no subject
Date: 2019-10-22 05:51 am (UTC)no subject
Date: 2019-10-22 01:36 pm (UTC)no subject
Date: 2019-10-22 02:17 pm (UTC)no subject
Date: 2019-10-22 02:19 pm (UTC)no subject
Date: 2019-10-22 02:28 pm (UTC)Now, why it thinks JSON should be there. Maybe the server filled the headers first, in anticipation what the type of response is going to be, then later figured out the request is malformed, and aborted with HTTP 400 (Bad Request) without having cleared the header.
If the headers don't say that, then, of course, the client-side pipeline is broken.
no subject
Date: 2019-10-22 02:39 pm (UTC)no subject
Date: 2019-10-22 03:51 pm (UTC)no subject
Date: 2019-10-22 05:03 pm (UTC)no subject
Date: 2019-10-22 06:29 pm (UTC)no subject
Date: 2019-10-22 06:39 pm (UTC)no subject
Date: 2019-10-22 06:38 am (UTC)no subject
Date: 2019-10-22 01:37 pm (UTC)no subject
Date: 2019-10-22 05:31 pm (UTC)Непонятно только, что, неужто на Расте нельзя взять пустой буфер?
no subject
Date: 2019-10-22 06:35 pm (UTC)no subject
Date: 2019-10-23 12:04 am (UTC)no subject
Date: 2019-10-23 02:01 am (UTC)no subject
Date: 2019-10-22 05:40 pm (UTC)no subject
Date: 2019-10-22 06:34 pm (UTC)no subject
Date: 2019-10-22 06:38 pm (UTC)no subject
Date: 2019-10-22 06:29 pm (UTC)Эээ.. так и до плюсов докатиться можно ;)
no subject
Date: 2019-10-23 03:41 pm (UTC)А вам уже говорили, что когда ваши труды по пропихиванию монадушек в массы увенчаются успехом - массы вам такое небо с овчинку functional style устроят, что вы проклянете тот день когда впервые услышали о монаде?
Ну так вот вам первые ласточки, enjoy.
no subject
Date: 2019-10-23 05:02 pm (UTC)"Монада - это вычисление с побочными эффектами. Например, Option - это вычисление, у которого не всегда есть значение".
Это все как бы умники несут. Я не знаю, если им всем рассказывать, какие они тупые... вот у вас красиво получается, а мне как-то неудобно.
no subject
Date: 2019-10-23 07:52 pm (UTC)ох-хохо...
ну что ж - brace yourself for impact
no subject
Date: 2019-10-23 08:02 pm (UTC)Сегодня какой-то долбоеб впаривал machine learning ranking, и там у него flatten в одной из коробочек блок-схемы.