1. PHP / Говнокод #15813

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    function commerce_auction_dividable($big, $small) {
      $div = $big / $small;
    
      if (!is_numeric(strpos($div, '.')) === TRUE) {
        return TRUE;
      }
      return FALSE;
    }

    https://drupal.org/node/1721568

    Запостил: Int, 22 Апреля 2014

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

    • А где даты?
      Ответить
    • > is_numeric(strpos(...))
      Это такая проверка на вхождение одной строки в другую? :)
      Ответить
      • проверяет, не число ли это с плавающей точкой...
        в данном контексте
        Ответить
        • Не, это то понятно. Я про саму конструкцию is_numeric(strpos($s1, $s2))
          Ответить
          • Да. strpos если не находит подстроку возвращает FALSE. А может найти нужную подстроку на позиции 0. Что, как не трудно догадаться, может трактоваться как FALSE. Правда код избыточен. Хватило бы и strpos($s1, $s2) !== FALSE
            Ответить
            • Хватило бы return !($big % $small)
              Ответить
              • $big = 1.5; $small = 0.5;
                Ответить
                • Действительно, не хватило бы: http://ideone.com/dZrVoh

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

                Вы же не любите нытье про прыщеговно?
                Ответить
                • >нытье про прыщеговно?
                  По моим наблюдениям питон неплохо работает на обоих-трёх платформах.
                  Ответить
                  • У анонимба жалобы по большей части на инфраструктурные проблемы - надо собирать либы под вендой и т.п.

                    Ну и часть концепций, таких как stdout, на винду хуй портанешь. Либо выводишь в кастрированной кодировке, поддерживающей только текущий язык. Либо выводишь юникод через WriteConsole, но теряешь поддержку пайпов. Оба способа - жопа. Остается, походу, детектить куда направлен вывод (в пайп или в консоль), и юзать соответствующий способ...
                    Ответить
                    • >Либо выводишь юникод через WriteConsole, но теряешь поддержку пайпов.
                      О_о
                      Нет, ну проблема решаема. curl, например, тоже смотрит, куда выводит.

                      >У анонимба жалобы по большей части на инфраструктурные проблемы - надо собирать либы под вендой и т.п.
                      У меня батхерт на долбоёбов, которые этот вариант не предусмотрели, а теперь сидят и посмеиваются над репортами вендоюзеров.
                      Ответить
                      • > О_о
                        WriteConsole fails if it is used with a standard handle that is redirected to a file. If an application processes multilingual output that can be redirected, determine whether the output handle is a console handle (one method is to call the GetConsoleMode function and check whether it succeeds). If the handle is a console handle, call WriteConsole. If the handle is not a console handle, the output is redirected and you should call WriteFile to perform the I/O.

                        http://msdn.microsoft.com/en-us/library/windows/desktop/ms687401%28v=vs.85%29.aspx
                        Ответить
                      • > curl, например, тоже смотрит, куда выводит
                        На самом деле, даже в линупсе некоторые тулзы смотрят, куда выводят... Тот же дифф в консоли цветной и красивый, а когда перенаправишь в файл - чистый текст. Проблема решаемая, согласен.
                        Ответить
                        • На винде питон тоже немного смотрит:
                          >py -3 -c "import sys; print(sys.stdout, file=sys.stderr)
                          <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp866'>
                          >py -3 -c "import sys; print(sys.stdout, file=sys.stderr)" > test
                          <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1251'>
                          Ответить
                          • Нужно, чтобы он не немного смотрел, а таки блядь работал с юникодом в 2014-то году.

                            На двойке веселее
                            >py -c "import sys; print sys.stdout.encoding"
                            cp866
                            >py -c "import sys; print sys.stdout.encoding" > test
                            None

                            Только не пишите, что двойка не нужна.
                            Ответить
                          • Ну они одну из альтернатив и запилили: "Либо выводишь в кастрированной кодировке, поддерживающей только текущий язык."

                            Жопа в том, что, емнип, питон бросает исключение, если символ непредставим в этой кодировке...
                            Ответить
                            • Которая вылетает с "UnicodeDecodeError" по поводу и без повода?
                              Ответить
                              • Угу.

                                Кстати почему Decode? Здесь же преобразование из юникода в указанную кодировку, т.е. encode().
                                Ответить
                                • Да, ты прав.

                                  Что за херню я только что раскопал?

                                  In [104]: ord('б')
                                  ---------------------------------------------------------------------------
                                  TypeError                                 Traceback (most recent call last)
                                  <ipython-input-104-2587d6ea5f5d> in <module>()
                                  ----> 1 ord('б')
                                  
                                  TypeError: ord() expected a character, but string of length 2 found
                                  Ответить
                                  • Байтстринг не понимающий юникода. В тройке - нормально. В двойке - только как u'б'.
                                    Ответить
                                    • Но почему?

                                      Кстати, литералы байтстрингов в питоне - такое говно, что лучше их вообще не юзать.
                                      Ответить
                                      • > Но почему?
                                        Ну тебе лучше знать, ты ж питонист :)

                                        Но вроде как в двойке литерал без пометок - это байтстринг (а в байтстринге эта буква действительно записана двумя байтами, ибо исходник в utf-8), а в тройке - юникодстринг (и там все заебись).
                                        Ответить
                                        • >Ну тебе лучше знать, ты ж питонист :)
                                          Нет, я не знаю.
                                          In [110]: len('б')
                                          Out[110]: 2

                                          Это какие-то внутренние потроха ipython-а.

                                          >ибо исходник в utf-8
                                          Но stdin/stdout-то в байтовых кодировках?
                                          Ответить
                                          • > Но stdin/stdout-то в байтовых кодировках?
                                            Ну у меня в линухе stdin/stdout по-умолчанию в utf-8.

                                            Переключился на cp1251:
                                            python2
                                            >>> len('хуй')
                                            3
                                            >>> ord('б')
                                            225
                                            
                                            python3
                                            >>> len('хуй')
                                            3
                                            >>> ord('б')
                                            1073
                                            Откуда в виндовой консоли взялся utf-8 - х.б.з. Видимо реально ipython выпендривается.
                                            Ответить
                                            • Вот и говорю, что байтолитералами лучше не пользоваться вообще. Прикол с rot13 кодировкой как бы подтверждает.
                                              Ответить
                      • Если остальные проблемы - программерские, и программеры попиздят, но как-нибудь их решат, то отсутствие бинарных реп и проблемы с юникодом в консоли - это уже проблемы юзера, который в питонопроблемы вникать по определению не хочет.
                        Ответить
                    • >Либо выводишь в кастрированной кодировке, поддерживающей только текущий язык.
                      Я писал уже, они до сих пор не могут запилить поддержку cp65001 даже в повершелле. Что-то им мешает. Это, что ли? http://bugs.python.org/issue1602 На 2.7 65001 не опознается.

                      Теги: питон, прыщеговно.
                      Ответить
                    • У анонимба жалобы по большей части на собственную тупость и неосиляторство.

                      В чем он мастак, так это с видом знатока вести пространные, но общие и без всякой конкретики разлагольствования на любые темы. Таких еще называют диванными теоретиками.
                      Ответить
                      • Пи, ну может у тебя со свежим взглядом получится запустить питон с юникодовой консолью под виндой или нарисовать бинарный репозиторий. А то ты пока только на звание peasedoorball-а тянешь.
                        Ответить
                      • А как тебя называют, мань? Жава üбер аллес? Яволь!
                        Ответить
                  • Прыщи из глаз выведи.
                    Ответить

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