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

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

    +119

    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
    public static Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>> Create<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" t8="">(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) {
                return new Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<t8>(item8));
    
       Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
                // We want to have a limited hash in this case.  We'll use the last 8 elements of the tuple
                ITuple t = (ITuple) m_Rest;
                if(t.Size >= 8) { return t.GetHashCode(comparer); }
     
                // In this case, the rest memeber has less than 8 elements so we need to combine some our elements with the elements in rest
                int k = 8 - t.Size;
                switch(k) {
                    case 1:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 2:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 3:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 4:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 5:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 6:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 7:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                }
                Contract.Assert(false, "Missed all cases for computing Tuple hash code");
                return -1;
            }
     
            Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
                return ((IStructuralEquatable) this).GetHashCode(comparer);
            }
            public override string ToString() {
                StringBuilder sb = new StringBuilder();
                sb.Append("(");
                return ((ITuple)this).ToString(sb);
            }
     
            string ITuple.ToString(StringBuilder sb) {
                sb.Append(m_Item1);
                sb.Append(", ");
                sb.Append(m_Item2);
                sb.Append(", ");
                sb.Append(m_Item3);
                sb.Append(", ");
                sb.Append(m_Item4);
                sb.Append(", ");
                sb.Append(m_Item5);
                sb.Append(", ");
                sb.Append(m_Item6);
                sb.Append(", ");
                sb.Append(m_Item7);
                sb.Append(", ");
                return ((ITuple)m_Rest).ToString(sb);
            }

    Давно заприметил в C# кортежи. За них отвечаёт чудесный класс System.Tuple
    http://msdn.microsoft.com/en-us/library/system.tuple.aspx
    Вот стало интересно - как они там это дело реализовали, ведь постоянно вводит новые плюшки в язык.
    Посмотрел и ужаснулся - решили "в лоб" и кортежи обошлись в 1000 строк.
    http://reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/Tuple@cs/1305376/Tuple@cs

    Хотел запостить в #12129. Но он утонул.

    3.14159265, 19 Ноября 2012

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

    +24

    1. 1
    QString("a=%1 b=%2").arg("[%1]").arg("Shit happens")

    Вы думаете, что результат будет "a=[%1] b=Shit happens"?
    Как бы не так! "a=[Shit happens] b=%2".

    Причем эта "фича" вполне документирована. Но документирована она не в самом первом описании arg'а, а только в arg(const QString &a1, const QString &a2), в доку по которому я естественно никогда не заглядывал...

    UPD: правильным вариантом будет QString("a=%1 b=%2").arg("[%1]", "Shit happens"), но тогда мы лишаемся поддержки форматирования, да и таким образом можно засунуть максимум 10 аргументов.

    bormand, 13 Ноября 2012

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

    −109

    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
    #Кусок красивого кода контроллера сайта на Ruby On Rails
    class QuestionsController < ApplicationController
    
      #Извлекаем отвеченные вопросы методом говнокода
      def answered
          @subtitle = "Отвеченные"
          #Нам нужны все-все-все вопросы и даже не отвеченные. Скрестим пальцы на случай если их будет много
          @questions = Question.all
          #Обязательно преобразуем все в массив, сделаем N+1 запрос и успешно отфильтруем вопросы без ответа
          @questions.to_a.delete_if { |q| q.answer.nil? }
          #Чуть не забыл, нам же нужно извлечь 10 вопросов для 2-й страницы, а не все что есть
          paginate(@questions)
          #PROFIT
          render "index"
      end
    
    end

    Ну в общем, код хорошо прокоментирован, думаю все и так ясно. =)

    SunnyMagadan, 09 Ноября 2012

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

    −166

    1. 1
    2. 2
    3. 3
    4. 4
    for ( my $i = 0 ; $i < $pmcount ; $i ++ ) { 
        $_ = $array_ref->[$i]; 
        # workin' hard
    }

    if ( $perl eq 'C' ) { print "govnokod повсеместно" }

    Elvenfighter, 06 Ноября 2012

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

    +56

    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
    <?php
    /*
    @package   Widgetkit
    * @author    YOOtheme http://www.yootheme.com
    */
    $sets = array_chunk($widget->items, $settings['items_per_set']);
    	foreach(array_keys($sets) as $s) {
    	  $nav[] = '<li><span></span></li>';
    	}
    ?>
    				<?php foreach ($sets as $set => $items) : ?>
    				<ul class="set">
    					<?php foreach ($items as $item) : ?>
    					<li>
    						<div><?php echo $item['navigation']; ?></div>
    					</li>
    					<?php endforeach; ?>
    				</ul>
    				<?php endforeach; ?>
    <?php 
    
    ?>

    И так в 230 файлах.
    Садо-мазо, блин!

    virtual_cia, 03 Ноября 2012

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

    +46

    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
    function send_attach(
     $to, //!< Email получателя
     $from, //!< Email отправителя
     $task, //!< Тема письма
     $text //!< Текст письма
     ) {
     
     $boundary = "--".md5(uniqid(time())); // генерируем разделитель
     $subject= $task." [".stripslashes($_SERVER['HTTP_HOST'])."]";
     $subject ='=?windows-1251?B?'.base64_encode($subject).'?=';
     $headers = "To: ".$to."\r\n";
     $headers="From: =?windows-1251?B?".base64_encode(stripslashes($_SERVER['HTTP_HOST']))."?= <".$from.">\r\n";
     $headers .= "MIME-Version: 1.0\n";
     $headers .= "Content-Type: multipart/mixed; boundary=\""
     .$boundary."\"\r\n";
     $headers .= "--".$boundary."\r\n";
     $headers .= "Content-type: text/html; charset=windows-1251 \r\n";
     $headers.="Subject: ".$subject."\r\n";
     $headers.="X-Mailer: PHP/".phpversion()."\r\n";
     $headers .= "Content-Transfer-Encoding: Quot-Printed\r\n\r\n";
     $headers .= '<html><head><title>Заявка с сайта</title></head>';
     $headers .= '<body>'.$text.'</body></html>';
     //.'<img src=\'24.jpg\' alt="img">
     $message_part = "";
     
     if(
     isset($_FILES['f_file']['tmp_name']) and
     is_array($_FILES['f_file']['tmp_name'])
     ) {
     foreach($_FILES['f_file']['name'] as $k => $v) {
     if (trim($v) != '') {
     
     $fname = $_FILES['f_file']['tmp_name'][$k];
     $fp = fopen($fname,"r");
     $file = fread($fp, $_FILES['f_file']['size'][$k]);
     fclose($fp);
     
     $message_part .= "--$boundary\r\n";
     $message_part .= "Content-Type: application/octet-stream\r\n";
     $message_part .= "Content-Transfer-Encoding: base64\r\n";
     $message_part .= "Content-Disposition: attachment; filename = \""
     .$_FILES['f_file']['name'][$k]."\"\r\n\r\n";
     $message_part .= chunk_split(base64_encode($file))."\r\n";
     
     }
     }
     }
     $message_part .= "--".$boundary."--\n";
     
     
     return mail($to, $subject, $message_part, $headers);
    
     }

    Функция отправки письма с сайта. Технически - вроде работает. А так, вполне себе "обфускация" получилась.

    Lblss, 16 Октября 2012

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

    −98

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    today = datetime.datetime.today()
    date_paid = profile.date_subscription_paid
    months_delta = lambda a, b: a - b + (12 if b > a else 0)
    months_count = months_delta(today.month, date_paid.month)
    months_count += 0 if date_paid.day > today.day else 1
    delta = relativedelta(months=months_count)
    profile.date_subscription_paid += delta
    profile.save()

    Моё лицо, когда увидел это.
    http://rghost.ru/40948114/image.png

    хуита, 15 Октября 2012

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

    +146

    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
    (function() {
        var elms = document.getElementsByClassName("tab");
        for( var i=0, l = elms.length; i<l; i++) {
            (function(i) {
                elms[i].onclick = function() {
                    var container=document.getElementsByTagName("span")[i];       
                    var this_height = container.offsetHeight;
                    if (document.getElementsByTagName("p")[i].style.height==this_height+"px") { // If 
                        var count = this_height;
                        var timeout_id = setInterval( function() {
                            if (count > 1) {
                                count--;
                            } else { clearTimeout(timeout_id); }
                            document.getElementsByTagName("p")[i].setAttribute("style", "height:"+count+"px");
                        } , 1)
                    } else {
                        var count = 0;
                        var timeout_id = setInterval( function() {
                            if (count < this_height) {
                                count++;
                            } else { clearTimeout(timeout_id); }
                            document.getElementsByTagName("p")[i].setAttribute("style", "height:"+count+"px");
                        } , 1)
                    }
                    
                };
            })(i);
        }
    })();

    Простейший аккордион.

    Emilco, 09 Октября 2012

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

    +20

    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
    D:\Sources\jimbot_at_cpp>make -f Makefile.win clean-full
    rm -f *.o lib.a dist/jimbot.exe
    
    D:\Sources\jimbot_at_cpp>make -f Makefile.win lib
    gcc -c sqlite3.c -pipe -O2 -g1 DSQLITE_THREADSAFE=1
    gcc.exe: error: DSQLITE_THREADSAFE=1: No such file or directory
    make: *** [lib] Error 1
    
    D:\Sources\jimbot_at_cpp>make -f Makefile.win
    g++ -c *.cpp -std=c++0x -O2 -g1 -pipe -Wno-deprecated -Wno-write-strings -Wno-de
    precated-declarations  -DDEBUG -DEASTER -DTESTER
    g++  -o dist/jimbot -pipe *.o -O2 -g1 lib.a -lpthread -lgnutls -lwsock32 -ladvap
    i32 -lcrypt32 -lsecur32 -ldnsapi -liconv
    g++.exe: error: lib.a: No such file or directory
    make: *** [all] Error 1
    
    D:\Sources\jimbot_at_cpp>

    JavaCoder, 06 Октября 2012

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

    +54

    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
    function mail_mime_to_array($imap,$mid,$parse_headers=false) 
             { 
    
                 $mail = imap_fetchstructure($imap,$mid);
    
                    // ИМЕННО ПОЧИНИЛ
                    if(!isset($mail->parts))  {
    
                            $mail->parts = array();
                            $mail->parts[0]['type'] = $mail->type;
                            $mail->parts[0]['encoding'] = $mail->encoding;
                            $mail->parts[0]['ifsubtype'] = $mail->ifsubtype;
                            $mail->parts[0]['subtype'] = $mail->subtype;
                            $mail->parts[0]['ifdescription'] = $mail->ifdescription;
                            $mail->parts[0]['ifid'] = $mail->ifid;
                            $mail->parts[0]['bytes'] = $mail->bytes;
                            $mail->parts[0]['ifdisposition'] = $mail->ifdisposition;
                            $mail->parts[0]['disposition'] = $mail->disposition;
                            $mail->parts[0]['ifdparameters'] =$mail->ifdparameters;
                            $mail->parts[0]['dparameters'] =$mail->dparameters;
                            $mail->parts[0]['ifparameters'] =$mail->ifparameters;
                            $mail->parts[0]['parameters'] =$mail->parameters;
    
                    }
    
                 $mail = mail_get_parts($imap,$mid,$mail,0); 
    
      
                    // ИМЕННО ПОЧИНИЛ
                    if(!isset($mail->parts))  {
    
                        $mail[1]['data'] = imap_base64($mail[1]['data']);  
                    }
    
                 if ($parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]); 
    
                 return($mail); 
    
             }

    мое говно-детище

    АЙФОН к примеру не отправляет заголовки и я не мог правильно под него запарсить вложения к почтовому сообщению.
    Решил не париться и именно починил, взял скотч решил эту проблему, просто залепил ее.

    Самое обидное, что даже не знаю как ее по нормальному решить.

    nepster, 01 Октября 2012

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