1. Список говнокодов пользователя Dummy00001

    Всего: 94

  2. C++ / Говнокод #5034

    +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
    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
    AClass::AClass()
    {
            char c;
    	pipe( m_ThreadPipeA );
    	pipe( m_ThreadPipeB );
            write( m_ThreadPipeA[0], &c, sizeof(c) );
    }
    
    void AClass::JobCreatorThread()
    {
    	char c;
    	do {
    		/* prepare new job and pass it to the thread pool */
    		read( m_ThreadPipeA[1], &c, sizeof(c) );
    		m_CurrJob = IncomingJob;
    		write( m_ThreadPipeB[0], &c, sizeof(c) );
    	} while (!m_Shutdown);
    }
    
    void AClass::ThreadPoolMethod()
    {
    	char c;
    	do {
    		Job j;
    		read( m_ThreadPipeB[1], &c, sizeof(c) );
    		j = m_CurrJob;
    		write( m_ThreadPipeA[0], &c, sizeof(c) );
    		/* handle the job j */
    	} while (!m_Shutdown);
    }

    из архивов.

    дала как-то архетиктура задание модуль распаралелить потоками - но при этом как можно меньше использовать локи, что бы проблем вертикального скалирования не возникало. и три месяца спустся они родили -о чудо!- многопоточный модуль ВООБЩЕ без локов. тока с производительностью проблемы - но это не могут быть локи потому что модуль ими ВООБЩЕ не пользуется - почему мне и дали задание посмотреть что там можно еще усовершенствовать.

    мне несколько часов понадобилось что бы мой примитивный мозг смог осознать величие полета мысли моих коллег. а потом (когда я наконец из моря кода выцедил приведенную сверху эссенцию) у меня волосы дыбом встали....

    лопата: чудаки пайпами симулировали мутексы/ивенты. и ведь не придерешься: архитекторы сказали локи избегать, а про пайпы ничего сказано не было.

    ЗЫ ну и то что в джоб объекте еще и строковых массивов на 80К, и они постоянно копировались туды сюды, это было cherry topping ко всему этому счастью.

    Dummy00001, 23 Декабря 2010

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

    +155

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    void XmlElementHandler::startElement(
                        const XMLCh* const uri,
                        const XMLCh* const localname,
                        const XMLCh* const qname,
                        const XERCES_CPP_NAMESPACE_QUALIFIER Attributes& attrs
                        )
    {
      static XmlContext *context = XmlContext::getInstance();
      static XmlParser *parser = XmlParser::getInstance();

    оптимизируем обращения к синглтонам. потому что одной невидимой глобальной переменной явно не достаточно. вот такое щасце в 30+ методах на реализации интерфейса к Xerces-C.

    Dummy00001, 23 Ноября 2010

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

    +139

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    FILE *ConfigFile = NULL;
    char *workdir = NULL;
    workdir=getenv("APP_WORKDIR");
    if ((NULL!=workdir) && (NULL != (ConfigFile = fopen(strcat(workdir,"appname/config.xml"), "r"))))
    {
       fclose(ConfigFile);
       workdir[strlen(workdir)-10] = '\0';
       setenv("APP_RESOURCE_DIR", workdir , 1);
    }

    вот так нужно указывать крутой библиотеке, любимому и незаменимому детищу нашего R&D, читать файл из другой директории.

    и вот такое было закопипащено в 4 приложений....

    Dummy00001, 19 Ноября 2010

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

    +172

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    void Logger::LogString( std::string &s )
    {
    	if (s.size() > 4096) {
    		// предотвращаем слишком длиные строки в логе.
    		s.resize( 4096 );
    	}
    	m_LogStream << LogMessagePrefix() << s << std::endl;
    }

    народ пару дней понадобилось найти почему XML сообщения, размером слегка больше обычного, Xerces не принимает. идеи иссякли - пока в лог не посмотрели и не нашли вот по такому (проиллюстрированому выше) чудо принципу работающий логгер.

    Dummy00001, 10 Ноября 2010

    Комментарии (18)
  6. Perl / Говнокод #4572

    −103

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    if (-e '/etc/passwd') {
        # assume Unix
        ...
    }
    else {
        # assume NT
        ...
    }

    так в круто-мегабаксовом ClearCase IBM программисты определяют в Перле запущен ли скрипт под Виндой или под *NIXком. наши админы долго смеялись, но по приколу сохранили этот кусок как было в оригинале.

    Dummy00001, 09 Ноября 2010

    Комментарии (36)
  7. Си / Говнокод #4415

    +145

    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
    enum {
    	CONST_A,
    	CONST_B,
    	CONST_C,
    	/* ... и еще пяток в том же духе */
    };
    
    /* ... */
    
    char opType = ...;
    switch(opType) {
    case 'A':
    	/* строчек 10 кода использующие CONST_A */
    	break;
    case 'B':
    	/* капипасто тех же строчек 10 кода - но теперь с CONST_B */
    	break;
    case 'C':
    	/* капипасто тех же строчек 10 кода - но с CONST_C */
    	break;
    /* и т.д. и т.п. для других значений opType */
    }

    только что убил полчаса что бы понять что switch/case завален 100% копиями того же самого кода - только со смененной константой. просто замапить тот char в enum ... это наверное исключительно для слишком умных.

    Dummy00001, 22 Октября 2010

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

    +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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    typedef char char_array_2 [2] ;
    typedef char char_array_3 [3] ;
    typedef char char_array_22[32];
    
    /* ... */
    
    if( 0 == (purpose          = new char_array_3[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (mode             = new char_array_3[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (state            = new char_array_2[ dArraySize ]  ) )
    {
       ALLOC_ERROR();
    }
    
    if( 0 == (referencedate    = new char_array_22[ dArraySize ] ) )
    {
       ALLOC_ERROR();
    }
    
    /* и еще десяток в таком же стиле */

    С++ в (болгарские) массы. и пусть только попробуют сказать что мы ошибок выделения памяти не обрабатываем.

    ЗЫ самый прикол что код который этой памятью пользуется 100% совместим с std::vector<std::string>. хотя я бы лично все строки в структуру загнал (и структуры в вектор) бо 10+ массивов это говно.

    Dummy00001, 12 Августа 2010

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

    +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
    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
    long GetMicroseconds();
    
    CTvoid cLog::GetTime (char * acLocal, time_t tTime)
    {
      struct tm   ltLocalTime;
      struct tm * ptLocalTime;
    
      tTime       = time (NULL);
      ptLocalTime = localtime_r (&tTime, &ltLocalTime);
    
      sprintf(acLocal,"%04d%02d%02d %02d%02d%02d-%06ld",
                       ptLocalTime->tm_year+1900,
                       ptLocalTime->tm_mon+1,
                       ptLocalTime->tm_mday,
                       ptLocalTime->tm_hour,
                       ptLocalTime->tm_min,
                       ptLocalTime->tm_sec,
                       GetMicroseconds());
    
    }
    
    long GetMicroseconds()
    {
        struct timeval timeVal;
    
        if (0 == gettimeofday( &timeVal, NULL ))
            return timeVal.tv_usec;
    
        return -1;
    }
    
    cLog::__Write(...)
    {
        /* ... */
        tTime          = time(NULL);
        GetTime (acDataTime, tTime);
        /* ... */
    }

    R&D дали задание добавить микросекунды ко всем таймстемпам в логах.
    сказано - сделано.
    ну ведь никто не говорил что таймстемпы должны быть еще и консистентными.

    ЗЫ ну и time() надо вызвать раза два-три - для надёжности.

    Dummy00001, 28 Июля 2010

    Комментарии (16)
  10. bash / Говнокод #3488

    −136

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #!/bin/bash
    
    # ...
    PWD=`pwd`
    cd $OTHERDIR
    # ...
    cd $PWD

    скрипт был написан навороченым солярис инженером. я ожидал каких-там BSD или SysV выкрутасов, а как увидел в начале /bin/bash начал уже сомневатся. парой десятков строк ниже нашел данный перл, и дальше вчитатываться не стал - все надо в ж переписывать....

    ЗЫ $PWD это встроеная переменная которая устанавливается коммандой cd. ее можно руками менять, но по каждому cd она будет всегда в полный путь текущего каталога ставится. Другими словами PWD=`pwd` как и cd $PWD есть просто NOPы.

    Dummy00001, 16 Июня 2010

    Комментарии (12)
  11. Куча / Говнокод #3483

    +121

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    HAI
    CAN HAS STDIO?
    PLZ OPEN FILE "LOLCATS.TXT"?
    	AWSUM THX
    		VISIBLE FILE
    	O NOES
    		INVISIBLE "ERROR!"
    KTHXBYE

    Взято с http://lolcode.com/home : "Programming the LOL way. All LOLCats, LOL, ALL CAPS."

    PLZ = try
    AWSUM THX = ok branch
    O NOES = catch(...)
    VISIBLE = fprintf(stdout,...)
    INVISIBLE = fprintf(stderr,...)

    Dummy00001, 15 Июня 2010

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