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

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    private function urlEncoder($val)
        {
            return str_replace('%7E', '~', rawurlencode($val));
        }  
      
        private function getParametersAsString(array $data)
        {
            $params = [];
            foreach ($data as $key => $val)
                $params[] = $key .'='. $this->urlEncoder($val);
            return implode('&', $params);
        }

    методы urlEncoder и getParametersAsString кривая замена стандартным функциям urlencode и http_build_query

    snayps, 13 Ноября 2015

    Комментарии (32)
  2. PHP / Говнокод #19021

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    foreach($this->styles as $media=>$style){
    	foreach($this->styles as $path){
    		$output .= '<link type="text/css" href="'.$path.'" rel="stylesheet" media="'.$media.'" />'."\n";
    	}
    }

    лолшто?

    gorky, 13 Ноября 2015

    Комментарии (2)
  3. PHP / Говнокод #19019

    +2

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    class/View.php
    
    <?php
    
    class View {
    
    ...
    
      public function compile() {
        $view_src = file_get_contents(VIEW_SRC_PATH . $this->full_name . EXT);
        // echo
        $view_src = preg_replace("/\{\{(\w+)\}\}/", "<?php echo \$$1; ?>", $view_src);
        $view_src = preg_replace("/\{\{(\w+)\|(\w+)\}\}/", "<?php echo \$$1['$2']; ?>", $view_src);
        $view_src = preg_replace("/\{\{(\w+)\.(\w+)\}\}/", "<?php echo \$$1->$2; ?>", $view_src);
        // foreach
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$2 as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\|(\w+)-->/", "<?php foreach(\$$2['$3'] as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$2->$3 as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$3->$4 as \$$1 => \$$2): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$3 as \$$1 => \$$2): ?>", $view_src);
        $view_src = preg_replace("/<!--each-->/", "<?php endforeach; ?>", $view_src);
        // switch
        $view_src = preg_replace("/<!--select\s+(\w+)\.(\w+)-->\s*<!--when\s+(.+)-->/", "<?php switch(\$$1->$2): case $3: ?>", $view_src);
        $view_src = preg_replace("/<!--when\s+(.+)-->/", "<?php break; ?><?php case $1: ?>", $view_src);
        $view_src = preg_replace("/<!--otherwise-->/", "<?php break; ?><?php default: ?>", $view_src);
        $view_src = preg_replace("/<!--select-->/", "<?php endswitch; ?>", $view_src);
        if (!file_exists(VIEW_PATH . $this->path)) mkdir(VIEW_PATH . $this->path, 0777, true);
        $fp = fopen(VIEW_PATH . $this->full_name . EXT, 'w');
        fwrite($fp, $view_src);
        fclose($fp);
      }
    
    ...
    
    ?>
    
    view-src/ShadeType.php
    
    {{type.name}}
    <!--each k d in type.diameters-->
    <h1>{{k}}</h1>
      <!--each s in d-->
      <div>
        {{s.bottom}} × {{s.top}} × {{s.height}}
        <div>
          <!--select s.mode-->
          <!--when 'u'-->(на ушках)
          <!--when 'p'-->(только подвес)
          <!--otherwise--> 
          <!--select-->
        </div>
      </div>
      <!--each-->
    <!--each-->
    
    view/ShadeType.php
    
    <?php echo $type->name; ?>
    <?php foreach($type->diameters as $k => $d): ?>
    <h1><?php echo $k; ?></h1>
      <?php foreach($d as $s): ?>
      <div>
        <?php echo $s->bottom; ?> × <?php echo $s->top; ?> × <?php echo $s->height; ?>
        <div>
          <?php switch($s->mode): case 'u': ?>(на ушках)
          <?php break; ?><?php case 'p': ?>(только подвес)
          <?php break; ?><?php default: ?> 
          <?php endswitch; ?>
        </div>
      </div>
      <?php endforeach; ?>
    <?php endforeach; ?>

    На хостинге PHP 5.2, а старые версии фреймворков не хочется. Решил запилить свой.

    kgm-rj, 13 Ноября 2015

    Комментарии (149)
  4. PHP / Говнокод #19018

    +13

    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
    27. 27
    28. 28
    <?php
      $lines = file('quest.txt');
      if($_POST['Quest'] == "") {
        echo "<HTML>";
        echo "<HEAD>";
        echo "<TITLE>Тестер</TITLE>";
        echo "<script language=JavaScript type=text/javascript>";
        echo "<!-- " . "\n";
        echo "var differ = 90*60;";
        echo "function timer() {";
        echo "var hours, minutes, seconds;";
        echo "differ = differ - 1;";
        echo "document.forms['vopros'].TimeLeft.value=differ;";
        echo "hours = Math.floor(differ/(60*60));";
        echo "hours = (hours >= 60) ? hours%60 : hours;";
        echo "hours = (hours < 10) ? \"0\" + hours : hours;";
        echo "minutes = Math.floor(differ/(60));";
        echo "minutes = (minutes >= 60) ? minutes%60 : minutes;";
        echo "minutes = (minutes < 10) ? \"0\" + minutes : minutes;";
        echo "seconds = differ;";
        echo "seconds = (seconds >= 60) ? seconds%60 : seconds;";
        echo "seconds = (seconds < 10) ? \"0\" + seconds : seconds;";
        echo "var strDate =  hours + \":\" + minutes + \":\" + seconds;";
        echo "document.forms['timerForm'].timerBox.value=strDate;";
        echo "if (differ<=0) {";
        echo "  document.forms['vopros'].Quest.value=100;";
        echo "  vopros.submit();";
    ... (и так далее)

    Отличный кодец из дипломной работы студента!

    RigFox, 13 Ноября 2015

    Комментарии (179)
  5. C++ / Говнокод #19017

    +6

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    #include "stdafx.h"
    #include "hackery.h"
    #include <cstdint>
    #include <windows.h>
    
    
    /*XXX*/
    unsigned char udiv128Data[] =
    {
      0x48, 0x89, 0xD0, // mov rax,rdx
      0x48, 0x89, 0xCA, // mov rdx,rcx
      0x49, 0xF7, 0xF0, // div r8
      0x49, 0x89, 0x11, // mov [r9],rdx
      0xC3              // ret
    };
    
    /*XXX*/
    unsigned char sdiv128Data[] =
    {
      0x48, 0x89, 0xD0, // mov rax,rdx
      0x48, 0x89, 0xCA, // mov rdx,rcx
      0x49, 0xF7, 0xF8, // idiv r8
      0x49, 0x89, 0x11, // mov [r9],rdx
      0xC3              // ret
    };
    
    unsigned __int64(__fastcall *udiv128)(unsigned __int64 numhi, unsigned __int64 numlo, unsigned __int64 den, unsigned __int64* rem);
    
    __int64(__fastcall *sdiv128)(__int64 numhi, __int64 numlo, __int64 den, __int64* rem);
    
    namespace {
    struct Q {
      Q() {
        /*XXX*/
        udiv128 = reinterpret_cast<unsigned __int64(__fastcall *)(unsigned __int64, unsigned __int64, unsigned __int64, unsigned __int64*)>(&udiv128Data[0]);
        /*XXX*/
        sdiv128 = reinterpret_cast<__int64(__fastcall *)(__int64, __int64, __int64, __int64*)>(&sdiv128Data[0]);
        /*XXX*/
        DWORD dummy;
        /*XXX*/
        VirtualProtect(udiv128Data, sizeof(udiv128Data), PAGE_EXECUTE_READWRITE, &dummy);
        /*XXX*/
        VirtualProtect(sdiv128Data, sizeof(sdiv128Data), PAGE_EXECUTE_READWRITE, &dummy);
      }
    } q;
    }

    Вот такая вот загогулина получилась по причине того что в 64-х битной Вижуал Студии нет встроенного асма, нет интринсика для простой асмовой команды, но мне вот надо именно полное деление 128-битного числа на 64-х битное именно с остатком и мне совершенно фиолетово на то что Майкрософт думает на тему вредности команды DIV и заменимости деления умножением на обратное. Да, и мне влом усложнять структуру проекта и линковать какие-то символы с внешнего асма.

    MinorThreat, 12 Ноября 2015

    Комментарии (96)
  6. JavaScript / Говнокод #19014

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    $(window).on('load', function () {
            var date = new Date();
            day = date.getDate();
            day = (parseInt(day, 10) < 10) ? ('0' + day) : (day);
            $('[name = "PROPERTY[15][0]"]').val(day + '.' + (date.getMonth() + 1) + '.' + date.getFullYear() + ' ' + date.getHours() + ':' + (date.getMinutes() + 10) + ':00');
        });

    15:69 замечательное время!

    akanit, 12 Ноября 2015

    Комментарии (3)
  7. 1C / Говнокод #19013

    −92

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    Если НЕ(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента=""И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тКонтрагент="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="" И тКоличествоДней="" И тСуммаЭтоПроцент="") Тогда Запрос.Текст=Запрос.Текст+"
    	|ГДЕ";
    	КонецЕсли;
    	Если НЕ тСостояниеЗаписи="" Тогда Запрос.Текст=Запрос.Текст+"
    	| опмИзмененияСтандартныхУсловийОплаты.СостояниеЗаписи "+тЗнакСостоянияЗаписи+?(тЗнакСостоянияЗаписи="В"," (","")+"&СостояниеЗаписи"+?(тЗнакСостоянияЗаписи="В",")","");КонецЕсли;  // опм 04.05.2015 доб. ?(тЗнакСостоянияЗаписи="В"," (","")   +?(тЗнакСостоянияЗаписи="В",")","")
    	Если НЕ тРегистратор="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.теРегистратор "+тЗнакРегистратора+" &Регистратор";
    	КонецЕсли;
    	Если НЕ тДоговорКонтрагента="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДоговорКонтрагента "+тЗнакДоговораКонтрагента+" &ДоговорКонтрагента";
    	КонецЕсли;
    	Если НЕ тКонтрагент="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДоговорКонтрагента.Владелец "+тЗнакКонтрагента+?(тЗнакКонтрагента="В"," (","")+"&Контрагент"+?(тЗнакКонтрагента="В",")","");   // опм 04.05.2015 доб. ?(тЗнакКонтрагента="В"," (","")  +?(тЗнакКонтрагента="В",")","")
        КонецЕсли;
    	Если НЕ тДокументОткрытияКредитнойЛинии="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДокументОткрытияКредитнойЛинии "+тЗнакДокументаОткрытияКредитнойЛинии+" &ДокументОткрытияКредитнойЛинии";
    	КонецЕсли;
    	Если НЕ тВидЗаписи="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ВидЗаписи "+тЗнакВидаЗаписи+" &ВидЗаписи";
    	КонецЕсли;
    	Если НЕ тВидНачала="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ВидНачала "+тЗнакВидаНачала+" &ВидНачала";
    	КонецЕсли;
    	Если НЕ тПериод="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.Период "+тЗнакПериода+" &тПериод";
    	КонецЕсли;
    	Если НЕ тРазРегистратор="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.РазРегистратор "+тЗнакРазРегистратора+" &РазРегистратор";
    	КонецЕсли;
    	Если НЕ тДатаНачала="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДатаНачала "+тЗнакДатыНачала+" &ДатаНачала";
    	КонецЕсли;
    	Если НЕ тДатаОкончания="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.ДатаОкончания "+тЗнакДатыОкончания+" &ДатаОкончания";
    	КонецЕсли;
    	Если НЕ тСумма="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.Сумма "+тЗнакСуммы+" &Сумма";
    	КонецЕсли;
    	Если НЕ тКоличествоДней="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.КоличествоДней "+тЗнакКоличестваДней+" &КоличествоДней";
    	КонецЕсли;
    	Если НЕ тСуммаЭтоПроцент="" Тогда Запрос.Текст=Запрос.Текст+"
    	| "+?(тСостояниеЗаписи="" И тРегистратор="" И тДоговорКонтрагента="" И тКонтрагент="" И тДокументОткрытияКредитнойЛинии="" И тВидЗаписи="" И тВидНачала="" И тПериод="" И тРазРегистратор="" И тДатаНачала="" И тДатаОкончания="" И тСумма="" И тКоличествоДней="",""," И")+" опмИзмененияСтандартныхУсловийОплаты.СуммаЭтоПроцент "+тЗнакСуммыЭтоПроцент+" &СуммаЭтоПроцент";
    	КонецЕсли;

    И так далее на 122 строки.

    HomoAlbus, 12 Ноября 2015

    Комментарии (6)
  8. C++ / Говнокод #19012

    +8

    1. 1
    if(copytype==WHOLE_FILE) //whole file

    О пользе комментариев

    absolut, 12 Ноября 2015

    Комментарии (16)
  9. Куча / Говнокод #19011

    +2

    1. 1
    Как избавиться от говнокода?

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

    Как с этим бороться? Убеждать менеджера, что вам нужно несколько недель, а то и месяцев на полный рефакторинг всего? Заниматься этим в свободное время? Забить и говнокодить дальше? Уйти в другое место (не факт ведь, что там будет лучше)?

    imihajlov, 12 Ноября 2015

    Комментарии (113)
  10. C# / Говнокод #19010

    +5

    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
    if (logsData.Count == 1) {
    				msg += logsData [logsData.Count - 1] + "\n";
    			} else if (logsData.Count == 2) {
    				msg += logsData [logsData.Count - 2] + "\n";
    				msg += logsData [logsData.Count - 1] + "\n";
    			} else if (logsData.Count == 3) {
    				msg += logsData [logsData.Count - 3] + "\n";
    				msg += logsData [logsData.Count - 2] + "\n";
    				msg += logsData [logsData.Count - 1] + "\n";
    			} else if (logsData.Count == 4) {
    				msg += logsData [logsData.Count - 4] + "\n";
    				msg += logsData [logsData.Count - 3] + "\n";
    				msg += logsData [logsData.Count - 2] + "\n";
    				msg += logsData [logsData.Count - 1] + "\n";
    			} else if (logsData.Count >= 5) {
    				msg += logsData [logsData.Count - 5] + "\n";
    				msg += logsData [logsData.Count - 4] + "\n";
    				msg += logsData [logsData.Count - 3] + "\n";
    				msg += logsData [logsData.Count - 2] + "\n";
    				msg += logsData [logsData.Count - 1] + "\n";
    			}

    kschingiz, 12 Ноября 2015

    Комментарии (4)