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

    −102

    1. 1
    is_zipped = not request.args.get('is_zipped', "false") == "false"

    >>> bool("false")
    True
    >>> bool("False")
    True
    почему бы не сделать их ложью

    Запостил: orion, 12 Марта 2014

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

    • показать все, что скрытоНапиши этот код на "PHP", иначе я не пойму, над чем ржать...
      Ответить
    • Плюсанул.
      Т.е. ошибка в том, что язык чувствителен к регистру символов?
      Ответить
      • На самом деле, говно ли это, зависит от постановки задачи. Данный код любое значение входного параметра, кроме "false" (именно так) и кроме пустого (потому что его подменит второй аргумент метода get), посчитает за true. Т. е. и "False" будет true, и "0" будет true.
        Ответить
        • > Т. е. и "False" будет true, и "0" будет true.
          И это явное говно ;)

          Т.к. надо или делать интуитивно, или валиться с ошибкой.
          Ответить
      • показать все, что скрытоЗдравствуй, ублюдок.
        Готов к новым анальными приключениям? Если готов, то нагнись и раздвинь ягодицы.
        Ответить
    • > почему бы не сделать их ложью
      Потому что неинтуитивно, никому не нужно и вообще наркомания... А потом кому-нибудь захочется сделать ложью "No", "Нет", "Off", "0", "Нихуя", "Empty" и т.п... Такие идеи надо давить в зародыше :)

      Почему бы вместо этого не сделать типизированный парсер аргументов:
      is_zipped = request.args.get_bool('is_zipped', False)
      answer = request.args.get_int('answer', 42)
      some_shit = request.args.get('some_shit', 'default_shit')
      Ответить
      • А request.args.get всегда возвращает строку?
        Ответить
        • В моем примере - всегда, ибо слабая типизация и автокасты - зло. В реале - а хрен бы знал, скорее да, чем нет.
          Ответить
      • Кстати, а в сишке можно сделать ложью "False", или максимум - http://ideone.com/Xc8NS4
        Для тех, кто соберётся читать комменты после удаления с ideone:
        #include <stdio.h>
        #include <string.h>
        #include <limits.h>
         
        #define C (2 << CHAR_BIT)
         
        char* nullstring(char* tpl){
        	char* p = malloc(strlen(tpl) + 1 + C);
        	if(!p) return 0;
        	p = (size_t)p % C ? C + (size_t)p & ~(C - 1) : p;
        	strcpy(p, tpl);
        	return p;
        }
         
        int main(void) {
        	char* False = nullstring("False");
        	printf("False is %s", (char)False ? "True" : "False");
        	return 0;
        }
        Ответить
        • >Для тех, кто соберётся читать комменты после удаления с ideone:
          Это которые через фейсбук? Но он же следит!
          Ответить
          • Пускай следят и читают. Может, что-то умное в голову зайдет.
            Ответить
            • Он следит в смысле что он видит какие сайты ты посещаешь если на сайте есть их кнопка лайк или любой их скрипт.
              Ответить
              • Все верно. Я например, посещаю сайты с бесплатными сканами книг, выставки картин, сайты с классической музыкой, и тп. Не хотелось бы навязывать вкусы, но так как они сами навязывают мне свои куки, то быть посему. А вообще можно отключить куки не с посещаемого сайта, но как то в Firefox это криво работает.
                p/s/ открой в адблоке очередной посещаемый сайт - он будет пронизан скриптами facebook, google,yandex,odnoklassniki,vk и такой вот пищи названий до тыщи.
                Ответить
                • Есть подписка адблок, которая всю это поеботу блочит.
                  Ответить
                • А ведь не только куки... Где-то на хабре писали про возможность отследить пользователя за счёт кэширования.
                  Ответить
                  • Вызывает антирес ваш технический прогресс: что они делают с накопленной инфой? А где хранятся такие гигантские объемы инфы? Наверно, хранят со сроком годности, иначе пришлось бы все железо выдрать из земли под жесткие диски. Вот допустим, sms-ки же где-то хранят, а когда фсб просит распечатку, им присылают...
                    Ответить
                    • У гугла места как говна. На YouTube каждую минуту закачивают 35 часов видео. Для жестких дисков не нужно много железа, так как они не из железа.
                      Ответить
                      • Да хоть из папье-маше. Магнитные поверхности в любом случае содержат железо.
                        Ответить
                        • совсем не в любом
                          даже ферромагнетики - это не только соединения железа

                          информация в НЖМД записывается на жёсткие (алюминиевые или стеклянные) пластины, покрытые слоем ферромагнитного материала, чаще всего двуокиси хрома
                          Ответить
                        • показать все, что скрытоТебе нравится мой терпкий член?
                          Ответить
                  • > Где-то на хабре писали про возможность отследить пользователя за счёт кэширования.
                    оно? http://habrahabr.ru/post/64212/
                    Ответить
                    • http://habrahabr.ru/post/190488/ вот это
                      Ответить
                      • Это не кеширование, а етаг и возможно уже где-то пофикшено.

                        >Который легко убивается Incognito mode в Chrome и InPrivate в IE.
                        Ответить
                        • > Это не кеширование, а етаг
                          Как это не кеширование? Етэг - это часть механизма кеширования. Разве нет?

                          Ну если хочется чистого кеширования - сгенери чуваку джаваскриптик с уникальным id и отдай его с заголовками, пригодными для кеширования. На следующий раз, когда он зайдет, ты этот id сможешь отправить на сервер ;)

                          А вообще - раскури исходники evercookie, если тебе интересно. Там дохрена разных способов (приватный просмотр в ФФ, емнип, не пропускает ни одного, а вот очистка истории "за сегодня" не спасает, надо полную).
                          Ответить
                  • Это немножко не то, и баян.
                    Ответить
      • Еще добавлю из перла: '1' == 1, но '0x1' == 0.
        Ответить
      • Надо бы сделать нормальную, системную статью про недостатки слабой типизации.
        Ответить
        • Достаточно показать пару примеров из PHP.
          Ответить
      • >Потому что неинтуитивно
        а мне наоборот такое поведение показалось интуитивным(уточню - именно для "False") видимо слишком много в крови серебрапохапе

        >Почему бы вместо этого не сделать типизированный парсер
        чтобы добавить свои методы в стандартный словарь из built-in(args - dict) надо унаследоваться, а для этого придется немного перелопатить веб-фреймворк(у меня flask) и потерять совместимость. а писать отдельный парсер аля parser.get_bool(request.args, 'is_zipped', False) было лень.
        Ответить
      • на самом деле очень удобно, вот даже в хаскель завезли: http://hackage.haskell.org/package/acme-php-0.0.3/docs/Prelude-PHP.html
        Ответить
      • > А потом кому-нибудь захочется сделать ложью "No", "Нет", "Off", "0", "Нихуя", "Empty" и т.п...
        Видимо много кому захотелось, раз такое запилили в стандартную библиотеку)
        http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#dis tutils.util.strtobool
        Ответить
        • >distutils
          Для парсинга прыщеконфигов, вестимо.
          Ответить
    • >почему бы не сделать их ложью
      Потому, что питон - это не рнр, иди-ка ты нахуй со своей слабой типизацией.
      Ответить
    • https://bitbucket.org/dsupiev/thunderargs - я просто оставлю это здесь
      Ответить

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