1. C# / Говнокод #11989

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public sealed class CustomProvider
    {
         private readonly object _SyncRoot = new object();
     
        public CustomProvider()
        {
                 lock(_SyncRoot)
                 {

    А вообще, если честно, создание экземпляра класса предка (object) всех классов, чтобы произвести захват критической секции - это так печально. Одному мне эта техника кажется удобной, но странной? Нет чтобы создать класс CriticalSection или что-то такое. А они создают объект совсем не связанный с синхронизацией. Не самодокументированно и тут явно какая-то переголова скрывается при создании объекта, по затратам памяти и системных ресурсов, что в каждый объект на уровне имплементации языка приходится по критической секции добавлять.
    Кстати, там как реализована эта критическая секция? Хендл этой критической секции фактически системный ресурс и для него по идеи нужно вызывать Dispose, но это не происходит. Тогда почему этих системных хендлов критической секции хватает, хотя ситуация без Dispose похожа на утечку системных ресурсов?

    Если кто подумал про lock(this), то это плохо с точки зрения проектирования класса и его последующего использования, поэтому идея с private _SyncRoot - это правильно. Ведь lock(this) (под this в последнем случае имеется данный экземпляр класса), может использоваться и снаружи класса, что может быть пересинхронизацией.

    HaskellGovno, 24 Октября 2012

    Комментарии (40)
  2. Си / Говнокод #11988

    +138

    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
    ;;
    ;
    ;
    ;;;
    void fuck()
    {
    	puts("Fuck!");
    	getch();
    }
    void main (int argc, char ** argv) {
    	
    	char ipstr[] = "192.168.1.140";
    
    	int ipint = IPStrToInt(ipstr);
    	atexit(fuck);
    	printf("%s == %ld\n",ipstr,ipint);
    	Init(1,main);
    }
    
    void Init(int govno) {
    	int * p = &govno;
    	void (*x) ()=(void *) *(p+1);
    	printf("%x", *p);
    	x((void *)0);
    }

    Оказывается, благодаря тому, что компилятору ссей пофиг на количество переданных в функцию аргументов, можно сделать неплохую реализацию while(true), который завершается тогда, когда соседним программам становится не насрать на переполнение стека...

    silenter, 24 Октября 2012

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

    +141

    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
    public static string GetFormURLParams(bool ld, bool размещен, bool зарегистр, bool поступил, bool неДляРазмещения, bool удален,
    									  string nomerDoc, string vhIshNom, string naim, string ntd,
    									  string vidDoc, string razdel, string tipDok,
    									  NullableDateTime датаДок1, bool датаДокПериод, NullableDateTime датаДок2,
    									  NullableDateTime датаРег1, bool датаРегПериод, NullableDateTime датаРег2,
    									  Территория территория, Улица улица, String дом1, Boolean диапазон, String дом2,
    									  string keyWords, bool scYes, bool scNo, bool scCancel)
    {
    	var str = GetOnlyOwnParams(ld, размещен, зарегистр, поступил, неДляРазмещения, удален,
    							   nomerDoc, vhIshNom, naim, ntd,
    							   vidDoc, razdel, tipDok,
    							   keyWords, scYes, scNo, scCancel);
    
    	str += DatePickerPeriod.GetParams("dt1", датаДок1, датаДокПериод, датаДок2);
    	str += DatePickerPeriod.GetParams("dt2", датаРег1, датаРегПериод, датаРег2);
    	str += AdresSearch.GetParams("adr", территория, улица, дом1, диапазон, дом2);
    
    	return str;
    }

    ни много ни мало

    wAngel, 24 Октября 2012

    Комментарии (14)
  4. PHP / Говнокод #11986

    +53

    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
    protected function CreateClass($className, $params) {
    		switch (count($params)) {
    			case 0:
    				return new $className();
    				break;
    			case 1:
    				return new $className($params[0]);
    				break;
    			case 2:
    				return new $className($params[0], $params[1]);
    				break;
    			case 3:
    				return new $className($params[0], $params[1], $params[2]);
    				break;
    			case 4:
    				return new $className($params[0], $params[1], $params[2], $params[3]);
    				break;
    			case 5:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4]);
    				break;
    			case 6:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4], $params[5]);
    				break;
    			case 7:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4], $params[5], $params[6]);
    				break;
    			case 8:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4], $params[5], $params[6], $params[7]);
    				break;
    			case 9:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4], $params[5], $params[6], $params[7], $params[8]);
    				break;
    			case 10:
    				return new $className($params[0], $params[1], $params[2], $params[3], $params[4], $params[5], $params[6], $params[7], $params[8], $params[9]);
    				break;
    			default:
    				echo "Too many arguments";
    				return null;
    				break;
    		}
    }

    Продолжение одного нашумевшего блокбастера: Радж и "шоколадная" фабрика.
    Исходники взяты из компонента JEvents для Joomla. Файл из папки "icalevent". Думаю что стоит сделать акцент на iCAL, есть в этом что-то особенное.

    SunnyMagadan, 24 Октября 2012

    Комментарии (30)
  5. Java / Говнокод #11985

    +74

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    public void aMethod() {
        try {
            int t = 0;
            t = t / t;
        } catch (Exception e) {
            System.out.println("aMethod");
            for (StackTraceElement element : e.getStackTrace()) {
                System.out.println("aMethod" + element.getClassName() + " " + element.getMethodName() + " " + element.getLineNumber() );
            }
        }
    ...//дополнительная "логика"
    }

    оригинальный способ узнать кто же вызвал aMethod

    Cat4eg, 24 Октября 2012

    Комментарии (17)
  6. C# / Говнокод #11984

    +136

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    double thresholdDepth = 0;
    if (!txtThresholdDepth.Text.Equals(String.Empty) && !txtThresholdDepth.Text.StartsWith(CultureInfo.CurrentCulture.NumberFormat.NegativeSign))
    {
    	thresholdDepth = Double.Parse(txtThresholdDepth.Text);
    }
    else
    {
    	Log.Print("Input threshold value");
    	return;
    }

    redrick, 24 Октября 2012

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

    +30

    1. 1
    if( str[0] == '<' || str[1] == '?' || str[2] == 'x' || str[3] == 'm' || str[4] == 'l') {...}

    Проверка на xml-ность

    bazhenovc, 24 Октября 2012

    Комментарии (20)
  8. JavaScript / Говнокод #11982

    +154

    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
    var num_normalize = function (num) {
            if (typeof num == 'string') {
                if (num.test('.')) {
                    return parseFloat(num).toFixed(2);
                }
                else {
                    return parseInt(num);
                }
            }
            else if (parseInt(num) == parseFloat(num)) {
                return parseInt(num);
            }
            else return parseFloat(num).toFixed(2);
        };

    Когда-то писал функцию для приведение чисел к одному виду, которые иногда приходили в виде стринги.
    За говнокод сойдет?

    Stud, 24 Октября 2012

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

    −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
    1CClientBankExchange
    ВерсияФормата=1.01
    Кодировка=Windows
    Получатель=
    ДатаНачала=25.09.2012
    ДатаКонца=25.09.2012
    ...
    СекцияРасчСчет
    ...
    КонецРасчСчет
    СекцияДокумент=Платежное поручение
    ...
    КонецДокумента
    КонецФайла

    Формат файла: Стандарт обмена с системами "Клиент банка"
    http://v8.1c.ru/edi/edi_stnd/100/101.htm

    Пидорва изобрела ini-файлы. Но убило не это, а это:
    >Кодировка=Windows

    Centry, 24 Октября 2012

    Комментарии (24)
  10. JavaScript / Говнокод #11980

    +161

    1. 1
    eval( array.join('+') );

    Конечно, я понимаю что всякие Haskel там, то, сё...

    bot, 24 Октября 2012

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