- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
void free_transaction(p_transaction_t trans) {
p_transaction_t next = trans->next;
while (next) {
trans->next = next->next;
free_transaction(next);
next = trans->next;
}
xfree(trans);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+142
void free_transaction(p_transaction_t trans) {
p_transaction_t next = trans->next;
while (next) {
trans->next = next->next;
free_transaction(next);
next = trans->next;
}
xfree(trans);
}
Освобождение списка.
+159
$threadusers = $db->query_read("
SELECT user.username, user.usergroupid, user.membergroupids,
session.userid, session.inthread, session.lastactivity, session.badlocation,
IF(user.displaygroupid = 0, user.usergroupid, user.displaygroupid) AS displaygroupid, infractiongroupid,
IF(user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ", 1, 0) AS invisible
FROM " . TABLE_PREFIX . "session AS session
LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
WHERE session.lastactivity > $datecut
");
...
while ($loggedin = $db->fetch_array($threadusers))
Я уже несколько раз писал о гениальности ребят которые пишут форум vBulletin. Продолжу эту традицию.
Выше приведен огрызок кода, которым ребятки собирают список активных пользователей в текущей теме. Думаю тут все понятно, но все же объясню на примере того форума, где довелось увидеть это чудо. В таблице session около 7к записей, активных записей в среднем 4к. Т.е. на выходе мы имеем запрос, который кладет сервак при 64 гигах оперативы + последовательный перебор 4к записей для того что бы выбрать парочку юзеров, которые активны в этой теме.
Ну в общем ребятки поставили себе прижизненный памятник, который я спешу предоставить на лицезрение сообщества.
−167
declare @billing_types table(k int null, t varchar(14)
collate SQL_Latin1_General_CP1255_CI_AS)
insert @billing_types
values (1, 'אשרי')
,(2, 'צ׳ק')
,(3, 'הוראת קבע')
declare @standing_order_status table(i int null, s varchar(14)
collate SQL_Latin1_General_CP1255_CI_AS)
insert @standing_order_status
values (4, 'מבותל')
,(3, 'לא מאושר')
,(2, 'ממתין')
,(1, 'מאושר')
declare @fax varchar(20)
select billing_company_id
,internal_company_name
,isnull(t, 'לא פעיל') collate SQL_Latin1_General_CP1255_CI_AS as payment_type_string
,case when company_email is null then ''
when replace((ltrim(rtrim(company_email))), '0', '') = '' then ''
-- some emails were imported in the way, they aren't valid
when charindex('@', company_email) = 0 then ''
else (ltrim(rtrim(company_email))) end as email
,case when replace(ltrim(rtrim(company_fax)), '0', '') = ''
then ''
when -- some times there are words like "none", "n/a" etc. in there
replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(ltrim(rtrim(company_fax)), '-', ''),
'0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''),
'7', ''), '8', ''), '9', '') != ''
then ''
else replace(ltrim(rtrim(company_fax)), '-', '')
end as c_fax
,ltrim(rtrim(company_address)) as c_address
,ltrim(rtrim(cast(company_comments as varchar(1000)))) as c_comments
,invoice_send_with_details
,invoice_send_fax
,invoice_print
,ltrim(rtrim(cc_name)) as c_name
,ltrim(rtrim(cc_number)) as c_number
,ltrim(rtrim(cc_cvv)) as c_cvv
,ltrim(rtrim(cc_id)) as c_id
,ltrim(rtrim(cc_expire)) as c_expire
,ltrim(rtrim(bank_number)) as number
,ltrim(rtrim(bank_branch)) as branch
,ltrim(rtrim(bank_account)) as account
,bank_hoshen
,isnull(s, 'אין') collate SQL_Latin1_General_CP1255_CI_AS as order_status
from billing_companies
left join @billing_types bt on bt.k = payment_type
left join @standing_order_status os on os.i = bank_standing_order_status
Война. Экспорт в Эксель, для того, чтобы потом ее обратно, но уже другим людям в базу передать.
Из интересных подробностей. Поле "факс" в базе имеет тип varchar(50), например. Никакой серверной валидации отродясь не было. Иногда люди просто путали факс и электорпочту, когда заполняли данные.
−95
instance Show (a -> b)
main = print (*)
http://liveworkspace.org/code/17QAgf$23
stderr:
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Возможно это из-за того, что нет реализации show и я написать вменяемую не смогу. Как заставить Haskell сгенерировать для меня show?
Хочется типа такого:
{-# LANGUAGE OverlappingInstances, FlexibleInstances, UndecidableInstances, StandaloneDeriving, DeriveFunctor #-}
deriving instance Show (a -> b)
main = print (*)
+152
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<head>
<title>test</title>
<script type="text/javascript">
// Функция, осуществляющая AJAX запрос
function loadXMLDoc(method, url) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send();
}
}
// Функция, выполняемая при изменении статуса
// запроса, если статус равен 200, данные получены
function processReqChange() {
if(req.readyState == 4) {
if(req.status == 200) {
getNumber(req.responseText);
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}
// Функция выполняется при клике по кнопке
function process() {
var v = document.getElementById("flag");
var url = "ajax.php?flag=" + v.checked;
loadXMLDoc( "get", url );
setTimeout('process()', 1000);
}
// Функция записывает в элемент content значение, полученное от сервера
function getNumber(text) {
//для текстового поля
var content = document.getElementById( "content" );
content.value = text;
//для div
var content = document.getElementById( "content2" );
content.innerHTML = text;
}
</script>
</head>
<body onload='process()'>
<input type='checkbox' id='flag'>Флажок
<input type='text' id='content'>
<div id='content2'></div>
</body>
</html>
.....................................................................................
//файл ajax.php
<?php
if (isset($_GET['flag']))
{
if($_GET['flag']==='true') echo 'checked';
else echo 'not checked';
}
?>
Как скопировать значение одного поля в другое.
Очередное оригинальное решение от нашего старого знакомого, который не верит в существование говнокода и быдлокодеров.
+28
class atoi_func
{
public:
atoi_func(): value_() {}
inline int value() const { return value_; }
inline bool operator() (const char *str, size_t len)
{
value_ = 0;
int sign = 1;
if (str[0] == '-') { // handle negative
sign = -1;
++str;
--len;
}
switch (len) { // handle up to 10 digits, assume we're 32-bit
case 10: value_ += (str[len-10] - '0') * 1000000000;
case 9: value_ += (str[len- 9] - '0') * 100000000;
case 8: value_ += (str[len- 8] - '0') * 10000000;
case 7: value_ += (str[len- 7] - '0') * 1000000;
case 6: value_ += (str[len- 6] - '0') * 100000;
case 5: value_ += (str[len- 5] - '0') * 10000;
case 4: value_ += (str[len- 4] - '0') * 1000;
case 3: value_ += (str[len- 3] - '0') * 100;
case 2: value_ += (str[len- 2] - '0') * 10;
case 1: value_ += (str[len- 1] - '0');
value_ *= sign;
return value_ > 0;
default:
return false;
}
}
private:
int value_;
};
standard atoi()
79142 milliseconds
class atoi_func
131 milliseconds.
Если приходится велосипедить стандартные функции, то это камень в огород С++. Видать кресты писали гении ассемблерной оптимизации.
+80
public static java.sql.Date currentSQLDate() {
java.sql.Date result = null;
Date date = new Date();
return result;
}
ох, ёптеть...
+127
$ svn ls -R | grep 'location.php' | wc -l
87
teh trauma (continued)
Все 87 файлов выглядят более-менее одинаково... за исключением одного, или, возможно 2-3. Это никакие ни файлы настроек, ничего подобного. Там просто редирект куда-то.
+14
void ThumbnailAdapter::clearCache(size_t index) {
if ((size_t)-1 == index) {
mImages.clear();
} else {
ImagesMap::iterator it = mImages.find (index);
if (mImages.end() != it) {
mImages.erase(it);
}
}
}
годная очистка map'ы
+153
var currentTime = (new Date()).getTime();
var diff = currentTime - this.startTime;
var min = Math.floor(Math.floor(diff/1000)/60);
if (min < 10)
min = "0"+min;
var sec = Math.floor(diff/1000)%60;
if (sec < 10)
sec = "0"+sec;
this.timeLabel.setString("TIME " + min + ":" + sec);
Классика практически, моего творения. Как это можно сделать по-человечески на JS? Всякие jQuary не катят, ибо js встраиваемый.