"PHP" / Говнокод #26418 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
if ($input->search_text!=""){
		if ($input->search_text=="хуйня" or $input->search_text=="ХУЙНЯ" or $input->search_text=="Хуйня")
			$this->result.="У нас серьезная компания и мы всякой хуйни на сайте не держим.";
		else{
		if (strlen($input->search_text)<2)
			$this->result.="Строка поискового запроса должна состоять минимум из 2 символов.<br>Пожалуйста, измените Ваш запрос и повторите поиск.";
		else{
			$result.="Вы искали: <u><b>".$input->search_text."</b></u><br><br>";

Вот такие вот пасхалки у серьёзных компаний. И такой код.

Запостил: vistefan vistefan, (Updated )

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

  • серьезная компания с продуктом на пхп
    Ответить
      • В фейсбуке и ВК PHP только на фронте, а кроме того файсбук автивно продвигает питон
        Ответить
          • да. БОльшая часть вк написана олимпиадниками на сях, а вот фейсбцук

            Over 21% percent of overall codebase infrastructure is covered by Python at Facebook while rest is covered by Java, C, and C++ with 9%, 15%, and 55% respectively.
            Ответить
              • Конечно же это правда. Тебе просто обидно это признавать. Обидно и больно. Я тебя понимаю
                Ответить
            • Я не знаю. Но 16 место на швабре и 315 постов внушают доверие.
              Ответить
              • та он чванливый далпаёп, опухший от высокомерия
                Ответить
          • [quote]
            В один из таких моментов мы выделили целую группу, которая занималась тем, что искала разные неоптимальные штуки в PHP-скриптах и оптимизировала. Это происходило буквально «по капле»: здесь нашли процент, там нашли процент — несколько человек в течение месяца находили по проценту. В какой-то момент рядом оказался наш сишник einstein_man. Он решил посмотреть, что можно сделать: зашёл вечером, запустил Perf, нашёл пару проблем в экстеншенах PHP — и ускорил всё за пару вечеров на 13%!
            [/quote]

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

                Чуваки без профайлера, вслепую, что-то оптимизировали (видимо кавычки меняли), потом сишник (выделенный человек, вероятно единственный, кто знает си и умеет профилировать) все исправил.

                Это разве не ёбаный стыд?
                Ответить
                • > видимо кавычки меняли

                  Я так понял, что они ускоряли сишный код модуля. Какой смысл выжимать проценты из «PHP»?
                  Ответить
                  • "неоптимальные штуки в PHP-скриптах "

                    Они правили скрипты. Потом пришел сишник, и всё исправил
                    Ответить
                      • Ну вот, а ты гришь "серьезная"...

                        Вот например серьезная компания Netflix.

                        Там перформанс инженер напилил профайлер, который профилирует одновременно и нативный код, и жабу. И показывает "общий" стек и флейм граф. И программисты этим тулом у них пользуются.

                        У него про это ток был.
                        Ответить
                        • это и есть вышеопямнутый перф.

                          жабу он без мапов / frame pointer профилирует как гербейдж, для профилирования жабы с тем же flamegraph-выводом есть более удобный async-profiler, появившийся по следам
                          Ответить
                          • async тока на прыще работает (perf, впрочем, тоже), а фреймпоинтер жабы как тебе поможет? мапы все равно нужны
                            Ответить
                            • без него то ли вообще никак, то ли и с мапами никак, я не помню уже
                              Ответить
                              • фреймпоинтер нужен нативному коду чтобы раскручивать стек без наличия символов

                                с символами он не нужен

                                как он поможет джаве -- я не знаю, разве в JVM стек указывается с помощью регистра?
                                Ответить
                                • его тот самый Брендан Грегг для перфа завозил, вроде бы
                                  что там под капотом - извините, пока еще не настолько прошарен
                                  Ответить
        • «Байду» — это китайский поисковик.

          А «Badoo» — это очередной банальный сайт знакомств.

          Я читал заметки «Badoo» по хуйлоаду. Прочитал про их «Pinba engine» — средство мониторинга производительности сервера. Эти изобретатели реализовали «Pinba engine» как плагин к «MySQL», чтобы результаты можно было читать SQL-запросом.

          Я анскильный питух. Я не смог поставить «Pinba engine» ни на «MySQL», ни на «MariaDB», хотя плагины других производителей успешно ставил. Пробовал собирать из исходников. Всё компилируется, но только устанавливаю этот плагин в СУБД, как СУБД падает с сегфолтом. У них какой-то царский код, сильно зависящий от ключей компилятора.

          https://github.com/tony2001/pinba_engine
          Ответить
          • кодец у этого тони -- ок
            D->per_thread_request_pool[0] = (pinba_pool *)calloc(cpu_cnt, sizeof(pinba_pool));
            	D->per_thread_request_pool[1] = (pinba_pool *)calloc(cpu_cnt, sizeof(pinba_pool));
            	if (!D->per_thread_request_pool[0] || !D->per_thread_request_pool[1]) {
            		pinba_error(P_ERROR, "failed to allocate per_thread_request_pool structs. not enough memory?");
            		return P_FAILURE;
            	}
            Ответить
            • Вот пидорас. А потом из-за таких приходится новые планки докупать.
              Ответить
              • Представь себе ситуацию, когда [0] удалось аллоцировать, а [1] — нет. Из-за отказа в выделении места под [1] сработает условие и будет возвращено P_FAILURE, а [0] сам себя не освободит.
                Ответить
                • Я знаю. На это любят делать подъёбы на собеседованиях.
                  Ответить
                • Я в этом смысле не очень в сях, но вот вопрос: а почему нельзя было сразу выделить память под весь per_thread_request_pool из двух элементов?
                  Ответить
                  • Возможно, их освобождать надо по отдельности. Или реаллочить.
                    Ответить
                    • А что будет, если сделать calloc для всего per_thread_request_pool, а потом free(per_thread_request_pool[0])? Программу распидорасит?
                      Ответить
                      • Тогда per_thread_request_pool[0] будет элементом типа pinba_pool (без укококозателя) и во free() не пролезет. А если освободить сам per_thread_request_pool, то дальнейшие обращения к нему будут UB.
                        Ответить
                        • Точно, туплю, выделится же память под экземпляры.

                          А есть какие-то хитрые механизмы, чтобы выделить память типа для всего per_thread_request_pool, но чтобы внутри это были указатели?
                          Ответить
                          • Ну вообще можно сделать как-нибудь так:
                            pinba_pool *per_thread_request_pool[2] = {};
                            per_thread_request_pool[0] = calloc(2*cpu_cnt, sizeof(pinba_bool));
                            per_thread_request_pool[1] = per_thread_request_pool[0] + cpu_cnt;
                            
                            // Второй элемент второго пула:
                            per_thread_request_pool[1][1];
                            Ответить
                              • Лолблядь, я думал, там pinba_bool, а они выделяют pinba_pool. Какой багор )))
                                Ответить
                                • зачем нужно два per_thread_request_pool, если они все равно удаляют их содержимое вместе?

                                  Есди он per_thread_request_pool, то там лежит реквест? Тогда почему его удаляют командой pinba_pool_destroy?

                                  Блядь, ваша си такая служноя..
                                  Ответить
                                  • Может, решили не заморачиваться с адресной арифмантией. Может, задел на будущее, в котором может понадобиться выделять только один из этих пулов, например. Может, говнокод.
                                    Ну и нейминг уёбищный, конечно. Хотя бы «per_thread_request_pool[b]s[/s]» сделали…
                                    Ответить
                        • Кстати, free(&per_thread_request_pool[0]) можно написать в этом случае?
                          Ответить
                          • > &per_thread_request_pool[0]
                            Можно, но не нужно, это то же самое, что и просто «per_thread_request_pool» (если мы про «C», конечно).
                            С точки зрения корректности вызова — во free() нужно передавать исключительно то, что вернули malloc()/calloc() (кроме NULL, офк).
                            UPD: оказывается по Стандарту, во free() вполне себе можно передавать NULL.
                            Ответить
                • Это не страшно, если pinba_error роняет всю систему.

                  Меня больше пугает, что пула два, и знание об их количестве не вынесено никуда.

                  Значит, в коде есть явно два free, например. Когда их станет три, в одном из пяти мест наверняка забудут поправить
                  Ответить
                    • чивочиво??11
                      пул пулов чтоли?

                      for (i = 0; i < thread_pool_size; i++) {
                      		pinba_pool_destroy(D->per_thread_request_pool[0] + i);
                      		pinba_pool_destroy(D->per_thread_request_pool[1] + i);
                      		pinba_pool_destroy(D->per_thread_tmp_pool + i);
                      	}
                      Ответить
                      • АнтиООПшники должны быть в экстазе от этих портянок
                        Ответить
                        • Так оно во вполне себе ООПэшном стиле насрано.
                          Ответить
                        • Копипаст знания это всегда говно: что с ООП, что без.

                          зы: ахахах, нейминг прикольный, и копипаст полей. Да, с ООП можно было бы наследоваться, но можно было бы и без него (на худой конец сделать делегацию)
                          Ответить
                      • А вот эти pinba_report1_data...pinba_report18_data это типа такая поддержка версионирования?
                        Ответить
                        • Думаю, что это "наследование" (ну или расширение).

                          Сравни две даты: видишь, у второй есть доп поле?
                          struct pinba_report8_data { /* {{{ */
                          	void *histogram_data;
                          	size_t req_count;
                          	struct timeval req_time_total;
                          	struct timeval ru_utime_total;
                          	struct timeval ru_stime_total;
                          	double kbytes_total;
                          	double memory_footprint;
                          	int status;
                          };
                          /* }}} */
                          
                          struct pinba_report9_data { /* {{{ */
                          	void *histogram_data;
                          	size_t req_count;
                          	struct timeval req_time_total;
                          	struct timeval ru_utime_total;
                          	struct timeval ru_stime_total;
                          	double kbytes_total;
                          	double memory_footprint;
                          	int status;
                          	char script_name[PINBA_SCRIPT_NAME_SIZE];
                          };
                          Ответить
                          • Та больше похоже на разные версии, которые используются в разных местах апишки.

                            Правда, некоторые ничем не отличаются, первая и вторая, вроде.
                            Ответить
                          • Кстати, вся эта история учит нас важному: успех продукта весьма слабо связан с качеством программистов (и, как следствие, программного кода).

                            Стайка пыхомакак вполне может сделать на коленке проект, который будет иметь сотни тысяч пользователей и приносить семизначные прибыли его создателям.

                            В какой-то момент конечно понадобится хайрить умных чуваков, но это может случиться, когда у вас уже будет миллион-другой пользователей, а значит и куча бабла.
                            Ответить
                  • Это сейчас оно роняет всю систему. А в следующей версии его на какое-нибудь pinba_warning() заменят — и всё, пиздец.

                    Главное правило сишника: насрал — убери за собой.
                    Ответить
                    • >насрал — убери за собой.
                      Да я-то согласен. Лучше выработать жетские концепции типа "функция InitFoo выделила память, значит должна быть DestroyFoo".

                      А если думать "в каждом конкретном случае" , то легко можно серануться
                      Ответить
            • Кстати, этот Тони случайно не является тем самым загадочным единственным сишником из «Баду»?
              Ответить
              • Ну видимо да, кажется что больше других сишников там нет.

                на самом деле тоня -- пыхер (и чуть ли не отец-аснавтель пхпклуба), но вот немного умеет си тоже. Особенно аллоцировать память
                Ответить
            • Тоня еще писатель полезных утилиток
              struct eqstr {
              	bool operator()(const char *s1, const char *s2) const {
              		return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
              	}
              };
              
              struct xxhash {
              	size_t operator()(const char* str) const {
              		int str_len = strlen(str);
              		return XXH64(str, str_len, 2001);
              	}
              };




              А так же поборник типобезопасности
              void *pinba_map_add(void *map_report, const char *index, const void *data) /* {{{ */
              {
              	pinba_map *map;
              	if (map_report == NULL) {
              		map = new pinba_map();
              	} else {
              		map = static_cast<pinba_map*>(map_report);
              	}
              	map->data_add(index, data);
              
              	return map;
              }
              Ответить
  • Жопорукие, даже пасхалку не могут сделать нормально!
    Ответить
  • <?php
     
    $search_text = 0;
     
    if ($search_text=="хуйня") {
    			echo "У нас серьезная компания и мы всякой хуйни на сайте не держим.";
    }


    Угадайте, что выведет программа и почему я за «PHP».

    Спойлер:
    https://ideone.com/wGgwj8
    Ответить
    • else {
          $result.="Вы искали: <u><b>".$input->search_text."</b></u><br><br>";
          $result.="И нихуя не нашли.";
      }
      Ответить
          • С депрекейшном в «HTML» всё плохо: там таги то депрекейтят, то возвращают.

            <i><b><u><s> комитету не понравились тем, что они несемантические. Мол, представление будем описывать в CSS (font-weight:bold и т. п.), а в HTML — только семантику. А семантические таги — это <em><strong><ins><del>, которые подчёркивают важность информации.

            По факту же в вебе сплошь и рядом используют несемантические <div> и <span>, а семантические <article>, <aside> и т. п. редко вспоминают.
            Ответить
            • да, семантика обосралась

              регулярно ввижу класы типа red-button и col-3
              Ответить
              • Бывает и хуже. Например, в «Твитторе»:
                <div class="css-1dbjc4n r-1j3t67a"><div class="css-1dbjc4n r-18u37iz r-thb0q2"><div class="css-1dbjc4n r-1iusvr4 r-16y2uox r-5f2r5o r-m611by"></div></div><div class="css-1dbjc4n r-18u37iz r-thb0q2 r-1mi0q7o" data-testid="tweet"><div class="css-1dbjc4n r-1awozwy r-18kxxzh r-5f2r5o" style="flex-basis: 49px;"><div class="css-1dbjc4n r-18kxxzh r-1wbh5a2 r-13qz1uu">
                Ответить
                • P.S. Вот, например, если я хочу, чтобы в «Твитторе» аватарки были не круглыми, а квадратными, я добавляю в user.css правило:
                  .r-sdzlij {border-radius: 0 !important;}

                  Очевидное название класса, да?

                  P.S. Исправил. Я сначала указал класс «r-t23y2h» — это для твитов с картинками. Для аватарок используется класс «r-sdzlij».
                  Ответить
                  • UI твитора наверняка генерится автоматически, руками это говно никто не пишет.
                    Ответить
                    • надо ли говорить, что по ряду причин рандомные идентификаторы делают только пидоры
                      Ответить
                    • Зато представь, сколько софта для генерации написано, сколько промежуточных уровней абстракции, сколько специалистов по этой хуете, сколько рабочих мест.

                      Меня тут больше пугают не названия классов, а несколько классов у одного дива: <div class="css-1dbjc4n r-1iusvr4 r-16y2uox r-5f2r5o r-m611by">

                      Зачем? Зачем? Это так же ужасно, как <div class="color-red weight-bold margin-5 with-border">.
                      Ответить
                      • Генерация и автоматизация намекают, что рабочие места скорее были сокращены.
                        Ответить
    • Э-э-э... строка "хуйня" для сравнения автоматически преобразовывается в числo?
      Ответить
    • а зачем сравнивать строку с числом, да еще и через == ?
      Ответить
        • В «PHP» и в «JavaScript» лучше никогда не использовать «==«.
          Ответить
        • Можно, если принудительно приводить к нужному типу и объявлять типы в сигнатуре. Ну и лучше пользоваться "===" а про "==" забыть.
          Ответить
          • https://ideone.com/w5n0md
            Чем мне тут помогли пыхоприведение и хвалёные пыхосигнатуры? Я трижды сказал ебучему шаблонизатору, что хочу сравнить строки, но нет, шаблонизатор, блять, умнее, ему лучше знать, что с чем я хотел сравнивать.
            Ответить
            • никогда
              никогда
              никогда не используй == в JS и PHP
              Ответить
  • Было бы круто, если бы они применили мышиное обучение и показали именно ту хуйню, которую я и искал, но забыл название.
    Ответить
    • В их случае, думаю, проще было бы нанять экстрасенса для поиска хуйни по запросу.
      Ответить
    • Я им даже пользовался. А до этого пользовался EMXGCC.

      В DJGPP v 2.04 появилась даже функция popen. Правда, работала она только для программ, которые написаны на нём же.
      Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8