Фил Ранжин
ну это история не про фп головного мозга. Она про неспособность признать ошибку и сменить подход
Фил Ранжин
т.е. из за фп изначльно не тот подход взят - норм, быстро понял что не катит и поменял
Фил Ранжин
я вообще хз, когда первый же выбранный подход к решению задачи был у меня верным
Фил Ранжин
но вот что я точно знаю, " 30 разных типизированных результатов" тут любой вменяемый человек остановился бы
Anonymous
я вот хотел бы вам скинуть пример ФП головного мозга, но там прям мякотка алгоритма. Поэтому общо и на словах без деталей Есть продакт манагер, который оформил что он хочет в виде человекочитаемого псевдоязыка, типа Если есть глобальный оверрайд - возьми его Если есть наш офер из вайтлиста, возьми его Если нет, то поищи вот тут и умножь на какие-то числа. Ну и далее в таком же духе строк 30. Предельно понятный список шагов, который оформляется в ориентированный граф. В графе может быть более одного пути из точки А в точку Б и в точке Б есть разница куда пойти в зависимости от пути которым мы попали в эту точку. Но в целом ничего сложного изобразить. И вот короче ебанутый мудак это оформил в виде оЧеНь ФунКциОНалЬНоГо алгоритма. Последовательность правил, которыые фолдятся с пустым результатом. То есть если первое правило отработало (например про глобальный оверрайд) остальные будут скипнуты. Но не всё так просто. Ведь представление графа в виде последовательности изоморфно обходу графа, способов тыщи. И вот тут встал вопрос. Наш-то ебанутый умеет только в ФунКциОНалЬНыЙ фОЛд. Поэтому чтобы изобразить сложные взаимосвязи, внедрил "нетерминирующее правило", которое позволяет не прекращаеть работу "фолда" и фолдить дальше, потому что правило может быть перетёрто другим правилом. Но не все правила могут перетирать другие правила, поэтому ебанутый сделал 30 разных типизированных результатов, а чтобы изобразить исключения, проверяет в последних правилах резульат работы предыдущих, и если тип результата ОСОБЕННЫЙ, то и результат будет ОСОБЕННЫЙ И вот короче вот так 30 строк банальной бизнес логики превратились в 2000
Так дурака если научишь Богу молиться, он же лоб расшибет. Но ты сделал мой день.
Roman
я вот хотел бы вам скинуть пример ФП головного мозга, но там прям мякотка алгоритма. Поэтому общо и на словах без деталей Есть продакт манагер, который оформил что он хочет в виде человекочитаемого псевдоязыка, типа Если есть глобальный оверрайд - возьми его Если есть наш офер из вайтлиста, возьми его Если нет, то поищи вот тут и умножь на какие-то числа. Ну и далее в таком же духе строк 30. Предельно понятный список шагов, который оформляется в ориентированный граф. В графе может быть более одного пути из точки А в точку Б и в точке Б есть разница куда пойти в зависимости от пути которым мы попали в эту точку. Но в целом ничего сложного изобразить. И вот короче ебанутый мудак это оформил в виде оЧеНь ФунКциОНалЬНоГо алгоритма. Последовательность правил, которыые фолдятся с пустым результатом. То есть если первое правило отработало (например про глобальный оверрайд) остальные будут скипнуты. Но не всё так просто. Ведь представление графа в виде последовательности изоморфно обходу графа, способов тыщи. И вот тут встал вопрос. Наш-то ебанутый умеет только в ФунКциОНалЬНыЙ фОЛд. Поэтому чтобы изобразить сложные взаимосвязи, внедрил "нетерминирующее правило", которое позволяет не прекращаеть работу "фолда" и фолдить дальше, потому что правило может быть перетёрто другим правилом. Но не все правила могут перетирать другие правила, поэтому ебанутый сделал 30 разных типизированных результатов, а чтобы изобразить исключения, проверяет в последних правилах резульат работы предыдущих, и если тип результата ОСОБЕННЫЙ, то и результат будет ОСОБЕННЫЙ И вот короче вот так 30 строк банальной бизнес логики превратились в 2000
Красиво. А переписать можно?
Ayrat
Красиво. А переписать можно?
придётся, потому что уже сейчас не поддерживаемо
Ayrat
бизнес хочет новые фичи, а там только плакать над кодом
Roman
придётся, потому что уже сейчас не поддерживаемо
Исполняется на кластере, я надеюсь?
Anonymous
я вот хотел бы вам скинуть пример ФП головного мозга, но там прям мякотка алгоритма. Поэтому общо и на словах без деталей Есть продакт манагер, который оформил что он хочет в виде человекочитаемого псевдоязыка, типа Если есть глобальный оверрайд - возьми его Если есть наш офер из вайтлиста, возьми его Если нет, то поищи вот тут и умножь на какие-то числа. Ну и далее в таком же духе строк 30. Предельно понятный список шагов, который оформляется в ориентированный граф. В графе может быть более одного пути из точки А в точку Б и в точке Б есть разница куда пойти в зависимости от пути которым мы попали в эту точку. Но в целом ничего сложного изобразить. И вот короче ебанутый мудак это оформил в виде оЧеНь ФунКциОНалЬНоГо алгоритма. Последовательность правил, которыые фолдятся с пустым результатом. То есть если первое правило отработало (например про глобальный оверрайд) остальные будут скипнуты. Но не всё так просто. Ведь представление графа в виде последовательности изоморфно обходу графа, способов тыщи. И вот тут встал вопрос. Наш-то ебанутый умеет только в ФунКциОНалЬНыЙ фОЛд. Поэтому чтобы изобразить сложные взаимосвязи, внедрил "нетерминирующее правило", которое позволяет не прекращаеть работу "фолда" и фолдить дальше, потому что правило может быть перетёрто другим правилом. Но не все правила могут перетирать другие правила, поэтому ебанутый сделал 30 разных типизированных результатов, а чтобы изобразить исключения, проверяет в последних правилах резульат работы предыдущих, и если тип результата ОСОБЕННЫЙ, то и результат будет ОСОБЕННЫЙ И вот короче вот так 30 строк банальной бизнес логики превратились в 2000
А сколько у тебя ушло времени, чтобы разобраться этом?
Roman
Бля
Ayrat
А сколько у тебя ушло времени, чтобы разобраться этом?
неделя где-то с чтением док и общением с товарищем, который уже полгода в теме
Ayrat
Ой, ща историю расскажу случилась вот прям на выходных.
Ayrat
Это неделя в дебаггере?
да, тестов ещё не было ВООООБЩЕ, поэтому я в основном тесты писал и у бизнеса сверял инпут/аутпут
Vladislav
я тут 5 часов устанавливал макс ос и vmware на комп мобильная разработка богата на задачи
Ayrat
до рефакторинга БЛ надо тест сьют иметь огромный
Ayrat
иначе пизда
Ayrat
ТАК ВОТ ИСТОРИЯ (ща буду долго писать)
Anonymous
Или ты перепишешь заново?
Ayrat
(я ж написал)
Anonymous
Опоздал
Ayrat
пока что соточка сценариев, но если охватить все, то будет я думаю около 500
Ayrat
это всё про ценообразование там много нюансов
Anonymous
Ну вот это люди ебпнутые бывают, вот это да. И ведь все лет по 10 в индустрии.
Vladislav
да, тестов ещё не было ВООООБЩЕ, поэтому я в основном тесты писал и у бизнеса сверял инпут/аутпут
Знакомая херня, я так смотрел индусский код из сша 20 летней выдержки который из джавы на J# портанули
Vladislav
Только я смотрел алгоритмы отгрузки паллет
Vladislav
Потратил 2 недели
Vladislav
@omgszer спать хочется
Ayrat
короче, история. В мой кластер влетает порядка 300-400М евентов в день. А даунстрим умеет в 15М в день, потому что хз почему. Говорят не могут больше обработать. При этом у них ДВА кластера в двух ДЦ. Я думал для фейловера, типа НАДЁЖНОСТЬ 100500 девяток, хуй там. это hot-hot реплики одной логики, СПЛИТЯТ НАГРУЗКУ БЛЯТЬ. То есть мой кластер (который я недавно переписал) кидает им в два топика в двух разных ДЦ по 7.5М в день каждый. И не больше, иначе они вопят что я их зафлуживаю... Ну короче всё работало ок в продакшне, как тут приходит письмо в пт вечер - типа у нас тут лаг невъебенный, не справляемся. Смотрю метрики, всё ок. Пишу - идите нахуй. В ответ - вы паблишите в одну партицию в топике, у нас ВЫДЕЛЕННЫЙ консумер не ВЫТЯНЕТ. В этот момент я чуть не охуел, пошёл чекать партиции. Во-первых, на 7.5М в день у них 45 партиций (почему 45-то???). И они в своём йоба кластере кидают по ВЫДЕЛЕННОМУ консьюмеру на каждую. Несложная наколеночная математика говорит о невъебических 2RPS на процесс. Я где-то уже здесь немного охуел, но продолжил изыскания. (тут надо сказать что свои 400М евентов я читаю с 3х топиков, на каждом топике по сотке партиций, но консумер на каждый топик у меня ровно 1, а не 100, потому что нет смысла иметь больше, кафка там десятки тысяч месаджей может засасывать в наносекунду и делает это раундробином с каждой партиции равномерно). И ещё уточнение. кафка по умолчанию паблишит раундробином между партишнами если нет ключа И нет партишнера кастомного. Если есть ключ, но нет партишнера, то по хешу ключа. Ключ у нас есть, партишнера нет. Пошёл смотреть чо за ключ - казалосьб бы рандомный гуид. А вот хуй, этот кусок кода я портанул с прошлой уёбищной версии и там чувак использует кастомную псевдорандомную криптографию из левой либы чтобы сделать свои гуиды. И это работало потому что него таки блять был кастомный партишнер который я выбросил нахуй при переписывании! А гуиды нихуя не рандомные и хеширование кидает их на 99% в одну партицию. Короче, я всё почнил, но тут две беды столкнулись. Дауны на даунстриме, которые блять не могут обработать 2 месаджа в секунду. И ещё один даун который писал это до меня и придумал свой рандом. Хотя можно было выкинуть нахуй и партишнер и блять ключи в месадже для кафки и позволить драйверу кидать месаджи по дефолту между партициями раунд робином
Vladislav
Ладно они с кафкой обосрались но кастомные гуиды это пиздец
Vladislav
Зачем
Vladislav
Ещё и рандом свой
Ayrat
Да, я каждый день открываю новое днище про волмарт
Romɑn
Везунчик
Ayrat
Везунчик
А какое днище открыл сегодня ты?
Диёр
2rps? Да, это жёстко
Ayrat
2rps? Да, это жёстко
это прям ХАЙ ЛОАД
Roman
А какое днище открыл сегодня ты?
Я одно открыл, но писать лень
Romɑn
А какое днище открыл сегодня ты?
Никакого У меня все ровно Оффер принимаю
Ayrat
два кластера, каждый по 40 тачил.
Vladislav
Кто-то посчитал что он дохуя Кнут и запилил алгоритм распределения сообщений, но он не кнут а пидор а итоге
Romɑn
куда офер?
Приму скажу, но не известное
Ayrat
Кто-то посчитал что он дохуя Кнут и запилил алгоритм распределения сообщений, но он не кнут а пидор а итоге
ну у него псевдорандомный гуид и особый партишнер который с особой хеш функцией. И всё это только для того чтобы сделать то, что умеет делать кафка из коробки если ей не мешать
Romɑn
Ф?
Нет. Там уже что-то есть, на жабе. Будем смотреть куда дальше.
Roman
Да, именно он
Какой успешный молодой человек
Ayrat
кстати про преобразование несложных иф-елсов в пОсЛЕдоВАтелЬНостЬ фолдов тоже он
Ayrat
он вообще всё до чего прикасался превращалось в говно
Vladislav
А какое днище открыл сегодня ты?
Эмулятор иос в студии жопа лагающая, в итоге чтобы подключать айфон к компу на винде я поставил vmware с macOS. Заработает ли проброс устройства я ещё не проверял. А, ну из хорошего - у меня отрисовываются нормально гифки с гитлером на андроиде.
Ayrat
уникальный человек
Romɑn
А какое днище открыл сегодня ты?
А не, было кое-что. Мой дата-сервер-скраппер работает слишком быстро и слишком быстро же скраппит. Сегодня пришлось его тормозить.
Romɑn
Но это мое родное говно
Диёр
Мб кто помнит у меня код в облаке битбакета лежит и битбакет дико тормозил. Написали саппорту, саппорт завёл тикет. Недавно тикет просто пропал, саппорт ничего не ответил, но битбакет начал работать ощутимо быстрее.
Диёр
Интересно что там было
Bonart
он вообще всё до чего прикасался превращалось в говно
Все за что Мидас берется, превращает он в говно. А если за говно берется, то просто тратит меньше сил.
Doge
В первую очередь это нужно для компиляции зависимых сборок. А про рантайм — это уже сбоку, но тоже верно.
Это понятно, просто хотелось описать кейс, когда работа с этими атрибутами может прикладному разработчику понадобиться.
Doge
я вот хотел бы вам скинуть пример ФП головного мозга, но там прям мякотка алгоритма. Поэтому общо и на словах без деталей Есть продакт манагер, который оформил что он хочет в виде человекочитаемого псевдоязыка, типа Если есть глобальный оверрайд - возьми его Если есть наш офер из вайтлиста, возьми его Если нет, то поищи вот тут и умножь на какие-то числа. Ну и далее в таком же духе строк 30. Предельно понятный список шагов, который оформляется в ориентированный граф. В графе может быть более одного пути из точки А в точку Б и в точке Б есть разница куда пойти в зависимости от пути которым мы попали в эту точку. Но в целом ничего сложного изобразить. И вот короче ебанутый мудак это оформил в виде оЧеНь ФунКциОНалЬНоГо алгоритма. Последовательность правил, которыые фолдятся с пустым результатом. То есть если первое правило отработало (например про глобальный оверрайд) остальные будут скипнуты. Но не всё так просто. Ведь представление графа в виде последовательности изоморфно обходу графа, способов тыщи. И вот тут встал вопрос. Наш-то ебанутый умеет только в ФунКциОНалЬНыЙ фОЛд. Поэтому чтобы изобразить сложные взаимосвязи, внедрил "нетерминирующее правило", которое позволяет не прекращаеть работу "фолда" и фолдить дальше, потому что правило может быть перетёрто другим правилом. Но не все правила могут перетирать другие правила, поэтому ебанутый сделал 30 разных типизированных результатов, а чтобы изобразить исключения, проверяет в последних правилах резульат работы предыдущих, и если тип результата ОСОБЕННЫЙ, то и результат будет ОСОБЕННЫЙ И вот короче вот так 30 строк банальной бизнес логики превратились в 2000
А что мешало сделать вполне себе ФП, но с каким-нибудь StateT?
Doge
(хотя нафига StateT в скале, где и так можно в мутабельность, но да ладно, может ссылочной прозрачности кому-то хочется)
Vasily
Vasily
Как же похорошела Москва при Собянине
Romɑn
Как краснодар только южнее
Ayrat
В Краснодаре в центре очень даже приятно. В районе Красной. Но во многих других местах можно орать в голосину.
Анна
Не, ну до Минска ещё далеко 🙃
Vasily