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

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

    −130.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
    class FinancialEventObserver < ActiveRecord::Observer
      observe Payment, Invoice
      def before_save(model)
        event = nil        
        if model.class == Payment
          if model.new_record?        
            event = FinancialEvent.new(:event => FinancialEvent::Event::PAYMENT_INVOICE,
            :arguments => {:client_name => model.invoice.client.short_name, :invoice_number => model.invoice.invoice_number},
              :company_id=>model.invoice.client.company.id)
          end
        elsif model.class == Invoice
          i = Invoice.find_by_id model.id      
          if model.new_record? or i.status != model.status        
            if model.status == Invoice::Status::ESTIMATE
              event = FinancialEvent.new(:event => FinancialEvent::Event::ESTIMATE_SEND,
            :arguments => {:client_name => model.client.short_name, :invoice_number => model.invoice_number},
                :company_id=>model.client.company.id)
            elsif model.status == Invoice::Status::APPROVED
              event = FinancialEvent.new(:event => FinancialEvent::Event::ESTIMATE_APPROVED,
            :arguments => {:client_name => model.client.short_name, :invoice_number => model.invoice_number},
                :company_id=>model.client.company.id)
            elsif model.status == Invoice::Status::REJECTED
              event = FinancialEvent.new(:event => FinancialEvent::Event::ESTIMATE_REJECTED,
            :arguments => {:client_name => model.client.short_name, :invoice_number => model.invoice_number},
                :company_id=>model.client.company.id)
            elsif model.status == Invoice::Status::SEND
              event = FinancialEvent.new(:event => FinancialEvent::Event::INVOICE_SEND,
            :arguments => {:client_name => model.client.short_name, :invoice_number => model.invoice_number},
                :company_id=>model.client.company.id)            
            end
          elsif !model.new_record? and i.state != model.state
            if model.state == Invoice::State::DELETED
              event = FinancialEvent.new(:event => FinancialEvent::Event::INVOICE_DELETED,
            :arguments => {:invoice_number => model.invoice_number},
                :company_id=>model.client.company.id)
            end
          end    
        end
        event.eventable = model.requester unless event.blank? 
        event.save unless event.blank?
        
      end
      def before_destroy(model)
        if model.class == Payment
          event = FinancialEvent.new(:event => FinancialEvent::Event::PAYMENT_DELETED,
            :arguments => {:invoice_number => model.invoice.invoice_number},
          :company_id=>model.invoice.client.company.id)
          event.eventable = model.requester
          event.save
        end    
      end
    end

    о боже, зачем я открыл этот файл?

    rakoth3d, 16 Января 2010

    Комментарии (5)
  3. Perl / Говнокод #2418

    −109.5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    sub title {
        my ($str, $len) = @_;
    
        while (1) {
            last if substr($str, $len, 1) eq ' ';
            ++$len;
        }
    
        return substr($str, 0, $len) . "...";
    }

    аналог Index.

    klem4, 15 Января 2010

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

    +99.4

    1. 1
    2. 2
    3. 3
    4. 4
    string date_format = DateTime.Now.ToString("dddd dd") + "th " + DateTime.Now.ToString("MMMM yyyy");
    if (DateTime.Now.Day == 1 || DateTime.Now.Day == 21 || DateTime.Now.Day == 31) date_format = DateTime.Now.ToString("dddd dd")+"st "+DateTime.Now.ToString("MMMM yyyy");
    else if (DateTime.Now.Day == 2 || DateTime.Now.Day == 22) date_format = DateTime.Now.ToString("dddd dd")+"nd "+DateTime.Now.ToString("MMMM yyyy");
                else if (DateTime.Now.Day == 3 || DateTime.Now.Day == 23) date_format = DateTime.Now.ToString("dddd dd")+"rd "+DateTime.Now.ToString("MMMM yyyy");

    DateTime formatting - don't try this at home!

    bugotrep, 14 Января 2010

    Комментарии (5)
  5. ActionScript / Говнокод #2386

    −190.8

    1. 1
    2. 2
    3. 3
    4. 4
    if (flash.net.getClassByAlias("foo.bar.VO") == null){
              flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);}
          } catch (e:Error) {
              flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO); }

    Так во флексовом фреймворке регистрируются алиасы для RPC классов... Нелогичность ситуации не сразу очевидна, поэтому опишу:
    При загрузке модулей может возникнуть ситуация, когда алиас уже зарегистрирован для другого класса, поэтому нужно проверить, а не был ли алиас зарегистрирован раньше. Иначе, его нужно зарегистрировать. Исторически, этой проверки сначала не было, данный код - это фикс вышеописаной проблемы. Пытаясь разобраться, что же все-таки случилось - скорее всего "писатель" не подозревал, что getClassByAlias() не может вернуть null - а выяснил он это, когда код вывалился с ошибкой, вот он не долго думая завернул это все в try-catch...
    Из мелких деталей: в рамках AS3 сравнение сложных типов с null - бессмысленная, и более того вредная операция, т.как выражение в условии всегда кастуется к Boolean, и компилятор не умеет делать оптимизации для таких случаев.

    wvxvw, 08 Января 2010

    Комментарии (5)
  6. PHP / Говнокод #2371

    +158.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
    <?php
    /**
     * @author DanxilLsPro.net16.net
     * @copyright 2010
     * @email [email protected]
     */
     session_start();
    //require_once "include/auth.php";
    require_once "include/config.php";
    require_once "include/function.php";
    if(is_numeric($_GET['theme']) and $_GET['theme'] >= 1){
    $theme = getTheme($_GET['theme']);
    if($theme == false)show_error();
    }
    top("Просмотр всех тем - Знания - народу!",$style,$bg);
    echo<<<FOO
        <TD ROWSPAN=2 bgcolor="122745"> 
          <p>
    FOO;
    if(is_numeric($_GET['theme']) and $_GET['theme'] >= 1)
    showTheme($theme->name,$theme->time,$theme->author,$theme->text,$theme->voted,$theme->view,$style);
    else
    echo show_all_theme();
    echo "</p>";
    bottom("Знания принадлежат народу!",$style);
    ?>

    Это полный как бе ппц. К чему приводят бессонные ночи в количестве более одной ^^

    DanxilLs, 05 Января 2010

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

    +64.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
    13. 13
    14. 14
    int main(int argc, char **argv){
      QApplication app(argc, argv);
      QWebView view;
      view.load(QUrl("http://www.linuxcertif.com/"));
      view.show();
      app.exec();
      QWebSettings::setIconDatabasePath("/tmp");
      QWebSettings::iconForUrl(QUrl("http://www.linuxcertif.com/"));
      QIcon icon = QWebSettings::iconForUrl(QUrl("http://www.linuxcertif.com/"));
      QPushButton button;
      button.setIcon(icon);
      button.show();
      return app.exec();
    }

    смотрим на восьмую строку и понимаем, что она не делает ничего....
    ошибка то мелкая, было бы не смешно, если тока этот код не распологался бы на багтрекере вебикита - https://bugs.webkit.org/show_bug.cgi?id=29440
    еще в вебките забавно, что если в этом семпле седьмую строку переместить сразу за второй, семпл работает...

    LuCiFer, 29 Декабря 2009

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

    +127.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public static int not(this int i)
    {
          string i2 = Convert.ToString(i, 2),
         res = "";
          foreach (char c in i2)
                res += c == '0' ? '1' : '0';
          return Convert.ToInt32(res, 2);
    }

    Дело было вечером, делать было нечего....

    psina-from-ua, 24 Декабря 2009

    Комментарии (5)
  9. Си / Говнокод #2284

    +133.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
    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
    /****************************************************************************
     #if !(TARGET_IS_NT50_OR_LATER)
    #error You need a Windows 2000 or later to run this stub because it uses these features:
    #error   /robust command line switch.
    #error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
    #error This app will die there with the RPC_X_WRONG_STUB_VERSION error.
    #endif
    
    
    ...
    
    где-то глубоко
    
    
    *  Macros for targeted platforms
     ****************************************************************************/
    
    #if (0x501 <= _WIN32_WINNT)
    #define TARGET_IS_NT51_OR_LATER                   1
    #else
    #define TARGET_IS_NT51_OR_LATER                   0
    #endif
    
    #if (0x500 <= _WIN32_WINNT)
    #define TARGET_IS_NT50_OR_LATER                   1
    #else
    #define TARGET_IS_NT50_OR_LATER                   0
    #endif
    
    #if (defined(_WIN32_DCOM) || 0x400 <= _WIN32_WINNT)
    #define TARGET_IS_NT40_OR_LATER                   1
    #else
    #define TARGET_IS_NT40_OR_LATER                   0
    #endif
    
    #if (0x400 <= WINVER)
    #define TARGET_IS_NT351_OR_WIN95_OR_LATER         1
    #else
    #define TARGET_IS_NT351_OR_WIN95_OR_LATER         0
    #endif

    Код , сгенерированный компилятором MIDL для dll прокси/заглушки COM объекта.
    VS2005 :)

    4cppMan, 15 Декабря 2009

    Комментарии (5)
  10. Python / Говнокод #2276

    −178.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
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    def generate(_len = None, sg = None):
      if sg == None:
        sg = 'aoeuizxcvbn_msdfghjklqwrt_yp123456_7890'
      if _len == None:
        _len = random.Random().randint(1, 100)
      s = ''
      l = len(sg)
      while _len > 0:
        s += sg[random.Random().randint(0, l - 1)]
        _len -= 1
      return s
    
    def loadsrvlists(file, srvlist = {}, prtlist = {}):
      prtlist[0] = 5222
      f = open(file)
      while True:
        s = f.readline().strip()
        if s:
          sr = s[:s.find(':')]
          pr = s[s.find(':') + 1:]
          if not sr in srvlist:
            srvlist[sr] = True
            if pr != prtlist[0]:
              prtlist[sr] = int(pr)
        else: break
      return [srvlist, prtlist]

    По конфам прошла волна спама, автор которого пиарил своего бота.
    Это кусок кода из того бота.
    А тут полный исходник. http://dumpz.org/15156/
    Кто то может для себя почерпнуть нечто новое и неизведанное.

    Apkawa, 14 Декабря 2009

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

    +94.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
    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
    type
     p = ^h;
     h = record
          no:word;
          nx:p;
         end;
    var
     n,k,i:word;
     a,b:p;
    
    begin
    readln(n,k);
    new(b);
    a:=b;
    for i:=1 to n-1 do
    begin
     a^.no:=i;
     new(a^.nx);
     a:=a^.nx;
    end;
    a^.no:=n;
    a^.nx:=b;
    i:=1;
    while true do
    begin
     if a^.nx=a then break;
     if i=k then
     begin
      b:=a^.nx;
      a^.nx:=a^.nx^.nx;
      dispose(b);
      i:=1;
     end;
     a:=a^.nx;
     inc(i);
    end;
    writeln(a^.no);
    end.

    "Гуманитарное" решение задачи Иосифа Флавия (гуглите).
    Тут n - количество людей, убивают каждого k-нного, пока не останется один единственный выживший.

    Lolwho, 11 Декабря 2009

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