-
Список говнокодов пользователя Dummy00001
Всего: 94
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 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
-
+155
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 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
-
+139
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 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
-
+172
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 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
-
−103
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
if (-e '/etc/passwd') {
# assume Unix
...
}
else {
# assume NT
...
}
так в круто-мегабаксовом ClearCase IBM программисты определяют в Перле запущен ли скрипт под Виндой или под *NIXком. наши админы долго смеялись, но по приколу сохранили этот кусок как было в оригинале.
Dummy00001,
09 Ноября 2010
-
+145
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 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
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 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
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
long GetMicroseconds();
CTvoid cLog::GetTime (char * acLocal, time_t tTime)
{
struct tm ltLocalTime;
struct tm * ptLocalTime;
tTime = time (NULL);
ptLocalTime = localtime_r (&tTime, <LocalTime);
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
-
−136
- 1
- 2
- 3
- 4
- 5
- 6
- 7
#!/bin/bash
# ...
PWD=`pwd`
cd $OTHERDIR
# ...
cd $PWD
скрипт был написан навороченым солярис инженером. я ожидал каких-там BSD или SysV выкрутасов, а как увидел в начале /bin/bash начал уже сомневатся. парой десятков строк ниже нашел данный перл, и дальше вчитатываться не стал - все надо в ж переписывать....
ЗЫ $PWD это встроеная переменная которая устанавливается коммандой cd. ее можно руками менять, но по каждому cd она будет всегда в полный путь текущего каталога ставится. Другими словами PWD=`pwd` как и cd $PWD есть просто NOPы.
Dummy00001,
16 Июня 2010
-
+121
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 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