-
+162
- 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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool Valid = true;
bool f1;
bool f2;
unsigned step = 0;
for( bool x1=false; x1<2; x1++ )
for( bool x2=false; x2<2; x2++ )
for( bool x3=false; x3<2; x3++ )
for( bool x4=false; x4<2; x4++ )
for( bool x5=false; x5<2; x5++ )
for( bool x6=false; x6<2; x6++ )
for( bool x7=false; x7<2; x7++ )
for( bool x8=false; x8<2; x8++ )
for( bool x9=false; x9<2; x9++ )
for( bool x10=false; x10<2; x10++ )
for( bool x11=false; x11<2; x11++ )
for( bool x12=false; x12<2; x12++ )
for( bool x13=false; x13<2; x13++ )
for( bool x14=false; x14<2; x14++ )
for( bool x15=false; x15<2; x15++ )
{
step++;
f1 = ( x1 && x2 || x3 && x4 || x5 && x6 && x7 || x8 && x9 && x10 ) && ( !x11 || x12 && x13 || x14 && x15 );
f2 = (!(!x1 || !x2) || !(!x3 || !x4) || !(!x5 || !x6 || !x7) || !(!x8 || !x9 || !x10)) && ( !(!x14 || !x15) || !x11 || !(!x12 || !x13) );
if ( f1 != f2 ) Valid = false; break;
}
if( Valid ) Application->MessageBox( "Функции идентичны", "Функции идентичны", MB_OK );
else Application->MessageBox( "NOT Valid", IntToStr(step).c_str(), MB_OK );
}
Проверка идентичности логических функций путем перебора аргументов.
absolut,
19 Мая 2010
-
+159
- 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
void __fastcall TMainForm::TimerCheckForPowerOffTimeTimer(TObject *Sender)
{
// Обновление текущего времени/дня недели
eDayOfToday->Text = FormatDateTime("dddd", Now() );
DateTimePickerCurrentTime->DateTime = Now();
static already = false; // процесс выключения начался
if( !CheckBox1->Checked ) already = false;
if( CheckBox1->Checked && !already ) // первое срабатываение таймера по времени
{
AnsiString TimeString = TimeToStr(TTime::CurrentTime());
bool TimeToPowerOff = false;
if( cbAllDay->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerAllday->Time) == TimeString );
}
else
{
switch( DayOfWeek( Now() ) )
{
case SUNDAY:
{
if( cbSunday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerSunday->Time) == TimeString );
}
break;
}
case MONDAY:
{
if( cbMonday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerMonday->Time) == TimeString );
}
break;
}
case TUESDAY:
{
if( cbTuesday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerTuesday->Time) == TimeString );
}
break;
}
case WEDNESDAY:
{
if( cbWednesday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerWednesday->Time) == TimeString );
}
break;
}
case THURSDAY:
{
if( cbThursday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerThursday->Time) == TimeString );
}
break;
}
case FRIDAY:
{
if( cbFriday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerFriday->Time) == TimeString );
}
break;
}
case SATURDAY:
{
if( cbSaturday->Checked )
{
TimeToPowerOff = ( TimeToStr(DateTimePickerSaturday->Time) == TimeString );
}
break;
}
} // switch
} // else cbAllDay->Checked
if( TimeToPowerOff )
{
already=true;
SetPermission();
ShutDownPC();
}
} // первое срабатывание
}
Вырезка из программы для выключения питания компа. Данная функция вызывается по таймеру, раз в 900 мс :)
Совпадение времен проверяется сравнением их строкового представления. Ну и в довесок, однообразный код в switch().
absolut,
19 Мая 2010
-
−87
- 1
if(_smcWindowContent._smcShowOnStartup.contains(_smcWindowContent._smcShowOnStartup._sbtShowHelpOn))_smcWindowContent._smcShowOnStartup.removeChild(_smcWindowContent._smcShowOnStartup._sbtShowHelpOn);
(c) Tom Wrasseller Flash Lead of Arkadium Games
dimas_art,
19 Мая 2010
-
+104
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
function fnGetWeekDay:integer;
//функция fnGetWeekDay возвращает день недели
var
CurDate: date;
dd,mm,yy: word;
cent, month, iRes : integer;
Begin
CurDate = CurrentDate;
DecodeDate(CurDate,yy,mm,dd);
month = mm;
if mm < 3 then mm = mm + 10
else mm = mm - 2;
if mm > 10 then yy = yy - 1;
cent = yy div 100;
yy = yy mod 100;
iRes = ((2.6*mm-0.2) div 1) + dd + yy + (yy div 4) + (cent div 4) - 2*cent;
iRes = ((iRes+777) mod 7);
if (month == 5) or (month == 7) or (month == 10) or (month == 12) then iRes = iRes - 1;
if iRes == -1 then result = 6
else if iRes == 0 then result = 7
else result = iRes;
End; // fnGetWeekDay
Это не совсем Delphi. Это нечто с крайне похожим синтаксисом.
Почему нельзя было использовать (CurrentDate - <какое-нибудь воскресенье>) mod 7 я не знаю.
rat,
19 Мая 2010
-
+170
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
var selectControl = document.getElementById("list_tt_DropDownList_PerRaz");
switch (tr.cells[13].innerText)
{
case "1":
selectControl.options[0].selected = "selected";
break;
case "2":
selectControl.options[1].selected = "selected";
break;
case "3":
selectControl.options[2].selected = "selected";
break;
case "4":
selectControl.options[3].selected = "selected";
break;
case "5":
selectControl.options[4].selected = "selected";
break;
}
такой вот милый switch
alex_donetsk,
19 Мая 2010
-
+74
- 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
List<String> runningVmIds = new ArrayList<String>( );
for ( VmInfo runVm : request.getVms( ) ) {
runningVmIds.add( runVm.getInstanceId( ) );
}
for ( String vmId : VmInstances.getInstance( ).getKeys( ) ) {
if ( runningVmIds.contains( vmId ) ) {
continue;
}
VmInstance vm = null;
try {
vm = VmInstances.getInstance( ).lookup( vmId );
long splitTime = vm.getSplitTime( );
if ( splitTime > SHUT_DOWN_TIME ) {
VmInstances.getInstance( ).disable( vm.getName( ) );
vm.resetStopWatch( );
vm.setState( VmState.TERMINATED );
vm.setReason( INSTANCE_EXPIRED );
SystemState.cleanUp( vm );
}
} catch ( NoSuchElementException e ) {}
}
List<String> knownVmIds = new ArrayList<String>( );
knownVmIds.addAll( VmInstances.getInstance( ).getKeys( ) );
if ( knownVmIds.removeAll( runningVmIds ) ) {//<-- active registered vms not reported in describe
for ( String vmId : knownVmIds ) {
VmInstance vm = null;
try {
vm = VmInstances.getInstance( ).lookup( vmId );
long splitTime = vm.getSplitTime( );
if ( splitTime > SHUT_DOWN_TIME ) {
VmInstances.getInstance( ).disable( vm.getName( ) );
vm.resetStopWatch( );
vm.setState( VmState.TERMINATED );
vm.setReason( INSTANCE_EXPIRED );
SystemState.cleanUp( vm );
}
} catch ( NoSuchElementException e ) {
/* should never happen, just pulled the key set, if it does ignore it */
}
}
}
Я, наверно, тупой и ещё мало кофе с утра выпил, но мне кажется, что один из циклов тут явно лишний...
raorn,
19 Мая 2010
-
−125
- 1
- 2
- 3
- 4
- 5
- 6
- 7
while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK
my $when = $t->ResolvedObj->Unix - $t->CreatedObj->Unix;
next unless $when > 0; # Doubly bloody hack
my $max = (60*60*24*2) / 1800;
my $x = int($when / 1800);
$counts[$x > $max ? $max : $x]++;
}
Нашел в коде RTx Statistics - расширения для CRM Request Tracker: http://wiki.bestpractical.com/view/RT3StatisticsPackage
del,
19 Мая 2010
-
+132
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
DWORD WINAPI readPort( LPVOID lpParam )
{
while (1)
{
if (brkListen)
break;
if (((Param*)(void*)lpParam)->port)
if (fgetc(((Param*)(void*)lpParam)->port)!=EOF);
((Param*)(void*)lpParam)->count++;
}
return 0;
}
Кусок программы подсчёта импульсов с оптопорта. Мало того что так делать плохо, так ещё один косяк есть. RS232 ниже 64 бод в винде не держит. так и не выяснил в физике это дело или в оси. Под RTEMS 6.04 64 бод на ура считалось.
ursus,
19 Мая 2010
-
−132
Так красивее :)
Tanger,
18 Мая 2010
-
+113
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
private static void assertNoReflection()
{
foreach (StackFrame stackFrame in new StackTrace().GetFrames())
{
if (stackFrame.GetMethod().DeclaringType.Namespace == "System.Reflection")
{
throw new MethodAccessException();
}
}
}
internal static string GetKey()
{
assertNoReflection();
// ...
}
Вот так вот приходится говнить, потому что в дотнете рефлексией можно спокойно вызывать internal- и private- методы.
assertNoReflection(); проверяет, что вверх по стеку вызовов никто не балуется рефлексией.
После assertNoReflection(); из нативной длл получаем обфусцированную (вручную, лол) строку, которая далее с помощью запутанных алгоритмов (некоторые параметры для "расшифровки" опять берутся из нативной длл) приводит её в вид пароля (для доступа к запароленному архиву).
Софт не прямо уж суперсекретный, просто нужно скрыть ресурсы хотя бы для приличия. Пароль через подключение к серверу не катит.
Ко всему этому оно собрано в одно exe моновским mkbundle'ом (рефлектор не может открыть!) и поверх upx'ом. В общем, большое количество кулхацкеров отсекается (должны знать ассемблер и MSIL).
Чувствую, что говнорешение, но не могу придумать что-то более умное. Обфускаторы тоже не очень катят, ибо плохо дружат с моно.
cfdev,
18 Мая 2010