1. Лучший говнокод

    В номинации:
    За время:
  2. C++ / Говнокод #16556

    +57

    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
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    #include "TrayIcon.h"
    
    // ----------------------------------------------------------------------------
    
    TrayIcon::TrayIcon(QObject* parent) : QSystemTrayIcon(parent),
                                          INTERVAL(1000),
                                          WIDTH_ICON(30), HEIGHT_ICON(30)
    {
        currentDate = QDate(0, 0, 0);
    
        defaultIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
        defaultIcon.fill(Qt::black);
    
        reminderIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
        reminderIcon.fill(Qt::yellow);
    
        thousandthDayIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
        thousandthDayIcon.fill(Qt::green);
    
        dialogBoxIsActive = false;
    
        readSettings();
    
        wasReminder = false;
        wasCongratulation = false;
        wasSetNewDate = false;
    
        slotUpdateDate();
    
        QMenu* contextMenu = new QMenu;
    
        contextMenu->addAction("Set date of birth...",
                                                 this, SLOT(slotSetDateOfBirth()));
    
        QAction* autorunAction = contextMenu->addAction("Autorun",
                                                 this, SLOT(slotSetAutorun(bool)));
        autorunAction->setCheckable(true);
        autorunAction->setChecked(autorun);
    
        contextMenu->addSeparator();
    
        contextMenu->addAction("About...", this, SLOT(slotAboutMyProgram()));
    
        contextMenu->addSeparator();
    
        contextMenu->addAction("Quit", qApp, SLOT(quit()));
    
        setContextMenu(contextMenu);
    
        QTimer* timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), SLOT(slotUpdateDate()));
        timer->start(500);
    }
    
    // ----------------------------------------------------------------------------
    
    void TrayIcon::slotUpdateDate()
    {
        if((currentDate != QDate::currentDate()) || wasSetNewDate)
        {
            currentDate = QDate::currentDate();
    
            daysToThousandthDay
                           = INTERVAL - dateOfBirth.daysTo(currentDate) % INTERVAL;
    
            wasCongratulation = false;
            wasReminder = false;
            wasSetNewDate = false;
    
            if((daysToThousandthDay != INTERVAL) && (daysToThousandthDay != 1))
            {
                setIcon(QIcon(defaultIcon));
                setToolTip("Until next thousandth day in " +
                                 QString().number(daysToThousandthDay) + " days.");
            }
            else
            {
                if(daysToThousandthDay == 1)
                {
                    if(!wasReminder)
                        reminderBeforeDay();
                }
                else
                {
                    if(!wasCongratulation)
                        congratulation();
                }
            }
        }
    }

    Описание конструктора и одного из методов класса иконки в системном трее из программы, которая должна оповещать пользователя о каждом тысячном дне его жизни. Написано на Qt.

    Полная версия:

    main: http://pastebin.com/DEKiMWdb

    хедер класса иконки трея: http://pastebin.com/rN9NwBPB
    .cpp класса иконки трея: http://pastebin.com/uuyf5uxX

    хедер класса окна ввода даты рождения: http://pastebin.com/bmfAbFwg
    .cpp класса окна ввода даты рождения: http://pastebin.com/3R8BaPFC

    darkKnight, 18 Августа 2014

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

    +133

    1. 1
    decimal dblOrderTotal = calculatedOrders.Sum(objOrder => objOrder.total);

    Что бы значило это dbl?

    musuk, 10 Августа 2014

    Комментарии (19)
  4. Си / Говнокод #16296

    +136

    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
    void lcd_show(uint8_t number)
    {
        uint8_t digit3 = 0;
        uint8_t digit2 = 0;
        uint8_t digit1 = number > 99u ? 1u : 0;
    
        switch(number)
        {
            case 0u: 
                digit3 = 0u;
                digit2 = 0u;
            break;
            case 1u: 
                digit3 = 1u;
                digit2 = 0u;
            break;
    .....
    .....
            case 199u: 
                digit3 = 9u;
                digit2 = 9u;
            break;
            default:
                digit3 = '-';
                digit2 = '-';
                digit1 = 0;
            break;
        }
    
        display3d(digit3);
        display2d(digit2);
        display1d(digit1);
    }

    8-битный микроконтроллер, 32768Гц тактовая частота, батарейное питание, CPU по-максимуму в спячке для экономии энергии.
    Функции display3d(), display2d(), display1() отображают цифру в соответствующем знакоместе на 2.5 разрядном LCD от 0 до 199.
    Преобразование числа в BCD формат.
    Эта жесть даёт выигрыш порядка 10 мкА перед "обычным" преобразования с делениями на 10 за счёт меньшего времени работы CPU для расчёта. Вроде говнокод, но в данном случае оправдан, потому не воняет :)

    FlySnake, 09 Июля 2014

    Комментарии (19)
  5. Pascal / Говнокод #16191

    +86

    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
    function IsMemoryCommitByAdress(const AAddress: Pointer): Boolean;
    var
      MemoryInfo: TMemoryBasicInformation;
    begin
      Result := False;
      if not Assigned(AAddress) then
      Exit;
      VirtualQuery(AAddress, MemoryInfo, SizeOf(MemoryInfo));
      Result := MemoryInfo.State and MEM_COMMIT <> 0;
    end;
    
    function IsPointerToVMT(const APointer: Pointer): Boolean;
      var
      VMTPointer, VMTPointerSelf: Pointer;
    begin
      Result := False;
      if not IsMemoryCommitByAdress(APointer) then
      Exit;
      VMTPointer := APointer;
      VMTPointerSelf := Pointer(Integer(VMTPointer) + vmtSelfPtr);
      if not IsMemoryCommitByAdress(VMTPointer) then
      Exit;
      if not IsMemoryCommitByAdress(VMTPointerSelf) then
      Exit;
      if not IsMemoryCommitByAdress(PPointer(VMTPointerSelf)^) then
      Exit;
      Result := PPointer(VMTPointerSelf)^ = VMTPointer;
    end;
    
    function IsBadptr(apointer:pointer):boolean;
    begin
      Result := IsMemoryCommitByAdress(APointer) and IsPointerToVMT(PPointer(APointer)^);
    end;

    Функция, для определения качества указателя, в ситуации "один объект - несколько указателей".
    Гк в том, что нет надежности - это все равно, что юзать IsBadReadPtr и аналогичные.

    Почему-то никто не пытается использовать операторы is и as (я узнал о них благодаря Тарасу, спасибо ему), чтобы сравнить качество приведения.

    brutushafens, 19 Июня 2014

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

    +10

    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
    string intArrayToString(int* array, int size)
    {
      ostringstream ss;
      ss << "[";
      for (int i=0; i<size-1; i++)
        ss << array[i] << ",";
      ss << array[size-1];
      ss << "]";
      return ss.str();
    }
    
    string longIntArrayToString(long int* array, int size)
    {
      ostringstream ss;
      ss << "[";
      for (int i=0; i<size-1; i++)
        ss << array[i] << ",";
      ss << array[size-1];
      ss << "]";
      return ss.str();
    }

    О шаблонах мы, видимо, не в курсе. Ну и упаси вас боже передать суда size=0.

    Думаю, сюда можно смело выкладывать весь источник, но уж больно он уныл

    https://github.com/adobe-research/libkafka
    Адобъ Рисёрчъ на острие прогресса
    #ifdef DEBUG 
    #define D(x) x
    #else
    #define D(x)
    #endif

    #define E(x) cout.flush() << x
    Так ведь и придётся своего клиента писать... :(

    roman-kashitsyn, 12 Июня 2014

    Комментарии (19)
  7. C++ / Говнокод #16094

    +8

    1. 1
    2. 2
    #define FOR_INCLUSION (iostream) (studio.h) (stdlib.h) (boost/phoenix.hpp) (my_drugs_library.h)
    #include <include_and_disable_some_warnings>

    laMer007, 01 Июня 2014

    Комментарии (19)
  8. Си / Говнокод #16042

    +134

    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
    static U32 Round_up_to_next_2_power( U32 value )
    {
      if ( value > 16 )
        if ( value > 64 )
          if ( value > 128 )
            if ( value > 256 )
              if ( value > 512 )
                return( 1024 );
              else
                return( 512 );
            else
              return( 256 );
          else
            return( 128 );
        else
          if ( value > 32 )
            return( 64 );
          else
            return( 32 );
      else
        if ( value > 4 )
          if ( value > 8 )
            return( 16 );
          else
            return( 8 );
        else
          if ( value > 2 )
            return( 4 );
      return( value );
    }

    Simple function to round up to the next power of 2.

    Wicked, 23 Мая 2014

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

    +141

    1. 1
    2. 2
    3. 3
    @echo off
    start https://pp.vk.me/c607724/v607724832/6c07/5fRLUPfqMe8.jpg
    start https://pp.vk.me/c607724/v607724832/6c1c/LD7Zqx1yZAw.jpg

    Для батника, запустите - поймёте ;)

    Mobac, 20 Апреля 2014

    Комментарии (19)
  10. JavaScript / Говнокод #15781

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    var 	unselectedColor	= 'rgba(255, 255, 255, 0.3)',
            selectedColor	= 'rgba(255, 255, 255, 0.9)';
    
    function onDownloadPage(){
         var temp = $$('.selState');
         for(var i = 0; i < temp.length ; i++){
             temp[i].style.backgroundColor = new String(unselectedColor);
             temp[i].onmouseover = function(){this.style.backgroundColor = new String(selectedColor);};
             temp[i].onmouseout = function(){this.style.backgroundColor = new String(unselectedColor);};
         }
     }

    И вот опять с этого сайта...
    CSS hover? Не, не слышал.

    Dart_Sergius, 18 Апреля 2014

    Комментарии (19)
  11. Куча / Говнокод #15665

    +118

    1. 1
    f g l = hylo l (.) (\n -> (g, n-1)) (==0)

    Этот пример использует hylomorphism.
    Композируем функцию типа (.) g(l) пока не наступит n==0

    HaskellGovno, 04 Апреля 2014

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