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

    −88

    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
    # класс ЧегоТоТамПарсер(object):
    
        def _get_images(self, soup, basedomain):
            soup = soup.get_soup()
            fb_images = soup.findAll(name="meta", attrs={
                "property": lambda property: property and property.lower() == "og:image"})
            images = (soup.body or soup).findAll(name="img", src=True)
            get_source = lambda img: img.get("content") \
                                        if img.get("content", None) \
                                        else img.get("src") \
                                        if img.get("src").startswith("http://") \
                                        else "http://"+img.get("src").lstrip("/") \
                                        if img.get("src").startswith("//") \
                                        else urljoin("http://"+basedomain, img.get("src").lstrip("/"))
            return list(set(map(get_source, fb_images + images)))
    
        def get_images(self):
            try:
                if self.basedomain:
                    return self._get_images(self.soup, self.basedomain)
                return []
            except URLError:
                return []

    над этим работало коллективное бессознательное

    Запостил: nelson, 23 Ноября 2011

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

    • суп?!
      Ответить
    • LOL - soup = soup.get_soup();

      list(set( - особая уличная магия :)
      Ответить
    • Что там за косые слеши - это склейщики сишковых говномакросов?
      Ответить
      • Нет, перенос строки так побеждают, чтобы лямбда была в одну псевдостроку.
        Ответить
        • у него дельфехёрт просто
          F2069: Line too long (more than 1023 characters)

          особенно порадовала невозможность создать литерал "aaaa...aaa" длиной больше 255 символов
          E2056: String literals may have at most 255 elements (Delphi)

          искалеченные судьбы
          Ответить
          • >особенно порадовала невозможность создать литерал "aaaa...aaa" длиной больше 255 символов
            авотх*уй, еще как можно.
            садись крестоносец, два.
            Ответить
            • что же ты, пиписюнчик, минус поставил, а пример не привел, мысль не пояснил?
              или ты считаешь вариант с разбивкой "ааааа"+"ааааа" нихуя не тупым ограничением тупого дельфи, а наоборот, великим провидением божественного Вирта?
              Ответить
              • тупо - это читать литералы длиной over 9000 символов.
                для тебя это тупое ограничение для меня это благо, ибо читать неформатированное говно мне совсем не интересно.
                Ответить
                • Если в коде присутствуют запросы к БД, то ограничение - не айс. В ANSI C - 509 символов.
                  Ответить
                  • Ты пишешь запросы в 1 строку?
                    Или всё-таки через
                    "..." + 
                    "..."
                    ?
                    Ответить
                    • В сях можно в одну строку:
                      char* QUERY =
                          "select * "
                          "from anywhere "
                          "where something is null";
                      Это всё будет одной непрерывной строкой и не потребует никаких действий в runtime, я часто так делал.
                      Ответить
                    • Кстати, в C операция + для строк не имеет смысла. Нужно юзать strcat, а это уже не compile-time. В С++ с этим получше вроде.
                      Ответить
                      • чего получше
                        без рантайма + не сделать, это же операция над указателями
                        в с++ больше удобных и безопасных способов это сделать, разве что
                        Ответить
                        • Я довольно неплохо знаю C, а вот опыта работы с C++ у меня практически нет. Если обернуть части строки в std::string и складывать их, нельзя получить compile-time вычисление? Да, наверное, тут я погорячился.
                          Ответить
                          • если обернуть часть строки в std::string, то ты уже в рантайме создаёшь объект над константной строкой из .data - копирование этой строки в объект, затем в рантайме ты применяешь .operator +() для этого объекта и получаешь еще один объект std::string, который разместит в куче (или в некоторых реализациях при небольшой длине прямо в себе) результирующую строку
                            Ответить
                      • Для строк Дельфи - имеет.
                        А в сях... Ну, няшапроблемы, чё.
                        Ответить
                  • в C99 уже поболе
                    да и мой сишный компилятор 1989 года для моторолы 68к без проблем 1к литерал осиливает.
                    Ответить
          • Всё, Дельфи говно. Оно не может компилировать линии длиной более 1024 символов и литералы длиной более 255 символов. Я без этого жить же не смогу.
            Вот студия намного хуже - она не может компилировать более 128 вложенных друг в друга свичей.
            Ответить
            • намного хуже?
              U made my day

              128 вложенных свичей - разумные ограничения парсера вижуал студии
              гцц без проблем и 130 осиливает (только что проверил), только кому это надо

              а вот литералы по 255 символов - это, несомненно, современный язык в современной среде разработки и, несомненно, у производителя в 21 веке на то были основательнейшие причины - машины у школьников то не потянут!

              жду еще обличающих фактов о говноси
              Ответить
              • литералы по 255 символов - разумные ограничения парсера дельфи

                а вот 128 вложенных свичей - это, несомненно, современный язык в современной среде разработки и, несомненно, у производителя в 21 веке на то были основательнейшие причины - машины у школьников то не потянут!

                жду еще обличающих фактов о говнодельфи

                лень было писать своё, и так копипасты хватает
                Ответить
                • унылый ты
                  вопрос знатокам
                  дельфя когда делает 'aaaaaa'+'bbbbbb' размещает в программе конечную склеенную строку, или делает операцию "+" в рантайме?
                  Ответить
                  • а нахера? выражение-то константное!
                    Ответить
                    • что значит нахера
                      речь идёт о преодолении 255 байт
                      предлагают заводить не string (или какой там у них тип кастрирован и хранит в первом байте длину), а сишный аналог
                      раз сишный аналог, значит строка null-terminated и хранится где ей положено - либо в куче, если создаётся в рантайме, либо в .data, если компилятор её сам там размещает (как в С)
                      вот и вопрос, размещает ли он её в .data
                      Ответить
                      • > какой там у них тип кастрирован и хранит в первом байте длину
                        Бьярне, вы - тормоз

                        > размещает ли он её в .data
                        константное выражение где может размещаться? в BSS?
                        Ответить
                        • аттенсьон! поясняю мысль
                          'aaaa...a'+'bbbb...b' (каждый по 240 символов)
                          вариант 1) конпелятор, пользуясь помощью духов и административным ресурсом, понимает, что это мать их две константы и он прямо сейчас делает ахалай-махалай и достаёт из ширинки кролика размещает результат в виде единой строки в константном сегменте (в хексредакторе это будет непрерывной строкой aaaa.aaabbbbb..bb\0 длиной 240+240+1 символов
                          2) конпелятор понимает только строки по 255 символов (которых, как известно, should be enough for everyone) - а это охуенно правдоподобно, поэтому отдельно создает константную строку 'aaaa...aa', отдельно создает строку 'bbbb....b' (или может пользуясь своей магией их сразу оборачивает в тип string), затем в рантайме выполняет операцию + над этими строками string, чтобы получить где то в куче null-terminated массив символов и выдать указатель на оного
                          Ответить
                          • будет 1).
                            я сам удивился
                            Ответить
                            • для чистоты надо бы взять тысяча девятьсот затертый трубо паскаль и рассмотреть объектный файл
                              Ответить
                              • откуда затёртому турбо паскалю вообще знать про строки больше 255 символов
                                Ответить
                                • для этого и рассмотреть
                                  даже в затертом можно сделать не TP-string длиной в сегмент

                                  /me упорно игнорирует тот факт, что уже насрано объявлением шириной > (80 - индент) символов
                                  Ответить
                              • Да, это точно докажет убогость и отсталось дельфей.
                                Ответить
                      • > предлагают заводить не string (или какой там у них тип кастрирован и хранит в первом байте длину), а сишный аналог

                        Мальчик, ты тормоз. Строки в Дельфи уже лет 15 как хранят длину в int, имеют любую длину и всегда кончаются на ноль.
                        Ответить
                        • тогда это еще больше доставляет на фоне
                          E2056: String literals may have at most 255 elements (Delphi) - ошибка 2009 дельфей, судя по странице
                          Ответить
                          • Мальчик, ты говнокодер.
                            Литерал из >=256 символов надо разбивать на строки, а не писать в одну.
                            Ответить
                            • я узнал всё что хотел
                              в С/С++ строки переносятся без операции +, причем несколькими способами (использование \ в конце строки последним символом - один из них, на который ты сагрился по неопытности), а результат размещения результата очевиден
                              хорошо хоть теперь и для гуру дельфи очевиден результат в их замечательной среде
                              Ответить
                              • О ужас, в Дельфи для переноса строк надо писать плюсик! Да, всё, Дельфи говно, ты меня затроллил, у меня баттхёрт.
                                Ответить
                                • что за сарказм, тебя что, уже перестало раздражать, что дельфи - среда для школьников?
                                  Ответить
                                  • Это ты
                                    .
                                                                  ____                                                      
                                                         ,wM*"""       ""*Mw_        LOL I TROLL YOU                   _,we*
                                                      ,#"                    "W,                                       f    
                                                    ,"                          *_                                     f    
                                                   /                 __wwwwwww   'C                              ____  |    
                                                  ,                 we**********" ]        LOLLOLLOLLOLLOLLO,#"""  `` `$    
                                                  f                            ,_  $       LOLLOLLOLLOLLOLa"LOLLOL     dC   
                                                 qC                   /`'          ]       LOLLOLLOLLOLLa"OLLOLLOL      L   
                                            _awwwdL                    /\     /\    L      LOLLOLLOL,a*"LLOLLOLLOL      k   
                                         ar"__,_awL                   "\/     \/    L      LOLLOL,wf`LLOLLOLLOLLOL      |   
                                       a@m""      $                 7x  v_______] ~ L_     LOLL,M"LLOLLOLLO #*@**~~~-gr |   
                                      #Mww_       ]                .    ,|||||||\" gC ```""""MMmw~wwwwwwwgM*k*LOLLOLa"  $   
                                      F    `""**~wwb_,,,_____           [[[[[[[[[  f      ,#"LLOLLOLLOL,#"  A $LOL #    $   
                                      L             K        ``"""""*****Mwwww_aQ,#,___ ,#"LOLLOLLOLLOa*`LOLLOLLOL#     [   
                                     j               h_                  ,d     ,"   ,a"*^ wwwwwwwwMGa,,_>*$    y"      $   
                                     ]                 ^w_              *    ,w*   a*`          ,N`      @w   p'        $   
                                      L                  `*ww,__        _,w*"   ,#"            m"       *` L,#          '"""
                                      $                           `"""""      a*             <@ww_,_      ,M`               
                                       L                                   ,M"

                                    Капча 6543
                                    Ответить
                          • Должен признать, флэйм не удался. Нападки и аргументы унылы и лишь проясняют неудобство няшечки во многих аспектах.
                            но на Delphi я писать ни за что не буду
                            Ответить
                            • > неудобство няшечки во многих аспектах
                              ?
                              Ответить
                              • 1. Ограничения на идентификаторы более суровы (чтобы упростить линкёру жизнь, видимо). По стандарту C89 в именах extern-функций можно не учитывать больше 6 символов.
                                2. Складывать константные строки произвольной длины в компайл-тайм теоретически нельзя (стандарт ограничивает, gcc помню поддерживает, но кидает ворнинг при превышении).
                                Ответить
                                • мсье ведь понимает перевод "as many as"
                                  какой компилятор необходимо использовать непосредственно тебе?
                                  вот у меня есть, например, mcc68k.exe, приходится использовать на работе для живых проектов - никаких C99 он не понимает, потому что был выпущен гораздо раньше, этот компилятор примерно современник турбо паскаля
                                  но у него нет ограничений в 509 символов константной строки
                                  равно как и нет ограничений в 6 уникальных символов для extern имён - мы бы все тут ебанулись на отличненько с этим тулкитом, если бы это было так
                                  соответствует ли он стандарту в плане "as many as" - конечно
                                  или ты чисто теоретически сделал вывод?
                                  про складывать строки произвольной длины я не понял
                                  сам же написал пример "aaa" "bbb" "ccc"
                                  а это ведь как раз часто применяется, особенно когда
                                  #define XNAME "SOME"
                                  #define XVER "001"
                                  #define XEXT ".fuck"
                                  #define FULL_XNAME XNAME XVER XEXT
                                  что не так то?
                                  Ответить
                                  • Я понял, длинные строки нужны для говномакросов.
                                    Ответить
                                    • всё верно
                                      для вычисления детерминанта матрицы 5х5 в школьной задаче их негде применить
                                      Ответить
                                      • Всие крутые ][аккеры используют макросы?
                                        Ответить
                                      • >>Я понял, длинные строки нужны для говномакросов.
                                        >всё верно
                                        Я умываю руки.
                                        Ответить
                                    • кстати
                                      вот вы хаете макросы, мол дерьмо, в хороших языках их нет
                                      навеял еще один вопрос
                                      в си я могу сделать так
                                      #ifndef SOMEVAL
                                      #define SOMEVAL 100
                                      #endif
                                      затем вызвать компилятор с аргументом -DSOMEVAL=200 и везде будет подставлено значение 200
                                      а какие варианты для решения такой задачи есть у альтернативной секты?
                                      Ответить
                                      • Расскажи сначала, для чего это.
                                        Ответить
                                        • #ifndef _DEBUG
                                          #define _DEBUG 0
                                          #endif

                                          #if _DEBUG
                                          #define _DEBUG_X 0
                                          #define _DEBUG_Y 1
                                          #define _DEBUG_Z 0
                                          // over 9000 целей, позволяющих отлаживать конкретные логические части приложения
                                          #endif

                                          // где то в приложении
                                          #if DEBUG_X
                                          // do dome debug logging tasks
                                          #endif

                                          т.к. на сишечке приложение собирается максимально компактное и желательно быстродействующее, я не могу собирать логи на каждый чих в релизной версии, только в дебажной, причем на небольшое множество чихов (зачем мне логи давно отлаженного и не изменённого кода)

                                          соответственно релизную и дебажную версию мне собирает компилятор, которому либо передаю -D_DEBUG=1, либо не передаю
                                          Ответить
                                          • Я всё равно не понял, что из этого нельзя сделать булевыми флагами компилятора.
                                            А булевые флаги в Дельфи есть.
                                            Ответить
                                            • только булевые?
                                              а -DAPPVERSION=1.2.3.4
                                              Ответить
                                              • а сравнивать можно?
                                                типа
                                                #if BOOST_VERSION >= 104700
                                                #else
                                                #endif
                                                Ответить
                                              • APPVERSION я умею только из ресурса смотреть.
                                                Булевые сравнивать нельзя.
                                                Можно только писать что-то типа
                                                {$IFDEF VER150} что означает, что версия компилятора 15.0 или выше.
                                                Для версий библиотек аналогично.
                                                Ответить
                                                • только булевые, значит
                                                  ой, а как же тогда сделать простейшую булевую операцию?
                                                  #if CASE1 || CASE3
                                                  // do 1
                                                  #else
                                                  // do 2
                                                  #endif
                                                  Ответить
                                          • >#if _DEBUG
                                            #define _DEBUG_X 0
                                            #define _DEBUG_Y 1
                                            #define _DEBUG_Z 0

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

                                              для проектов на С++ логирование давно сделано как надо и охуенно, или ты хочешь дать еще пару бесплатных советов? я послушаю
                                              Ответить
                                        • > для чего это
                                          На самом деле на это мега нужная вещь. Так сишное ПО настраивается под среду, в которой компилируется. Например, так можно указать, какие библиотеки присутствуют в системе, или с интеграция с какими из них нужна. К примеру, можно собирать программы с интерфейсом GTK или QT в зависимости от флагов компиляции.

                                          В Gentoo это фичи юзают по полной :)
                                          Ответить
                                      • >вот вы хаете макросы, мол дерьмо, в хороших языках их нет

                                        Как нет? В лиспе "макросы" такие, что сишные макросы сливают по полной. Так что больше чтоб не слышал, что в хороших языках их нет.

                                        В присутствии лисп, Nemerle, Boo и ещё некоторых языков Няшной сишке не пристало даже Някать, чтобы не позорится.
                                        Ответить
                                • >Складывать константные строки произвольной длины в компайл-тайм теоретически нельзя

                                  Это?
                                  http://ideone.com/3PbH9
                                  Ответить
                            • >Нападки и аргументы унылы и лишь проясняют неудобство няшечки во многих аспектах.
                              Ей пользуются только анимешники и задроты. Чем не аргумент?
                              Ответить
                  • строка сцепляется в момент компиляции
                    Ответить
          • и идентификаторы больше 255 символов не может! говнище какое!
            Ответить
            • На самом деле это всё херня по сравнению с сишными лимитами:

              The ANSI C Standard of 1989 requires implementations to allow as many as 31 characters in an *internal* identifier name, although they are allowed to allow longer names. But it only requires them to allow as many as 6 identifiers in an external name (e.g. a non-static function). The ISO C90 Standard (ISO/IEC 9899:1990) is identical to the ANSI C Standard if you ignore section numbering, so it's the same for ISO C.

              In C99 (ISO/IEC 9899:1999), the limits were increased to 63 and 31
              respectively, but hardly anyone uses C99-conforming compilers.

              Вот где настоящий трэш.
              Ответить
              • кстати багланд таким ограничением нарушил ISO 7185
                Ответить
    • Что люди не делают, лишь бы не использовать полноценные локальные функции.
      Ответить
      • Это да, а как вам функция
        def get_images(self):
        ?
        При условии, что _get_images не генерирует сиключений...
        Ответить
    • показать все, что скрытоvanished
      Ответить

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