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

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

    +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
    var
        CommHandle:integer;
        DCB:TDCB;
        Stat:TComStat;
        Kols,TransMask,Errs:DWord;
        Ovr:TOverlapped;
        s:string;
        i:integer;
    
    {Чтение канала n}
    function ReadChannel(n:integer):string;
    begin
    inc(n,32);                                                                                         //код запроса для прибора (это по спецификации прибора)
    s:=chr(n);                                                                                         //символ запроса
    WriteFile(CommHandle,s[1],length(s),Kols,@Ovr);                   //оправили этот код в прибор
    TransMask:=0;                                                                               //маска любого события в порте
    Ovr.hEvent:=CreateEvent(nil, True, False, nil);                          //хз
    repeat
    if not WaitCommEvent(CommHandle, TransMask, @Ovr) then                                                       //если приём закончен не до конца, то...
      if GetLastError = ERROR_IO_PENDING then WaitForSingleObject(Ovr.hEvent, INFINITE);           //при условии "хз" подождать ещё чуть-чуть
    
    ClearCommError(CommHandle,Errs,@Stat);                                          //скинуть длину байт из буфера порта в переменную Stat
    Kols:=Stat.cbInQue;                                                                                    //выяснить длину символов
    until (Kols=1) or (Kols=14);                                                                        //закончить, если в канале пусто (1) или данные есть (14)
    
    SetLength(s,Kols);                                                                                       //установить переменную s длиной Kols
    ReadFile(CommHandle,s[1],Kols,Kols,@Ovr);                                         //прочитать данные из порта в s, обнулив буфер
    if length(s)=1 then ReadChannel:='Пусто';                                             //дальше просто идёт обработка полученных данных
    if length(s)=14 then ReadChannel:=copy(s,5,7);
    end;
    
    
    
    {Основной код}
    for i:=1 to 60 do Value:=ReadChannel(i);                                         //ПОЛУЧИТЬ ДАННЫЕ ИЗ ПОРТА n

    Имеется прибор с хранением данных в 60 каналах. Связь осуществляется по RS-232.
    Чтобы получить данные, нужно отправить № кода нужного канала. В ответ придут данные этого канала.
    Если канал пустой, то приходит 1 байт, если данные есть, то 14 байт.
    Создана функция ReadChannel(n) с запросом данных из канала n.

    ПРОБЛЕМА:
    Прочитать все 60 каналов удаётся иногда 3 раза, иногда 15 раз. Но обязательно когда-нибудь программа зависнет на
    WaitCommEvent(CommHandle, TransMask, @Ovr), так ничего и не получив из порта.
    Если между командами
    WriteFile и WaitCommEvent
    поставить sleep(50) //9600 бод = 1200 б/с, то бишь 12 мс на 1 байт
    то всё пашет. Но это не дело же привязываться ко времени?
    Как избавиться от зависания на WaitCommEvent, чтобы процесс продолжился?
    Если прибор не получил байт, из-за чего не ответил, как это проверить? "Данных нет уже 0,5 с, значит и не будет; отправлю этот байт ещё раз".

    sbs, 10 Июня 2011

    Комментарии (13)
  3. Java / Говнокод #6916

    +79

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    private double findVar(String vname) throws InterpreterException {
        if (!Character.isLetter(vname.charAt(0))) {
            handleErr(SYNTAX);
            return 0.0;	// ?!
        }
        return vars[Character.toUpperCase(vname.charAt(0))-'A'];
    }

    dwinner, 10 Июня 2011

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

    +126

    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
    private string ReadFile(string filePath)
    {
        string fileText = string.Empty;
        int openAttempts = 0;
        try
        {
            using (FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
            {
                using (StreamReader sr = new StreamReader(fs, Encoding.GetEncoding(1252)))
                {
                    fileText = sr.ReadToEnd();
                    if (!sr.EndOfStream)
                    {
                        sr.Close();
                        fs.Close();
                        throw new Exception();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            //Throw an error if the number of attempts is equal to the number of configured retries
            if (openAttempts == 20)
                throw new Exception(ex.Message);
            else
            {
                openAttempts += 1;
                Thread.Sleep(1000); //Put the thread to sleep for the configured amount of time
                ReadFile(filePath);
            }
        }
    
        return fileText;
    }

    Тут все, и управление исключениями, и бессмысленная рекурсия, и глупые ошибки. Про то, что это можно было заменить на одну строчку я молчу даже.

    Jabberwok, 10 Июня 2011

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

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    \begin{equation*}
    \begin{split}
      \Delta B_m^{(\text{Т})} &= \left(\left(\frac{\upmu_0N}{2L}\left(\frac{\frac{1}{2}L - z}{\sqrt{R^2 + (\frac{1}{2}L - z)^2}} + \frac{\frac{1}{2}L + z}{\sqrt{R^2 + (\frac{1}{2}L + z)^2}}\right)\Delta I\right)^2 + \right.\\
      &+ \left(\frac{\upmu_0NI_mD}{8L}\left(\frac{\frac{1}{2}L - z}{\sqrt{(\frac{D^2}{4} + (\frac{1}{2}L - z)^2)^3}} + \frac{\frac{1}{2}L + z}{\sqrt{(\frac{D^2}{4} + (\frac{1}{2}L + z)^2)^3}}\right)\Delta D\right)^2 + \\
      &+ \left(\frac{\upmu_0NI_m}{4L^2}\left(\frac{L(\frac{1}{2}L - z)^2}{\sqrt{(R^2 + (\frac{1}{2}L - z)^2)^3}} + \frac{L(\frac{1}{2}L + z)^2}{\sqrt{(R^2 + (\frac{1}{2}L + z)^2)^3}} - \right.\right. \\
      &- \left.\left.\frac{2z}{\sqrt{R^2 + (\frac{1}{2}L - z)^2}} + \frac{2z}{\sqrt{R^2 + (\frac{1}{2}L + z)^2}}\right)\Delta L\right)^2 + \\
      &+ \left(\frac{\upmu_0NI_m}{2L}\left(\frac{(\frac{1}{2}L - z)^2}{\sqrt{(R^2 + (\frac{1}{2}L - z)^2)^3}} - \frac{(\frac{1}{2}L + z)^2}{\sqrt{(R^2 + (\frac{1}{2}L + z)^2)^3}} - \right.\right. \\
      &- \left.\left.\left.\frac{1}{\sqrt{R^2 + (\frac{1}{2}L - z)^2}} + \frac{1}{\sqrt{R^2 + (\frac{1}{2}L + z)^2}}\right)\Delta z\right)^2 \right)^{\frac{1}{2}}
    \end{split}
    \end{equation*}

    LaTeX

    mityada, 07 Июня 2011

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

    +171

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    <?php
    
    $usr  = $_POST['user'];
    $usr = mysql_escape_string($usr);
    
    $query = "SELECT * FROM $admins WHERE name = '".$_POST['user']."'";
    $lst = @mysql_query($query);

    Заглянул в упомянутую ниже Esay Engne Site CMS
    Несколько строк кода пропустил, для простоты чтения, на эту конструкцию пропущенное никак не влияло.

    yasenhui, 05 Июня 2011

    Комментарии (13)
  7. Pascal / Говнокод #6797

    +94

    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
    procedure rayxtriangle(Xa,Ya,Za, {Точка отправления луча}
                                        X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3 : real; {Координаты полигона (триангла)}
                                        Vx,Vy,Vz : real;{Вектор направления луча} Var Xc,Yc,Zc : real;{Точка пересечения}
                                        bol : boolean {Для проверки пересечения триангла});
    Var A,B,C,D : real;
          k : real;
          ac1,ac2,ac3 : real;
    begin
      A:=(Y2-Y1)*(Z3-Z1)-(Z2-Z1)*(Y3-Y1); //Вычисляем вектор нормали к треугольному полигону (векторное произведение)
      B:=(Z2-Z1)*(X3-X1)-(X2-X1)*(Z3-Z1);
      C:=(X2-X1)*(Y3-Y1)-(Y2-Y1)*(X3-X1);
      D:=-A*X1-B*Y1-C*Z1;
      k:=-(A*Xa+B*Ya+C*Za+D)/(A*Vx+B*Vy+C*Vz); //поскольку вектора луча (Vx Vy Vz) и вектор с даной
                                                                                  //точки к точке пересечения (Xc-Xa, Yc-Ya, Zc-Za) - колинеарны
                                                                                  //ето соотношение выведено мною, обьяснение было раньше (в предыдущем ответе)
      Xc:=k*Vx+Xa; //Вычисляем точку пересечения луча с полигоном
      Yc:=k*Vy+Ya;
      Zc:=k*Vz+Za;
                            //здесь проверяем лежыт ли даная точка в треугольном полигоне
                            //ac1,ac2,ac3 арккосинусы углов между векторами с точки пересечения (Xc Yc Zc)
                            //к вершинам треугольника (из скалярного произведения) 
                            //Для других полигонов (4,5,6... и т.д. угольных) надо побольше вычислений 
      ac1:=arccos(((x1-xc)*(x2-xc)+(y1-yc)*(y2-yc)+(z1-zc)*(z2-zc))/(sqrt(sqr(x1-xc)+sqr(y1-yc)+sqr(z1-zc))*sqrt(sqr(x2-xc)+sqr(y2-yc)+sqr(z2-zc))));
      ac2:=arccos(((x2-xc)*(x3-xc)+(y2-yc)*(y3-yc)+(z2-zc)*(z3-zc))/(sqrt(sqr(x2-xc)+sqr(y2-yc)+sqr(z2-zc))*sqrt(sqr(x3-xc)+sqr(y3-yc)+sqr(z3-zc)))); 
      ac3:=arccos(((x3-xc)*(x1-xc)+(y3-yc)*(y1-yc)+(z3-zc)*(z1-zc))/(sqrt(sqr(x3-xc)+sqr(y3-yc)+sqr(z3-zc))*sqrt(sqr(x1-xc)+sqr(y1-yc)+sqr(z1-zc)))); 
      if (ac1+ac2+ac3=pi) then bol:=true else bol:=false; //Если сума етих углов=360 градусов значит точка в треугольнике
      //Если точка пересечения найдена тогда bol=true и ее координаты Xc Yc Zc                              
    end;

    А всё потому, что векторную алгебру надо знать, любить и уважать, ибо иначе такая хрень выходит.
    Источник: http://www.gamedev.ru/code/forum/?id=148128

    TarasB, 31 Мая 2011

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

    +174

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    else if(!in_array($format,$fmt)){
    		$error = 'Блядина. Что за формат?';
    	}
    	else if(in_array($format,$fmt)){
    		    move_uploaded_file($_FILES['user_avatar']['tmp_name'], $uploadfile);
    	}

    stuffort, 30 Мая 2011

    Комментарии (13)
  9. PHP / Говнокод #6788

    +163

    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
    /**
       * Get or instance self object
       *
       * @return self object
       */
      public static function get_object () {
        // call as static
        static $storage;
        // check inited object
        if ( !isset($storage) ) {
          // init object
          $storage = new self();
        }
        // return object
        return is_object($storage) ? $storage : false;
      }

    NetCat не перестает удивлять.
    Вы только посмотрите на последнюю строчку метода
    :D

    miraage, 30 Мая 2011

    Комментарии (13)
  10. PHP / Говнокод #6782

    +165

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    //This is an optimization. We assume than no step can take more than one year.
      if($time_limit > 0)
       $end_time = time() + $time_limit;
      else
       $end_time = time() + 365*24*3600; // One year

    Источник: исходники битрикса, (/bitrix/modules/iblock/classes/general/cml2.php). Код используется при импорте из 1с.

    leonard, 30 Мая 2011

    Комментарии (13)
  11. C++ / Говнокод #6764

    +175

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    if(v.isArray)value->setText("Array");
        else value->setText(v.value.value("value").value<QString>());
        if(v.value.value("color",QColor()).value<QColor>()!=QColor())
        {
            value->setBackgroundColor(v.value.value("color").value<QColor>());
        }

    Value, value, value, value, value, value, value ...

    petersvp, 26 Мая 2011

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