1. Си / Говнокод #14256

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    string=(char*)malloc(N);
     k=fread(string,sizeof(char),N,f);
     while (k==N)
     {
     free(string);
     N=N*2;
     rewind(f);//возращает в начало файла
     string =(char*)malloc(N);
     k=fread(string,sizeof(char),N,f);
     }
     fclose (f);

    Сегодня зачоты ставил...
    студенты читают из файла. В буфер. Я придираюсь к тому, что размер файла может быть больше размера буфера....

    Исправили...

    klavdiev, 22 Декабря 2013

    Комментарии (106)
  2. C# / Говнокод #14255

    +128

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    //...
    for (int i = 0; i < size; i++)
    {
        //...
        if (i == size + 2) break;
        //...
    }
    //...

    Увидел у соседа в коде. Осторожность никогда не помешает :)

    MoN, 21 Декабря 2013

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

    +83

    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
    // java.io.FilterOutputStream
    public void close() throws IOException {
        try {
            flush();
        } catch (IOException ignored) {
        }
        out.close();
    }
    
    // тестовый код
    try (OutputStream os = new BufferedOutputStream(new FileOutputStream("/tmp/little_virtual_fs/1.txt"))) {
        byte[] buf = new byte[2028544];
        os.write(buf, 0, 2028544); // максимальный размер файла, который влезает на нашу фс
        os.write(buf, 0, 5); // и еще немножко
        //os.flush();
    }

    А сейчас, на арене нашего цирка - очередная жабопроблема!

    Как думаете, каков результат выполнения тестовой программы?

    Запишет 2028549 байт? Хрен там, места маловато.
    Выдаст IOException на write()? Хрен там, буферизация.
    Выдаст IOException на close()? Хрен там, его сожрала реализация FilterOutputStream.

    Результат: файл не дописался, исключения нет.
    Решение: всегда дергать flush() перед close() самому или не юзать буферизованный поток.

    bormand, 21 Декабря 2013

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

    −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
    Функция ПолучитьОбратнуюМетрику(Знач Метрика) Экспорт
    
    	ТаблицаКоординат = СоздатьТаблицуКоординат();
    	ПреобразоватьМетрикуВТаблицуКоординат(Метрика,ТаблицаКоординат);
    	ТаблицаКоординат.Колонки.Добавить("ПорядковыйНомер");
    	
    	Сч = 1;
    	Для каждого СтрокаТаблицаКоординат Из ТаблицаКоординат Цикл
    		СтрокаТаблицаКоординат.ПорядковыйНомер = Сч;
    		Сч = Сч + 1;
    	КонецЦикла;
    	
    	ТаблицаКоординат.Сортировать("ПорядковыйНомер УБЫВ");
    	
    	ОбратнаяМетрика = "";
    	ПреобразоватьТаблицуКоординатВМетрику(ТаблицаКоординат,ОбратнаяМетрика);
    	Возврат ОбратнаяМетрика;
    
    КонецФункции

    TamerlanDE, 20 Декабря 2013

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

    −104

    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
    Функция Дистанция(Откуда, Куда) Экспорт
    
    	Пи = 3.1415926535897932;
    	
    	ОткудаШиротаВРадианах 	= Откуда.Широта * Пи / 180;
    	ОткудаДолготаВРадианах 	= Откуда.Долгота * Пи / 180;
    	КудаШиротаВРадианах 	= Куда.Широта * Пи / 180;
    	КудаДолготаВРадианах 	= Куда.Долгота * Пи / 180;
    	Аргумент				= Sin(КудаШиротаВРадианах) * Sin(ОткудаШиротаВРадианах) +
            Cos(КудаШиротаВРадианах) * Cos(ОткудаШиротаВРадианах) * Cos(КудаДолготаВРадианах - ОткудаДолготаВРадианах);
    		
    	Аргумент  = ?(Аргумент > 1, 1, Аргумент);
    	Аргумент  = ?(Аргумент < -1, -1, Аргумент);
    		
        Возврат Окр(6378000 * ACos(Аргумент));
    
    КонецФункции

    TamerlanDE, 20 Декабря 2013

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

    +71

    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
    @Override
        List search(Long ownerId, Long projectId, String docnumber, String ctr1, String ctr2, Long dateFrom, Long dateTo, String contract,
                    Double amountFrom, Double amountTo, Double vatAmountFrom, Double vatAmountTo, Double withVatAmountFrom,
                    Double withVatAmountTo, Boolean defect, DocumentDefect d, Long vatId, Integer limit, String sortField, String order, String docType) {
    
            // доступные проекты
            List projects = projectDAO.findAll(ownerId)
            
            if(!projects){
                logger.warn("Ошибка отображения списка документов: нет доступных проектов: ownerId:$ownerId")
                return []
            }
            
            Criteria criteria = currentSession.createCriteria(DocumentView)
                .createAlias("document", "d")//
                .createAlias("d.project", "p")//
                .add(Restrictions.in("p.id", projects.id))//
    
    //            if(projectId)
    //                criteria.add(Restrictions.eq("d.project.id", projectId))
    
            if (docnumber)
                criteria.add(Restrictions.ilike("docNumber", docnumber, MatchMode.ANYWHERE))
            if (ctr1)
                criteria.add(Restrictions.ilike("supplierName", ctr1, MatchMode.ANYWHERE))
            if (ctr2)
                criteria.add(Restrictions.ilike("customerName", ctr2, MatchMode.ANYWHERE))
            if (dateFrom) {
                Calendar date1 = Calendar.instance
                date1.setTime(new Date(dateFrom))
                criteria.add(Restrictions.ge("docDate", date1))
            }
            if (dateTo) {
                Calendar date1 = Calendar.instance
                date1.setTime(new Date(dateTo))
                date1.add(Calendar.DAY_OF_MONTH, 1)
                criteria.add(Restrictions.lt("docDate", date1))
            }
            if (contract)
                criteria.add(Restrictions.ilike("contract", contract, MatchMode.ANYWHERE))
            if (amountFrom)
                criteria.add(Restrictions.ge("amount", amountFrom))
            if (amountTo)
                criteria.add(Restrictions.le("amount", amountTo))
            if (vatAmountFrom)
                criteria.add(Restrictions.ge("vatAmount", vatAmountFrom))
            if (vatAmountTo)
                criteria.add(Restrictions.le("vatAmount", vatAmountTo))
            if (withVatAmountFrom)
                criteria.add(Restrictions.ge("totalAmount", withVatAmountFrom))
            if (withVatAmountTo)
                criteria.add(Restrictions.le("totalAmount", withVatAmountTo))
            if (defect) {
                criteria.add(Restrictions.isNotNull("defect"))
                if (d)
                    criteria.add(Restrictions.eq("defect", d))
            }
    //        if (vatId)
    //            criteria.add(Restrictions.eq("d.", withVatAmountTo))
    
            if (docType) {
                def dt = DocumentType.values().find { it.link == docType || it.code == docType }
                if (dt)
                    criteria.add(Restrictions.like("docLink", dt.code, MatchMode.START))
                else
                    logger.error("Неправильное значение параметра фильтрации по виду документа [d_t:$docType]. Допустимые значения ${DocumentType.values().code}")
            }
    
            // получаем общее кол-во записей без ограничений по странице
            def rowCount = criteria.setProjection(Projections.rowCount()).uniqueResult() as Integer
    
            List result = criteria.setProjection(null)//
                    .setResultTransformer(Criteria.ROOT_ENTITY)//
                    .addOrder(Order."$order"(sortField))//
                    .setMaxResults(limit)//
                    .list()
    
            [rowCount, result]
    
        }

    поиск ?!

    floppy, 20 Декабря 2013

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

    +64

    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 message2 = -1;
          for (int i = 0; i < 5; i++)
          {
              QFile f;
              f.setFileName(QString("/var/log/messages.") + QString::number(i));
              if (f.exists())
              {
                  message2 = i;
                  break;
              }
          }
    
          if (message2 != -1 )
            QFile::copy(QString("/var/log/messages.")+QString::number(message2), QString(NMP_DATA_DIR) + QString("messages.") +  QString::number(message2) +"-"+ _section);

    Пытается скопировать все файлы /var/log/messages, messages.0, ...

    leotrubach, 19 Декабря 2013

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

    +143

    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
    const int index64[64] = {
        0,  1, 48,  2, 57, 49, 28,  3,
       61, 58, 50, 42, 38, 29, 17,  4,
       62, 55, 59, 36, 53, 51, 43, 22,
       45, 39, 33, 30, 24, 18, 12,  5,
       63, 47, 56, 27, 60, 41, 37, 16,
       54, 35, 52, 21, 44, 32, 23, 11,
       46, 26, 40, 15, 34, 20, 31, 10,
       25, 14, 19,  9, 13,  8,  7,  6
    };
     
    /**
     * bitScanForward
     * @author Martin Läuter (1997)
     *         Charles E. Leiserson
     *         Harald Prokop
     *         Keith H. Randall
     * "Using de Bruijn Sequences to Index a 1 in a Computer Word"
     * @param bb bitboard to scan
     * @precondition bb != 0
     * @return index (0..63) of least significant one bit
     */
    int bitScanForward(U64 bb) {
       assert (bb != 0);
       return index64[((bb & -bb) * 0x03f79d71b4cb0a89) >> 58];
    }

    нашёл на кывте

    TarasB, 19 Декабря 2013

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

    +153

    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
    /*где-то в начале: error_reporting(0);*/
    
    class PhocaGalleryFile{
    	function getCSSFile($id = 0, $fullPath = 0) {
    		if ((int)$id > 0) {
    			$db = &Factory::getDBO();
    			$query = 'SELECT a.filename as filename, a.type as type'
    				.' FROM #__styles AS a'
    			    .' WHERE a.id = '.(int) $id;
    			$db->setQuery($query, 0, 1);
    			$filename = $db->loadObject();
    			if (isset($filename->filename) && $filename->filename != '') {
    				if ($fullPath == 1 && isset($filename->type)) {
    					return self::getCSSPath($filename->type). $filename->filename;
    				} else {
    					return $filename->filename;
    				}
    			}
    		}
    
    		return false;
    	}
    
     . . .
    }

    Поубивал пустые строки (по 2 штуки между каждой строкой кода) и комменты вида:
    /* ===============
    == This function is geting a CSSFile fron database .....
    ===============
    */
    Гы! Код для заказчика должен выглядеть наукообразно и непонятно.
    И обязательно выдавать Notices и Warnings.

    virtual_cia, 19 Декабря 2013

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

    +79

    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
    import java.util.Random
    
    def random = new Random()
    def latitude = ''
    def longitude = ''
    def validDigits = 1..9
    
    for(def i in 1..16) {
    	if(i == 3){
    		latitude += '.'
    		longitude += '.'
    	}
    	latitude += validDigits[random.nextInt(validDigits.size())]
    	longitude += validDigits[random.nextInt(validDigits.size())]
    }
    
    testRunner.testCase.testSuite.setPropertyValue('soapuiclient.user.coordinates.latitude', latitude)
    testRunner.testCase.testSuite.setPropertyValue('soapuiclient.user.coordinates.longitude', longitude)

    Есть у нас монга, на ней хранятся в координаты. Проиндексировано всё, поиск быстрый, все дела... Ну и на это дело тест есть в SoapUI. Генерятся случайные координаты, сохраняются и вычитываются. Всё работало до поры до времени..

    И тут тест упал. На ровном месте регрессия. Лезу в логи, нахожу ошибку: координаты: [ 51.16344233595981, 94.45587248671733 ]. Ага, думаю, долгота больше 90 градусов... Проверил - так и есть, умняшка монга валидирует координаты. Ну понятно, рандом подкачал, ща поправим. Но там был не просто рандом...

    madhead, 19 Декабря 2013

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