-
Лучший говнокод
- В номинации:
-
- За время:
-
-
+57
- 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
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
#include "TrayIcon.h"
// ----------------------------------------------------------------------------
TrayIcon::TrayIcon(QObject* parent) : QSystemTrayIcon(parent),
INTERVAL(1000),
WIDTH_ICON(30), HEIGHT_ICON(30)
{
currentDate = QDate(0, 0, 0);
defaultIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
defaultIcon.fill(Qt::black);
reminderIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
reminderIcon.fill(Qt::yellow);
thousandthDayIcon = QPixmap(WIDTH_ICON, HEIGHT_ICON);
thousandthDayIcon.fill(Qt::green);
dialogBoxIsActive = false;
readSettings();
wasReminder = false;
wasCongratulation = false;
wasSetNewDate = false;
slotUpdateDate();
QMenu* contextMenu = new QMenu;
contextMenu->addAction("Set date of birth...",
this, SLOT(slotSetDateOfBirth()));
QAction* autorunAction = contextMenu->addAction("Autorun",
this, SLOT(slotSetAutorun(bool)));
autorunAction->setCheckable(true);
autorunAction->setChecked(autorun);
contextMenu->addSeparator();
contextMenu->addAction("About...", this, SLOT(slotAboutMyProgram()));
contextMenu->addSeparator();
contextMenu->addAction("Quit", qApp, SLOT(quit()));
setContextMenu(contextMenu);
QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), SLOT(slotUpdateDate()));
timer->start(500);
}
// ----------------------------------------------------------------------------
void TrayIcon::slotUpdateDate()
{
if((currentDate != QDate::currentDate()) || wasSetNewDate)
{
currentDate = QDate::currentDate();
daysToThousandthDay
= INTERVAL - dateOfBirth.daysTo(currentDate) % INTERVAL;
wasCongratulation = false;
wasReminder = false;
wasSetNewDate = false;
if((daysToThousandthDay != INTERVAL) && (daysToThousandthDay != 1))
{
setIcon(QIcon(defaultIcon));
setToolTip("Until next thousandth day in " +
QString().number(daysToThousandthDay) + " days.");
}
else
{
if(daysToThousandthDay == 1)
{
if(!wasReminder)
reminderBeforeDay();
}
else
{
if(!wasCongratulation)
congratulation();
}
}
}
}
Описание конструктора и одного из методов класса иконки в системном трее из программы, которая должна оповещать пользователя о каждом тысячном дне его жизни. Написано на Qt.
Полная версия:
main: http://pastebin.com/DEKiMWdb
хедер класса иконки трея: http://pastebin.com/rN9NwBPB
.cpp класса иконки трея: http://pastebin.com/uuyf5uxX
хедер класса окна ввода даты рождения: http://pastebin.com/bmfAbFwg
.cpp класса окна ввода даты рождения: http://pastebin.com/3R8BaPFC
darkKnight,
18 Августа 2014
-
+133
- 1
decimal dblOrderTotal = calculatedOrders.Sum(objOrder => objOrder.total);
Что бы значило это dbl?
musuk,
10 Августа 2014
-
+136
- 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
void lcd_show(uint8_t number)
{
uint8_t digit3 = 0;
uint8_t digit2 = 0;
uint8_t digit1 = number > 99u ? 1u : 0;
switch(number)
{
case 0u:
digit3 = 0u;
digit2 = 0u;
break;
case 1u:
digit3 = 1u;
digit2 = 0u;
break;
.....
.....
case 199u:
digit3 = 9u;
digit2 = 9u;
break;
default:
digit3 = '-';
digit2 = '-';
digit1 = 0;
break;
}
display3d(digit3);
display2d(digit2);
display1d(digit1);
}
8-битный микроконтроллер, 32768Гц тактовая частота, батарейное питание, CPU по-максимуму в спячке для экономии энергии.
Функции display3d(), display2d(), display1() отображают цифру в соответствующем знакоместе на 2.5 разрядном LCD от 0 до 199.
Преобразование числа в BCD формат.
Эта жесть даёт выигрыш порядка 10 мкА перед "обычным" преобразования с делениями на 10 за счёт меньшего времени работы CPU для расчёта. Вроде говнокод, но в данном случае оправдан, потому не воняет :)
FlySnake,
09 Июля 2014
-
+86
- 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
function IsMemoryCommitByAdress(const AAddress: Pointer): Boolean;
var
MemoryInfo: TMemoryBasicInformation;
begin
Result := False;
if not Assigned(AAddress) then
Exit;
VirtualQuery(AAddress, MemoryInfo, SizeOf(MemoryInfo));
Result := MemoryInfo.State and MEM_COMMIT <> 0;
end;
function IsPointerToVMT(const APointer: Pointer): Boolean;
var
VMTPointer, VMTPointerSelf: Pointer;
begin
Result := False;
if not IsMemoryCommitByAdress(APointer) then
Exit;
VMTPointer := APointer;
VMTPointerSelf := Pointer(Integer(VMTPointer) + vmtSelfPtr);
if not IsMemoryCommitByAdress(VMTPointer) then
Exit;
if not IsMemoryCommitByAdress(VMTPointerSelf) then
Exit;
if not IsMemoryCommitByAdress(PPointer(VMTPointerSelf)^) then
Exit;
Result := PPointer(VMTPointerSelf)^ = VMTPointer;
end;
function IsBadptr(apointer:pointer):boolean;
begin
Result := IsMemoryCommitByAdress(APointer) and IsPointerToVMT(PPointer(APointer)^);
end;
Функция, для определения качества указателя, в ситуации "один объект - несколько указателей".
Гк в том, что нет надежности - это все равно, что юзать IsBadReadPtr и аналогичные.
Почему-то никто не пытается использовать операторы is и as (я узнал о них благодаря Тарасу, спасибо ему), чтобы сравнить качество приведения.
brutushafens,
19 Июня 2014
-
+10
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
string intArrayToString(int* array, int size)
{
ostringstream ss;
ss << "[";
for (int i=0; i<size-1; i++)
ss << array[i] << ",";
ss << array[size-1];
ss << "]";
return ss.str();
}
string longIntArrayToString(long int* array, int size)
{
ostringstream ss;
ss << "[";
for (int i=0; i<size-1; i++)
ss << array[i] << ",";
ss << array[size-1];
ss << "]";
return ss.str();
}
О шаблонах мы, видимо, не в курсе. Ну и упаси вас боже передать суда size=0.
Думаю, сюда можно смело выкладывать весь источник, но уж больно он уныл
https://github.com/adobe-research/libkafka
Адобъ Рисёрчъ на острие прогресса#ifdef DEBUG
#define D(x) x
#else
#define D(x)
#endif
#define E(x) cout.flush() << x
Так ведь и придётся своего клиента писать... :(
roman-kashitsyn,
12 Июня 2014
-
+8
- 1
- 2
#define FOR_INCLUSION (iostream) (studio.h) (stdlib.h) (boost/phoenix.hpp) (my_drugs_library.h)
#include <include_and_disable_some_warnings>
laMer007,
01 Июня 2014
-
+134
- 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
static U32 Round_up_to_next_2_power( U32 value )
{
if ( value > 16 )
if ( value > 64 )
if ( value > 128 )
if ( value > 256 )
if ( value > 512 )
return( 1024 );
else
return( 512 );
else
return( 256 );
else
return( 128 );
else
if ( value > 32 )
return( 64 );
else
return( 32 );
else
if ( value > 4 )
if ( value > 8 )
return( 16 );
else
return( 8 );
else
if ( value > 2 )
return( 4 );
return( value );
}
Simple function to round up to the next power of 2.
Wicked,
23 Мая 2014
-
+141
- 1
- 2
- 3
@echo off
start https://pp.vk.me/c607724/v607724832/6c07/5fRLUPfqMe8.jpg
start https://pp.vk.me/c607724/v607724832/6c1c/LD7Zqx1yZAw.jpg
Для батника, запустите - поймёте ;)
Mobac,
20 Апреля 2014
-
+154
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
var unselectedColor = 'rgba(255, 255, 255, 0.3)',
selectedColor = 'rgba(255, 255, 255, 0.9)';
function onDownloadPage(){
var temp = $$('.selState');
for(var i = 0; i < temp.length ; i++){
temp[i].style.backgroundColor = new String(unselectedColor);
temp[i].onmouseover = function(){this.style.backgroundColor = new String(selectedColor);};
temp[i].onmouseout = function(){this.style.backgroundColor = new String(unselectedColor);};
}
}
И вот опять с этого сайта...
CSS hover? Не, не слышал.
Dart_Sergius,
18 Апреля 2014
-
+118
- 1
f g l = hylo l (.) (\n -> (g, n-1)) (==0)
Этот пример использует hylomorphism.
Композируем функцию типа (.) g(l) пока не наступит n==0
HaskellGovno,
04 Апреля 2014