Код при помощи которого я заработал(а) денег

laki

создадим?
постим куски кода небольшие по желанию описываем проекты

uncle17


givemethemoney;

bobby

не понял, объясни подробнее =)

laki

куски кода из коммерческих проектов, по желанию их описать

laki

Ладно начну
Проект domestico.ca предыдущая версия сайта. Длительность 4ре месяца. Язык пхп.
Код главной страницы.
 

<?
define ('PATH_TO_ROOT', './');
define ('PAGE_CODE', 'home');
require_once(PATH_TO_ROOT . 'inc/init.inc.php');
require_once(PATH_TO_ROOT . 'inc/module.inc.php');
class SingleFile extends Module {
    function SingleFile {
     global $db, $this_page;
     $titles = array ("eng" => 'Domestico.ca - home',
     "fra" => 'Domestico.ca - acceuil');
     Module::Module($db, $this_page, $titles);
    }
    
    function Proceed {
     $this->Top;
     $this->Central;
     $this->Bottom;
    }
    function Central {
     $tpl = new Template;
     $tpl->set_file('main', $this->path_to_templates . 'home.ihtml');
     $this->PrepareTemplate($tpl);
     $tpl->pparse('OUT', 'main', false);
    }
    
    function GetMenu(&$menu) {
     $menu[1][7] = MENU_CHECKED;
    
    }
    
    function Work {
    
    }
}
$m = new SingleFile;
$m->Proceed;
?>
 

bobby

Пока незавершенный проект! Язык Ruby!
class Discussion < ActiveRecord::Base
belongs_to :discussion_folder
belongs_to :user
end

bobby

