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

    +167

    1. 1
    2. 2
    3. 3
    4. 4
    ...
    chmod($file, 0777);
    unlink($file);
    ...

    На просторах интернета можно найти функцию для рекурсивного удаления папки со всем содержимым вот с таким фрагментом.

    Uchkuma, 13 Июля 2010

    Комментарии (15)
  2. Куча / Говнокод #3696

    +129

    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
    Author: decker <decker@personal-army>  2010-06-19 05:39:42
    Committer: decker <decker@personal-army>  2010-06-19 05:39:42
    
        fix potential race in reservation id generation
    
    @@ -97,7 +98,7 @@ public class VmInstances extends AbstractNamedRegistry<VmInstance> {
         do {
           MessageDigest digest = Hashes.Digest.MD5.get();
           digest.reset();
    -      digest.update( Long.toString( rsvId + launchIndex + System.currentTimeMillis() ).getBytes() );
    +      digest.update( Long.toString( rsvId + launchIndex + System.nanoTime( ) ).getBytes() );
     
           Adler32 hash = new Adler32();
           hash.reset();

    Вот так суровые калифорнийцы сурово чинят race...

    raorn, 13 Июля 2010

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

    +131

    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
    #include <stdio.h>
    
    void factorization(int num, int show) {
        int num1 = num;
        int n = 2;
        while ( n*n <= num1 ) {
            if ( num%n == 0 ) {
                num = num / n;
                if ( show )
                    printf( "%d\n", n );
            } else {
                n ++;
            }
        }
    }
    
    int main() {
        int i = 0;
        while ( i < 1000 ) {
            factorization(999999, 0);
            i ++;
        }
        return 0;
    }

    Опубликовано в одной из ссылок с http://habrahabr.ru/blogs/ruby/48952/ (если надо, точную ссылку найду позже).
    Код раскладывает число на простые множители тупым перебором делителей. Мало того, что этот код медленный, так он иногда последний множитель пропускает. Одновременно и ошибка, и скорость исправляются так:
    - while ( n*n <= num1 ) {
    + while ( n <= num ) {
    Неожиданно, правда?

    inkanus-gray, 13 Июля 2010

    Комментарии (18)
  4. Куча / Говнокод #3694

    +135

    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
    0 DIM P(4): DIM R(4)
    10 DATA 173, 48, 192, 136, 208, 5, 206, 1, 3, 240, 9, 202, 208, 245, 174, 0, 3, 76, 2, 3, 96,,0
    20 FOR X=770 TO 792
    30 READ Y
    40 POKE X, Y
    50 NEXT X
    60 DATA 192, 152, 144, 128, 114
    70 FOR I=0 TO 4
    80 READ P(I)
    90 NEXT I
    100 DATA 255, 128, 64, 64, 128
    FOR I=0 TO 4
    READ R(I)
    NEXT I
    FOR I=0 TO 4
    POKE 768, P(I)
    POKE 769, R(I)
    CALL 770
    NEXT I
    END

    Не совсем ГК, зато выглядит страшно. Шарманка для ПЭВМ «Агат-7». Вторая строка — машинные коды. Выглядит как обфуска. Вот листинг:

    .ORG 768
    L_768: .BYTE 0 ; НОТА
    L_769: .BYTE 0 ; ДЛИТЕЛЬНОСТЬ
    L_770: LDA $C030
    L_773: DEY
    BNE L_781
    DEC L_769
    BEQ L_790
    L_781: DEX
    BNE L_773
    LDX L_768
    JMP L_770
    L_790: RTS
    .BYTE $FF
    .BYTE 0

    Кстати, таблица команд процессора совместима с 6502, поэтому листинг похож на демонстрировавшийся в фильме «Терминатор».
    Строчки 7 и 11 — это массивы нот и длительностей соответственно.
    Самое страшное, что этот код мы набирали на уроке информатики в восьмом классе. Представляете, что может произойти, если ошибиться во второй строке? Хорошо, что у «Агатов» винчестеров не было...

    inkanus-gray, 13 Июля 2010

    Комментарии (23)
  5. Куча / Говнокод #3693

    +129

    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
    for i in 14 15 27 29 38; do # make a sed string to replace special characters
        hexval=$(printf \\\\x%02x $i)
        sedstr=$sedstr"s/'$hexval/chr($i)||'/g;s/$hexval'/'||chr($i)/g;s/$hexval/'||chr($i)||'/g;"
    done
    
    cat <<EOF | sqlplus -S $DB_LOGIN | sed $sedstr | awk -v dbdir=db/data '{print > dbdir"/"$3".sql"}'
    $SPINIT
    BEGIN
      FOR i IN (SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE' ORDER BY OBJECT_NAME) LOOP
        DECLARE
          all_cols VARCHAR2(32767) := '';
          TYPE data_cur_type IS REF CURSOR;
          data_cur data_cur_type;
          ins_str VARCHAR2(32767);
        BEGIN
          FOR j IN (SELECT DISTINCT(COLUMN_NAME) FROM USER_TAB_COLUMNS
                    WHERE TABLE_NAME=i.OBJECT_NAME AND
                    DATA_TYPE IN ('VARCHAR2', 'CHAR', 'NUMBER', 'DATE')
                    ORDER BY COLUMN_NAME) LOOP
            all_cols := all_cols || j.column_name || ',';
          END LOOP;
          IF all_cols is null THEN GOTO end_of_loop; END IF;
          all_cols := RTRIM(all_cols,',');
        
          OPEN data_cur FOR 'select ' ||
           '''INSERT INTO ' || i.object_name || ' (' || all_cols || ') VALUES (' || '''''''||' || replace(all_cols, ',', '||'''''',''''''||') || '||'''''');''' ||
           ' from ' || i.object_name || ' order by ' || all_cols;
          LOOP
            FETCH data_cur INTO ins_str;
            EXIT WHEN data_cur%NOTFOUND;
            dbms_output.put_line(ins_str);
          END LOOP;
          CLOSE data_cur;
        END;
    <<end_of_loop>> NULL;
      END LOOP;
    END;
    /
    EOF

    Проблеме экранирования посвящается.
    На стыке технологий: экспорт данных из БД в виде insert-ов. Там еще есть awk-шный код по разбору всего, что получилось, но он не такой ужасный.
    Автор я, если чо:)

    nil, 13 Июля 2010

    Комментарии (4)
  6. bash / Говнокод #3692

    −126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    .........................................
     if [[ "$rez" = "0%" ]]
     then
     let "i = i + 1"
     else
    #Ещё чуток индийского кода:)
     let "i = i + 0"
     fi
     done
    .........................................

    ccoder, 13 Июля 2010

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

    −864

    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
    Гавнокод --
    
    SELECT * FROM  Table1
    WHERE [Id] not in 
    		(
    		SELECT min([Id]) FROM Table1
    		WHERE [Code] in 
    				(
    				SELECT [Code] FROM Table1
    				GROUP BY [Code]									HAVING count([Code]) > 1
    				)
    					GROUP BY [Code]
    		)
    	and [Id] in 
    		(
    				SELECT [Id] FROM Table1
    				WHERE [Code] in (
    						SELECT [Code] FROM Table1
    						GROUP BY [Code]
    						HAVING count([Code]) > 1
    						)
    		)
    
    
    Нормальний варіант --
    
    SELECT * FROM Table1 AS a
    WHERE [Id] not in 
    		(
    			SELECT min([Id]) FROM a_ListParam
    			WHERE a_ListParam.[Code] = a.[Code]
    		)

    O_O, 12 Июля 2010

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

    +156

    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
    // считает кол-во основных вопросов в тесте
    function get_qnum($file_name) {
    $dom = get_str_file($file_name);
    $root = $dom->documentElement;
    $nodes = $root->childNodes;
    
    $currentTask = array();
    foreach ($nodes as $node) {
            if ($node->nodeName == 'TASK') {
                    $currentTaskName = $node->getAttribute('NAME');
                    if ($currentTaskName == $_SESSION['TEOR']) {
                            $currentTask['NAME'] = $currentTaskName;
                            $currentTask['QUEST'] = array();
                            $Task_info = $node->childNodes;
    
                            foreach ($Task_info as $info) {                           
                                    if ($info->nodeName == 'QUEST') 
                                              $currentTask['QUEST'][] = ss_qstn_desc($info);                               
                                    if ($info->nodeName == 'QUESTYESNO') 
                                              $currentTask['QUEST'][] = ss_qstnyesno_desc($info);                            
                            }
                    }
            }
    }
    return count($currentTask['QUEST']);
    }

    cyberuta, 12 Июля 2010

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

    +89

    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
    ## dup_hq - merge ##
     dup     = opos!=pos || abs(dm)<2 || abs(dm)==3 ? 0 : dcn*5<dbc && dnn*5<dbc && 
    (dcn<1.25*thr || bn<bc && pos==lpos) || (dcn*dcn<dbc || dcn*5<dbc) && bn<bc && pos==lpos 
    && dnn<.9*dbc || dnn*9<dbc && dcn*3<dbc ? 1 : (dbc*dbc<dcn || dbc*5<dcn) && 
    bb<bc && pos==lpos && dbb<.9*dcn || dbb*9<dcn && dbc*3<dcn ||  dbb*5<dcn && 
    dbc*5<dcn &&  (dbc<1.25*thr || bb<bc && pos==lpos) ? -1 : 0
    mer = bom==false && opos==pos && dup==0 && abs(dm)>2 && 
          (dbc*8<dcn || dbc*8<dbb || dcn*8<dbc || dcn*8<dnn || dbc*2<thr ||
           dcn*2<thr || dnn*9<dbc && dcn*3<dbc || dbb*9<dcn && dbc*3<dcn)
    
    
    add  = bp1*cn2>bn2*cp1*(1+thr*.01) && bn0*cn2>bn2*cn0*(1+thr*.01) && 
              cn2*bn1>cn1*n2*(1+thr*.01)
    dup  = bom ? (bn0>bp2 && bn0>=bp1 && bn0>bn1 && bn0>bn2 && cn0<125 ? 
             (d12*d12<d10 || d12*9<d10) ? 1 :  (d10*d10<d12 || d10*9<d12) ? 
             0 : 4 : bp1>bp3 && bp1>=bp2 && bp1>bn0 && bp1>bn1 ? 1 : 0) : dup!=0 ? 
             dup : om>0 && om<5 ? (bbool==false ? 0 : om==4 && bp1*cn1<bn1*cp1 ||
             om==3 && d10<d01 || om==1 ? -1 : 1) : om==5 ? (bp1*cp2>bp2*cp1*(1+thr*.01) && 
             bn0*cp2>bp2*cn0*(1+thr*.01) && cp2*bn1>cn1*bp2*(1+thr*.01) &&
             (add==false || cp2*bn2>cn2*bp2) ? -2 : add ? 2 : bn0*cp1>bp1*cn0 && 
             (bn0*cn1<bn1*cn0 || cp1*bn1>cn1*bp1) ? -1 : bn0*cn1>bn1*cn0 ? 1 : 0) : 0

    это называется AviSynth - и это вполне нормальный скрипт, ибо другого пути там просто нет, да и альтернатив AviSynthy пока нет

    3.14159265, 12 Июля 2010

    Комментарии (18)
  10. Java / Говнокод #3688

    +79

    1. 1
    long sourceBaseId = Long.parseLong(_depId+"00000000000000");

    konsoletyper, 12 Июля 2010

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