- 1
f = expr `catches` [Handler (\ (ex :: ArithException) -> handleArith ex), Handler (\ (ex :: IOException) -> handleIO ex)]
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+128
f = expr `catches` [Handler (\ (ex :: ArithException) -> handleArith ex), Handler (\ (ex :: IOException) -> handleIO ex)]
Собственно это пример как в хаскеле перехватывать исключения из одного выражения expr.
Выглядит конечно отстойно. Очень многословно и судя по всему метода проще нет. И понятное дело, в чистых ленивых функциях это не работает. Ловить исключения можно только в грязных IO-функциях, тк сигнатура такова: catches :: IO a -> [Handler a] -> IO a
+123
int closeestsockptr( SOCKET* pSocket )
{
char chBuf[ 100 ];
fd_set rdevents, exevents;
struct timeval tv;
int iRetVal = 1;
int optlen;
SOCKET s = INVALID_SOCKET;
BOOL bLinger;
LINGER lng;
if( NULL == pSocket || INVALID_SOCKET == *pSocket )
return SOCKET_ERROR;
s = *pSocket;
optlen = sizeof( bLinger );
iRetVal = getsockopt( s, SOL_SOCKET, SO_DONTLINGER, ( char* )&bLinger, &optlen );
if( 0 == iRetVal && TRUE == bLinger ) //linger is off
{
lng.l_onoff = 1; //set linger on
lng.l_linger = 1; //set linger timeout to 1 second
iRetVal = setsockopt( s, SOL_SOCKET, SO_LINGER, ( char* )&lng, sizeof( lng ) );
if( 0 == iRetVal )
{
if( 0 == shutdown( s, SD_SEND ) )
{
tv.tv_sec = 3; //seconds
tv.tv_usec = 0; //microseconds
while( 1 )
{
FD_ZERO( &rdevents );
FD_ZERO( &exevents );
addsock2fd( &rdevents, NULL, &exevents, s ); //FD_SET( s, &rdevents ), FD_SET( s, &exevents );
iRetVal = select( 1, &rdevents, NULL, &exevents, &tv );
if( SOCKET_ERROR != iRetVal && 0 != iRetVal && FD_ISSET ( s, &rdevents ) && !FD_ISSET ( s, &exevents ) )
{
iRetVal = recv( s, chBuf, sizeof( chBuf ) / sizeof( *chBuf ), 0 );
if( iRetVal > 0 ) //Some data received
continue;
if( 0 == iRetVal ) //Receive FD_CLOSE
break;
else //SOCKET_ERROR returned
break;
}
else if( 0 == iRetVal ) //exceeded the timeout
{
WSASetLastError( WSAETIMEDOUT );
break;
}
else //SOCKET_ERROR returned
break;
}
}
}
}
if( NULL == pSocket || INVALID_SOCKET == *pSocket )
return SOCKET_ERROR;
iRetVal = closesocket( *pSocket );
*pSocket = INVALID_SOCKET;
return iRetVal;
}
Пуресишник наваял
+60
class Test {
private int m_field;
int getField() {
return m_field;
}
void setField(int field) {
m_field = field;
}
}
Дискасс.
+20
class TCP1251ToUTF16StringConverter
{
public:
static WideChar convert(Char Source)
{
WideChar Result=static_cast<unsigned char>(Source);
const WideChar Russian_YO=static_cast<unsigned char>('Ё');
const WideChar Russian_yo=static_cast<unsigned char>('ё');
const WideChar RussianWide_YO=L'Ё';
const WideChar RussianWide_yo=L'ё';
const WideChar Russian_A=static_cast<unsigned char>('А');
const WideChar RussianWide_A=L'А';
const unsigned int AmountOfSymbols=0x40;
if(Result==Russian_YO)
return RussianWide_YO;
if(Result==Russian_yo)
return RussianWide_yo;
if(Result>=Russian_A&&Result<Russian_A+AmountOfSymbols)
return (Result-Russian_A+RussianWide_A);
return Result;
};
static void convert(PwideChar UTF16StringDestination, PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
assert(CP1251WinEngRusStringSource!=NULL);
size_t i=0;
for(;;)
{
if(i>=TextLength)
break;
assert(i<TextLength);
Char CP1251SourceChar=CP1251WinEngRusStringSource[i];
if(CP1251SourceChar=='\0')
break;
UTF16StringDestination[i]=convert(CP1251SourceChar);
++i;
};
UTF16StringDestination[i]=L'\0';
assert(i<=TextLength);
};
static std::wstring convert(const std::string& CP1251WinEngRusStringSource)
{
assert(CP1251WinEngRusStringSource.c_str()!=NULL);
std::wstring UTF16StringDestination;
std::transform(CP1251WinEngRusStringSource.begin(), CP1251WinEngRusStringSource.end(), std::inserter(UTF16StringDestination, UTF16StringDestination.end())/*std::back_inserter(UTF16StringDestination)*//*VC 6.0 compatible*/, makePointerToFunction(convertChar));
return UTF16StringDestination;
};
private:
static WideChar convertChar(char Source)
{
return convert(Source);
};
};
template<const size_t MaxAmountOfChar>
class TCP1251ToUTF16StringInPlaceConverter
{
public:
TCP1251ToUTF16StringInPlaceConverter(PChar CP1251WinEngRusStringSource)
{
STATIC_ASSERT(MaxAmountOfChar>0, MaxAmountOfChar_must_be_above_zero);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, MaxAmountOfChar);
};
TCP1251ToUTF16StringInPlaceConverter(PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
STATIC_ASSERT(MaxAmountOfChar>0, MaxAmountOfChar_must_be_above_zero);
assert(TextLength<=MaxAmountOfChar);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, TextLength);
};
void convert(PChar CP1251WinEngRusStringSource)
{
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, MaxAmountOfChar);
};
void convert(PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
assert(TextLength<=MaxAmountOfChar);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, TextLength);
};
PWideChar Get(void) const
{
return &(_buffer[0]);
};
PwideChar Get(void)
{
return &(_buffer[0]);
};
wideChar _buffer[MaxAmountOfChar+1];
};
+133
int * lPtr=item;
int * lPtrEnd = item + count;
for (lPtr = item ; lPtr < lPtrEnd && *lPtr<fid ; lPtr+=4);
if( lPtr >= lPtrEnd ) lPtr=lPtrEnd-1; // last element
if(*lPtr != fid)
{
if(--lPtr >=item)
{
if(*lPtr!= fid)
{
if(--lPtr >=item)
{
if(*lPtr!= fid)
{
if(--lPtr >=item)
{
if(*lPtr!= fid)
{
break; // value not found
}
} else break;
}
} else break;
}
} else break;
}
if( lPtr > item)
{
while ( *(lPtr-1) == fid && lPtr > item) lPtr--; // first ocurence of fid
}
Быстрый алгоритм поиска
+53
<?php $args = array(
'type' => 'post'
,'child_of' => 0
,'parent' => ''
,'orderby' => 'name'
,'order' => 'ASC'
,'hide_empty' => 1
,'hierarchical' => 1
,'exclude' => ''
,'include' => ''
,'number' => 0
,'taxonomy' => 'category'
,'pad_counts' => false );?>
http://wp-kama.ru/function/get_categories
взял тут: http://wp-kama.ru/function/get_categories
Видимо у него в учебнике так было:
У лукоморья дуб зелёный
;Златая цепь на дубе том
:И днём и ночью кот учёный
Всё ходит по цепи кругом
;Идёт направо - песнь заводит
,Налево - сказку говорит
...
А.С. Пушкин
−122
#!/usr/bin/perl
use strict;
# немного настроек
my $url = "http://govnokod.ru/comments";
my $min_delay = 2*60;
my $max_delay = 30*60;
my $delay_slowdown = 2;
# получение идентификатора последнего коммента
sub get_last_comment_info {
print STDERR "Checking for the new comments...\n";
my @content = `curl "$url" 2>/dev/null`;
my $s = join(' ', @content);
if ($s =~ /<a href=".*?\/(\d+)#comment(\d+)"/) {
print STDERR "Last comment id was $2 in the thread $1\n";
return ("thread" => $1, "comment" => $2);
}
print "Can't get new comments\n";
return ();
}
# отправка сообщения
sub notify {
my ($id) = @_;
print STDERR "Sending notify about $id\n";
`notify-send "Кто-то наложил в $id"`;
}
my $last_id = undef;
my $delay = $min_delay;
while (1) {
# смотрим есть ли новый коммент
if (my %r = get_last_comment_info()) {
if (defined($last_id) && $r{"comment"} > $last_id) {
$delay = $min_delay;
notify($r{"thread"});
}
$last_id = $r{"comment"};
}
# спим
print STDERR "Sleeping for $delay seconds...\n";
sleep($delay);
# пересчитываем задержку
$delay = $delay * $delay_slowdown;
$delay = $max_delay if ($delay > $max_delay);
}
Говноскрипт для мониторинга сточных вод.
+158
$(function()
{
$(function(){
// что-то
});
}
);
+87
procedure GenerateMines; // Процедура генерации мин
label
again;
var
t,m:Integer; // Переменные для цикла
i,j:Byte; // Координаты на поле
bufer:String; // Вспомогательная переменная цикла. Хранит текущие сгенерированные координаты мины для записи в массив
begin
Randomize;
for t:= 1 To mines Do
begin
again:
i:=Round(Random*9+1);
j:=Round(Random*9+1);
bufer:=IntToStr(i) + ',' + IntToStr(j); // Создание строковой записи коордитаты мины
for m:= 1 To 100 Do // Цикл для проверки, есть ли сгенерированная координата в массиве
begin
if bufer = mines_a[m] then goto again; // Если сгенерированная координата в массиве есть, то программа генерирует новые координаты
end;
mines_a[t]:=bufer; // Запись новой координаты в массив
field[i,j]:=9; // Добавление мины на поле в сгенерированные координаты
end;
end;
Процедура генерации мин в сапёре. Говно или не?
+165
$idlink = rawurlencode(base64_encode($name . "||" . $email . "||" . md5( $password1 ) . "||" . $accountID_1 . "||" . $accountID_2 . "||" . $accountID_3 . "||" . $serverid_1 . "||" . $serverid_2 . "||" . $serverid_3 . "||" . md5( sha1( $name . $email . DBHOST . DBNAME . $config['key'] ) ) ) );
Значит так, ребята. Готовьтесь воспринимать. Данные с регистрационной формы кодируются как только можно, потом с этим кодом генерируется ссылка и отправляется письмо с подтверждением регистрации. Когда новый пользователь переходит по ссылочке, данные берутся из базы, снова кодируются и сравниваются с кодом из ссылки.
Пы.Сы. Код не мой