1. Python / Говнокод #17487

    −109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    class QuerysetResponse(object):
        """
            вариант респонса для фильтрации гридов или диктселекфилдов
            используя механизм инструкций
        """
        def __init__(self, queryset, application, root=None):
    
            self.root = root or "data"
    
        def __new__(cls, *args, **kwargs):
            return super(cls, cls).__new__(cls)(*args, **kwargs)
    
        def __call__(self, queryset, application):
            dict_list = []
            pack = get_pack_instance(application)
            for item in pack.list_columns:
                if isinstance(item, (list, tuple)):
                    dict_list.append(item[0])
                elif isinstance(item, dict) and item.get('data_index'):
                    dict_list.append(item['data_index'])
            self.dict_ = dict_list
            if not queryset:
                queryset = []
    
            return PreJsonResult(dict(rows=list(queryset),
                total=len(queryset)), dict_list=self.dict_).get_http_response()

    self.root не используется, ну, это видно. QuerysetResponse "инстанцируется" во всем проекте один раз.
    Мне бы такое даже в голову не пришло.

    Запостил: pycz, 21 Января 2015

    Комментарии (26) RSS

    • Какойто fixed point constructor.
      Ответить
      • Можно про это по-подробнее, не гуглится что-то. Что-то функциональное? О чем вообще?
        Ответить
        • fixed point - это про функции, такой точкой называется ситуация когда f(x)=x. Конструкто - ну это конструктор класса. Есть например fixed point combinators, Y-combinator - самый известный из них. Ну а тут выглядит пожоже на попытку соорудить конструктор с неподвижной точкой: сколько раз его не вызови - все равно одно и то же получится. (ну это не по-настоящему, просто выглядит похоже на попытку).
          Ответить
        • У меня Y-КОБЕНАТОР. Сразу скажу что против wvxvw ничего не имею. Просто давно хотел высказаться по этому вопросу.

          Всё начинается с того что мудак-функциональщик читает какую-нибудь «умную» книгу типа Little Schemer. Ну обычно хуже того: поциент узнает про самый лучший в мире язык хаскель. И во всяких быдлосайтах и говноблогах типа хабры он черпает свои знания.
          Он долго тужится, пытаясь вникуть в суть буковок и однажды он вроде что-то там понимает. И тут начинается срашное: эта пиздота лезет на форумы и выплескивает свой ментально-функциональный гной на ничего не подозревающих окружающих, обязательно делая это наиболее ублюдочным способом: на языке хаскель или лисп.

          «Ах, вы знаете господа я давеча читал про комбинатор неподвижной точки. Ах, ах, божественно! Ах, какая прелесть лябмда-исчисление! Какой блеск, функции высшего порядка, рекурсия. Ах! Ах! Высший класс! Циклы? Ах, глупости! Императивщина. Фи, как скучно!»

          Просто и понятно ответить на законный вопрос недоумевающих читателей «зачем это простому человеку» тупой функциональный пиздюк не может. Вместо этого он начинает с важным видом дристать многабукав о том как всё нетривиально, и тупым идиотам на том форуме куда он пришёл конечно не понять генитальных задумок. Но как говорил Лев Толстой: «Самый верный признак истины — простота и ясность. Ложь всегда сложна и многословна.»

          Практического применения очередной абстрактной хуиты, функциональная мразь найти не может. Вместо того чтобы показать пользу от мозговыносящего уёбищного сгустка замыканий мудак начинает рассказывать басни о том как он научился считать факториалы и числа Фибоначчи, используя бесконечные ряды функций, которые генериуют и постоянно вызывают сами себя.
          Однако попроси применить Y-комбинатор, чтобы решить какую-нибудь нешаблонную задачку: найти бесконечную же сумму всех натуральных чисел, как тут же следует неловкая тишина и пердеж в лужу.
          Ответить
          • Проснулся, зашел с планшетки на гк... И облился жиром, вытекающим из экрана.

            В чем-то ты прав, копипаста-кун. Но ведь концепции, обкатанные на этих языках, всё же проходят и в мейнстрим (гц, замыкания, метапрограмминг и т.п.). Просто не надо искать в функциональщине серебряную пулю.
            Ответить
            • >В чем-то ты прав, копипаста-кун.
              Чего? Какой кун? Какая нахер копипаста? Доставило, да? Я сам только что написал, это свежак. Можете вбрасывать гы-гы.
              Давай сюда откуда это скопировано.

              Здается мне что Карри просто хотел выебнуться перед коллегами: а можно ли сделать что-то рабочее на одних только анонимных функциях? Вообще без имен? Циклы можно заменить рекурсией, как же редуцировать рекурсию?
              Это то чем так любят маяться на говнокоде: решать какую-то простенькую задачу, запредельно сумасшедшим, иррациональнейшим и извращённым образом, (семантика delete new от 1024--, шифрование на макросах и прочие примеры, которые уплыли из моей памяти). Может какое-то практическое применение и найдут, но делается это в первую очередь just for lulz & proof of concept.
              Ответить
              • Да не. Лямбда исчисление, ЕМНИП, совсем не для лулзов делали. Там просто строили самую-самую-самую тупую модель, в то же время обладающую полнотой, чтобы теоремы доказывать. Не будешь же ты их доказывать используя кресты?
                Ответить
                • >Да не. Лямбда исчисление, ЕМНИП, не для лулзов делали.
                  Это понятно.
                  >Но ведь концепции, обкатанные на этих языках, всё же проходят и в мейнстрим (гц, замыкания, метапрограмминг и т.п.)
                  Но речь конкретно об Y-кобенаторе. Какая в нём практическая польза, кроме показать как мы умеем на анонимных функциях строить рекурсию без хаков типа args.callee()?
                  Сделать из нерекурсивной функции рекурсивную, и бесконечно повторяющуюся? Добавить колобки до и после рекурсии?
                  Так это я и в цикле могу сделать, с большим, между прочим, успехом.
                  Ответить
                  • В кобенаторе - никакой, наверное. Проще дать функции имя.
                    Ответить
                  • Ну разве что вот такое, немного наркоманское применение: одну итерацию некого алгоритма оформляем как CPS; пишем к ней тесты; добавляем кокомбинатор, чтобы она начала работать в цикле. Вроде бы тесты на итерацию будут проще, чем на цикл в целом. Сомнительная мысль?
                    Ответить
                  • Именно Y-combinator? Польза для реализации виртуальных машин, т.как рекурсивные вызовы усложняют реализацию, а если их можно свести к комбинатору, то машина будет проще.
                    А в целом у комбинаторов? - польза в том, что с их помощью можно упрощать рекуррентные отношения. Зачем нужно упрощать рекуррентные отношения? - через них, например, можно вычислять более точно сложность алгоритмов (не привязываясь к асимптотике, а через приближение), другое их применение - формальная спецификация системы, статический анализ програм, как на когерентность так и на производительность. Если очень хочется, у меня есть где-то в закладках книжка про это, но мне она оказалась очень сложной.
                    Ответить
                    • > рекурсивные вызовы усложняют реализацию, а если их можно свести к комбинатору
                      С тем же успехом можно свести их к циклу или CPS.
                      Ответить
                      • В цикле нужно присваивание. Если присваивание уже есть в языке ВМ, то, конечно это не проблема, но классика жанра типа SECD - там его нету, если я не ошибаюсь. CSP - примерно похожая проблема, чтобы передать функцию аргументом самой себе, нам нужен специальный механизм позних связываний (let rec), если он уже и так есть в языке, то ок, а если нет - то причина точно такая же.
                        Ответить
                        • > нам нужен специальный механизм позних связываний (let rec)
                          Спасибо за объяснение. Я знал что вы не входите в категорию функциональных мудаков, которые не могут толком объяснить зачем нужны те вещи что они яростно форсят.
                          То есть причина по сути прежняя: редукционизм средств языка (VM), но признаюсь если б в js не было arguments.callee, то может я б и сам воспользовался комбинатором неподвижной точки (правда опять-таки не в практических целях, а изъеба ради).

                          > но классика жанра типа SECD - там его нету
                          Функциональщина ради функциональщины.
                          Ответить
                          • Ну а изначальная, по крайней мере, цель функциональных языков - это возможность автоматически доказать правильность програмы. То, что конкретные функциональные языки концентрируются на доказательстве одного вида свойств програмы, и игнорируют другие - это как бы их настоящая проблема. Но попытка максимально упростить систему, для того, чтобы с ней было проще работать автоматически мне не кажется глупой.
                            Ответить
                            • Я понял.

                              > Но попытка максимально упростить систему, для того, чтобы с ней было проще работать автоматически мне не кажется глупой.
                              Конечно нет! Минимализация базиса используется сплошь и рядом: свести все бинарные операции к nand, чтобы проще создавать схемы, да и сама по себе двоичная система кажется громоздкой, но машины работают именно в ней, поскольку она самая простая.
                              Risc-процессоры - ограниченное число команд (и даже x86 сводится внутри к risc с незапамятных времен), туда же языковой минимализм, где ставка делается не на сахар, а на композицию и абстракции, таким образом код легче парсить (опять-таки автоматически).

                              Но вот человеку написать что-то руками на брейнфаке, risc-инструкцими или в литералах Чёрча чрезвычайно трудно. И практически смысла никакого нет.
                              Ответить
                    • > через них, например, можно вычислять более точно сложность алгоритмов (не привязываясь к асимптотике, а через приближение)
                      А как это?
                      Ответить
                      • http://algo.inria.fr/flajolet/Publications/book.pdf

                        Лучше если я не буду это своими словами объяснять от греха подальше.
                        Ответить
                        • Боюсь, если уж вам книжка показалась сложной, то я вообще нихера в ней не пойму.
                          Хотя вообще познавательно.
                          Ответить
                          • Ну, понять мотивацию - не сложно, а вот непосредственно рассчеты - это то, чего я еще не учил просто, но еще год-два, и если все нормально, то смогу :)

                            Если все-таки своими словами мотивация заключается в том, чтобы формализовать понятие "примерно", примерно так же как лимиты / интегралы. Т.е. это позволяет автоматизировать, в какой-то степени, поиск аналитических решений для рекурсивно определенных функций. Например, сложность квиксорта можно описать как сложность(Х) = сложность(Х/2) + сложность(Х/2) + сложность_нахождения_пивота(Х) + сложность_партиции(Х). Если потом найти стабильную точку этой функции, то применив еще несколько операций для получения закрытой формулы (операции описываются в книжке), мы сможем получить очень хорошее приближение к настоящей скорости квиксорта зависящее от цены выполнения инструкции на конкретной машине, а не от констант и "не интерестных" факторов, которые обычно теряются при асимптотическом анализе.
                            Ответить
                            • Ширина кругозора авторов поражает.
                              Я думал там про лямбда-исчисление (кстати где там собственно Y-кобенаторы), а это реально книжка по математике применительно к computer science. Читаю сугубо ради неё.
                              Ну оно и понятно это ж Sedgewick, а не хухры-мухры. Изложение идёт в таком типично Кнутовском стиле c эпиграфами и ссылками в разнообразные области математики.
                              Ответить
                              • Y-combinatorа там нет, но сам процесс нахождения закрытой фомулы базируется на нахождении неподвижной точки (частным случаем которой является Y-combinator).
                                Ответить
              • Лол, так это не копипаста?

                З.Ы. Гц и замыкания, емнип, как раз с лиспа притащили (и сколько лет прошло, прежде чем народ перестал считать их ересью и беспонтовый переголовой?). Эрланг вообще для практики запилили серьезные дядьки из телекома.
                Ответить
                • >так это не копипаста?
                  Ну если набросить куда-нибудь до того как заиндексируется и протухнет, то она ею станет.
                  Только ссылочку сюда занесёте.
                  Ответить
    • > вариант респонса для фильтрации гридов или диктселекфилдов
      > используя механизм инструкций

      Юзая!

      Кульный коммент, я аппрувлю и промисю райтить в симилярном стиле.
      Ответить

    Добавить комментарий