Ладно, уговорили, вот ещё кусочек:
def self.check_attribute(*attr_names)
attr_names.each do |attr_name|
class_eval %{def check_#{attr_name}
@user = User.new(:#{attr_name} => request.raw_post)
@user.valid?
render :partial => '#{attr_name}'
end}
end
end

bobby

Хотя это говнокусочек, завтра его переделаю обязательно.

laki

продолжим.
Проект лучший машграф 2004 года на ВМК
заработал 1000 рублей
clouds.psh
// c0 psConstVec (0.0, 0.5, 1.0, 0.75)
// c1 cloud0PerturbationFactor
// c2 cloud0Color
// c3 cloud1PerturbationFactor
// c4 cloud1Color
// c5 background0Color
// c6 background1Color
ps.1.4
texld r0, t1
texld r1, t3
texcrd r2.rgb, t0
texcrd r3.rgb, t2
mad r0.rgb, c1, r0_bx2, r2
mad r1.rgb, c3, r1_bx2, r3
phase
texld r0, r0
texld r1, r1
texcrd r2.rgb, t4
mul_x2_sat r4.rgb, r0.a, c2
+mul r4.a, r0.a, c2.a
mul_x2_sat r3.rgb, r1.a, c4
+mul r3.a, r1.a, c4.a
lrp r0.rgb, r0.a, r4, r3
+add_sat r0.a, r3.a, r4.a
lrp r2, r2.y, c5, c6
lrp_sat r0, r0.a, r0, r2

clouds.vsh
//clouds vertex shader
// v0 - Vertex Position
// v7 - Vertex Texture Data u,v
// c0 - time vector
// c4-7 - Composite World-View-Projection Matrix
vs.1.1
dcl_position v0
dcl_texcoord v7
m4x4 oPos, v0, c4 //transformed position
frc r0.xy, c0.x //tex coords + time (1st set)
add oT0.xy, v7, r0
add oT1.xy, v7, -r0
mov r0.x, -c0.y //tex coords + time (2nd set)
mov r0.y, c0.y
frc r0.xy, r0
add oT2.xy, v7, r0
add oT3.xy, v7, -r0
mov oT4, v7 //original tex coord
Результат

Ilya1974

Какой-то не руби кусок.

alexkravchuk

Что, , компромат собирает - хочешь увидеть, насколько ужасный народ код пишет, даже если за деньги?
Чёрт, подправил бы что-то, но историю не перепишешь. Что есть, то есть

for($a=0; $a<$nn; $a++)
{
// Комментарии - не код
$m_cur=&$m_new_boards_data[$a];
if($a>0)
$t_sql_a1.=",";
$t_sql_a1.="('$bag_uid','".$m_cur['uid']."','".$m_cur['hash_id']."','1','$c_time')";

// комментарии - не код
$t_p1="('$bag_uid','".$m_cur['uid']."','0','";
for($b=0; $b<12; $b++)
{
if($a>0 || $b>0)
$t_sql_a2.=",";
$t_sql_a2.=$t_p1.($m_cur['month'][$b])."','".($m_cur['def_st'][$b])."','".($m_cur['prix'][$b])."','".($m_cur['prix0'][$b])."')";
}
}


////////
int CF_FIRST::ms(UINT z_msg, WPARAM wpr, LPARAM lpr)
{
int xpos,ypos,c;

if(z_msg==WM_LBUTTONDOWN)
{
xpos=LOWORD(lpr);
ypos=HIWORD(lpr);
if(r_s1.is_in_key(xpos,ypos
return 1704;

if(r_s2.is_in_key(xpos,ypos
return 1705;
}

if(z_msg==WM_MOUSEMOVE)
{
xpos=LOWORD(lpr);
ypos=HIWORD(lpr);

if(r_s1.is_in_key(xpos,ypos) || r_s2.is_in_key(xpos,ypos
SetCursor(LoadCursor(NULL,IDC_HAND;
else
SetCursor(LoadCursor(NULL,DEF_CURSOR;

}
if(z_msg==WM_SIZE)
return 1799;

return 0;
}
///////
void CF_FIRST::ds
{
if(z_status==1)
{
r_s1.ds; r_s2.ds;
//r_e3.ds; r_e4.ds;
tpic.ds;
z_status=0;
}
}

otvertka07

public void run
{
#OCCRetryCount
Counter progressTotal;
;
ttsbegin;
ledgerJournalTable = LedgerJournalTable::find(ledgerJournalId);
ledgerJournalName = ledgerJournalTable.ledgerJournalName;
if (inTransfer)
{
inTransfer = false;
}
else
{
if (! this.validate
{
throw error(strfmt("@SYS21512", "@SYS23471";
}
if (! ledgerJournalTable.checkNotSystemBlocked ||
! ledgerJournalTable.checkNotGroupBlocked ||
! ledgerJournalTable.checkNotUserBlocked
{
throw error(strfmt("@SYS21512", "@SYS23471";
}
this.updateSystemBlock(true);
}
ttscommit;
try
{
numOfVouchersBooked = 0;
progressTotal = voucherNum ? 1 : ledgerJournalTable.numOfVouchers;
if (progressTotal)
{
if (ledgerJournalEngine)
{
ledgerJournalEngine.clearErrorLog;
}
if (! post)
{
if (!progress)
{
this.progressInit("@SYS13894", progressTotal, #AviFindFile);
progress.setText("@SYS26577");
}
this.checkJournal;
}
else
{
ttsbegin;
this.progressInit("@SYS25781", progressTotal, #AviFormLetter);
progress.setText("@SYS26577");
if (! this.postJournal
{
if (transferErrors)
{
inTransfer = true;
ttsabort;
}
else
{
throw error("@SYS21628");
}
}
else
{
if (numOfVouchersBooked)
{
ledgerJournalTable = LedgerJournalTable::find(ledgerJournalId, true);
if (ledgerJournalEngine)
{
ledgerJournalTable.JournalTotalDebit = ledgerJournalEngine.journalDebit;
ledgerJournalTable.JournalTotalCredit = ledgerJournalEngine.journalCredit;
ledgerJournalTable.JournalTotalOffsetBalance = ledgerJournalEngine.journalOffsetBalance;
}
else
{
[ledgerJournalTable.JournalTotalDebit,
ledgerJournalTable.JournalTotalCredit,
ledgerJournalTable.JournalTotalOffsetBalance] = LedgerJournalTable::journalBalanceMST(ledgerJournalId);
}
this.ledgerTransferToJournal(ledgerJournalId);
if (ledgerJournalTable.RemoveLineAfterPosting)
{
LedgerJournalTrans::deleteLineAfterPosting(ledgerJournalId);
this.moveTransferredBack;
}
if (!errorJournalDeleted)
{
ledgerJournalTable.Posted = NoYes::Yes;
ledgerJournalTable.PostedDate = systemdateget;
if (this.transferErrors
ledgerJournalTable.Log = strfmt("@SYS53324", this.numOfErrorsInList errorLedgerJournalId);
}
ledgerJournalTable.update;
TransactionLog::create(TransactionLogType::LedgerJournal, ledgerJournalTable.JournalNum + ' ' + ledgerJournalTable.Name);
}
ttscommit;
this.interCompanyTransferToCustPayment;
}
}
}
else
{
info("@SYS27671");
}
if (!inTransfer || (this.numOfVouchersBooked <= 0)
{
this.updateSystemBlock(false);
}
progress = null;
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel == 0)
{
if (xSession::currentRetryCount >= #RetryNum)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
catch (Exception::Error)
{
this.updateSystemBlock(false);
}
}

bobby

Почти руби, ведь эта штука генерирует методы ровно по три строки
Можно, конечно, переписать как-нибудь так:
def self.check_attribute(*attr_names)
attr_names.each do |attr_name|
class_eval check_attribute_template(attr_name)
end
end

def self.check_attribute_template(attr_name)
%{def check_#{attr_name}
@user = User.new(:#{attr_name} => request.raw_post)
@user.valid?
render :partial => '#{attr_name}'
end}
end
Но мне так меньше нравится.

al70

STAN_F stan_create(char *s, char *vars)
{
int i, j, changes, itmp;
double dtmp;
char *t1 = vars;
char *t2;

__stan_varnames = malloc(sizeof(char *;

#ifdef __DEBUG
printf(":%s:\n", vars);
#endif

i = 0; j = 0;
while(t1[i]) i++;
t2 = malloci + 1) * sizeof(char;
while(*t1)
{
while(!(isalnum(*t1) || *t1 == '_') && *t1)
t1++;
i = 0;
while(isalnum(*t1) || *t1 == '_')
{
t2[i] = *t1++;
i++;
}
t2[i] = 0;
i++;
__stan_varnames = realloc(__stan_varnames, (j + 1) * sizeof(char *;
__stan_varnames[j] = malloci + 1) * sizeof(char;
#ifdef __DEBUG
printf("var[%d] = %s\n", j, t2);
#endif
strcpy(__stan_varnames[j], t2);
j++;
}
free(t2);

__stan_total++;
__stan_tps = realloc(__stan_tps, (__stan_total + 1) * sizeof(int *;
__stan_vls = realloc(__stan_vls, (__stan_total + 1) * sizeof(double *;
__stan_tps[__stan_total] = (int *)malloc(sizeof(int;
__stan_vls[__stan_total] = (double *)malloc(sizeof(double;
__stan_tps_sp = -1;
__stan_vls_sp = -1;
__stan_sp = __stan_total;
__stan_totalvars = realloc(__stan_totalvars, __stan_sp + 1);
__stan_totalvars[__stan_sp] = j;

i = 0;
while(s[i]) i++;
__stan_ptr = s;
__stan_t = malloci + 1) * sizeof(char;
__stan_gettoken;
__stan_level1;
__stan_tps_push(0);
free(__stan_t);

for(i = 0; i < __stan_totalvars[__stan_sp]; i++)
free(__stan_varnames[i]);
free(__stan_varnames);

// __stan_fpu = realloc(__stan_fpu, (__stan_total + 1) * sizeof(double *;
// __stan_fpu_sp = realloc(__stan_fpu_sp, (__stan_total + 1) * sizeof(int;
// __stan_fpu[__stan_total] = (double *)malloc__stan_vls_sp + 1) * sizeof(double
// __stan_fpu_sp[__stan_total] = -1;

#ifdef __DEBUG
printf("\ntps stack:");
for(i = 0; i <= __stan_tps_sp; i++) printf(" %d", __stan_tps[__stan_sp][i]);
printf("\nvls stack:");
for(i = 0; i <= __stan_vls_sp; i++) printf(" %g", __stan_vls[__stan_sp][i]);
printf("\n");
#endif

// optimizing (calculating all we can calculate)

do {
changes = 0;
// ...NV+N+... -> ...NN+V+... and ...NV*N*... -> ...NN*V*... optimization
j = 0;
for(i = 0; i <= __stan_tps_sp - 4; i++)
{
if(__stan_tps[__stan_sp][i] > 0)
j++;
if(__stan_tps[__stan_sp][i] == __STAN_NUM)
{
if(__stan_tps[__stan_sp][i + 1] > 0)
if__stan_tps[__stan_sp][i + 2] == __STAN_ADD &&
__stan_tps[__stan_sp][i + 4] == __STAN_ADD) ||
(__stan_tps[__stan_sp][i + 2] == __STAN_MUL &&
__stan_tps[__stan_sp][i + 4] == __STAN_MUL
if(__stan_tps[__stan_sp][i + 3] == __STAN_NUM)
{
itmp = __stan_tps[__stan_sp][i + 3];
__stan_tps[__stan_sp][i + 3] = __stan_tps[__stan_sp][i + 1];
__stan_tps[__stan_sp][i + 1] = itmp;
dtmp = __stan_vls[__stan_sp][j + 2];
__stan_vls[__stan_sp][j + 2] = __stan_vls[__stan_sp][j + 1];
__stan_vls[__stan_sp][j + 1] = dtmp;
changes++;
}
j++;
}
}
// ...N [unary op]... -> ...N [nop]... optimization
j = 0;
for(i = 0; i <= __stan_tps_sp - 1; i++)
{
if(__stan_tps[__stan_sp][i] > 0)
j++;
if(__stan_tps[__stan_sp][i] == __STAN_NUM)
{
if(__stan_tps[__stan_sp][i + 1] < __STAN_SINGLE)
{
__stan_fpu_push(__stan_vls[__stan_sp][j]);
__stan_fpu_op(__stan_tps[__stan_sp][i + 1]);
#ifdef __DEBUG
// printf("%g, [%d]\n", __stan_vls[__stan_sp][j], __stan_vls[__stan_sp][j + 1]);
#endif
__stan_vls[__stan_sp][j] = __stan_fpu_pop;
__stan_tps[__stan_sp][i + 1] = __STAN_NOP;
i++;
changes++;
}
j++;
}
}
// ...NN [double op]... -> ...N [nop] [nop]... optimization
j = 0;
for(i = 0; i <= __stan_tps_sp - 2; i++)
{
if(__stan_tps[__stan_sp][i] > 0)
j++;
if(__stan_tps[__stan_sp][i] == __STAN_NUM)
{
if(__stan_tps[__stan_sp][i + 1] == __STAN_NUM)
if(__stan_tps[__stan_sp][i + 2] > __STAN_SINGLE &&
__stan_tps[__stan_sp][i + 2] < __STAN_DOUBLE)
{
__stan_fpu_push(__stan_vls[__stan_sp][j]);
__stan_fpu_push(__stan_vls[__stan_sp][j + 1]);
__stan_fpu_op(__stan_tps[__stan_sp][i + 2]);
#ifdef __DEBUG
printf("%g, %g, [%d] = ", __stan_vls[__stan_sp][j], __stan_vls[__stan_sp][j + 1], __stan_tps[__stan_sp][i + 2]);
#endif
__stan_vls[__stan_sp][j] = __stan_fpu_pop;
__stan_tps[__stan_sp][i + 1] = __STAN_NOP_NUM;
__stan_tps[__stan_sp][i + 2] = __STAN_NOP;
i++; i++;
j++;
changes++;
}
j++;
}
}

#ifdef __DEBUG
printf("changes: %d\n", changes);
#endif
__stan_compress_stacks;

} while(changes != 0);

#ifdef __DEBUG
printf("\nafter optimization:\ntps stack:");
for(i = 0; i <= __stan_tps_sp; i++) printf(" %d", __stan_tps[__stan_sp][i]);
printf("\nvls stack:");
for(i = 0; i <= __stan_vls_sp; i++) printf(" %g", __stan_vls[__stan_sp][i]);
printf("\n");
#endif

return __stan_sp;
}

laki

офигенно понятно
бля я то думал тока мои прогеры так криво писать умеют

alexkravchuk

Ну вот, убедился, что прямо и понятно в реальных проектах [почти] никто не пишет? Нет, можно (и иногда нужно) рефакторить во что-нибудь нормальное, но не всегда время на это есть, и совсем не факт, что через какое-то время код опять не испортится от внесения изменений и доработки.
Вот тебе ещё кусок

///////////////////////////////////////
m_glabal_desc:
[0] - идентификатор знака
[1] - иконка знака
[2] - основной приоритет знака при расстановке в экзаменах
[3] - имя катринки, показываемой в обучении
[4] - имя невыделенной картинки в экзамене
[5] - имя выделенной картинки в экзамене
[6] - x координата смещения большой картинки в обучении
[7] - x координата смещения большой картинки в экзамене
[8] - ширина иконки
[9] - высота иконки

m_target_desc:
[0] - id
[1] - имя файла с картинкой мишени
[2] - x - логическая координата центра мишени (то есть, смещение от л.в. угла)
[3] - y - координата

m_smart_desc:
[0] - id
[1] - id в массиве m_global_desc
[2] - имя файла-иконки
[3] - id мишени
[4] - x смещение логического центра картинки относительно мишени
[5] - y смещение -//-

m_static_pict:
[0] - id
[1] - id "мишени" (0 - если таковой нет)
[2] - имя большой картинки, появляющейся в обучении при наведении мышки
[3] - x смещение большой картинки в обучении
[4] - адрес, по которому надо переходить в случае клика ('' - не используется)
[5] - тип перехода (1-в текущем окне)
[6] - alt-поле картинки

использование в макете страницы
m_page:
[0] - id конкретного вида знака (то есть, m_smart_desc)
[1] - х координата логического центра
[2] - y координата логического центра
[3] - число шагов, за которое картинка дойдет до места
[4] - пауза перед движением иконки, в шагах
[5] - пауза после движения иконки, в шагах
[6] - общий приоритер
[7] - локальная группа расстановки
[8] - приоритет в локальной группе расстановки


base_pic_x,
base_pic_y,
base_pic_name

/////////////////////////////////////
*/

// Массив для вычисления позиций, на которых будут находиться
// движущиеся иконки в начале движения.
// Hумерация привязана к $m_global_desc
$m_left_map[0]=array(0,0,0,0);

function pre_calc($m_local)
{
global $m_global_desc,$m_smart_desc,$m_left_map;
global $base_pic_x, $base_pic_y;

// Инициализация массива учёта используемых типов знаков.
for($a=0; $a<20; $a++)
{ $tt_ico[$a]=0; $m_left_map[$a]=array($a,0,0,0);}

// цикл расчёта типов знаков, которые нужно будет расставлять
$n=count($m_local);
for($a=1; $a<$n; $a++)
{
$t_id = $m_local[$a][0]; // id знака, который появится после движения
$t_uid = $m_global_desc[$m_smart_desc[$t_id][1]][0]; // id знака

// учитываем количесто расставленных знаков данного типа
$tt_ico[$t_uid]++;
}

for($a=1, $ty=$base_pic_y+10; $a<20; $a++)
{
if($tt_ico[$a]!=0) // Если данный тип знака используется
{
// tx, ty - координаты знака в исходной позиции
$tx = $base_pic_x + (40-$m_global_desc[$a][8])/2;
$t_name = $m_global_desc[$a][1];

// Сохраняем координаты, откуда будет начинаться движение
$m_left_map[$a][3]=$tt_ico[$a];
$m_left_map[$a][1]=$tx;
$m_left_map[$a][2]=$ty;

$ty = $ty+$m_global_desc[$a][9]+5;
}
}
}

///////////////////
// Генерирование кода, опеделяющего картинки в своем начальном
// и конечном местоположениях
// вид кода
// <img name='icores_2' src='pics/red.gif' border=0
// style='visibility: visible; position: absolute; top: 110; left: 200'
// onMouseOver='r_over(1)' onMouseOut='r_out'>
//
// $cur_task=1 - режим "обучение"
// $cur_task=2 - режим "экзамен"

function print_ico_base($m_local,$cur_task,$m_local_stat,&$m_rast)
{
global $base_pic_x, $base_pic_y, $base_pic_name;
global $m_global_desc,$m_smart_desc,$m_target_desc,$m_left_map,$m_static_pict;
global $m_rast_desc;

$main_x=$base_pic_x;
$main_y=$base_pic_y;

if(@count($m_rast)==0)
$m_rast[0]=array(0,0,0);

if($n_mls=@count($m_local_stat $n_mls=$n_mls-1;
else $n_mls=0;

// Вывод основной картинки, на которой будут расставляться знаки
printf("<img name='base_pic' border='0' src='%s' style='visibility: visible; position: absolute; left: %d; top: %d'>\n",$base_pic_name,$main_x,$main_y);

// цикл генерирования карты конечного расположения иконок
$n=count($m_local);
for($a=1; $a<$n; $a++)
{
$t_id = $m_local[$a][0]; // id знака, который появится после движения
$t_uid = $m_global_desc[$m_smart_desc[$t_id][1]][0]; // id знака

// полные координаты верхнего левого угла картинки-результата
$tx = $m_local[$a][1] + $main_x - $m_smart_desc[$t_id][4];
$ty = $m_local[$a][2] + $main_y - $m_smart_desc[$t_id][5];

// имя файла картинки-результата
$t_name = $m_smart_desc[$t_id][2];

// выводим определения картинок-знаков в позиции, куда они придут.
if($cur_task==1) printf("<img name='iconres_%d' border='0' src='%s' style='visibility: hidden; position: absolute; left: %d; top: %d' onMouseOver='r_over(%d)' onMouseOut='r_out'>\n",$a,$t_name,$tx,$ty,$t_uid);
if($cur_task==2) printf("<img name='iconres_%d' border='0' src='%s' style='visibility: hidden; position: absolute; left: %d; top: %d'>\n",$a,$t_name,$tx,$ty);

// расстановка мишеней в экзамене
if($cur_task==2)
{
$t_targ = $m_smart_desc[$t_id][3];
$t_prior1= $m_global_desc[$t_uid][2];
$t_pgroup= get_corr1($m_local[$a][6]);
$t_prior2= get_corr1($m_local[$a][7]);
$tx = $m_local[$a][1] + $main_x - $m_target_desc[$t_targ][2];
$ty = $m_local[$a][2] + $main_y - $m_target_desc[$t_targ][3];
$t_name = $m_target_desc[$t_targ][1];
printf("<img name='target_%d' border='0' src='%s' alt='место для знака, сигналиста или петарды' style='visibility: visible; position: absolute; left: %d; top: %d' onClick='put_sign(%d,0)'>\n",$a,$t_name,$tx,$ty,$a);
}
}

// цикл генерирования карты расстояний в экзамене
$n=count($m_rast);
for($a=1; $a<$n; $a++)
{
if($cur_task==2)
{
$t_id=$a; // id расстояния, который появится после движения
$t_uid = $m_rast_desc[$m_rast[$t_id][0]][0]; // id знака

// полные координаты верхнего левого угла картинки-результата
$tx = $m_rast[$a][1] + $main_x - $m_rast_desc[$t_uid][3];
$ty = $m_rast[$a][2] + $main_y - $m_rast_desc[$t_uid][4];

// имя файла картинки-результата
$t_name = $m_rast_desc[$t_uid][2];

// выводим определения картинок-знаков в позиции, куда они придут.
printf("<img name='rast_%d' border='0' src='%s' style='visibility: hidden; position: absolute; left: %d; top: %d'>\n",$a,$t_name,$tx,$ty);

// расстановка мишеней
$tx = $m_rast[$a][1] + $main_x - 7;
$ty = $m_rast[$a][2] + $main_y - 4;
$t_name = 'pics/

Landstreicher

Чего-то пока никто не зажег, написав код на каком-нибудь не-mainstream языке. Ждем-с.

bobby

Ruby пока более-менее не mainstream

laki

Бля во что нашел. Такой код и есть
 

SqlDataReader dr = cmd.ExecuteReader;
if(dr.HasRows)
{
grid.DataSource = dr;
grid.DataBind;
}
if(grid.Rows.Count > 0)
{
Infragistics.WebUI.UltraWebGrid.UltraGridRow rw = grid.Rows[0];
for(int i=0;i<dr.FieldCount;i++)
{
if(rw.Cells[i].Value is DateTime)
{
grid.Columns[i].Format="dd.MM.yy HH:mm";
grid.Columns[i].DataType="System.DateTime";
}
}
}
/* КАКОЙ ОСЕЛ ПИСАЛ ВОТ ЭТО?!?!?!? МЛИА!?
dr.Close;
dr = cmd.ExecuteReader;
if(dr.Read
{
for(int i=0;i<dr.FieldCount;i++)
{
if(dr[i] is DateTime)
{
grid.Columns.FromKey(dr.GetName(i.Format="dd.MM.yy HH:mm";
grid.Columns.FromKey(dr.GetName(i.DataType="System.DateTime";
}
}
}
}*/
UltraWebToolbar1.Items.FromKeyButton("Hide").Enabled=dr.HasRows;
UltraWebToolbar1.Items.FromKeyButton("UnHideAll").Enabled=dr.HasRows;
UltraWebToolbar1.Items.FromKeyButton("Ascending").Enabled=dr.HasRows;
UltraWebToolbar1.Items.FromKeyButton("Descending").Enabled=dr.HasRows;
dr.Close;
cmd.CommandText="tc_getTimePeriodUserProfile";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear;
cmd.Parameters.Add("@UserID",Session["HDNameNowID"]);


dr = cmd.ExecuteReader;
UltraWebToolbar1.Items.FromKeyButton("TimeFilter").Enabled=dr.HasRows;
 

Flack_bfsp

Я хренею с вашего кода, господа.

bobby

Ну вот у меня ведь милый код, правда?

laki

ага я за такой код штрафую
ибо не хуй расслабляться.

Flack_bfsp

Тот, который кусочек, а не говнокусочек - да
Но он какой-то маленький. По нему сложно оценить весь проект.

psihodog


# Case insensitive dictionary definition
def lower_key(meth):
def wrapper(self, key, *args, **kwds):
try: key= key.lower
except AttributeError: pass
return meth(self, key, *args, **kwds)
return wrapper

class cidict(dict):
"""Case insensitive dictionary."""
def __init__(self, dic= **kwds):
super(cidict, self).__init__
try: dic= dic.iteritems
except AttributeError:
try: dic= dic.items
except AttributeError: pass
for k,v in dic: self[k]= v
for k,v in kwds.iteritems: self[k]= v

for _meth in ('__setitem__', '__getitem__', '__delitem__',
'get', 'has_key', 'setdefault', '__contains__'):
setattr(cidict, _meth, lower_key(getattr(dict, _meth

laki

во блин два часа назад наваял. деньги уже получил

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Template="tc:template">
<xsl:output method="html" indent="yes"/>
<xsl:template match="Template:Root/Template:Base">
<table border="0" cellpadding="0" cellspacing="2" width="100%">
<xsl:for-each select="Template:Items/Template:Item">
<xsl:if test="position mod 2 = 1">
<xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>
</xsl:if>
<td>
<table>
<tr>
<td width="180" class="teaserTitle">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="@title"/>
</xsl:attribute>
<xsl:value-of select="@title"/>
</a>
</td>
</tr>
<xsl:call-template name="Items">
<xsl:with-param name="node" select="Template:Items"/>
</xsl:call-template>
<tr>
<td>
<img height="5" width="1" src="./images/empty.gif" alt=" "/>
</td>
</tr>
</table>
</td>
<xsl:if test="position mod 2 = 1">
<td width="10">
<img height="1" width="10" src="./images/empty.gif" alt=" "/>
</td>
</xsl:if>

<xsl:if test="position mod 2 = 0">
<xsl:text disable-output-escaping="yes">&lt;/tr&gt;
</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:if test="count(Template:Items/Template:Item) mod 2 = 1">
<td>
</td>
<xsl:text disable-output-escaping="yes">&lt;/tr&gt;
</xsl:text>
</xsl:if>
</table>
</xsl:template>
<xsl:template name="Items">
<xsl:param name="node"/>
<tr>
<td width="180">
<xsl:for-each select="$node/Template:Item">
<span class="microNaviPassiv">
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="@title"/>
</xsl:attribute>
<xsl:value-of select="@title"/>
</a>
</span>
<br/>
</xsl:for-each>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>

bobby

Ха!
Говнокусочек вообще отличный, между прочим.

bobby

Ура! Наконец-то питон пожаловал!
Код трушный, кстати.

Flack_bfsp

Говнокусочек вообще отличный, между прочим.
Поверю тебе на слово.

alexkravchuk

Все свои, говорим прямо
Если не умеешь писать код, то можешь попробовать поучить других, как писать код. Или поруководить теми, кто пишет код. Это относится и к 'у в том числе.
Для того, чтобы написать красивый стройный код, много мозгов не нужно, и опыта много не нужно, но только это будет академический код. Если же реализовывается не какой-нибудь алгоритм/численный метод, а идёт банальная работа с внешними данными, например со сложными структурами или БД (как в большинстве приведённых крупных кусках кода то такой элегантности добиться очень трудно, так как эти самые и структуры данных, структура/органицазия БД обычно довольно сильно меняются. В результате код превращается в кашу, которую конечно нужно рефакторить, но...
1) код работает, а есть и другие задачи, которыми нужно заниматься
2) с большой вероятностью что-нибудь ещё изменится, и придётся переделывать ещё раз
Достали теоретики/манагеры, которые сами никогда ничего большого не писали, но зато знают, за что нужно бить/отрывать руки/штрафовать. Собсвенно, о том что именно в этом русле обсуждение пойдёт, было очевидно с первого поста.

bobby

то такой элегантности добиться очень трудно, так как эти самые и структуры данных, структура/органицазия БД обычно довольно сильно меняются. В результате код превращается в кашу, которую конечно нужно рефакторить, но...
1) код работает, а есть и другие задачи, которыми нужно заниматься
2) с большой вероятностью что-нибудь ещё изменится, и придётся переделывать ещё раз
Т.е. ты вот тут утверждаешь, что люди, которые пишут в своих книгах про то, как им удается поддерживать гибкость, "красоту", стройность и элегантность кода (имеются ввиду авторы вроде Фаулера, Бека, pragmatic programmers, 37signals откровенно пиздят?

alexkravchuk

Т.е. ты вот тут утверждаешь, что люди, которые пишут в своих книгах про то, как им удается поддерживать гибкость, "красоту", стройность и элегантность кода (имеются ввиду авторы вроде Фаулера, Бека, pragmatic programmers, 37signals откровенно пиздят?
Ну не "откровенно пиздят", а "слегка приукрашивают"
Да и это вполне возможно, поддерживать элегантность кода, только затраты на поддержание этой элегантности очень большие, в разы больше. Иногда это оправдано, иногда нет - возможно, авторы работали с теми проектами, где это действительно нужно. Но лично я работал там, где в этом необходимости просто нет, и это неоправданная роскошь - поэтому и код соответствующий.
Есть же условное правило, что на 90% ресурсов тратятся на 10% кода - вот, можно составить условное правило, что на 10% кода нужно затратить 90% сил по поддержанию элегантности

laki

я предполагаю, что сатурн аргументировав мой кусок с ОСЛАМИ руководствовался кривизной не с точки зрения оформления. а на возможные ошибки, которые этот код может за собой повлечь.
у меня неделю назад был случай, когда человек ушел в отпуск, а до этого всем клиентам обновили версию софта . так вот в одном критическом месте он умудрился захардкодить коннекш стринг. в результате неделя работы специалиста по обновлению пошла на хуй. а все изза такого кода.

laki

что на 10% кода нужно затратить 90% сил по поддержанию элегантности
нет просто надо иногда думать, что с тобой в команде могут работать люди.
и тут должен присутствовать принцип: незаменимых людей быть не должно, что когда другой человек полезет исправлять твой код потратил хотябы 90 процентов сил а не 200

bobby

Дело не в оформлении, а в том, что некоторые люди называют code smell.

bobby

Спорить не буду, пожалуй, потому что опыта в разработке объемных проектов у меня не очень много.
Однако уже неоднократно замечал, что если в какой-то момент перестать следить за элегантностью (не очень удачный термин, имхо то затраты на её поддержание действительно резко возрастут через некоторое время. А ещё через некоторое время код превратится в кашу, которую получается проще переписать с нуля, чем рефакторить до посинения. Кашу, в которую очень тяжело вносить изменения.
В последнем проекте (на Ruby которым я сейчас занимаюсь, пока у меня вполне получается поддерживать элегантность, а времени на это уходит по моим ощущениям, не сильно много (чему сильно способствует мега-фреймворк Rails). Посмотрим, что будет дальше

danilov

 
""" Print scenario
Copyright 2005 SIA "ANK"

Preview report.
"""

"""History (most recent first):
18-Dec-2005 [Ss] Fix printing
27-Nov-2005 [Ss] Call own Start/EndScenario
02-Oct-2005 [Ss] Fix bad code (using pylint warnings)
18-Aug-2005 [Ss] Change input parameters
28-Jul-2005 [Ss] Add Close Event
13-Jul-2005 [Ss] Print all inpyt tables in some oreder
13-Jul-2005 [Ss] Now printing works
12-Jul-2005 [Ss] Change forms layout - does not work yet
20-Jun-2005 [Ss] Pages now from 1 to 1
19-Jun-2005 [Ss] Now it works on win32
17-Jun-2005 [phd] Use self.info.
13-Jun-2005 [Ss] Remove component classes
11-Jun-2005 [bor] Remove get_cell get_value get_list
10-Jun-2005 [bor] Remove get_index
10-Jun-2005 [phd] No need to store parent_frame.
08-Jun-2005 [phd] Added Subversion keywords. Added __all__.
08-Jun-2005 [Ss] Adapted for a more generic Scenario framework.
06-jun-2005 [Ss] now it works with new resources
09-may-2005 [Ss] fixed print error. Now can print into PostScript file
08-may-2005 [Ss] added log attribute
07-may-2005 [Ss, Cube] created
"""

__version__ = "$Revision: 1194 $"[11:-2]
__date__ = "$Date: 2006-02-01 14:28:33 +0300 (Wed, 01 Feb 2006) $"[7:-2]
__revision__ = "$Id: PrintPreview.py 1194 2006-02-01 11:28:33Z phd $"[5:-2]

__all__ = ["PrintPreview"]


import wx

from Scenario import Scenario
import log

page_min, page_max = page_from, page_to = 1, 1


class PrintPreview(Scenario):
""" Print script"""

def __init__(self, window, **data):
super(PrintPreview, self).__init__(window, **data)
pages = self.data['pages']
self.preview_printout = PlatePrintout('Preview', pages)
self.printout = PlatePrintout('toPrint', pages)
self.preview = wx.PrintPreview(
self.preview_printout, self.printout
)
self.frame = wx.PreviewFrame(
self.preview, window, 'Preview report'
)
self.frame.Initialize
wx.EVT_CLOSE(self.frame, self.OnClose)
self.info('Started')
self.frame.Show(True)

def OnClose(self, event):
self.info('Closed')
self.EndScenario
event.Skip


class PlatePrintout(wx.Printout, log.Log):
""" preveiw and print Printout """
def __init__(self, name, tables):
wx.Printout.__init__(self, name)
self.tables = tables
self.info('Create printout')
self.pages = 4

def OnBeginDocument(self, start_page, end_page):
self.info('print from %d to %d'%(start_page, end_page
_state = wx.Printout.base_OnBeginDocument(self,
start_page, end_page
)
return _state

def OnPrintPage(self, current_page):
self.dc = self.GetDC
_font = self.dc.GetFont
_font.SetPointSize(14)
self.dc.SetFont(_font)
self.y_offset = 0
y_pos = 0
page = 1
self.dc.StartPage
for table in self.tables:
y_pos, page = table.fit(self.dc, y_pos, page,
current_page, self.IsPreview
)
self.dc.EndPage
self.pages = page
self.info('Redraw event called page %d'%current_page)
return True

def HasPage(self, page):
return page <= self.pages

6yrop

у меня неделю назад был случай, когда человек ушел в отпуск, а до этого всем клиентам обновили версию софта . так вот в одном критическом месте он умудрился захардкодить коннекш стринг. в результате неделя работы специалиста по обновлению пошла на хуй. а все изза такого кода.
т.е. у вас релиз не проходит тестирование перед развертыванием у заказчика? или неправильная организация тестирования?
Да, программист виноват, не поставил TODO: или поставил, но забыл пофиксить, но программист это человек и как любой человек он ошибается. Причем здесь идет речь об ошибке, которая гарантированно отлавливается при правильном процессе тестирования. Если вы экономите на тестировании, то вы сознательно идете на риск, поэтому ответственность за последствия таких ошибок в бОльшей степени лежит на менеджере, чем на программисте.

Flack_bfsp

Если не умеешь писать код, то можешь попробовать поучить других, как писать код. Или поруководить теми, кто пишет код. Это относится и к 'у в том числе.
Хм, а ко мне-то это каким боком относится? Я пока своего кода сюда не писал. Принесу с работы что-нибудь эдакое.
Для того, чтобы написать красивый стройный код, много мозгов не нужно, и опыта много не нужно, но только это будет академический код.

Про мозги и опыт согласен, надо просто аккуратным быть, а вот про академичность - ерунда. Идёт работа с внешними данными? Отлично! Локализуй её в отдельном модуле/классе, и тогда при переходе на другую БД придётся менять только этот модуль, а остальной код не надо будет трогать ВООБЩЕ. Я так (конкретно для работы с разными БД) делал и на плюсах и на пхп. Если ты такого не делаешь, а пишешь код, максимально зависимый от конкретной версии бд - ну блин, сам дурак, проектирование плохое.
2Завхоз - нет, я как раз про оформление. В плохо оформленном коде сложно разбираться. В том числе и автору кода, скажем, через полгода после написания этого кода. Функции должны быть короткими, названия переменных - осмысленными, в коде - отступы и т.д. Ботать Мейерса. Я сначала сам долго не мог понять, нахер это нужно, если код рабочий? Но, к счастью, мой начальник за полгода сумел в меня это вбить. И я прозрел. Хороший код писать совсем не сложно. А вот ресурсы (в том числе временные) на его поддержку, как правильно заметил Мэдкроз, будут намного меньше.
Достали теоретики/манагеры, которые сами никогда ничего большого не писали, но зато знают, за что нужно бить/отрывать руки/штрафовать.

Скорее, достали теоретики, которые ничего большого не писали, а говорят о том, как сложно писать хороший код и как правильно писать плохой код. Ибо если бы эти теоретики писали что-нибудь реально большое, они бы поняли, как важно хорошее оформление кода.

bansek

+1

6yrop

Про мозги и опыт согласен, надо просто аккуратным быть, а вот про академичность - ерунда. Идёт работа с внешними данными? Отлично! Локализуй её в отдельном модуле/классе, и тогда при переходе на другую БД придётся менять только этот модуль, а остальной код не надо будет трогать ВООБЩЕ. Я так (конкретно для работы с разными БД) делал и на плюсах и на пхп. Если ты такого не делаешь, а пишешь код, максимально зависимый от конкретной версии бд - ну блин, сам дурак, проектирование плохое.
И что в этом хорошего? каждое обращение к базе ты обернул в языковые конструкции пхп или плюсов, объем кода явно увеличился, что почти всегда плохо. А раде чего, чтобы была переносимость на разные СУБД, а в большинстве случаев перенос не нужен никому.
Вон посмотри (пост -а выше) как классно выглядит код на Axapta-е, все в одном месте и обычные операторы языка и обращение к базе select. У Axapta есть переносимость между Oracle и SQL Server-ом, но эта переносимость реализована на уровне языка, а у тебя проблема переносимости влияет на организацию кода.

Flack_bfsp

И что в этом хорошего? каждое обращение к базе ты обернул в языковые конструкции пхп или плюсов, объем кода явно увеличился
Если у тебя десятки модулей, которые использую БД, объём кода явно уменьшается и у него улучшаются и читабельность и поддерживаемость. И вовсе не в переносимости дело. Я просто как пример привёл БД. Когда в множестве разных модулей пишутся огромные куски почти одинакового кода, это очень плохое проектирование.

6yrop

это другое дело, меня тоже сильно раздражают почти одинаковые куски кода.
И вовсе не в переносимости дело.

я это и хотел сказать

tipnote

т.е. у вас релиз не проходит тестирование перед развертыванием у заказчика? или неправильная организация тестирования?
...

гг
плюсик
правда, у нас из-за тестера совсем упала личная дисциплина. в некотором роде.
из-за того, что заказчик посадил на наш проект своего тестера и приказал заниматься только нами.
Мы обленились до того, что даже не проверяем, а ошибки/эксепшены после правки кода есть или нет (код на питоне, соответственно, все в рантайме).
Если есть - их найдут - тогда и будем об этом думать =)

Realist

Счетная гидродинамика:
 
#include "AlwaysChecker.h"

// возвращает истину
bool AlwaysChecker::isTimeToSave
{
return true;
}

smit1

bool AlwaysChecker::isTimeToChange;

sergey_m

Не могу найти код, за который я получил денег.

FRider

Суди не свыше сапога.

Andr163

ActionScript

configXML.onLoad = function
{
var node = this.firstChild;
while (node)
{
if (node.nodeName == "config")
{
var sub_node = node.firstChild;
while (sub_node)
{
if (sub_node.nodeName == "timeout")
timeout = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "stoptimeout")
stoptimeout = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "category")
category = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "codebase")
codebase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "requesturi")
requesturi = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "catbase")
catbase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "namebase")
namebase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "statbase")
statbase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "bgpic")
bgpic = sub_node.firstChild.nodeValue;

tF.text += sub_node.nodeName + "=" + sub_node.firstChild.nodeValue + "\n";
sub_node = sub_node.nextSibling;
}
break;
}
node = node.nextSibling;
}
LC.connect (name);
LC.send (slaveName + name, "configInit", namebase, statbase, bgpic);
tF.text += namebase + ", " + statbase + ", " + bgpic;
}

gopnik1994

APL. Полгода назад заработал 700 баксов премии:

( + еще кусок немного больше)

smit1


if (sub_node.nodeName == "timeout")
timeout = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "stoptimeout")
stoptimeout = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "category")
category = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "codebase")
codebase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "requesturi")
requesturi = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "catbase")
catbase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "namebase")
namebase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "statbase")
statbase = sub_node.firstChild.nodeValue;
else if (sub_node.nodeName == "bgpic")
bgpic = sub_node.firstChild.nodeValue;

Там циклов и массивов не бывает чтоле?

deniska

Последнее время все чаще код у меня такой


Cross Group = "OI","CrossDataPostalCode",ZIP,Addon,Dlocality
Cross Group = "CSZ","CrossDataPostalCode",ZIP,Dlocality
Cross Group = "CSZ","CrossDataPostalCode",ZIP,City,County
Cross Group = "CSZ","CrossDataPostalCode",ZIP,City
Cross Group = "CSZ","CrossDataPostalCode",ZIP,County
Cross Group = "CSZ","CrossDataCB",CityCB,CountyCB
Cross Group = "CSZ","CrossDataCB",CityCB

Ctx Group = 1key,inward
Ctx Group = 1key
Ctx Group = 0,RulesPostalCodeWeights,key,inward
Answer Fields = key,inward
Answer Tables = OI,Street,DStreet,Apt
Reject Class = CAdsIRejFinal



Street Number=
{=
dynamic=0
reject=0
tables=Street,DStreet,Apt
DbVocName=
elem=
{=
interp={"Low>=,High<="}
}=
}=
Street=
{=
tables=Street,DStreet,Apt
dynamic=1
reject=0
DbVocName=
allow nonvoc=0
elem=
{=
control=NSAContextCtrl
tables=Street,Apt
out={"street_name","",""}
out={"street_name","",", "}{"street_suff","",""}
inp={"Street Number","Low>=,High<="}
interp={"street_name="}{"street_suff="}
}=
elem=
{=
control=NSAContextCtrl
tables=DStreet,Apt
out={"dstreet_name","",""}
out={"dstreet_name","",", "}{"dstreet_suff","",""}
inp={"Street Number","Low>=,High<="}
interp={"dstreet_name="}{"dstreet_suff="}
}=
}=

6yrop

чего?

aleks058

Идея треда неплохая. Дёнису респект.
Срочный двухнедельный проект. Погашение кредитов через банкоматы Сбербанка.
В прошлом году на заработанные деньги съездил с девушкой на море на пару недель.
Функция, вытаскивающая данные о сумме задложенности из системы. Система работает в отделениях Сбера уже более 10 лет. Для более-менее комфортной работы пришлось сделать к этой ней фасадик.
Некоторые коменты не мои.
Дебаг проходил не без бубна.

BANK_FILL_BY_LS_RESULT Sofia::FillAccountByLs(Account *account)
{
if (!Connect return BANK_FILL_BY_LS_NO_ACCESS;

char buff[1024];

opr_o;
opr_o_l(bank);
opr_o_s(user);
sprintf
char*)buff,"SELECT R_DOG.A_NUM, R_DOG.A_NLS_KR, NR_WID_LS_I.A_NAME FROM "
"R_DOG,R_LS_NUMBER,NR_WID_LS_I WHERE R_DOG.A_NLS_KR=R_LS_NUMBER.A_NLS AND "
"R_DOG.A_SNVKL=NR_WID_LS_I.A_NUM AND R_LS_NUMBER.A_NUMBER_NLS='%s'",
account->accountNumber.ToString.c_str
);
opr_o_cchar*)buff);
opr_send(OP_DYN_SMPL);

long ret = 0;
long lNomLSKr;
long lNomDog;
char ucNaimKred[256];

for (lNomLSKr=0; opr_i; )
{
opr_i_l(&ret);
if (!ret)
{
opr_i_l(&lNomDog); // Номер договора
opr_i_l(&lNomLSKr); // системный номер ссудного ЛС
opr_i_cchar*)ucNaimKred); // наименование вида кредита
}
}

if (ret != RET_NO_DATA)
{
logger.Log(LL_Error, "Sofia: no data returned");
return BANK_FILL_BY_LS_NO_ACCESS;
}

if (!lNomLSKr)
{
logger.Log(LL_Info, "Sofia: account not found");
return BANK_FILL_BY_LS_LS_NOT_FOUND;
}

// Насчет погашения ссудной задолженности на удаленных терминалах (работать должна только для новой схемы реализации кредитов,
// SignProcFromDenis из WorkParam == 1, работа без т.н. "соплательщиков", а насчет штрафа - репу чесать надо)
// Запрашиваем состояние кредитного договора:
short sCalcProcVbsForMixCase = 3;
long servDate;
short time1;

today_time(&servDate, &time1);

opr_o;
opr_o_l(this->bank);
opr_o_s(this->user);
opr_o_l(lNomDog); // это номер договора
opr_o_l(servDate); // это дата, на которую надо дать инфо по ссуде (текущая дата)
opr_o_s(KRED_FZ); // дефайн - типа кредиты физлиц
opr_o_s(sCalcProcVbsForMixCase); // различные схемы учета просроченных процентов на внебалансе, я беру ее из ini-файла, но тут можно упростить
opr_send(CR_ASK_LS_KRED); // из op_cred.h
opr_i;
opr_i_l(&ret);

if (ret != RET_NORMAL)
{
logger.Log(LL_Error, "Sofia: CR_ASK_LS_KRED returned error");
return BANK_FILL_BY_LS_CR_ASK_LS_KRED_ERROR;
}

// ****************************************************************************************************************
// Receiving results
// ****************************************************************************************************************
short sSchema; // признак разнесенности просроченных %% на внебалансе, ежели тут 0 - в операции отказать
long lDateEndActKr; // дата последнего действия по ЛС ОД ссуды (а по барабану, ежели эта дата не больше, чем текущая дата)
long lStatusKr; // статус ЛС кредита (ну ежели он KR_CLOSE, ничего не надо пытаться делать, да и не получится)
long lSysNomLSKr; // системный номер ЛС ОД
double dSaldoKr; // остаток ОД
double dProcToday; // %% по ОД
double dSaldoProsrOD; // ну и так далее и тому подобное
double dPennyProsrOD;
double dSaldoProsrProc;
double dPennyProsrProc;
double dPennyUnGetOD;
double dPennyRashOD;
double dSumGetKred;
double dSaldoSpisKred;
double dSaldoProcOrder;
double dProsrSaldoVbs;
double dSrochSaldoVbs;
double dPennyProcOrder;
double dPennyProcVBS;
double dDolgODIntoProsr; // инфо о готовящейся просрочке ОД (это по барабану)
double dDolgProcIntoProsr; // инфо о готовящейся просрочке %% (это по барабану)
long lFilialKred;
long lDateLastPogOD;
double dSumLastPogOD;
long lDateNextPogProc;
double dSumNextPogProc;
long lDateNextPogOD;
double dSumNextPogOD;
char ucFIOKr[128]; // вот это нименование ссудозаемщика (а может и ЛС, не помню но сейчас это практикуется как идентичные вещи
char ucAddrKr[128]; // это его адрес
double dSaldoSpisProc;
short sAmountSoPlat; // это информация о "соплательщиках", ежели не 0 - в операции отказать

char ucNaimSoPlat[128];
double dSoPlProcToday;
double dSoPlProcOrderBS;
double dSoPlProcOrderVBS;
double dSoPlProsrProcBS;
double dSoPlProsrProcVBS;

double dProcShtraf; // это инфо о размере штрафа за не своевременное погашение ОД
double dShtraf; // это инфо о реальной величине штрафа на текущую дату. Внимание! Это значение д.б. отрицательным! Ежели не так - в операции - отказать

opr_i_s(&sSchema); // признак разнесенности просроченных %% на внебалансе, ежели тут 0 - в операции отказать
opr_i_l(&lDateEndActKr); // дата последнего действия по ЛС ОД ссуды (а по барабану, ежели эта дата не больше, чем текущая дата)
opr_i_l(&lStatusKr); // статус ЛС кредита (ну ежели он KR_CLOSE, ничего не надо пытаться делать, да и не получится)
opr_i_l(&lSysNomLSKr); // системный номер ЛС ОД
opr_i_m(&dSaldoKr); // остаток ОД
opr_i_m(&dProcToday); // %% по ОД
opr_i_m(&dSaldoProsrOD); // ну и так далее и тому подобное
opr_i_m(&dPennyProsrOD);
opr_i_m(&dSaldoProsrProc);
opr_i_m(&dPennyProsrProc);
opr_i_m(&dPennyUnGetOD);
opr_i_m(&dPennyRashOD);
opr_i_m(&dSumGetKred);
opr_i_m(&dSaldoSpisKred);
opr_i_m(&dSaldoProcOrder);
opr_i_m(&dProsrSaldoVbs);
opr_i_m(&dSrochSaldoVbs);
opr_i_m(&dPennyProcOrder);
opr_i_m(&dPennyProcVBS);
opr_i_m(&dDolgODIntoProsr); // инфо о готовящейся просрочке ОД (это по барабану)
opr_i_m(&dDolgProcIntoProsr); // инфо о готовящейся просрочке %% (это по барабану)
opr_i_l(&lFilialKred);
opr_i_l(&lDateLastPogOD);
opr_i_m(&dSumLastPogOD);
opr_i_l(&lDateNextPogProc);
opr_i_m(&dSumNextPogProc);
opr_i_l(&lDateNextPogOD);
opr_i_m(&dSumNextPogOD);
opr_i_cchar*)ucFIOKr); // вот это нименование ссудозаемщика (а может и ЛС, не помню но сейчас это практикуется как идентичные вещи
opr_i_cchar*)ucAddrKr); // это его адрес
opr_i_m(&dSaldoSpisProc);
opr_i_s(&sAmountSoPlat); // это

okunek

в двух словах - отмена систем пожаротушения
кусок, h-файл, который написался быстрее всего, но срр-шник, где он используется, компилится почти минуту

#ifndef __FDSPARSER_H__
#define __FDSPARSER_H__

#include <boost/spirit.hpp>
#include <boost/spirit/phoenix.hpp>
using namespace boost::spirit;
using namespace phoenix;

#include <iostream>
using std::ostream;

struct obst
{
enum type
{
OBST,
TRNX,
TRNY,
TRNZ,
GRID,
PDIM
};
double cc,pc;
double x1,y1,z1,x2,y2,z2;
double xbar0,xbar,ybar0,ybar,zbar0,zbar;
int ibar,jbar,kbar;

type t;
bool add;
};


ostream &operator << (ostream &os, const obst &o);

struct fds_parser_closure : public boost::spirit::closure<fds_parser_closure,obst>
{
member1 o;
};

struct fds_parser : public grammar<fds_parser,fds_parser_closure::context_t>
{
template <class ScannerT>
struct definition
{
typedef rule<ScannerT> rule_t;
rule_t main_rule;
rule_t shit;
definition(const fds_parser &self)
{
main_rule =
ch_p('&') >>
(
(
str_p("OBST")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::OBST] >>
str_p("XB") >> str_p("=") >>
real_p[bind(&obst::x1self.o)=arg1] >> ',' >>
real_p[bind(&obst::x2self.o)=arg1] >> ',' >>
real_p[bind(&obst::y1self.o)=arg1] >> ',' >>
real_p[bind(&obst::y2self.o)=arg1] >> ',' >>
real_p[bind(&obst::z1self.o)=arg1] >> ',' >>
real_p[bind(&obst::z2self.o)=arg1] >> shit
)
|
(
str_p("GRID")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::GRID] >>
*(
( str_p("IBAR") >> ch_p('=') >> int_p[bind(&obst::ibarself.o)=arg1] ) |
( str_p("JBAR") >> ch_p('=') >> int_p[bind(&obst::jbarself.o)=arg1] ) |
( str_p("KBAR") >> ch_p('=') >> int_p[bind(&obst::kbarself.o)=arg1] ) |
ch_p(',')
)
)
|
(
str_p("PDIM")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::PDIM] >>
*(
( str_p("XBAR0") >> ch_p('=') >> real_p[bind(&obst::xbar0self.o)=arg1] ) |
( str_p("XBAR") >> ch_p('=') >> real_p[bind(&obst::xbarself.o)=arg1] ) |
( str_p("YBAR0") >> ch_p('=') >> real_p[bind(&obst::ybar0self.o)=arg1] ) |
( str_p("YBAR") >> ch_p('=') >> real_p[bind(&obst::ybarself.o)=arg1] ) |
( str_p("ZBAR0") >> ch_p('=') >> real_p[bind(&obst::zbar0self.o)=arg1] ) |
( str_p("ZBAR") >> ch_p('=') >> real_p[bind(&obst::zbarself.o)=arg1] ) |
ch_p(',')
)
)
|
(
(
str_p("TRNX")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::TRNX] |
str_p("TRNY")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::TRNY] |
str_p("TRNZ")[bind(&obst::addself.o)=true,bind(&obst::tself.o)=obst::TRNZ]
)
>>
*(
( str_p("CC") >> ch_p('=') >> real_p[bind(&obst::ccself.o)=arg1] )
|
( str_p("PC") >> ch_p('=') >> real_p[bind(&obst::pcself.o)=arg1] )
|
ch_p(',')
)
)
|
(
shit[bind(&obst::addself.o)=false]
)
) >> ch_p('/') >> *(anychar_p - '&');
shit = *(
(
anychar_p - ( ch_p('\'') | ch_p('/') )
)
|
(
ch_p('\'') >>
*(
anychar_p - ch_p('\'')
) >>
ch_p('\'')
)
);
}
const rule_t &start const
{
return main_rule;
}
};
};

#endif

laki

будет опенсурс библиотека
я бы побоялся ее использовать
потому что код вообще нечитаемый поддерживать сложно будет. код с запашком

Barbie29

ну ваще это сложно очень на самом деле, рекурсивно двигаться по пикселям контура. я ваще опух это писать надо сказать... сам ща до конца не понимаю, как оно работает. Хеширование вчистую взял у Юрия Богатырева, толи на цитфоруме пример его, толи на опеннете.

alexkravchuk

Лично мне ОЧЕНЬ не нравятся подобные фрагменты:
================
if (m[x][y]==3 &&
m[x-1][y]==3 &&
m[x-1][y-1]==255 &&
m[x][y-1]==255 &&
m[x+1][y-1]==255 &&
m[x+1][y]==255 &&
m[x+1][y+1]==255 &&
m[x][y+1]==3 &&
m[x-1][y+1]==3)
================
Вообще, есть туча способов от них избавиться. Если значения этих массивов всегда в нужных случаях принимают значения или 3, или 255, то можно сначала отобразить этот квадрат в какую-нибудь переменную из 9-ти или 27 бит, например как

int sqr = 0;
if(m[x-1][y-1]==255) sqr ^= 0100000000;
if(m[x-1][y-1]==3 ) sqr ^= 0200000000;
if(m[x-1][y] ==255) sqr ^= 0010000000;
if(m[x-1][y] ==3 ) sqr ^= 0020000000;
....
потом проверять как
if(sqr == 0122122111)
{}


Нет, я никого ничему не учу, у меня у самого очень много недоработок в коде... Но вот такого я особенно не люблю
PS: Что-то подсказывает мне, что вообще эту рекурсивную функцию можно строчек до 25-30 сократить

smit1

>оконтуривание бинарных контуров, почти написал (есть млекие баги)
Можно поподробнее постановку задачи?

Barbie29

Вообще мне надо было с видеокамеры распознавать капли дождя. Но задача оказалась настолько сложной, что от задачи осталась только программа =)
вот тож самое на перле но работает страшно медленно, потому потребовалось переписать на сях... или по другому постановка задачи, обвести черно-белую фигуру. или например обвести и распознать букву, просто хочется поиметь такую библиотеку.

Barbie29

да я в сях не ездец. когда либу допишу, чтобы она делала четко и без ошибок минимальный набор действий, тогда и патчи можно делать и улучшать и объяснение будет, как это работает и почему именно так, а не иначе. А пока прога вообще через пень колоду работает... разбираться надо. но хеширование вроде нормально работает.

Barbie29

это про вейвлет-анализ?

Helga87

Буковка е мазовая. Для Internet Explorer ты рисовал логотип?

Flack_bfsp

потому что код вообще нечитаемый поддерживать сложно будет
Вот! Твоими устами глаголет истина! Пока что в этом треде только я только говнокод вижу. Ну кроме мэдовского, конечно же.

bobby

Ну кроме мэдовского, конечно же.
Ну, ещё бы.

wwoland

Google soset!

alexkravchuk

>> потому что код вообще нечитаемый поддерживать сложно будет
> Вот! Твоими устами глаголет истина! Пока что в этом треде только я только говнокод вижу.
Разбавь бочку говна ложкой мёда, запости свой код. Только не 20 строчек, а более-менее большой кусок.

Flack_bfsp

Да всё время забываю сделать это, когда на работе. Надеюсь, завтра выложу.

Codcod

Угу.
Реально работающий код, он хоть и не красив, зато работает быстро.

laki

я вот считаю свой код читаемый. а вот 8мь прогеров, с кем я работаю, пишут что аж пиздец

Helga87

У остальных восьми прогеров аналогичная точка зрения?

laki

нет.
этих собак еще и учить приходиться
хотя из восьми толковых только 3ое, остальные так НЕГРЫ! текучку кто разгребает

Helga87

Негры, потому что им такие задания достаются или потому что думать не хотят?

laki

не умеют . поэтому им доверяют только тревиальные задания

Helga87

ну, не умеют — это поправимо
Оставить комментарий
Имя или ник:
Комментарий: