Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];

Вниз

Ода молодому поколению   Найти похожие ветки 

 
pasha_golub ©   (2011-09-05 10:22) [0]

Я тут искал себе студентиков на вырост. Взрастил, понимаешь ли, надежды на молодое поколение. Ну и дал одному перспективному задание: написать MineSweeper 5х5, не особо уделяя внимания оформлению и графике. Главное мысль и код, как говорится. Засел мой парень на два дня. Ну думаю, городит классовую иерархию, применяет так сказать заветы отцов...

И вот что вышло у него, други мои. Без валидола не открывать!
http://www.filedropper.com/delphisaper

Посему вопрос: это всегда так было или таки у нынешних молодых людей гамбургер заместо мозгов?


 
Ega23 ©   (2011-09-05 10:47) [1]

не переживай. Я тоже когда-то давно таким был.


 
Palladin ©   (2011-09-05 10:50) [2]

раньше программистов было мало, качество было высокое
сейчас все решили "программист это просто" и 90% говнокодеров

это не только программисты, это в любой области так, качество всегда расстворяется в количестве


 
pasha_golub ©   (2011-09-05 10:57) [3]

Кстати, озвучилось мнение, что Сапер для студента - это слишком сложно. Кто согласен?


 
Palladin ©   (2011-09-05 11:06) [4]

на 1 курсе написал, потому что под дос его не было, а поиграть хотелось )


 
Anatoly Podgoretsky ©   (2011-09-05 11:22) [5]

> Palladin  (05.09.2011 10:50:02)  [2]

И раньше тоже было 90%, но программистов было мало


 
Anatoly Podgoretsky ©   (2011-09-05 11:23) [6]

> pasha_golub  (05.09.2011 10:57:03)  [3]

Сапер очень простая программа. Надо знать элементарную геометрию


 
Anatoly Podgoretsky ©   (2011-09-05 11:24) [7]

> Palladin  (05.09.2011 11:06:04)  [4]

Сапер все равно на чем писать, там интефейс не важен, текстовый ничем не
хуже.


 
OW ©   (2011-09-05 11:25) [8]

100%% так и писал :)


>  Сапер для студента - это слишком сложно.

ну... не правда, конечно

Писал аналог (код примерно такой же был, как говорил), но писал.
Тоже на первом курсе, на паскале. Не знаю как в стандартном минере, но в самописном никак не мог придумать, как сделать .. ээ..однозначность что ли..
как бы ее назвать то правильно..

т.е. ситуация, когда 50% то-ли мина, то ли нет. И невозможно определить, по соседним открытым клеткам. В стандартном поди такого и не получится, не помню, мало играл, а если рандомно кидать мины, без анализа на решаемость, то такая ситуация вероятна.

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

Сделал проще: убился минер - игра не кончается, а минусуется X очков :)


 
Sha ©   (2011-09-05 11:30) [9]

Каждые 10 строчек кода сверх твоего = 1 бутылка пива.
Сразу научится.


 
Anatoly Podgoretsky ©   (2011-09-05 11:32) [10]

> OW  (05.09.2011 11:25:08)  [8]

Вопросом надо делать, тут и думать даже не надо, этот флажок устанавливает
пользователь.


 
Sha ©   (2011-09-05 11:36) [11]

> Кстати, озвучилось мнение, что Сапер для студента - это слишком сложно.

Наоборот, слишком просто.


 
pasha_golub ©   (2011-09-05 11:41) [12]


> OW ©   (05.09.11 11:25) [8]


> В стандартном поди такого и не получится, не помню,

Да сплошь и рядом бывает, особенно на больших полях.


 
OW ©   (2011-09-05 11:41) [13]


> Вопросом надо делать, тут и думать даже не надо, этот флажок
> устанавливает
> пользователь.
>

не, не понял
два знака вопроса рядом, в соседях числа, для каждого есть бомбы.
И вот двум числам совсем без разницы, где будет мина, хоть под одним знаком, хоть под вторым - правила не нарушатся.  Как однозначно разрулить такой случай? Не допускать.
Или дать минеру право ошибаться > 1 раза и штрафовать :)


 
Ega23 ©   (2011-09-05 11:41) [14]


> Кстати, озвучилось мнение, что Сапер для студента - это
> слишком сложно. Кто согласен?


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


 
Anatoly Podgoretsky ©   (2011-09-05 11:43) [15]

> OW  (05.09.2011 11:41:13)  [13]

Откуда в сапере возьмется неодназначность, кроме мозгов игрока.


 
OW ©   (2011-09-05 11:43) [16]


> Да сплошь и рядом бывает, особенно на больших полях.

да-да, по-моему, тоже..
просто не уверен был.


 
Anatoly Podgoretsky ©   (2011-09-05 11:44) [17]

> Ega23  (05.09.2011 11:41:14)  [14]

Так в оригинале именно кнопки


 
OW ©   (2011-09-05 11:52) [18]


> Anatoly Podgoretsky ©   (05.09.11 11:43) [15]

вот, правый верхний угол
где бомба?

? 1
? 3 1
Б Б 1


 
Ega23 ©   (2011-09-05 11:53) [19]


> Так в оригинале именно кнопки

Я в курсе.


 
Медвежонок Пятачок ©   (2011-09-05 11:56) [20]

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


 
Romkin ©   (2011-09-05 12:03) [21]

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


 
pasha_golub ©   (2011-09-05 12:03) [22]


> Медвежонок Пятачок ©   (05.09.11 11:56) [20]

Не до конца понял. С наставниками его я лично не знаком.


 
Anatoly Podgoretsky ©   (2011-09-05 13:00) [23]

> OW  (05.09.2011 11:52:18)  [18]

Вот и ставь вопросик, сам!
Я не видел саперов, который вопросик бы сам ставил.


 
Anatoly Podgoretsky ©   (2011-09-05 13:03) [24]

> Romkin  (05.09.2011 12:03:21)  [21]

Хода нет, ходи с бу, то есть монетку кидай.
Но я не вижу никакой проблемы в написание сапера. Приведеный OW пример, все
правильно показывает, без ошибок.


 
Pavia ©   (2011-09-05 13:12) [25]


> pasha_golub

Всегда такие были.


 
Тимохов Д   (2011-09-05 13:47) [26]

А что такого то... Возьми и научи как надо.
Пусть учицо. Вернее учить не надо, надо направлять.


 
pasha_golub ©   (2011-09-05 13:52) [27]


> Тимохов Д   (05.09.11 13:47) [26]
>
> А что такого то...

Да нихрина ж себе! Ты код смотрел? Там намертво запрограммирован один вариант игры, и чуть менее, чем никак используется математика вообще.


 
Юрий Зотов ©   (2011-09-05 14:00) [28]


> pasha_golub ©   (05.09.11 13:52) [27]
> чуть менее, чем никак используется математика вообще.

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


 
Медвежонок Пятачок ©   (2011-09-05 14:02) [29]

Студент-то молодец.
Получил задачу написать хрень.
И написал.
Или может ему ставилась задача написать код, который можно будет поддерживать десять лет не тратя усилий вообще?


 
Омлет ©   (2011-09-05 14:10) [30]

И я когда-то писал, как тестовое задание для собеседования.. Тоже был студентом и ел гамбургеры ))
Нашел даже: http://not-doing.ru/some/mine.zip


 
Inovet ©   (2011-09-05 14:17) [31]

> [30] Омлет ©   (05.09.11 14:10)
> И я когда-то писал

При построчной оплате ты намного меньше денег получишь.


 
Anatoly Podgoretsky ©   (2011-09-05 14:19) [32]

> Inovet  (05.09.2011 14:17:31)  [31]

Главное не соглашать на по буквенную


 
Тимохов Д   (2011-09-05 14:38) [33]

Паш, да посмотрел я )))
Посмотрел))) Один вариант игры - это круто)


 
pasha_golub ©   (2011-09-05 15:06) [34]


> Медвежонок Пятачок ©   (05.09.11 14:02) [29]
>
> Студент-то молодец.

Да я б его озолотил за усидчивость и упертость, была б моя воля. :) Это ж надо было 50 хендлеров написать.


 
Sha ©   (2011-09-05 15:14) [35]

> pasha_golub

ждем следующей версии


 
alexdn ©   (2011-09-05 15:29) [36]

> pasha_golub ©   (05.09.11 10:57) [3]
> Кстати, озвучилось мнение, что Сапер для студента - это
> слишком сложно. Кто согласен?
ну и правильно!:)) сделал методом батонокидательства) а чё препода баловать? нах.. надо, т.е. совершенно незачем)..


 
DVM ©   (2011-09-05 16:01) [37]

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


 
pasha_golub ©   (2011-09-05 16:06) [38]


> DVM ©   (05.09.11 16:01) [37]
>
> имхо сапер в качестве тестового задания не очень годится.
>

Какие будут предложения? Готов рассмотреть.


 
alexdn ©   (2011-09-05 16:13) [39]

> pasha_golub ©   (05.09.11 16:06) [38]
По моему лучше работы с графиками ничего не придумаешь.. там и математика и непосредственно код.. и вообще прикладные должны быть задачи.. сапёр конечно только на дурь и тянет..)


 
TUser ©   (2011-09-05 16:24) [40]

ха

unit uOutputSettings;

interface

var
 output_format_xml: boolean = false;
 output_printmaps: boolean = false;
 output_printmaps_html: boolean = false;
 output_printmaps_show_sides: boolean = false;
 output_printmaps_show_sides_use_cb_sides: boolean = false;
 output_printmaps_printoutofmap: boolean = false;
 output_printmaps_hbonds: boolean = false;
 output_printmaps_pbonds: boolean = false;
 output_printmaps_pairs: boolean = false;
 output_script: boolean = false;
 output_script_load: boolean = false;
 output_script_define: boolean = false;
 output_script_define_define_ifneed: boolean = false;
 output_script_define_sheets: boolean = false;
 output_script_define_helixes: boolean = false;
 output_script_define_alpha_layers: boolean = false;
 output_script_define_str: boolean = false;
 output_script_define_sse: boolean = false;
 output_script_define_map: boolean = false;
 output_script_define_crests: boolean = false;
 output_script_define_ca_sides: boolean = false;
 output_script_define_cb_sides: boolean = false;
 output_script_define_pairs: boolean = false;
 output_script_define_hbonds: boolean = false;
 output_script_define_sse_contacts: boolean = false;
 output_script_define_sse_contacts_shsh_contacts: boolean = false;
 output_script_define_sse_contacts_shhel_contacts: boolean = false;
 output_script_define_sse_contacts_shalay_contacts: boolean = false;
 output_script_define_sse_contacts_helhel_contacts: boolean = false;
 output_script_define_architects: boolean = false;
 output_script_define_architects_bprism: boolean = false;
 output_script_define_architects_bprop: boolean = false;
 output_script_define_architects_sandw2_par: boolean = false;
 output_script_define_architects_sandw2_cross: boolean = false;
 output_script_define_architects_sandw2_unk: boolean = false;
 output_script_define_architects_sandw_bigmac: boolean = false;
 output_script_define_architects_single_barrel: boolean = false;
 output_script_define_architects_ab_sandw: boolean = false;
 output_script_define_architects_rossmann: boolean = false;
 output_script_define_architects_ab_barrel: boolean = false;
 output_script_define_architects_gfp_barrel: boolean = false;
 output_script_define_architects_aba_barrel: boolean = false;
 output_script_define_architects_single_sheet: boolean = false;
 output_script_define_motifs: boolean = false;
 output_script_define_motifs_jelly: boolean = false;
 output_script_define_motifs_inter: boolean = false;
 output_script_define_motifs_jelly_hp: boolean = false;
 output_script_define_motifs_jelly_gk: boolean = false;
 output_script_define_motifs_meander: boolean = false;
 output_script_define_motifs_hairpin: boolean = false;
 output_script_define_motifs_bab_helix: boolean = false;
 output_script_define_motifs_bab: boolean = false;
 output_script_define_motifs_gk: boolean = false;
 output_script_define_motifs_betahel: boolean = false;
 output_script_view: boolean = false;
 output_script_view_sheets: boolean = false;
 output_script_view_helixes: boolean = false;
 output_script_view_alpha_layers: boolean = false;
 output_script_view_str: boolean = false;
 output_script_view_sse: boolean = false;
 output_script_view_map: boolean = false;
 output_script_view_crests: boolean = false;
 output_script_view_ca_sides: boolean = false;
 output_script_view_cb_sides: boolean = false;
 output_script_view_pairs: boolean = false;
 output_script_view_hbonds: boolean = false;
 output_script_view_sse_contacts: boolean = false;
 output_script_view_sse_contacts_shsh_contacts: boolean = false;
 output_script_view_sse_contacts_shhel_contacts: boolean = false;
 output_script_view_sse_contacts_shalay_contacts: boolean = false;
 output_script_view_sse_contacts_helhel_contacts: boolean = false;
 output_script_view_architects: boolean = false;
 output_script_view_architects_bprism: boolean = false;
 output_script_view_architects_bprop: boolean = false;
 output_script_view_architects_sandw2_par: boolean = false;
 output_script_view_architects_sandw2_cross: boolean = false;
 output_script_view_architects_sandw2_unk: boolean = false;
 output_script_view_architects_sandw_bigmac: boolean = false;
 output_script_view_architects_single_barrel: boolean = false;
 output_script_view_architects_ab_sandw: boolean = false;
 output_script_view_architects_rossmann: boolean = false;
 output_script_view_architects_ab_barrel: boolean = false;
 output_script_view_architects_gfp_barrel: boolean = false;
 output_script_view_architects_aba_barrel: boolean = false;
 output_script_view_architects_single_sheet: boolean = false;
 output_script_view_motifs: boolean = false;
 output_script_view_motifs_jelly: boolean = false;
 output_script_view_motifs_inter: boolean = false;
 output_script_view_motifs_jelly_hp: boolean = false;
 output_script_view_motifs_jelly_gk: boolean = false;
 output_script_view_motifs_meander: boolean = false;
 output_script_view_motifs_hairpin: boolean = false;
 output_script_view_motifs_bab_helix: boolean = false;
 output_script_view_motifs_bab: boolean = false;
 output_script_view_motifs_gk: boolean = false;
 output_script_view_motifs_betahel: boolean = false;
 output_reports: boolean = false;
 output_reports_sheets: boolean = false;
 output_reports_helixes: boolean = false;
 output_reports_alpha_layers: boolean = false;
 output_reports_sse: boolean = false;
 output_reports_strands: boolean = false;
 output_reports_crests: boolean = false;
 output_reports_shsh_contacts: boolean = false;
 output_reports_shhel_contacts: boolean = false;
 output_reports_shalay_contacts: boolean = false;
 output_reports_helhel_contacts: boolean = false;
 output_reports_architects: boolean = false;
 output_reports_motifs: boolean = false;
 output_reports_multiple: boolean = false;
 output_reports_append: boolean = false;
 output_reports_html: boolean = false;

implementation
uses uXmlParser, uParams;

var Xml, NewXml: PXml;
   FileName: string;



 
TUser ©   (2011-09-05 16:24) [41]

initialization

 Xml := nil;
 FileName := "";
 if not GetNamedParamEx ("settings", FileName) then FileName := "proton_output_settings.xml";
 ReadXml (Xml, FileName);
 NewXml := GetXmlItem (Xml, "output", true);
 Xml := NewXml;
 {$ifndef NOOUTPUTFORMATXML}
 NewXml := GetXmlItem (Xml, "format_xml", true);
 if NewXml <> nil then begin
 output_format_xml := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPS}
 NewXml := GetXmlItem (Xml, "printmaps", true);
 if NewXml <> nil then begin
 output_printmaps := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTPRINTMAPSHTML}
 NewXml := GetXmlItem (Xml, "html", true);
 if NewXml <> nil then begin
 output_printmaps_html := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPSSHOWSIDES}
 NewXml := GetXmlItem (Xml, "show_sides", true);
 if NewXml <> nil then begin
 output_printmaps_show_sides := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTPRINTMAPSSHOWSIDESUSECBSIDES}
 NewXml := GetXmlItem (Xml, "use_cb_sides", true);
 if NewXml <> nil then begin
 output_printmaps_show_sides_use_cb_sides := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPSPRINTOUTOFMAP}
 NewXml := GetXmlItem (Xml, "printoutofmap", true);
 if NewXml <> nil then begin
 output_printmaps_printoutofmap := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPSHBONDS}
 NewXml := GetXmlItem (Xml, "hbonds", true);
 if NewXml <> nil then begin
 output_printmaps_hbonds := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPSPBONDS}
 NewXml := GetXmlItem (Xml, "pbonds", true);
 if NewXml <> nil then begin
 output_printmaps_pbonds := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTPRINTMAPSPAIRS}
 NewXml := GetXmlItem (Xml, "pairs", true);
 if NewXml <> nil then begin
 output_printmaps_pairs := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTSCRIPT}
 NewXml := GetXmlItem (Xml, "script", true);
 if NewXml <> nil then begin
 output_script := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTSCRIPTLOAD}
 NewXml := GetXmlItem (Xml, "load", true);
 if NewXml <> nil then begin
 output_script_load := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINE}
 NewXml := GetXmlItem (Xml, "define", true);
 if NewXml <> nil then begin
 output_script_define := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTSCRIPTDEFINEDEFINEIFNEED}
 NewXml := GetXmlItem (Xml, "define_ifneed", true);
 if NewXml <> nil then begin
 output_script_define_define_ifneed := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESHEETS}
 NewXml := GetXmlItem (Xml, "sheets", true);
 if NewXml <> nil then begin
 output_script_define_sheets := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_sheets;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEHELIXES}
 NewXml := GetXmlItem (Xml, "helixes", true);
 if NewXml <> nil then begin
 output_script_define_helixes := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_helixes;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEALPHALAYERS}
 NewXml := GetXmlItem (Xml, "alpha_layers", true);
 if NewXml <> nil then begin
 output_script_define_alpha_layers := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_alpha_layers;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESTR}
 NewXml := GetXmlItem (Xml, "str", true);
 if NewXml <> nil then begin
 output_script_define_str := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_str;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESSE}
 NewXml := GetXmlItem (Xml, "sse", true);
 if NewXml <> nil then begin
 output_script_define_sse := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_sse;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEMAP}
 NewXml := GetXmlItem (Xml, "map", true);


 
TUser ©   (2011-09-05 16:25) [42]

 if NewXml <> nil then begin
 output_script_define_map := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_map;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINECRESTS}
 NewXml := GetXmlItem (Xml, "crests", true);
 if NewXml <> nil then begin
 output_script_define_crests := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_crests;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINECASIDES}
 NewXml := GetXmlItem (Xml, "ca_sides", true);
 if NewXml <> nil then begin
 output_script_define_ca_sides := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_ca_sides;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINECBSIDES}
 NewXml := GetXmlItem (Xml, "cb_sides", true);
 if NewXml <> nil then begin
 output_script_define_cb_sides := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_cb_sides;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEPAIRS}
 NewXml := GetXmlItem (Xml, "pairs", true);
 if NewXml <> nil then begin
 output_script_define_pairs := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_pairs;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEHBONDS}
 NewXml := GetXmlItem (Xml, "hbonds", true);
 if NewXml <> nil then begin
 output_script_define_hbonds := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_hbonds;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESSECONTACTS}
 NewXml := GetXmlItem (Xml, "sse_contacts", true);
 if NewXml <> nil then begin
 output_script_define_sse_contacts := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTSCRIPTDEFINESSECONTACTSSHSHCONTACTS}
 NewXml := GetXmlItem (Xml, "shsh_contacts", true);
 if NewXml <> nil then begin
 output_script_define_sse_contacts_shsh_contacts := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_sse_contacts := output_script_define_sse_contacts or output_script_define_sse_contacts_shsh_contacts;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESSECONTACTSSHHELCONTACTS}
 NewXml := GetXmlItem (Xml, "shhel_contacts", true);
 if NewXml <> nil then begin
 output_script_define_sse_contacts_shhel_contacts := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_sse_contacts := output_script_define_sse_contacts or output_script_define_sse_contacts_shhel_contacts;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESSECONTACTSSHALAYCONTACTS}
 NewXml := GetXmlItem (Xml, "shalay_contacts", true);
 if NewXml <> nil then begin
 output_script_define_sse_contacts_shalay_contacts := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_sse_contacts := output_script_define_sse_contacts or output_script_define_sse_contacts_shalay_contacts;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINESSECONTACTSHELHELCONTACTS}
 NewXml := GetXmlItem (Xml, "helhel_contacts", true);
 if NewXml <> nil then begin
 output_script_define_sse_contacts_helhel_contacts := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_sse_contacts := output_script_define_sse_contacts or output_script_define_sse_contacts_helhel_contacts;
 {$endif}
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_sse_contacts;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTS}
 NewXml := GetXmlItem (Xml, "architects", true);
 if NewXml <> nil then begin
 output_script_define_architects := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSBPRISM}
 NewXml := GetXmlItem (Xml, "bprism", true);
 if NewXml <> nil then begin
 output_script_define_architects_bprism := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_bprism;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSBPROP}
 NewXml := GetXmlItem (Xml, "bprop", true);
 if NewXml <> nil then begin
 output_script_define_architects_bprop := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_bprop;
 {$endif}


 
TUser ©   (2011-09-05 16:25) [43]

 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSANDWPAR}
 NewXml := GetXmlItem (Xml, "sandw2_par", true);
 if NewXml <> nil then begin
 output_script_define_architects_sandw2_par := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_sandw2_par;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSANDWCROSS}
 NewXml := GetXmlItem (Xml, "sandw2_cross", true);
 if NewXml <> nil then begin
 output_script_define_architects_sandw2_cross := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_sandw2_cross;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSANDWUNK}
 NewXml := GetXmlItem (Xml, "sandw2_unk", true);
 if NewXml <> nil then begin
 output_script_define_architects_sandw2_unk := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_sandw2_unk;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSANDWBIGMAC}
 NewXml := GetXmlItem (Xml, "sandw_bigmac", true);
 if NewXml <> nil then begin
 output_script_define_architects_sandw_bigmac := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_sandw_bigmac;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSINGLEBARREL}
 NewXml := GetXmlItem (Xml, "single_barrel", true);
 if NewXml <> nil then begin
 output_script_define_architects_single_barrel := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_single_barrel;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSABSANDW}
 NewXml := GetXmlItem (Xml, "ab_sandw", true);
 if NewXml <> nil then begin
 output_script_define_architects_ab_sandw := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_ab_sandw;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSROSSMANN}
 NewXml := GetXmlItem (Xml, "rossmann", true);
 if NewXml <> nil then begin
 output_script_define_architects_rossmann := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_rossmann;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSABBARREL}
 NewXml := GetXmlItem (Xml, "ab_barrel", true);
 if NewXml <> nil then begin
 output_script_define_architects_ab_barrel := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_ab_barrel;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSGFPBARREL}
 NewXml := GetXmlItem (Xml, "gfp_barrel", true);
 if NewXml <> nil then begin
 output_script_define_architects_gfp_barrel := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_gfp_barrel;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSABABARREL}
 NewXml := GetXmlItem (Xml, "aba_barrel", true);
 if NewXml <> nil then begin
 output_script_define_architects_aba_barrel := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_aba_barrel;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEARCHITECTSSINGLESHEET}
 NewXml := GetXmlItem (Xml, "single_sheet", true);
 if NewXml <> nil then begin
 output_script_define_architects_single_sheet := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_architects := output_script_define_architects or output_script_define_architects_single_sheet;
 {$endif}
 Xml := Xml^.Parent;
 end;
 output_script_define := output_script_define or output_script_define_architects;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEMOTIFS}
 NewXml := GetXmlItem (Xml, "motifs", true);
 if NewXml <> nil then begin
 output_script_define_motifs := NewXml^.Value = "yes";
 Xml := NewXml;
 {$ifndef NOOUTPUTSCRIPTDEFINEMOTIFSJELLY}
 NewXml := GetXmlItem (Xml, "jelly", true);
 if NewXml <> nil then begin
 output_script_define_motifs_jelly := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_motifs := output_script_define_motifs or output_script_define_motifs_jelly;
 {$endif}
 {$ifndef NOOUTPUTSCRIPTDEFINEMOTIFSINTER}
 NewXml := GetXmlItem (Xml, "inter", true);
 if NewXml <> nil then begin
 output_script_define_motifs_inter := NewXml^.Value = "yes";
 Xml := NewXml;
 Xml := Xml^.Parent;
 end;
 output_script_define_motifs := output_script_define_motifs or output_script_define_motifs_inter;
 {$endif}


 
pasha_golub ©   (2011-09-05 16:26) [44]


> TUser ©   (05.09.11 16:25) [42]

И чего это должно собой ознаменовать? :)


 
TUser ©   (2011-09-05 16:26) [45]

+ еще примено столько же


 
Юрий Зотов ©   (2011-09-05 16:29) [46]

> pasha_golub ©   (05.09.11 16:06) [38]
> Какие будут предложения? Готов рассмотреть.

Написать модуль, содержащий полный набор арифметических функций для работы с целыми числами в любой системе счисления от 2 до 255 включительно. Число задается записью:
type
 TNumber = packed record
   Base: byte;   // Основание системы счисления
   Value: string // Строковое представление числа в этой системе
 end;

Например:
 function AddNumbers(X, Y: TNumber; OutBase: byte): string;
где
X и Y - числа, которые надо сложить;
OutBase - основание системы счисления результата;
Выход  - строковое представление результата.

Полый набор - это AddNumbers, SubtractNumbers, MultiplyNumbers, DivNumbers, ModNumbers, ReadNumber (с консоли), WriteNumber (на консоль), ConvertNumber (перевод из одной системы счисления в другую).

Мой подопечный когда-то делал такой курсовик, еще на 1-м курсе. Не без помощи, но все же справился.


 
pasha_golub ©   (2011-09-05 16:35) [47]


> Юрий Зотов ©   (05.09.11 16:29) [46]

Мощно. Однако для тестового задания...


 
Kerk ©   (2011-09-05 16:43) [48]


> pasha_golub ©   (05.09.11 16:35) [47]

Как раз уровень первого курса.


 
Юрий Зотов ©   (2011-09-05 17:13) [49]


> pasha_golub ©   (05.09.11 16:35) [47]

Надо написать ConvertNumber, после чего все становится очень просто.

Но ты ему об этом не говори, пусть сам догадается.
:o)


 
Mystic ©   (2011-09-05 17:19) [50]

> pasha_golub ©   (05.09.11 10:22) 

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


 
Eraser ©   (2011-09-05 17:43) [51]

>
>
> [0] pasha_golub ©   (05.09.11 10:22)

зачем кого-то растить? ) дать задание, если не справился или бесперспективный - выгнать. нанять следующего. 1 из 10 подходящий найдется. нужно, чтобы работник сам был заинтересован сделать как надо, а не делал одолжения.


 
Ega23 ©   (2011-09-05 18:22) [52]


> TUser ©   (05.09.11 16:24) [40]
>
> ха
>


У меня такой файл был. Генерился на основании НД из БД. Константы там всякие, ГУИДы.


 
DVM ©   (2011-09-05 18:45) [53]


> pasha_golub ©   (05.09.11 16:06) [38]


> Какие будут предложения? Готов рассмотреть.

Зависит от того, что должен уметь кандидат. Что от него требуется то?


 
pasha_golub ©   (2011-09-05 19:03) [54]


> Mystic ©   (05.09.11 17:19) [50]
>
> Теперь логично попросить его исходники кодогенератора, которым
> создавался исходник

Сам об этом думал :))


> DVM ©   (05.09.11 18:45) [53]
>
>


> Зависит от того, что должен уметь кандидат. Что от него
> требуется то?

Базовые знания. Чтобы видно было, что голова светлая.


 
Mystic ©   (2011-09-05 19:40) [55]


> pasha_golub ©   (05.09.11 19:03) [54]



> Сам об этом думал :))


На одной из работ я слышал байку о сотруднике, который в аналогичном ключе клепал SQL-запросы. При этом служба поддержки Oracle на вопросы про оптимизации его запросоы вежливо просила уточнить, какой генератор запросов использовался.


 
Очень злой   (2011-09-05 23:22) [56]


> Да я б его озолотил за усидчивость и упертость, была б моя
> воля. :) Это ж надо было 50 хендлеров написать.


Да там в основном копипаст. Наверное написал один раз, скопировал, 49 раз вставил и потом прошелся циферки подправил..


> Ну и дал одному перспективному задание: написать MineSweeper
> 5х5

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


 
Inovet ©   (2011-09-05 23:54) [57]

> [56] Очень злой   (05.09.11 23:22)
> лучше всего это когда размер поля должен определяться игроком.

На каждый размер будет скопипастен код 5х5 и скопипастены дополнительные строчки.


 
Очень злой   (2011-09-06 00:00) [58]


> На каждый размер будет скопипастен код 5х5 и скопипастены
> дополнительные строчки.


размер от 5*5 до 40*40 уже предполагает 1296 вариантов (36*36)
Если человек решиться написать типа сабж, но в 1000+ раз длиннее, то может ему походу все-таки стукнет мысль, что он что-то не то делает...


 
Sha ©   (2011-09-06 00:06) [59]

> Юрий Зотов ©   (05.09.11 16:29) [46]

ReadNumber, WriteNumber для чисел в 255-ричной системе прикольно выглядели наверно?


 
Германн ©   (2011-09-06 01:09) [60]


> OW ©   (05.09.11 11:52) [18]
>
>
> > Anatoly Podgoretsky ©   (05.09.11 11:43) [15]
>
> вот, правый верхний угол
> где бомба?
>
> ? 1
> ? 3 1
> Б Б 1


Дык это ж всё таки "Минёр", а не "Шахтёр". Порой приходиться угадывать. Не угадал - начинай новую жизнь! :)


 
Anatoly Podgoretsky ©   (2011-09-06 08:43) [61]

> Германн  (06.09.2011 01:09:00)  [60]

Сапер ошибается только один раз.


 
Очень злой   (2011-09-06 09:29) [62]


> Юрий Зотов ©   (05.09.11 16:29) [46]
>
...
> Написать модуль, содержащий полный набор арифметических
> функций для работы с целыми числами в любой системе счисления
> от 2 до 255 включительно. Число задается записью:

...

>    Value: string // Строковое представление числа в этой  системе
...


Что есть строковое представление числа в системе от 17 и более (особенно системе 255)?


 
Inovet ©   (2011-09-06 09:48) [63]

> [62] Очень злой   (06.09.11 09:29)
> Что есть строковое представление числа в системе от 17 и
> более (особенно системе 255)?

Да какая разница. Нпример начиная от $00 и до $ff или для меньших оснований можно более привычными пользоваться
0123456789abcdefghijklmnopqrstuvwxyz... и т.д.
Для основания 65536 можно шрифт специальный сделать в матрице 4х4.:)


 
jack128_   (2011-09-06 09:49) [64]


> Что есть строковое представление числа в системе от 17 и

ну например 33(в десятичной) = 1G(в семнадцатиричной)

> более (особенно системе 255)?

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


 
pasha_golub ©   (2011-09-06 11:22) [65]

Я уж было поверил в светлое будущее с утра. Прислал мальчонка работающий, хороший код. Я ж на радостях с утра песенки пою. И тут мой значит темный попутчик заставляет меня пошарить на просторах интернета. Так и есть. Нахожу этот же код, немного подправленный в комментариях.

Не, ну твою ж мать! Они вообще что-ли безмозглые? Раз ты нашел решение, так перепиши по образу и подобию, но сам же! А этот вплоть до ресурсов, все один к одному.


 
Inovet ©   (2011-09-06 11:55) [66]

> [65] pasha_golub ©   (06.09.11 11:22)
> Нахожу этот же код, немного подправленный в комментариях.

Какие последуют санкции?


 
Sha ©   (2011-09-06 12:38) [67]

требования написать самостоятельно не было


 
Anatoly Podgoretsky ©   (2011-09-06 12:43) [68]

> jack128_  (06.09.2011 09:49:04)  [64]

Но печатных меньше, наше все в Юникоде


 
Sha ©   (2011-09-06 12:45) [69]

а их все в ASCII, обидно, да?


 
pasha_golub ©   (2011-09-06 13:24) [70]


> Inovet ©   (06.09.11 11:55) [66]


> Какие последуют санкции?

Прощаемся, конечно же. Я же в активном поиске.


> Sha ©   (06.09.11 12:38) [67]
>
> требования написать самостоятельно не было

Мы же не в США, где 90% юристов всего мира. Секир башка, и будь здоров :)


 
Romkin ©   (2011-09-06 19:32) [71]


> Какие будут предложения? Готов рассмотреть.

А я тебе уже предлагал:

Однонаправленный список. В узлах хранится ключ типа word. Реализовать операции со списком и дополнительно метод обращения списка Reverse, переставляющий узлы в обратном порядке.
Для теста консольное приложение, вход - значения ключей, -1 означает конец ввода. Вывести список в обратном порядке.

Все. Пусть реализуют как понравится, а потом можно смеяться


 
Sha ©   (2011-09-06 20:16) [72]

> Romkin ©   (06.09.11 19:32) [71]

Тут вроде негде ошебиться :)

function Reverse(p: PNode): pNode;
var
 q: pNode;
begin;
 Result:=nil;
 while p<>nil do begin;
   q:=p.Next; p.Next:=Result; Result:=p; p:=q;
   end;
 end;


 
Компромисс   (2011-09-07 10:12) [73]


> Тут вроде негде ошебиться :)


Почему? Лично я убил бы за имена переменных.
q должно было быть next (или nextNode), p должно было быть current (или currentNode), вместо Result должна была быть еще одна переменная previos (previousNode), а Result присваиваться только один раз (Result := Current).


 
pasha_golub ©   (2011-09-07 10:29) [74]


> а Result присваиваться только один раз (Result := Current).

Чойта? Всегда использую переменную Result без зазрения. Правда имя функции должно соответствовать.


 
Inovet ©   (2011-09-07 10:33) [75]

> [73] Компромисс   (07.09.11 10:12)
> Лично я убил бы за имена переменных.
> q должно было быть next (или nextNode), p должно было быть
> current (или currentNode)

Имхо. Оно хорошо, но для локальных длинно слишком. Достаточко nn, cn, pn. Раз работа с нодами, то смысл понятен из контекста.


 
oxffff ©   (2011-09-07 10:43) [76]

C result нужно быть внимательным, бо логику можно заложить разную

function abc:string;
begin
.........
result:="b";
raise exception.create("");
.........
end;

var a:string;

begin
a:="a";
try
a:=abc;
except
showmessage(a);
end;
end;


 
Kerk ©   (2011-09-07 10:47) [77]


> Достаточко nn, cn, pn. Раз работа с нодами, то смысл понятен
> из контекста.

Что за тяга такая буквы экономить?


 
Inovet ©   (2011-09-07 10:57) [78]

> [77] Kerk ©   (07.09.11 10:47)
> Что за тяга такая буквы экономить?

В данном случае как вместо Iterator написать i.


 
Sergey Masloff   (2011-09-07 11:13) [79]

Kerk ©   (07.09.11 10:47) [77]
>Что за тяга такая буквы экономить?
Ну просто зачем они (лишние буквы) в именах локальных переменных в функции из 10 строк? В понятности ничего не добавляют... Чего плодить-то


 
Kerk ©   (2011-09-07 11:19) [80]

Скорость понимания кода при чтении такой подход снижает в разы.
Попробуй разгляди разницу между cn, pn и nn, не вчитываясь в каждую букву.


 
Kerk ©   (2011-09-07 11:21) [81]

Да и попробуй догадайся сразу чего вы там зашифровали в этих аббревиатурах.


 
Компромисс   (2011-09-07 11:28) [82]


> В понятности ничего не добавляют... Чего плодить-то
>


1. Добавляют и еще как. Например, мне в коде Sha пришлось голову напрячь, чтобы понять суть алгоритма
2. Опечаток меньше. Трудно вместо next набрать current. Да и легче ошибку в чужом коде найти, если вдруг current := nil присваивается. А на p := nil никто не отреагирует
3. Ctrl+пробел позволяет выбрать переменную из списка, а не набирать ее имя вручную. Поэтому между q и next нет большой разницы. Проблемы будут (и с восприятием в том числе), есть иметь переменные nodeNext, nodeCurrent и nodePrevious, ну так я поэтому и написал именно nextNode, а не наоборот


 
Игорь Шевченко ©   (2011-09-07 11:33) [83]


> Да и легче ошибку в чужом коде найти, если вдруг current
> := nil присваивается. А на p := nil никто не отреагирует


Поддерживаю целиком и полностью


 
CRLF   (2011-09-07 11:35) [84]

Нам на первом курсе списки читали как раз с переменными p и q, по Вирту...  %-)


 
Игорь Шевченко ©   (2011-09-07 11:37) [85]

CRLF   (07.09.11 11:35) [84]

Преподаватели они те же чайники. Дальше учебных примеров и Hello, world их кругозор редко простирается, поэтому что такое сопровождение большого проекта, для них тайна, покрытая мраком.


 
Kerk ©   (2011-09-07 11:41) [86]

Во, люди понимают :)


 
TUser ©   (2011-09-07 11:48) [87]

Надо называть все переменные в стиле iCounterOfElements, так всякому сразу понятно, что это целое число. А дочитав до конца название, - даже понятно, зачем оно. Такой правильный стиль называется обфускацией.

function FindElementInListGivenAsParameter (ListWhichWeSentToFindFunction: TListOfHZFoo; ElementWhichWeLookForInListGivenAsFirstParameterOfThisFunction: THZFoo);
var iCounterOfElementsInListGivenAsParameter: integer;
begin
 for iCounterOfElementsInListGivenAsParameter := 0 to ListWhichWeSentToFindFunction.CountOfElementsInList - 1 do
   if ListWhichWeSentToFindFunction.ElementsOfList[i] = ElementWhichWeLookForInListGivenAsFirstParameterOfThisFunction then begin
     result := i;
     exit;
     end;
 result := -1;
end;


 
Kerk ©   (2011-09-07 11:50) [88]


> TUser ©   (07.09.11 11:48) [87]

Это называется доведением до абсурда - демагогический прием.


 
Sha ©   (2011-09-07 11:53) [89]

> Компромисс   (07.09.11 10:12) [73]

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

> q должно было быть next (или nextNode),

По смыслу алгоритма q - временная переменная, используемая для ротации значений, как здесь:
temp:=a; a:=b; b:=temp;
Зачем называть ее nextNode, если тут идет работа с двумя списками,
и Next"ов тут 2, вернее он тут 1, но одновременно он же Prev в другом списке,
ну, в общем, ты понял.

> p должно было быть current (или currentNode),

p - изменяющаяся голова старого списка, который уменьшается в процессе работы.
Она, конечно, current. Но, в первую очередь, - голова.

> вместо Result должна была быть еще одна переменная previos (previousNode),

Какой, нафиг, previos, если это голова нового списка


> а Result присваиваться только один раз (Result := Current).

Не взлетит. Где бы ты не написал такое, это будет ошибкой.
В начале работы у тебя Current - голова старого списка,
в конце - nil.

> Лично я убил бы за имена переменных.

Я бы тоже. А за ошибку - еще раз.


 
Kerk ©   (2011-09-07 11:55) [90]


> Sha ©   (07.09.11 11:53) [89]

Ну вот видишь, ты настолько плохо подобрал имена, что Компромисс с простейшим алгоритмом сходу не смог разобраться. Отличный пример.


 
TUser ©   (2011-09-07 12:00) [91]


> Это называется доведением до абсурда - демагогический прием.

Зато легко доходит.

Человек способен прочесть 5-15 строк примитивного кода, который является единым блоков (процедурой или методом) то есть воспринимается как единое целое. Замена там i: integer на абсурд затрудняет погнимание, а не облегчает его. Длинно должны называться те переменные, для которых разница между хотя бы парочкой мест их использования (включая объявление) больше этих 15 строк. Также как и те переменные, которые используются в разных единых блоках (процедурах или методах). То есть:

в коде длинной функции (а лучше, чтобы таких функций вовсе не было),

либо

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

.


 
Kerk ©   (2011-09-07 12:02) [92]


> TUser ©   (07.09.11 12:00) [91]

Выше отличный пример. У Sha он получился даже лучше, чем я думал. Код написан в стиле "знаю алгоритм, поэтому понимаю код", а должно быть наоборот "вижу код, понимаю алгоритм".


 
Компромисс   (2011-09-07 12:08) [93]


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


Вполне возможно. Но не понял я именно из-за плохих имен, то есть по твоей вине :-)


 
Компромисс   (2011-09-07 12:12) [94]


> Выше отличный пример. У Sha он получился даже лучше, чем
> я думал. Код написан в стиле "знаю алгоритм, поэтому понимаю
> код", а должно быть наоборот "вижу код, понимаю алгоритм".
>


Было немало веток, где Sha в подобном стиле оптимизировал алгоритмы строчек так в 50 на производительность. Вот там я даже не пытался понять алгоритм, потому как написан он явно для компилятора, а не для людей.


 
Sha ©   (2011-09-07 12:15) [95]

это надо сильно принять, чтобы не увидеть обмен трех значений.


 
Kerk ©   (2011-09-07 12:17) [96]


> Sha ©   (07.09.11 12:15) [95]

Причем здесь сам обмен трех значений?

1) Для чего он нужен?
2) ЧТО он обменивает?


 
Sha ©   (2011-09-07 12:26) [97]

> 1) Для чего он нужен?

У функции говорящее название

> 2) ЧТО он обменивает?

Первая итерация покажет.

А если не помогло, см. [89] :-)


 
Kerk ©   (2011-09-07 12:29) [98]


> Sha ©   (07.09.11 12:26) [97]

Ну т.е., судя по ссылке на [89], ты вместо того, чтоб дать переменным понятные имена, предлагаешь написать пояснительный комментарий в 3 раза длиннее функции?


 
Компромисс   (2011-09-07 12:40) [99]

function Reverse(list: PNode): pNode;
var
 previous, next, current: pNode;
begin;
 current := list;
 previous:=nil;
 while current<>nil do begin;
     next:=current.Next;
     current.Next:=previous;
     previous:=current;
     current:=next;
   end;
  Result := previous;
 end;


Кстати, в моем варианте Result = nil, если параметр nil.


 
Компромисс   (2011-09-07 12:42) [100]

Кстати, еще убил бы и за то, , что в одной строке несколько операторов.


 
Inovet ©   (2011-09-07 12:49) [101]

> [100] Компромисс   (07.09.11 12:42)
> Кстати, еще убил бы и за то, , что в одной строке несколько операторов.

Так здесь обмен через temp т.е. одно логическое действие, почему бы и не в одной строке. Убивать за другое надо.


 
Компромисс   (2011-09-07 12:54) [102]

Inovet ©   (07.09.11 12:49) [101]
Так здесь обмен через temp т.е. одно логическое действие, почему бы и не в одной строке. Убивать за другое надо.

Посмотрите [99]. Я всего лишь переименовал переменные в цикле. Нет там никакого обмена через temp. Создавалась лишь видимость обмена из-за неправильных имен переменных.


 
Компромисс   (2011-09-07 12:56) [103]

Кстати, next (q) лишняя.

function Reverse(list: PNode): pNode;
var
 previous, next, current: pNode;
begin;
 current := list;
 previous:=nil;
 while current<>nil do begin;
     current.Next:=previous;
     previous:=current;
     current:=current.Next;
   end;
  Result := previous;
 end;


 
Компромисс   (2011-09-07 12:57) [104]

В [103] ошибся.


 
Sha ©   (2011-09-07 13:36) [105]

Все-таки, есть где ошибиться.
И это точно имена )


 
Павел Калугин ©   (2011-09-07 13:50) [106]


> pasha_golub ©   (05.09.11 10:57) [3]
> Кстати, озвучилось мнение, что Сапер для студента - это
> слишком сложно. Кто согласен?

Народ на втром-третьем куррсе на турбопаскале изваял "супертетрис" на двоих игроков и ниче. А тут сапер слишком сложно.. Ужос..


 
Romkin ©   (2011-09-07 13:58) [107]

Ну я же говорю, что это хороший пример. Простенькое задание - а сколько обсуждения сразу :)
И испытания, разумеется, на обращение пустого списка, списка из одного элемента, из нескольких. И чтобы утечек памяти не было.
Думаете многие студенты это напишут, хотя бы за час-другой? :D


 
Павел Калугин ©   (2011-09-07 14:03) [108]


Romkin ©   (07.09.11 13:58) [107]
> Думаете многие студенты это напишут, хотя бы за час-другой?

Из тех, с кем я учился, процентов 80..


 
Romkin ©   (2011-09-07 14:03) [109]

Второй пример: те же условия, только на объектах и с рекурсией.


 
Компромисс   (2011-09-07 14:19) [110]

И испытания, разумеется, на обращение пустого списка, списка из одного элемента, из нескольких.

Понемногу подводить к Test Driven Development? :)


 
Компромисс   (2011-09-07 14:20) [111]

Второй пример: те же условия, только на объектах и с рекурсией.

Тогда уже лучше с деревьями, а не списками. Чтобы смысл был в рекурсии...


 
Sha ©   (2011-09-07 15:05) [112]

Romkin ©   (07.09.11 14:03) [109]

Наверно, так

function TNode.Reverse: TNode;
  function Renew(New, Old: TNode): TNode;
  var
    Tail: TNode;
  begin;
    if Old<>nil then begin;
      Tail:=Old.GetNext;
      Old.SetNext(New);
      Result:=Renew(Old, Tail);
      end
    else Result:=New;
    end;
begin;
  Result:=nil;
  Renew(Result, Self);
  end;


 
Sha ©   (2011-09-07 15:08) [113]

Последний оператор заменить на

  Result:=Renew(Result, Self);


 
Sha ©   (2011-09-07 15:10) [114]

или лучще оба на :-)

Result:=Renew(nil, Self);

Так вроде приятнее смотрится


 
Romkin ©   (2011-09-07 15:17) [115]


> Из тех, с кем я учился, процентов 80..

А из тех, что приходят, процентов 80 - нет :(


 
Компромисс   (2011-09-07 15:18) [116]

Sha

Надо метод Renew переименовать. Только не знаю, как :-) Разбираться в коде лень, а что он делает, из названия непонятно.


 
Romkin ©   (2011-09-07 15:28) [117]


> Sha ©   (07.09.11 15:05) [112]

Приставить процедуру в объект - это не совсем ООП :)
При переходе к объектам важно отойти от процедурного подхода:
TList = class
 Key: Word;
 Tail: TList;
...

И у Tail как объекта есть те же самые методы, которые можно вызвать, он же тоже TList.


 
Sha ©   (2011-09-07 15:36) [118]

> Компромисс   (07.09.11 15:18) [116]
> Надо метод Renew переименовать

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

> Romkin ©   (07.09.11 15:28) [117]

Можно совсем в ООП стиле написать
че-нить вроде MoveStackToStack(Source, Dest),
но в сочетании с требованием рекурсии ужасно смотреться будет.
И так уже - ух, а так - ваще будет )

Самый первый процедурный вариант гораздо понятнее.
ООП - не самоцель.


 
pasha_golub ©   (2011-09-07 15:43) [119]


> Компромисс   (07.09.11 12:40) [99]
>
> function Reverse(list: PNode): pNode;
> var
>  previous, next, current: pNode;
> begin;
>  current := list;
>  previous:=nil;
>  while current<>nil do begin;
>      next:=current.Next;
>      current.Next:=previous;
>      previous:=current;
>      current:=next;
>    end;
>   Result := previous;
>  end;


А чего у тебя в коде единобразия нетути? :) То отделяется оператор присваивания пробелами, то нет. Почему begin висит на строчке с условием, да еще и с пустым оператором после него?

Ай-айай, а еще боремся за звание дома высокой культуры и быта (с)


 
pasha_golub ©   (2011-09-07 15:44) [120]

Вообщем, по результам ветки готов взять Sha © к себе студентом. Не знаю, научу ли программировать, но сало с водкой употреблять возможно :)


 
Anatoly Podgoretsky ©   (2011-09-07 15:58) [121]

> Компромисс  (07.09.2011 10:12:13)  [73]

А зачем вторая переменная, одной что ли не хватает?


 
Компромисс   (2011-09-07 15:59) [122]

pasha_golub ©   (07.09.11 15:43) [119]

Я прямо в браузере ответ писал.


 
Anatoly Podgoretsky ©   (2011-09-07 15:59) [123]

> Kerk  (07.09.2011 10:47:17)  [77]

Уменьшить энтропию вселенной.


 
Sha ©   (2011-09-07 16:34) [124]

> Не знаю, научу ли программировать, но сало с водкой употреблять возможно :)

Заметь, не я это предложил )


 
Romkin ©   (2011-09-07 16:47) [125]

А можно я напачкаю кодом? :)
program RecursiveList;

{$APPTYPE CONSOLE}

uses
 SysUtils;

type
 TList = class
 private
   FKey: Word;
   FTail: TList;
   function TailReverse: TList;
 public
   constructor Create(AKey: Word);
   destructor Destroy; override;
   function Add(AList: TList): TList;
   class procedure Reverse(var AList: TList);
   property Key: Word read FKey;
 public
   type
     TListEnumerator = class
     private
       FList: TList;
       function GetCurrent: TList;
     public
       constructor Create(AList: TList);
       property Current: TList read GetCurrent;
       function MoveNext: Boolean;
     end;
   function GetEnumerator: TListEnumerator;
 end;

{ TList }

function TList.Add(AList: TList): TList;
begin
 if not assigned(FTail) then
   FTail := AList
 else
   FTail.Add(AList);
 Result := Self;
end;

constructor TList.Create(AKey: Word);
begin
 FKey := AKey;
end;

destructor TList.Destroy;
begin
 FTail.Free;
 inherited;
end;

function TList.GetEnumerator: TListEnumerator;
begin
 Result := TListEnumerator.Create(Self);
end;

class procedure TList.Reverse(var AList: TList);
begin
 if not assigned(AList) then
   exit;
 AList := AList.TailReverse;
end;

function TList.TailReverse: TList;
begin
 if not assigned(FTail) then
   Exit(Self);
 Result := FTail.TailReverse;
 FTail := nil;
 Result.Add(Self);
end;

{ TList.TListEnumerator }

constructor TList.TListEnumerator.Create(AList: TList);
begin
 FList := AList;
end;

function TList.TListEnumerator.GetCurrent: TList;
begin
 Result := FList;
 FList := FList.FTail;
end;

function TList.TListEnumerator.MoveNext: Boolean;
begin
 Result := assigned(FList);
end;

procedure PrintList(AList: TList);
var
 Node: TList;
begin
 for Node in AList do
   write(Node.Key, " ");
 writeln;
end;

var
 List: TList;

begin
 ReportMemoryLeaksOnShutdown := True;
 try
   List := TList.Create(1);
   try
     List.Add(TList.Create(2)).Add(TList.Create(3)).Add(TList.Create(4));
     PrintList(List);
     TList.Reverse(List);
     PrintList(List);
   finally
     List.Free;
   end;
 except
   on E: Exception do
     Writeln(E.ClassName, ": ", E.Message);
 end;
 readln;
end.

Вроде не ошибся...


 
Павел Калугин ©   (2011-09-07 17:08) [126]

Ромкин, тож к Пашке собеседуесси на сало с горилкой?


 
Romkin ©   (2011-09-07 17:12) [127]

Дык завсегда! :D
Код, кстати, на троечку :(


 
Игорь Шевченко ©   (2011-09-07 17:21) [128]

Romkin ©   (07.09.11 16:47) [125]


>  except
>    on E: Exception do
>      Writeln(E.ClassName, ": ", E.Message);
>  end;


а это зачем ?
Это уже на двоечку


 
Sha ©   (2011-09-07 17:38) [129]

> Romkin

на мой вкус, class procedure ничуть не лучше процедуры внутрях метода


 
Romkin ©   (2011-09-07 18:02) [130]


> а это зачем ?Это уже на двоечку

А чем тебе не понравился стандартный перехватчик?


 
Romkin ©   (2011-09-07 18:02) [131]


> на мой вкус, class procedure ничуть не лучше процедуры внутрях
> метода

Надо было просто попереставлять ключи :)


 
Игорь Шевченко ©   (2011-09-07 19:28) [132]


> А чем тебе не понравился стандартный перехватчик?


во-первых, тем, что он глушит исключение
во-вторых тем, что он здесь лишний


 
Romkin ©   (2011-09-07 19:42) [133]

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


 
Игорь Шевченко ©   (2011-09-07 20:35) [134]

Romkin ©   (07.09.11 19:42) [133]


> Он не глушит исключение, а выдает его на экран с завершением
> работы


Вот скажи пожалуйста, тебе, как пользователю, что будет радости в выданном сообщении на экран ? Ты узнаешь, где ошибка ? Ты узнаешь, почему ошибка ?
Нет, ты увидишь: "Произошла ошибка". И все. Это и есть - глушить исключение.


 
pasha_golub ©   (2011-09-07 20:49) [135]


> Павел Калугин ©   (07.09.11 17:08) [126]
>
> Ромкин, тож к Пашке собеседуесси на сало с горилкой?

Я вас без собеседования возьму! :)


 
Думкин ©   (2011-09-08 07:14) [136]


> Дык это ж всё таки "Минёр", а не "Шахтёр". Порой приходиться
> угадывать. Не угадал - начинай новую жизнь! :)
>

Они разные есть. Есть варианты в которых избегаются ситуации выбора.


 
asail ©   (2011-09-08 07:41) [137]


> Игорь Шевченко ©   (07.09.11 20:35) [134]

> Нет, ты увидишь: "Произошла ошибка". И все.

Неа. Игорь, у него там выводится что именно за ошибка - имя класса ошибки и сообщение... Чего же более?


 
Slym ©   (2011-09-08 08:53) [138]

предлагается задать ему переделать сей проект на сетку 6*6 и ограничить во времени дать пару часов...
не дожидаясь окончания выхода времени "передумать" на сетку 6*5 :)
и дать еще 2 часа

мотивировать что типа бурно текущее время, нужно типа адаптироваться под реалии, и что завтра может понадобиться сетка 100*100


 
Думкин ©   (2011-09-08 09:15) [139]


> Slym ©   (08.09.11 08:53) [138]

А еще лучше и форму ячеек поменять - под соты, например.


 
Inovet ©   (2011-09-08 09:41) [140]

> [139] Думкин ©   (08.09.11 09:15)
> и форму ячеек поменять - под соты, например

А как же батоны кадать, это же сразу разрыв шаблона.


 
pasha_golub ©   (2011-09-08 10:43) [141]

Гексаугольльные баттоны!  Уау, класс! :)


 
Romkin ©   (2011-09-08 10:43) [142]


> Вот скажи пожалуйста, тебе, как пользователю, что будет
> радости в выданном сообщении на экран ? Ты узнаешь, где
> ошибка ? Ты узнаешь, почему ошибка ?Нет, ты увидишь: "Произошла
> ошибка". И все. Это и есть - глушить исключение.

То есть как? Выдается класс исключения и сообщение из этого исключения. Что еще-то надо?! Не будет перехвата - вот тогда и будет чудесное "Программа выполнила операцию... Сообщить?"


 
Romkin ©   (2011-09-08 10:45) [143]


> А еще лучше и форму ячеек поменять - под соты, например.

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


 
Игорь Шевченко ©   (2011-09-08 11:12) [144]


> Не будет перехвата - вот тогда и будет чудесное "Программа
> выполнила операцию... Сообщить?"


Вот это и надо оставить - таим полезной информации куда больше, чем в твоем куцем сообщении


 
Anatoly Podgoretsky ©   (2011-09-08 11:32) [145]

> Игорь Шевченко  (08.09.2011 11:12:24)  [144]

Но только не "Сообщить?", а "Послать"


 
pasha_golub ©   (2011-09-08 12:21) [146]


> Игорь Шевченко ©   (08.09.11 11:12) [144]


> Вот это и надо оставить - таим полезной информации куда
> больше, чем в твоем куцем сообщении

А пользователь ее запомнит, чтобы передать? Я лично по этому поводу люблю EurekaLog. Там тебе чего душа пожелает, и стек вызовов, и память, и модули... И сообщение об ошибке пользователя не пугает.


 
Игорь Шевченко ©   (2011-09-08 13:41) [147]

pasha_golub ©   (08.09.11 12:21) [146]

Мы не о любви, а о том, что глушить исключения не надо :)

Передаст тебе пользователь, что была ошибка EHeapError: Out of Memory
радости тебе и пользователю с этой передачи ?


 
Romkin ©   (2011-09-08 14:21) [148]

А от стандартного виндового окна какая радость пользователю и мне?

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


 
Romkin ©   (2011-09-08 14:28) [149]

Да даже больше могу сказать: Out of memory в частности вполне достаточно, и исчерпывающей информации где оно возникло вообще не надо: проблема скорее всего вообще не там.
Было такое, жрется память, сервер приложений выдает OutOfMemory. И что? Выдавал-то он, а утечка в Firebird была.


 
Ega23 ©   (2011-09-08 14:41) [150]


> Выдавал-то он, а утечка в Firebird была.


FierBird - ну ты понел...  :)


 
Игорь Шевченко ©   (2011-09-08 15:18) [151]


> Вообще в простом демонстрационном приложении в десяток строк
> полностью смонтированный контроль ошибок выглядит странно


Поэтому обработку исключений оттуда надо выпилить


 
Jeer ©   (2011-09-08 15:30) [152]

В ночь с 17 на 18 августа "Протон-М" с разгонным блоком "Бриз-М" и новейшим спутником связи "Экспресс-АМ4" стартовал с Байконура. До 325-й секунды полет шел в штатном режиме, однако после четвертого включения разгонного блока связь с объектом была потеряна.

Причина выяснится довольно скоро: виновным признают программиста, формировавшего полетное задание. Он допустил ошибку, в результате которой разгонный блок отработал, как положено, но потерял направление и неверно ориентировался в пространстве. В итоге спутник, страховка которого составила более 7,5 млрд руб., был утерян. А вместе с ним — одно из важнейших звеньев реализации федеральной целевой программы "Развитие цифрового телерадиовещания в РФ на 2009-2015 годы"


 
Kerk ©   (2011-09-08 15:42) [153]


> Jeer ©   (08.09.11 15:30) [152]

В таких местах малоадекватные старперы программистами работают, как ни жаль. На те зарплаты больше никто не идет.


 
Romkin ©   (2011-09-08 15:44) [154]


> Поэтому обработку исключений оттуда надо выпилить

Данная обработка рекомендована производителем и не приводит к показу диалогового окна, бесполезного в данном случае. Не вижу оснований.


 
Игорь Шевченко ©   (2011-09-08 15:46) [155]

Romkin ©   (08.09.11 15:44) [154]

Ссылочку на рекомндацию производителя ?

Kerk ©   (08.09.11 15:42) [153]

Источник достоверной информации ?


 
Romkin ©   (2011-09-08 15:47) [156]


> Ссылочку на рекомндацию производителя ?

Создай консольное приложение и там будет этот обработчик. Я считаю результат работы визарда "от производителя" его рекомендацией.


 
Inovet ©   (2011-09-08 15:51) [157]

> [153] Kerk ©   (08.09.11 15:42)
> На те зарплаты больше никто не идет.

Для регионов там хорошие зарплаты.

"Виновным признали программиста" что признали верится, но что он один виновен не верится. Там ведь проверяют всё это бортовое ПО на испытательных комплексах, насколько я знаю. Или тут речь идёт о чём-то несовсем программистском.


 
Kerk ©   (2011-09-08 15:51) [158]


> Игорь Шевченко ©   (08.09.11 15:46) [155]
>
> Kerk ©   (08.09.11 15:42) [153]
>
> Источник достоверной информации ?

Личный опыт. Видел кто работает в госструктурах и оборонке.
Я даже с ними немного поработал. Это ужасно.


 
Игорь Шевченко ©   (2011-09-08 16:01) [159]

Kerk ©   (08.09.11 15:51) [158]

На твой личный опыт есть чужой личный опыт. А понаблюдав, например, за вопросами, темами и ответами на этом  сайте можно тоже выводов о программистах на Delphi понаделать - мало не покажется.

Romkin ©   (08.09.11 15:47) [156]

Создал. File|New console application

Вот что получилось - никакой обработки исключений

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

begin
 { TODO -oUser -cConsole Main : Insert code here }
end.


Delphi 2006

В 2010 действительно так, как ты пишешь:

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

begin
 try
   { TODO -oUser -cConsole Main : Insert code here }
 except
   on E: Exception do
     Writeln(E.ClassName, ": ", E.Message);
 end;
end.


уроды


 
Romkin ©   (2011-09-08 16:15) [160]

Почему? Простейший глобальный обработчик.
Выдачу диалогового окна из консольного приложения я считаю вообще недопустимым: ошибка должна рапортоваться в stderr (хотя и в stdout тоже допустимо), плюс ExitCode устанавливаться. И для этого есть несколько простых причин.
И тем более меня удивляет твое неприятие этого.


 
Игорь Шевченко ©   (2011-09-08 16:58) [161]


> И тем более меня удивляет твое неприятие этого.


А чему удивляться ?
Я последовательный противник кода вида

on E: Exception do
 ShowMessage("Ошибка: "+E.Message);

"Глобальный обработчик", который предлагает Delphi (не знаю, с какой версии, но между 2006 и 2010) ничем, по сути, не отличается от приведенного фрагмента - то есть, не дает никакой информации, почему и где произошла ошибка (call stack), не передает ее (в случае консольных приложений) вызывающему, потому что завершение выполняется по Halt0.


 
Eraser ©   (2011-09-08 17:35) [162]

> [161] Игорь Шевченко ©   (08.09.11 16:58)

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


 
Игорь Шевченко ©   (2011-09-08 18:11) [163]

Не удержусь в очередной раз, чтобы не привести ссылку
http://delphikingdom.com/asp/viewitem.asp?catalogid=1392


 
Romkin ©   (2011-09-08 18:17) [164]


> А чему удивляться ?Я последовательный противник кода видаon
> E: Exception do  ShowMessage("Ошибка: "+E.Message);

Я тоже. Но здесь есть разница: консоль при этом завершит работу. Это - демонстрационное приложение, не более. При этом сообщение об ошибке есть, и для данного случая его вполне достаточно.
А твое возмущение реально удивляет.


 
Romkin ©   (2011-09-08 18:23) [165]

Тем более я не понимаю, почему в исходнике в десяток строчек (в демке!) я должен давать раскрутку стека, подробную информацию об исключении и т.д. Угу, и Эврику еще вставить. Да я быстрее просмотрю весь код и найду ошибку, чем буду читать вывод ошибки :D
А так - покрутил, если что - почитал что выдало в исключении, глянул код.


 
Игорь Шевченко ©   (2011-09-08 18:38) [166]


> Тем более я не понимаю, почему в исходнике в десяток строчек
> (в демке!) я должен давать раскрутку стека, подробную информацию
> об исключении и т.д.


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


 
DVM ©   (2011-09-08 18:49) [167]


> Игорь Шевченко ©  

Ты предлагаешь в консольных приложениях и сервисах исключения не давить совсем? Я правильно понимаю? Или не понимаю.


 
Игорь Шевченко ©   (2011-09-08 18:58) [168]

DVM ©   (08.09.11 18:49) [167]

Ты не понимаешь :)
Я ссылку в [163] дал - там довольно складно написано, как, когда и зачем обрабатывать исключения.

В двух словах - сообщение об ошибке должно помочь ее локализовать и по возможности исправить.


 
DVM ©   (2011-09-08 19:05) [169]


> Игорь Шевченко ©   (08.09.11 18:58) [168]


> Я ссылку в [163] дал

я читал раньше, там все верно написано


> В двух словах - сообщение об ошибке должно помочь ее локализовать
> и по возможности исправить.

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


 
Rouse_ ©   (2011-09-08 19:26) [170]

Хм, а я в сервисах логирование с раскруткой стека вызовов и SEH-фреймов делаю, а потом давлю, ибо нефих - и ошибка нормально локализируется и сервис работает дальше :)


 
DVM ©   (2011-09-08 19:29) [171]


> Rouse_ ©   (08.09.11 19:26) [170]


> а я в сервисах логирование с раскруткой стека вызовов и
> SEH-фреймов делаю

Чем делаешь? Свое что-то?


 
Rouse_ ©   (2011-09-08 19:32) [172]

Ну не с нуля конечно писанное, принцип подсмотрен в JEDI, а так-то да, ручками...


 
DVM ©   (2011-09-08 19:34) [173]


> Rouse_ ©   (08.09.11 19:32) [172]

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


 
Игорь Шевченко ©   (2011-09-08 19:38) [174]

DVM ©   (08.09.11 19:34) [173]

Для исключения типа "файл не найден" стек и не очень нужен. Стек хорош для поиска ошибок программиста, а не ошибок пользователя.


 
Rouse_ ©   (2011-09-08 19:39) [175]

Не, такие банальности давятся сразу, ну за исключением "не могу подключиться к серверу".
Просто добавляется описание объекта по которому произошла ошибка + стэк вызовов (ибо мест возникновения данной ошибки может быть много).
А с подключением выдается полная раскладка, с параметрами подключения и т.д. + опять-же стек вызовов.

Для неизвестных ошибок раскрутка стэка и фреймов...


 
Rouse_ ©   (2011-09-08 19:40) [176]

Зы: по поводу монструозно, я вывод ошибок в несколько файлов делаю, известные (по группам) и неизвестные - ака критические на которые стоит обратить внимание в первую очередь.


 
DVM ©   (2011-09-08 19:40) [177]


> Игорь Шевченко ©   (08.09.11 19:38) [174]


> Для исключения типа "файл не найден" стек и не очень нужен.
>  

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


 
SQLEX ©   (2011-09-08 22:00) [178]

из той же статьи.


Имейте в виду, что здесь речь идёт именно о перехвате и заглатывании исключений. Ничего плохого в таком коде нет:

function GetSomeObject: TMyObject;
begin
 Result := TMyObject.Create;
 try
   // заполнение Result
 except
   on Exception do
   begin
     FreeAndNil(Result); // заботимся, чтобы не было утечек ресурсов
     raise; // мы НЕ перехватываем исключения, а только используем их для нотификации.
            // Что-то вроде try-finally, но с другой логикой обработки.
   end;
 end;
end;


а меня ты, Игорь, ругал за  
except
   on Exception do
   begin
:)


 
Омлет ©   (2011-09-08 22:33) [179]

SQLEX ©

Ну так raise всё меняет.


 
Игорь Шевченко ©   (2011-09-08 22:48) [180]

SQLEX ©   (08.09.11 22:00) [178]

Тебя в коммунизм не возьмем - ники меняешь часто :)


 
Аноним   (2011-09-08 23:00) [181]

Ба-Бах!!!


 
Dennis I. Komarov ©   (2011-09-08 23:04) [182]

Эх, бедные студенты... :)


 
Владислав ©   (2011-09-09 01:03) [183]

Ну так Игорь то, в частности, ведет речь об "on Exception do".


 
Германн ©   (2011-09-09 01:21) [184]


> Владислав ©   (09.09.11 01:03) [183]
>
> Ну так Игорь то, в частности, ведет речь об

Хм.
Об чём ведёт речь Игорь - это ещё тот вопрос. :)


 
pasha_golub ©   (2011-09-09 09:16) [185]


> Германн ©   (09.09.11 01:21) [184]


> Об чём ведёт речь Игорь - это ещё тот вопрос. :)

Соглашусь. :)


 
Romkin ©   (2011-09-09 10:22) [186]


> Я точно также не понимаю, зачем в демке нужна такая обработка
> исключений - покрутить и посмотреть ты можешь и без нее.
>  Разве что лень вытирать сгеренированный средой уродский
> код.

Код не уродский, об исключении сообщается и программа завершает работу. Такой обработчик вполне подходит для простейших случаев, а большего от него и не требуется, это один из вариантов корректной обработки исключений.
И не надо меня тыкать статьями, я их читал. Часто подобного обработчика совершенно достаточно, чтобы с удобствами локализовать ошибку, особенно в маленьком консольном приложении.
А обработка оставлена - мало ли, может кто-то без среды крутить будет?


 
_oxffff   (2011-09-09 10:45) [187]


> Rouse_ ©   (08.09.11 19:26) [170]
> Хм, а я в сервисах логирование с раскруткой стека вызовов
> и SEH-фреймов делаю, а потом давлю, ибо нефих - и ошибка
> нормально локализируется
и сервис работает дальше :)


Приветствую.
Я предлагал и предлагаю вообще пустой try except в определенных ситуациях использовать. :)


 
DVM ©   (2011-09-09 10:46) [188]


> _oxffff


> в определенных ситуациях

в каких?


 
_oxffff   (2011-09-09 10:50) [189]

Да и  по

on E: Exception do

идут не все исключения.

Поскольку объект обертка не обязан быть подклассом Exception.
Более корректным будет

on E: TObject do


 
_oxffff   (2011-09-09 10:51) [190]


> DVM ©   (09.09.11 10:46) [188]


Тут была ветка несколько лет назад.


 
asail ©   (2011-09-09 11:05) [191]


> Игорь Шевченко ©   (08.09.11 16:58) [161]

Вот пример из VCL Delphi 6 (unit SvcMgr):
procedure TServiceThread.Execute;
var
 msg: TMsg;
 Started: Boolean;
begin
 PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE); { Create message queue }
 try
   FService.Status := csStartPending;
   Started := True;
   if Assigned(FService.OnStart) then FService.OnStart(FService, Started);
   if not Started then Exit;
   try
     FService.Status := csRunning;
     if Assigned(FService.OnExecute) then
       FService.OnExecute(FService)
     else
       ProcessRequests(True);
     ProcessRequests(False);
   except
     on E: Exception do
       FService.LogMessage(Format(SServiceFailed,[SExecute, E.Message]));
   end;
 except
   on E: Exception do
     FService.LogMessage(Format(SServiceFailed,[SStart, E.Message]));
 end;
end;

Как видим, все ексепшены глушатся на корню...
Вот еще оттуда:
procedure TService.DoStart;
begin
 try
   Status := csStartPending;
   try
     FServiceThread := TServiceThread.Create(Self);
     FServiceThread.Resume;
     FServiceThread.WaitFor;
     FreeAndNil(FServiceThread);
   finally
     Status := csStopped;
   end;
 except
   on E: Exception do
     LogMessage(Format(SServiceFailed,[SExecute, E.Message]));
 end;
end;

Видимо, разрабы Борланда (тогда еще) полезных статей не читали... :)


 
DVM ©   (2011-09-09 11:07) [192]


> asail ©   (09.09.11 11:05) [191]


> Как видим, все ексепшены глушатся на корню...


> FService.LogMessage

Где ж они глушатся, они логгируются, так все делают.  Я так делаю.


 
asail ©   (2011-09-09 12:41) [193]


> DVM ©   (09.09.11 11:07) [192]

> Где ж они глушатся, они логгируются,

Логгируются, а потом глушатся. Raise там нету...

> так все делают

А вот, Игорь говорит, что так не кошерно... Кто прав? Кого слушать?

> Я так делаю

Я тоже.


 
Anatoly Podgoretsky ©   (2011-09-09 12:47) [194]

> asail  (09.09.2011 12:41:13)  [193]

Конечно не кошерно, поскольку скрыто, результат такой же как и при except
end
А о том, что была ошибка и что то записали в лог не узнать.
Так что Raise нужен. Кроме сообщений об ошибке не будет работать логика
отлова ошибки

try
except
....
end


 
asail ©   (2011-09-09 12:51) [195]


> Anatoly Podgoretsky ©   (09.09.11 12:47) [194]

Т.е. VCL в топку, ибо некошерен? Я пральна понял?


 
DVM ©   (2011-09-09 12:51) [196]


> Anatoly Podgoretsky ©   (09.09.11 12:47) [194]


> Так что Raise нужен.

Ага, и сервис будет падать от банальных EFileNotFound и прочих, некритичных ошибок, в то время как мог восстановить работу. Если учесть, что каждую функцию WinApi как правило надо оборачивать в Win32Check, то создать сервис живущий дольше 1 часа в боевых условиях не выйдет. Дело не в том давить или нет, а где давить.


 
DVM ©   (2011-09-09 12:56) [197]

Хорошо, вот всем пример. Есть сервис, в задачу которого входит, например, какая то последовательная обработка файлов на диске. Для этого в сервисе стартует отдельный поток, в методе Execute которого собственно и производится вся обработка. Поток запускается при старте сервиса и останавливается при остановке. Все остальное время он работает, возможно засыпая когда это необходимо, возможно нет, неважно. Если в Execute не давить исключения, то поток просто умрет. Например, из-за отказа в доступе к очередному файлу. И все. Где логика. Зачем ему умирать.


 
DVM ©   (2011-09-09 12:58) [198]


> Anatoly Podgoretsky ©   (09.09.11 12:47) [194]


> А о том, что была ошибка и что то записали в лог не узнать.

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


 
Компромисс   (2011-09-09 13:26) [199]


> Для этого в сервисе стартует отдельный поток, в методе Execute
> которого собственно и производится вся обработка.


Естественно диспетчер должен записать в лог и погасить исключение, потому как он диспетчеризует события, которые друг от друга могут и не зависеть.
А вот если он вдруг обнаружит ошибку в самом себе (то есть дальнейшая работа под угрозой), то он не должен ее гасить, а обязан передать наружу (записав в лог тоже, разумеется).
Это как Windows работает - при ошибке приложения его можно завершить и продолжить работу Windows, но если ошибка в самой Windows, то она и загружаться откажется.


 
Компромисс   (2011-09-09 13:30) [200]

А в данном случае - в ответах на форуме надо стараться писать самый правильный код, потому как новички быстро схватывают, но трудно переучиваются. Прочитав впервые неправильную обработку, новичок посчитает, что это и есть тот самый способ, каким профессионалы обрабатывают исключения. Уж лучше написать комментарий "Тут должна быть обработка исключений, но мне лень ее писать" :-)


 
DVM ©   (2011-09-09 13:38) [201]


> Компромисс   (09.09.11 13:26) [199]


>  но если ошибка в самой Windows, то она и загружаться откажется.

И то она по мере возможности пытается продолжить работу. Вот вчера только под Win7 у меня было - зависло все, даже мышка не двигается, потом экран моргнул, появилось сообщение, что видеодрайвер некорректно работал и был перезапущен. И все нормально работает дальше. Предыдущие версии Win упали бы в синий экран.


 
Anatoly Podgoretsky ©   (2011-09-09 13:46) [202]

> asail  (09.09.2011 12:51:15)  [195]

Зачем, вполне кошерен, но не идеален в нескольких местах, иначе бы не было
апдейтов


 
Anatoly Podgoretsky ©   (2011-09-09 13:48) [203]

> DVM  (09.09.2011 12:51:16)  [196]

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


 
Anatoly Podgoretsky ©   (2011-09-09 13:50) [204]

> DVM  (09.09.2011 12:56:17)  [197]

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


 
Anatoly Podgoretsky ©   (2011-09-09 13:51) [205]

> DVM  (09.09.2011 12:58:18)  [198]

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


 
Inovet ©   (2011-09-09 13:54) [206]

> [203] Anatoly Podgoretsky ©   (09.09.11 13:48)
> Вот это пусть конечный пользователь решает

Так конечный или пользователь библиотеки? Здесь о конечном говорят, раз в сервисе, а как он может обработать исключение?


 
DVM ©   (2011-09-09 14:21) [207]


> Anatoly Podgoretsky ©   (09.09.11 13:51) [205]


> а вот программе и конечному пользователю нужно сообщение

а про десктопные приложения даже никто и не заикается, там ввобще давить ничего не надо как правило


 
Компромисс   (2011-09-09 14:23) [208]

DVM ©   (09.09.11 13:38) [201]


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


Так об этом и спорим. Если уж код ловит Exception, то либо обрабатывает по умному (как Windows с рестартом драйвера), либо кидает наружу. Иногда обрабокта по умному заключается в простом логировании, но это не должно возводиться в default.


 
Cobalt ©   (2011-09-09 15:05) [209]

Попробую примирить всех фразой "Во всем нужно знать меру, и ко всему подходить с умом" :-)


 
Jeer ©   (2011-09-09 15:29) [210]


> Kerk ©   (08.09.11 15:42) [153]
>
>
> > Jeer ©   (08.09.11 15:30) [152]
>
> В таких местах малоадекватные старперы программистами работают,
>  как ни жаль. На те зарплаты больше никто не идет.


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


 
_Юрий   (2011-09-09 15:40) [211]

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


 
_oxffff   (2011-09-09 17:22) [212]


> Jeer ©   (09.09.11 15:29) [210]


:)))))))


 
Полвторого   (2011-09-10 03:13) [213]

К слову о студентах и программах, ими написуемых.

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


 
Компромисс   (2011-09-10 12:48) [214]

Полвторого   (10.09.11 03:13) [213]

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


 
Kerk ©   (2011-09-10 12:56) [215]


> Jeer ©   (09.09.11 15:29) [210]
> Сильно подозреваю, что как раз в этом случае отработал малоадекватный
> дельфинист молодого поколения :)
> Адекватные старперы давно на диванчиках лежат.

Адекватные-то может и лежат.
Это неадекватных на пенсию не выпрешь.


 
имя   (2011-09-10 15:58) [216]

Удалено модератором


 
Kerk ©   (2011-09-10 16:04) [217]

Удалено модератором


 
Кто б сомневался ©   (2011-09-10 19:29) [218]


> Код, скорее всего, будет говнокодным, но это не страшно,
>  не все же начинали писать идеально.


Хочу тебя удивить.
Ни один человек в мире не начинал писать идеально.
Даже хороший программист, и то не пишет идеально. Чтобы писать идеально, нужно много свободного времени.
Если бы писали идеально, Windows летала бы, а .net жрал бы минимум ресурсов, а этого не видно.


 
Игорь Шевченко ©   (2011-09-10 19:30) [219]


> Если бы писали идеально, Windows летала бы


То есть, ты утверждаешь, что Windows не летает, потому что неидеально написана и готов доказать это ? Или в лужу ?


 
Кто б сомневался ©   (2011-09-10 19:32) [220]

Это как в шахматах : чтобы писать идеально, - нужно знать что произойдет на 20 ходов вперед.


 
Кто б сомневался ©   (2011-09-10 19:36) [221]


> и готов доказать это ? Или в лужу ?


Откуда у тебя сведения, что программисты MS особые, и не делают ошибок, но делают сразу идеальный код?


 
alexdn ©   (2011-09-10 19:53) [222]

> Игорь Шевченко ©   (10.09.11 19:30) [219]
>
> > Если бы писали идеально, Windows летала бы
> То есть, ты утверждаешь, что Windows не летает, потому что
> неидеально написана и готов доказать это ? Или в лужу ?
только сравнением с линуксом.. больше сравнивать не с чем


 
Кто б сомневался ©   (2011-09-10 19:58) [223]


> alexdn ©   (10.09.11 19:53) [222]


Ну почему же. Можно сравнить Висту и Win 7 - которая по большому счету является доработкой Висты.


 
Игорь Шевченко ©   (2011-09-10 19:59) [224]


> Откуда у тебя сведения, что программисты MS особые, и не
> делают ошибок, но делают сразу идеальный код?


Слив засчитан


 
alexdn ©   (2011-09-10 20:00) [225]

> Кто б сомневался ©   (10.09.11 19:58) [223]
я о том что есть windowsы и unix-ы, больше то и нет ничего


 
Кто б сомневался ©   (2011-09-10 20:09) [226]


> Игорь Шевченко ©   (10.09.11 19:59) [224]


Я основываюсь на общепринятых фактах. Когда код пишет человек, то вероятность ошибок (я не имею ввиду ошибки синтаксиса, скорее логические ошибки, оптимизацию, ошибки связанные с будущими добавлениями\изменениями кода) очень высока.
Чем шире область применения кода, тем выше вероятность ошибок и низкой производительности. Поэтому и придумывают раз в 3-4 года новые\доработанные технологии и платформы.


 
TUser ©   (2011-09-10 20:13) [227]

Программы должны писать программы, не человеческое это дело.


 
alexdn ©   (2011-09-10 20:22) [228]

> TUser ©   (10.09.11 20:13) [227]
и правильно! так оно и будет, к тому и идеть.. перенёс кнопочку на форму, сказал по русски(!) а посчитай при нажатие на кнопочку сколько будет x+y, и всё.. т.е. обьектно-ориентированное программирование вообще без доступа к коду!..


 
Leon-Z ©   (2011-09-10 21:04) [229]

А я вот недавно по ICQ через моего кента с одним прогером переписывался.
Так он сказал, что я "говнокодер" потому-что учу ЯП и реализации алгоритмов
на данном ЯП, а также иерархию классов и пр.
Его мнение, что алгоритмы надо учить безотносительно к ЯП, а
прогу можно по справке написать.
И он работает в уважаемой компании 8-О !!!!
Как таких придурков вааще куда - то берут ????


 
DVM ©   (2011-09-10 21:27) [230]


> Leon-Z ©   (10.09.11 21:04) [229]


> потому-что учу


> надо учить

Мне слово "учить" по отношению к программированию вообще кажется неприменимым. Стихотворение что ли. "Выучил Delphi наизусть"


 
Anatoly Podgoretsky ©   (2011-09-10 21:29) [231]

> Leon-Z  (10.09.2011 21:04:49)  [229]

Он может и перегнул справку, но в общем он прав.


 
alexdn ©   (2011-09-10 21:34) [232]

> Игорь Шевченко ©   (10.09.11 19:30) [219]
>
> > Если бы писали идеально, Windows летала бы
>
>
> То есть, ты утверждаешь, что Windows не летает, потому что
> неидеально написана и готов доказать это ? Или в лужу ?
специально для Игоря Шевченко!:) он любит майкрософт.. - http://i030.radikal.ru/1109/6d/80df0d795075.jpg


 
Игорь Шевченко ©   (2011-09-10 21:41) [233]

Кто б сомневался ©   (10.09.11 20:09) [226]

Ты выбрал несколько неудачный пример :)
Windows для проекта такого масштаба написана, можно считать, "идеально", по крайней мере, наиболее используемые ее части, и вопросу производительности в ней уделено не последнее место. Грубо говоря, переписать ее так, чтобы она она начала "летать" не получится, даже если кто-то сдуру возьмется за такое.


 
Inovet ©   (2011-09-10 21:47) [234]

> [232] alexdn ©   (10.09.11 21:34)
> любит майкрософт.. - http://i030.radikal.ru/1109/6d/80df0d795075.jpg

Фигня какая-то, ZOG. И при чём тут любовь или нелюбовь, надо объективно оценивать, тогда Виндоус будет выглядеть для индивидуума вполне продуманной системой. Может и можно улучшить на 10% производительность, если 10 лет только и делать, что переписывать весь код.


 
DVM ©   (2011-09-10 22:03) [235]


> Кто б сомневался ©

На торрентах лежат исходники Windows 2000 (ну по крайней мере значительная их часть). В каком файле, какое место ты считаешь написанным не оптимально? :) И как надо было его написать?


 
Eraser ©   (2011-09-10 22:38) [236]

> [222] alexdn ©   (10.09.11 19:53)

т.е. линукс по твоему "летает"? ну ну.


 
Marser_   (2011-09-11 02:13) [237]


> Ega23 ©   (05.09.11 11:41) [14]
>
>
> > Кстати, озвучилось мнение, что Сапер для студента - это
> > слишком сложно. Кто согласен?
>
>
> Не согласен.
> А если студенту подсказать, что можно сделать массив кнопок
> и обращаться к ним как к элементам массива - вот тогда совсем
> несложно будет.
> Код, скорее всего, будет говнокодным, но это не страшно,
>  не все же начинали писать идеально.

Блин, а что ж он за перспективный студент такой?! Я в поле Сапёра видел массив не то что до универа, до лицея ещё... Хз, по-моему это попытки научить Руслану Писанку делать сальто...


 
Marser_   (2011-09-11 02:15) [238]


> Медвежонок Пятачок ©   (05.09.11 11:56) [20]
>
> такие студенты тоже полезны.
> наставник может сам от себя протащщиться на фоне-то.

А ещё можно гордиться тем, что у тебя правый прямой по динамометру сильнее, чем у твоей жены (если, конечно, вы не в одном весе, а она при этом мастер спорта по боксу)...


 
Marser_   (2011-09-11 02:59) [239]


> Kerk ©   (07.09.11 11:50) [88]
>
>
> > TUser ©   (07.09.11 11:48) [87]
>
> Это называется доведением до абсурда - демагогический прием.
>

И тем не менее - фейл :-)


> TUser ©   (07.09.11 11:48) [87]
>
> Надо называть все переменные в стиле iCounterOfElements,
>  так всякому сразу понятно, что это целое число. А дочитав
> до конца название, - даже понятно, зачем оно. Такой правильный
> стиль называется обфускацией.
>
> function FindElementInListGivenAsParameter (ListWhichWeSentToFindFunction:
>  TListOfHZFoo; ElementWhichWeLookForInListGivenAsFirstParameterOfThisFunction:
>  THZFoo);
> var iCounterOfElementsInListGivenAsParameter: integer;
> begin
>  for iCounterOfElementsInListGivenAsParameter := 0 to ListWhichWeSentToFindFunction.
> CountOfElementsInList - 1 do
>    if ListWhichWeSentToFindFunction.ElementsOfList[i] =
> ElementWhichWeLookForInListGivenAsFirstParameterOfThisFunction
> then begin
>      result := i;
>      exit;
>      end;
>  result := -1;
> end;

Забыл переименовать, хехе :-)

Кстати, современные статические анализаторы кода на венгерскую нотацию плюются страшно :-)


 
Кто б сомневался ©   (2011-09-11 04:03) [240]


> Грубо говоря, переписать ее так, чтобы она она начала "летать"
> не получится, даже если кто-то сдуру возьмется за такое.
> Грубо говоря, переписать ее так, чтобы она она начала "летать"
> не получится, даже если кто-то сдуру возьмется за такое.
>

Скажем так Идеальная ОС - эта та ОС, которая в служебном плане выполняет только то, что необходимо на данный момент (то что требуется юзеру), а то что не нужно, не выполняет. Для чего в Висте и Win 7 столько запущенных служб?
Почему столько логов пишется в Windows\System32\wdi\ разными системными процессами (и их нельзя отключить), в XP подобного не было, и оправдано ли это для обычного юзера?
Нахрена загружено столько дублирующих драйверов, одни sata-IDe дров - 4 вида от разных компаний, причем если отключить сторонние не меняется ничего при тесте.
Зачем загружаются драйвера, для компонетов, которых у меня нет в системе вообще, к примеру WIFI, RAID, scsi, модем, floppy которого у меня нет.
Одних дров с именем RAID  у меня 8 штук, причем от разных компаний, и это притом что я их не ставил и вообще не использую RAID. При отключении система стала грузится на 7 секунд быстрее.
И наиболее интересное, если большую часть служб отключить  (это не касается анимации и тем), станет визуально заметно повышение производительности.
Втч повышается и скорость копирования.
Почему без файла подкачки игрушки идут без рывков на Win 7 (на примере Deus Ex Human Revolution - это всегда воспроизводиться).

Почему Win XP работает быстрее Win 7

Почему для запуска дефрагментатора, необходимо 2 службы, которые нужны только для дефрагментара? Почему Defraggler работает быстрее, причем с уплотнением файлов и без служб. (И кстати почему они решили сделать такой тупой однокнопочный дефрагментатор, который даже не рисует дисковую картину)
Почему .net такой требовательный к ресурсам?
Кстати насчет багов - при DPI > 120 - иконки в трее искажаються (увеличивается размер) и никак это не исправить. А также после входа в игру (и смене разрешения), таск бар увеличивается по высоте, и не меняет размер на прежний (меньший) - приходится либо Logoff либо заходить и делать apply в персонализации.

Вобщем то еще много таких почему, которые касаются производительности.


 
Кто б сомневался ©   (2011-09-11 04:28) [241]


> Почему без файла подкачки игрушки идут без рывков на Win
> 7 (на примере Deus Ex Human Revolution - это всегда воспроизводиться).
>


НА XP кстати аналогично. Еще в пример можно сталкер и Crysis привести, да и в целом тяжелые по графике шутеры.


 
Кто б сомневался ©   (2011-09-11 05:03) [242]

Вот еще момент забыл сообщить.

У меня мать 2009 года выпуска. Win 7 почему то грузит 3 AGP драйвера (специально пробивал по именам в гуглах), 2 из них от ULI .
Хотя ни AGP нет на матери, а упоминания ULI никогда не было.
Зачем грузятся agp дрова не понятно, видяха PCIE. В XP они не грузились на той же конфигурации.
Я подозреваю что это хваленая автоустановка дров в Win 7. Как и зачем грузить то что вообще не нужно, я вот этого не понимаю. такое чувство что грузят просто стандартный пакет дров на все случаи жизни.
Само собой отключение этих дров ни на что не повлияло, игрушки идут с тем же FPS.
Посмотрите у себя  -  autoruns руссиновича .


 
Кто б сомневался ©   (2011-09-11 05:04) [243]

Win 7 почему то грузит 3 AGP драйвера.
4 оказалось . 2 стандартных, и 2 от ULI.
Сорри за офтоп, это я все к "идеальной ОС" пишу.


 
TUser ©   (2011-09-11 06:04) [244]


> Marser_   (11.09.11 02:59) [239]

Это да. 152 поста потребовалось. чтобы найти ошибку ))


 
Inovet ©   (2011-09-11 11:36) [245]

> [244] TUser ©   (11.09.11 06:04)
> > Marser_   (11.09.11 02:59) [239]
>
> Это да. 152 поста потребовалось. чтобы найти ошибку ))

Да сразу глаз резануло краткостью, но на фоне другух шедевров имёнодания простили.:)


 
Котик Б   (2011-09-11 12:33) [246]


> Кто б сомневался ©

Перечитал несколько постов об идеальной ОС.
Навскидку, по данным параметрам подходят две: QNX v6 и OS/2 v3 :)


 
Кто б сомневался ©   (2011-09-11 15:22) [247]


>  одни sata-IDe дров - 4 вида от разных компаний


Я перечислю все драйвера в системе предназначенные только для винтов. Все они запускаються по дефолту:

1. 5 драйверов от Adaptec для Sata (2 из них Raid) .
2. 1 драйвер для IDe от Acer (каким боком у меня Acer?)
3. 4 от AMD (Storage AHCI и Ide).
4. 1 для IDE  от CMD Tech
5. Еще один StorPort от  Emulex
6. Один от HP для Sata
7. 3 Драйвера от Intel (sata, raid, Ide )
8. 6 драйверов от LSI (2 raid, scsi, sata)
9. Один от IBM - RAID
10. 2 драйвера от QLogic - scsi и storport
11. 2 от SiS - оба raid
12. 2 от VIA (боже они каким боком тут) - Raid и ide

Все эти драйвера были нафиг отключены, кроме nvidia родных.

Вот такая веселая картина "идеальной" Win 7


 
Anatoly Podgoretsky ©   (2011-09-11 15:24) [248]

> Кто б сомневался  (11.09.2011 15:22:07)  [247]

Последствия Plug & Play
А ты что хочешь в те древнение время перемычек?


 
Кто б сомневался ©   (2011-09-11 15:34) [249]


> Последствия Plug & Play
> А ты что хочешь в те древнение время перемычек?


Ниче подобного. В XP куча ненужных дров не грузилась. Причем от разных компаний - такого не было. Я и с XP "список дров помню.
Ставились как правило стандартные дрова от MS.
А вот начиная с висты пошло поехало.

> А ты что хочешь в те древнение время перемычек?
Я хочу чтобы система корректно определяла компанию оборудования, и не ставила все подряд на всякий случай, а ставила только дрова от компании производителя.


 
DVM ©   (2011-09-11 15:44) [250]


> Кто б сомневался ©   (11.09.11 15:34) [249]


> В XP куча ненужных дров не грузилась.

Ну и пользуйся XP. Кто заставляет W7 использовать что ли?

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


 
Кто б сомневался ©   (2011-09-11 15:48) [251]


> Ну и пользуйся XP. Кто заставляет W7 использовать что ли?


Microsoft заставляет.
Direct X 10, 11
Если ты не знаешь сейчас ряд игрушек не идет на XP.
А Direct X > 9  нет на XP.


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

Систему писали одни, а насчет набора драйверов решали другие.


 
Virgo_Style ©   (2011-09-11 15:59) [252]

игрушки пишет MS и заставляет в них играть, я так понимаю


 
Кто б сомневался ©   (2011-09-11 16:48) [253]


> игрушки пишет MS и заставляет в них играть, я так понимаю


Игрушки пишут разные компании, но использование возможностей графики DX11 и 10 возможно  только с Win 7. Ограничение исскуственное, для того чтобы покупали Win 7, платя деньги в кассу MS .
Видяха аппаратно поддерживает Dx11 - но в программной части windows эта  возможность ограничена.


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


DVM судя по этой фразе - ты потребитель. Сейчас множество таких потребителей, живут со слоганом - Так надо. Женились в 20 лет - так надо. Не потому что "Мне так надо", а вообще потому что "так надо".
Дали жратву с химией (а сейчас даже в хлеб кладут) - да ладно, так надо, будем есть, че там. Ведь "они знают что делают, они плохого не дадут".

Вобщем то понять почему она так сделали не сложно - для того, чтобы охватить больший спектр устройств с минимальными затратами, втч и ноутбуки (драйвера Acer этому подтверждение).
Я прекрасно понимаю что они не идиоты. Они зарабатывают деньги.
Они поставили пакет дров, как мы ставим пакет кодеков - на все случаи жизни.
Но если кодеки когда нибудь и понадобятся, то дрова никогда.
Чем был плох механизм PnP в XP в плане выбора конкретных дров?
Они зарабатывают деньги на всем, теперь просто так не поставишь драйвер - нужно платить в контору MS по 400$ в год за подпись драйвера.

Деньги - это первое, а все остальное второе. Ведь оптимизация, подгонка драйвера - это дополнительные затраты.


 
DVM ©   (2011-09-11 17:03) [254]


> DVM судя по этой фразе - ты потребитель. Сейчас множество
> таких потребителей, живут со слоганом - Так надо. Женились
> в 20 лет - так надо. Не потому что "Мне так надо", а вообще
> потому что "так надо".
> Дали жратву с химией (а сейчас даже в хлеб кладут) - да
> ладно, так надо, будем есть, че там. Ведь "они знают что
> делают, они плохого не дадут".

В школу ты ходил? Оно тебе надо было? Правильно, потому что так надо! Ты жалеешь об этом?
Кашу ел в детстве? Спать ложился вовремя? Родителей слушал? Прививки терпел? Тебе оно надо было? Так надо! Сейчас ты живешь поэтому возможно.
Иногда следует довериться коллективному "так надо" вместо постоянных размышлений "а зачем мне это надо?", тем более, что невозможно быть компетентным во всех областях.


 
DVM ©   (2011-09-11 17:14) [255]


> Кто б сомневался ©   (11.09.11 16:48) [253]


> Они зарабатывают деньги на всем, теперь просто так не поставишь
> драйвер - нужно платить в контору MS по 400$ в год за подпись
> драйвера.

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


 
Кто б сомневался ©   (2011-09-11 17:22) [256]


> Кашу ел в детстве? Спать ложился вовремя? Родителей слушал?
>  Прививки терпел?


Сейчас не то время. Одно дело слушать родителей которые 100% желают добра, другое дело нажива и чужие люди.
Сейчас время такое - прививки закупают в Индии, по самым дешевым ценам, низкого качества (опять же, ради навара). А потом получается то что получалось - дети умирают от прививок, как это было в Украине несколько лет назад, помню такой скандал поднялся в СМИ.
Аналогично в тамифлю и свиным гриппом - когда Тимошенка закупила огромные партии по дешевым ценам на 19млн $ гос денег, заранее разрекламировав этот препарат и сделав панику - когда все ходили в масках марлевых. Хотя как оказалось это была эпидемия обычного гриппа, и не в таких размерах как объявлялось.
Опять же не для здоровья нации (точнее это на втором месте), а ради денег.


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

Согласен.
Но знание деталей в этом мире дает тебе дополнительные выгоды.
Т.к. я программист я стараюсь изучить подробно среду, где я работаю каждый день, и буду работать еще не один год.
Мне не сложно это сделать один РАЗ, потратив на это один день, закрутить в образ диск С, а потом восстанавливать настроенную систему в любое время.
Как видишь это дает свои преимущества в виде производительности, и скоростной загрузки Windows.

В плане еды и химии - это также даст свои результаты. Здоровье.
И так в любых сферах.


 
DVM ©   (2011-09-11 17:23) [257]


> Кто б сомневался ©   (11.09.11 16:48) [253]


> DVM судя по этой фразе - ты потребитель.

Как и ты. Как и все. Только я живу и не парюсь на тот счет, что моя Windows 7 могла бы быть на 10% быстрее, если бы в ней не было бы десятка лишних драйверов. Какой в этом смысл? Зачем это задротство? Я понимаю, если бы эти 10% мне не давали нормально работать. Но все же работает! И меня устраивает.

Ты же не доволен, но пользуешься?
"Мыши плакали, кололись, но продолжали есть кактусы"


 
DVM ©   (2011-09-11 17:29) [258]


> Кто б сомневался ©   (11.09.11 17:22) [256]


> Сейчас не то время.

"Времена всегда одинаковые" (с).
Никто ж не отрицает, что собственным критическим взглядом обладать надо. Но в меру. И телевизионные страшилки поменьше надо смотреть про то , что нельзя ничего есть, пить, носить, и вообще жить, а то от этого умирают.
И потом, опять же, не заставляют же никого.


 
Игорь Шевченко ©   (2011-09-11 17:37) [259]


> Я перечислю все драйвера в системе предназначенные только
> для винтов. Все они запускаються по дефолту:


а теперь посмотри, что реально их них загружено (procexp, system, DLLs View)


> Ниче подобного. В XP куча ненужных дров не грузилась. Причем
> от разных компаний - такого не было. Я и с XP "список дров
> помню.
> Ставились как правило стандартные дрова от MS.
> А вот начиная с висты пошло поехало.


А главное - каким образом этот набор драйверов замедляет работу ?


 
alexdn ©   (2011-09-11 17:38) [260]

> DVM ©   (11.09.11 17:29) [258]
> "Времена всегда одинаковые" (с).
Интересное сделал сегодня открытие.. система установлена не так давно, но на ней стоит всё что мне нужно.. delphi7, delphi2010rad с tms, web matrix, офис полный, Microsoft Visual Studio 2010, opera, explorer и куча всякой вспомогательной фигни по мелочи. так вот, всё это вместе занимает 50 гиг всего лишь.. вот сижу и думаю и зачем мне 500 гиговый винт?


 
DVM ©   (2011-09-11 17:44) [261]


> alexdn ©   (11.09.11 17:38) [260]


> вот сижу и думаю и зачем мне 500 гиговый винт?

"640 кб хватит всем!" (c)


 
Inovet ©   (2011-09-11 17:55) [262]

> [260] alexdn ©   (11.09.11 17:38)
> и зачем мне 500 гиговый винт?

Смотрел передачу в ветке про суперкомпьютеры? Видел там объемы накопителей? Вот то-то. А твой 500 гиговый быстрее старого 50 гигового раз в 10, и греется раз в 5 меньше, и шумит меньше, а денег стоит мало, но тут + 50 гиговлму - он бесплатный будет.


 
Кто б сомневался ©   (2011-09-11 18:14) [263]


> А главное - каким образом этот набор драйверов замедляет
> работу ?


Они грузятся (не зря стоят в состоянии bootable) затем выгружаются. О чем говорит время загрузки Windows до и после.


>  так вот, всё это вместе занимает 50 гиг всего лишь.. вот
> сижу и думаю и зачем мне 500 гиговый винт?

Мы не о занимаемых размерах говорим, но :

1. Зачем тебе 500 гиговый винт? Мне он к примеру нужен для хранения фильмов, игр, музыки, торрентов, для обработки видео.
2. Не волнуйся через 2 года это будет занимать в 3 раза больше. Winsxs постарается.
Выделишь для С еще сотню гигов.
А потом и MS подоспеет со своим фиксом роста WinSxS в новой ОС, они же, тебя же убедят в обратном, что рост папки WinSxS плохо, ведь ты ж потребитель - один из представителей MS говорил что механизм SxS будет меняться.


 
Игорь Шевченко ©   (2011-09-11 18:22) [264]

Кто б сомневался ©   (11.09.11 18:14) [263]


> Они грузятся (не зря стоят в состоянии bootable) затем выгружаются.
>  О чем говорит время загрузки Windows до и после.


И каковы потери времени ? Мы же говорим о производительности.


 
alexdn ©   (2011-09-11 18:24) [265]

> Кто б сомневался ©   (11.09.11 18:14) [263]
> Мы не о занимаемых размерах говорим, но :
>
> 1. Зачем тебе 500 гиговый винт? Мне он к примеру нужен для
> хранения фильмов,
сводится к тому что винты это видеохранилища какие то..


 
Kerk ©   (2011-09-11 18:28) [266]

А нафига хранить то, что можно с интернета за 20 минут скачать? Это я про фильмы.


 
Игорь Шевченко ©   (2011-09-11 18:32) [267]

Кто б сомневался ©   (11.09.11 18:14) [263]


> Они грузятся (не зря стоят в состоянии bootable) затем выгружаются.
>  О чем говорит время загрузки Windows до и после.


а почему они в ntbtlog.txt не попадают ? :) Или есть еще какой-то способ посмотреть, что они именно грузятся, а потом выгружаются ?


 
DVM ©   (2011-09-11 18:32) [268]


> alexdn ©   (11.09.11 18:24) [265]


> сводится к тому что винты это видеохранилища какие то..

Медиахранилища ибо не только видео.
Видео - это одна из главнейших причин роста объемов HDD.
Не будь больших HDD не было у нас бы сейчас таких замечательных сервисов как Google maps и т. д.


 
DVM ©   (2011-09-11 18:36) [269]


> Kerk ©   (11.09.11 18:28) [266]


> А нафига хранить то, что можно с интернета за 20 минут скачать?
>  Это я про фильмы.

Ну образ BlueRay гигов на 30 так быстро не скачаешь. Да и пока качаешь - желание отпадет смотреть. Хочется ведь как, открыл список, выбрал нужное - смотришь. Тут видео по запросу лучше подходит чем качать из инета. Потом, не всегда в нужном качестве (с нужным переводом) удается сразу найти.
Определенный смысл в хранении есть.

Да и некоторые свое хранят отснятое. В MJPEG с DV камеры оно весит под 15 гиг/30 минут


 
Кто б сомневался ©   (2011-09-11 18:47) [270]


> И каковы потери времени ? Мы же говорим о производительности.

Загрузил ветку - 14 секунд разницы при загрузке.

Если мы говорим о производительности, то в этом случае я говорил о службах и автозагрузке. О драйверах только то, что много лишнего ,совершенно левого.
Службы влияют, когда загрузил ветку реестра со старыми службами - т.е. теми что были включены изначально. Все стало неповоротливым. Формы, менюшки, переключение задач, как будто с задержкой работают. Визуально сразу заметно.


 
Кто б сомневался ©   (2011-09-11 18:50) [271]


> а почему они в ntbtlog.txt не попадают ? :) Или есть еще
> какой-то способ посмотреть, что они именно грузятся, а потом
> выгружаются ?


Время от появления логотипа до появления Welcomе - драйвера.
Время от появления Welcome до рабочего стола - службы.


 
Inovet ©   (2011-09-11 18:58) [272]

> [263] Кто б сомневался ©   (11.09.11 18:14)
> О чем говорит время загрузки Windows до и после.

И что это время загрузки так волнует многих, 1 минута или 3 какая разница не 30 ведь. Включил комп пока сел за него уже загрузился, а то ещё и чаю надо сделать, так он 10 раз загрузится успеет.


 
Inovet ©   (2011-09-11 19:00) [273]

> [269] DVM ©   (11.09.11 18:36)
> с DV камеры оно весит под 15 гиг/30 минут

13 гиг / 1 час


 
Anatoly Podgoretsky ©   (2011-09-11 19:08) [274]

> Кто б сомневался  (11.09.2011 15:34:09)  [249]

Чего тебя волнует это, ведь оно лежит во свопе и есть не просит. Удлинение
времени загрузки это не та цена.


 
Anatoly Podgoretsky ©   (2011-09-11 19:09) [275]

> Кто б сомневался  (11.09.2011 16:48:13)  [253]

Производителей игрушек не очень волнуют доходы МС


 
Кто б сомневался ©   (2011-09-11 19:15) [276]


> Чего тебя волнует это, ведь оно лежит во свопе и есть не
> просит

У меня своп отключен еще со времен XP .
Это дает более производительную систему, особенно в плане игр.


 
Anatoly Podgoretsky ©   (2011-09-11 19:16) [277]

> Кто б сомневался  (11.09.2011 17:22:16)  [256]

Не смеши насчет закупила по дешевым ценам и на 19 мли, 19 млн вернуло США
как переплаченое.


 
Anatoly Podgoretsky ©   (2011-09-11 19:24) [278]

> alexdn  (11.09.2011 17:38:20)  [260]

Может из-за скорости?


 
Anatoly Podgoretsky ©   (2011-09-11 19:26) [279]

> Кто б сомневался  (11.09.2011 18:14:23)  [263]

Рост плохл, а то что дает хорошо, правда за счет некоторого замедления
загрузки.


 
Anatoly Podgoretsky ©   (2011-09-11 19:29) [280]

> Kerk  (11.09.2011 18:28:26)  [266]

А почему так долго


 
Anatoly Podgoretsky ©   (2011-09-11 19:34) [281]

> Кто б сомневался  (11.09.2011 19:15:36)  [276]

Вот, вот и еще жалуемся


 
Игорь Шевченко ©   (2011-09-11 19:45) [282]


> Это дает более производительную систему


Почему ?


 
Anatoly Podgoretsky ©   (2011-09-11 19:55) [283]

> Игорь Шевченко  (11.09.2011 19:45:42)  [282]

Это дает жалобы на размер и прочее, а так бы лежало себе в свопе.


 
Кто б сомневался ©   (2011-09-11 20:01) [284]


> Игорь Шевченко ©   (11.09.11 19:45) [282]
>
>
> > Это дает более производительную систему
>
>
> Почему ?

Я и сам не могу объяснить. Просто в играх рывки пропадают.
Ну и все остальные программы начинают быстрее грузится и работать.
Попробуй увидишь.
У меня 4gb памяти.


 
Игорь Шевченко ©   (2011-09-11 21:52) [285]

Кто б сомневался ©   (11.09.11 20:01) [284]

Я смотрю Process Explorer-ом, счетчик записей в страничный файл - 0


 
Кто б сомневался ©   (2011-09-11 21:53) [286]


> Игорь Шевченко ©   (11.09.11 21:52) [285]


А во время игры в какой нибудь Crysis или Сталкер?


 
Jeer ©   (2011-09-11 22:49) [287]

А мне, например, понравился PowerShell, особенно его развитие в srv w2k8 r2 windows.serverbackup оснастке.


 
Kerk ©   (2011-09-11 22:51) [288]

Скорее странно, что они так долго не делали этот PowerShell.


 
Игорь Шевченко ©   (2011-09-11 22:53) [289]

Кто б сомневался ©   (11.09.11 21:53) [286]

"У вас может сложиться впечатление, что отсутствие файла подкачки может благотворно сказаться на производительности, однако в общем случае то, что у Windows в распоряжении будет файл подкачки, означает, что ОС сможет размещать некоторые записи (которые используются нечасто и не сохранены на диск) в файл подкачки, освобождая тем самым память для более полезных задач (процессы и кэши файлов). Так что даже если в некоторых случаях отсутствие файла подкачки может увеличить производительность, в общем случае его наличие означает, что в распоряжении системы будет больше доступной памяти "

http://blogs.technet.com/b/mark_russinovich/archive/2008/11/17/3182311.aspx


 
Jeer ©   (2011-09-11 22:54) [290]

Ну почему - логически и функционально он был подготовлен давно, wsh - тому пример. Объявлен был еще 7 лет назад, можно было использовать уже около 5 лет, как составная часть (v.2.0) системы - идет с w7 и w2k8 r2.


 
Eraser ©   (2011-09-11 23:08) [291]

> [286] Кто б сомневался ©   (11.09.11 21:53)

что у тебя за компьютер раз сталкер и крайзис тормозит? срочно в магазин за апгрейдом.


 
Кто б сомневался ©   (2011-09-12 04:29) [292]


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


Имхо лучше поотключать ненужный хлам.


> что у тебя за компьютер раз сталкер и крайзис тормозит?
> срочно в магазин за апгрейдом.

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


 
Кто б сомневался ©   (2011-09-12 04:31) [293]


> > Так что даже если в некоторых случаях отсутствие файла
> подкачки
> > может увеличить производительность, в общем случае его
> наличие
> > означает, что в распоряжении системы будет больше доступной
>
> > памяти "
>
>
> Имхо лучше поотключать ненужный хлам.


Кстати я без свопа работаю уже лет 6-7. Игрушек переиграл немеряно, а ведь они больше всего и жрут памяти. У меня даже на ноуте с XP на 2 гб он отключен - и также нет проблем. - видимо еще и потому, что запущено по минимуму все.


 
NkzAlex ©   (2011-09-12 07:21) [294]

>Кстати я без свопа работаю уже лет 6-7. Игрушек переиграл немеряно

:-)


 
Труп Васи Доброго ©   (2011-09-14 12:39) [295]

Взрослые дядьки никак не хотят понять пылкого юношу. Они говорят что лишняя минута при загрузке и 10% "прирост" производительности это фигня, по сравнению с мировой революцией, а если тормозит комп, то купи новый. Юноша же пытается убедить дядей, что надо потратить несколько дней своей драгоценной жизни ради этой оптимизации, чтобы потом можно было с комфортом, без "дёрганий" и дальше про.ирать свою жизнь перед экраном за очередной игрушкой.
Комрад, плюнь на игрушки, пора уже вырасти из детского возраста. Лучше выйди на улицу, хотя бы посмотри на мир, на девушек, на природу, попробуй реально пожить, а не быть тем самым потребителем игрушек. Не стоят они того.


 
Inovet ©   (2011-09-14 12:55) [296]

> [295] Труп Васи Доброго ©   (14.09.11 12:39)

Вася вновь среди живых!:)


 
Кто б сомневался ©   (2011-09-14 14:03) [297]


> без "дёрганий" и дальше про.ирать свою жизнь перед экраном
> за очередной игрушкой.
> Комрад, плюнь на игрушки, пора уже вырасти из детского возраста.
>


Дяденька, юноше уже 27 лет. У юноши кроме игр свой software бизнес, приносящий хоть небольшие, но деньги. Также юноша занимается туризмом с группой, лазит с камерой по заброшенным заводам, гаражам, и другим интересным объектам.  
Я не смотрю фильмы, я не смотрю TV, как делают все "остальные дяденьки" (ведь никто не пашет без отдыха, нет таких людей), я использую другую сферу развлечений - игры, причем те игры, которые занимают меньше всего времени - это шутеры. Поэтому если я говорю что "Игрушек переиграл немеряно за 7 лет" - это совсем не значит что я только и делаю что играю.
Аналогично дяденьки могут сказать - за 7 лет я пересмотрел немеряно домов 2, и других фильмов - ведь вы за 7 лет также немеряно всего пересмотрели, верно?
Или вы как уперлись лбом в монитор в 2004 году, так до сих по и не вставали со стула?


 
Кто б сомневался ©   (2011-09-14 14:15) [298]

Забыл еще сказать что "юноша" читает немеряно с электронной книги, в среднем 3 часа в день, и прочитал уже тысячи книг в отличии от некоторых "дяденек" (всю русскую классику точно), с тех пор как три 3 года назад у него появилось это гениальное изобретение.
А девушек юноша пока не хочет. Т.к. девушки это хвост, который будет мешать на данном этапе. Как я уже писал выше, "у тебя должна быть девушка" это стереотип, надоевший до тошноты.
Девушка будет мешать, когда юноша в очередной раз поедет в Узбекистан на 2 недели к знакомому или с Киева в Сибирь зимой чтобы отпраздновать Новый год в поезде (специально) - девушки такое не любят.


 
Труп Васи Доброго ©   (2011-09-14 14:35) [299]


> на 2 недели к знакомому

Ну да, если к знакомому, то понятно почему
> девушек юноша пока не хочет

Так бы сразу и сказал :(
А если
> У юноши кроме игр свой software бизнес
, то понятно почему лавры Дяди Билла не дают покоя. Ты то вон какие идеальные программы пишешь, а всего лишь

> хоть небольшие, но деньги
, а у этих гадов "глючная" винда и вон сколько миллиардов баксов. Несправедливо, однако. Ну так может ты ЕМУ напишешь послание с пожеланиями и предложениями, гляди и тебя возьмут в команду.


 
Омлет ©   (2011-09-14 14:46) [300]

Удалено модератором


 
Кто б сомневался ©   (2011-09-14 15:09) [301]

Удалено модератором


 
Труп Васи Доброго ©   (2011-09-14 15:30) [302]

Да, да вот это и есть стереотип, показать что "я не такой как все", только согласно "стереотипной" медицине это в твоём возрасте уже давно должно пройти, ты же задержался в духовном развитии где то на краю детства/юности вот и играешься до сих пор. Ничего, повзрослеешь (надеюсь) сам будешь с улыбкой вспоминать свои "протестные" убеждения.
Так, для сведения, у меня машина ВАЗ 2111, 2000 года. Мне её за глаза хватает, ибо для меня машина это ТОЛЬКО средство передвижения и не более. И телефон у меня SIEMENS S65 с треснутым корпусом, но и его мне "по самые гланды" ибо он замечательно "держит" сигнал там, где "крутые" смартфоны ложатся спать, и у него великолепный экран, который прекрасно ВИДНО при любом освещении, даже если на него светит июльское солнце. Так что я не подхожу под твоего стереотипного персонажа, живущего "как надо". И на WIN 7 я перешёл только потому, что НА МОЁМ компе семёрка работает очевидно быстрее, чем работала ХР и без всякого мозгоопства с настройками и реестроизнасилованием.
З. Ы. В игрушки я не играюсь, не интересно.


 
Кто б сомневался ©   (2011-09-14 15:49) [303]


> Ничего, повзрослеешь (надеюсь) сам будешь с улыбкой вспоминать
> свои "протестные" убеждения.


Протестного тут ничего нет. Я просто подчеркиваю факты.
Я также стереотипный как и все остальные. Любой человек мыслит шаблонами - т.к. так быстрее и проще.


> И телефон у меня SIEMENS S65

Кстати я вообще не пользуюсь мобильной связью, у меня нет личного номера (причем никогда и не было). Только иногда беру с собой общий семейный мобильный, когда никак без него нельзя. Лично мне без телефона комфортнее - т.к. это лишний раздражитель, который постоянно отвлекает.


> З. Ы. В игрушки я не играюсь, не интересно.

Это потому что ты и не играл интересного. Игрушки интереснее фильмов, т.к. по факту это фильм, в котором ты сам и учавствуешь.
Скорее всего игрушки ты не играешь, т.к. стандартно для своего возраста думаешь что в игрушки для детей (также как и мульты), ведь они и называются игрушками.
В свою очередь из за этого не обновляешь компьютер, т.к. нет смысла.
Для начала поиграй первый Bioshock с русской озвучкой.
Уже лет 15 игрушки делают конкретно для взрослых. Тоже и мультфильмы. Те же грифины, футурама, симпсоны, губка боб ...


> И на WIN 7 я перешёл только потому, что НА МОЁМ компе семёрка
> работает очевидно быстрее, чем работала ХР и без всякого
> мозгоопства с настройками и реестроизнасилованием.

Конечно если XP проработала год-2, и на ней автозапускается куча установленных программ, а Win 7 свежая.


 
Inovet ©   (2011-09-14 15:55) [304]

> [303] Кто б сомневался ©   (14.09.11 15:49)
> Те же грифины, футурама, симпсоны, губка боб

Тупость.


 
Кто б сомневался ©   (2011-09-14 15:56) [305]


> Это потому что ты и не играл интересного.


Отталкиваемся от обратного, хочешь сказать что фильмы интереснее? Я так не думаю, т.к. как раз по этой причине перестал их смотреть - 95% современных фильмов предсказуемые, особенно западные. А российские современные - занудные. Еденицы интересных.
А если ты считаешь что игры не для детей, тогда это сила привычки. Для кого-то привычнее смотреть фильм, чем играть.


 
Кто б сомневался ©   (2011-09-14 16:04) [306]

Забыл добавить Южный Парк (South park).


 
И. Павел ©   (2011-09-14 16:13) [307]

> [306] Кто б сомневался ©   (14.09.11 16:04)
> Забыл добавить Южный Парк (South park).

Недавно смотрел. Очень понравилось :)

Современные игрушки действительно похожи не на детские игры а на произведения искусства с многомиллионным бюджетом. После школы как-то почти не играл, а вот как сменил компьютер - стал иногда смотреть. Слишком увлекаться не стоит, но немного развлечься, по моему, не помешает. Все лучше голливудских поделок. Современные романтические комедии смотреть ради них самих и не в кинотеатре, по моему просто невозможно. Они сделаны, по моему, именно для смотрения одним глазом в кинотеатре.


 
Кто б сомневался ©   (2011-09-14 16:13) [308]


> Inovet ©   (14.09.11 15:55) [304]
>
> > [303] Кто б сомневался ©   (14.09.11 15:49)
> > Те же грифины, футурама, симпсоны, губка боб
>
> Тупость.

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


 
Inovet ©   (2011-09-14 16:21) [309]

> [308] Кто б сомневался ©   (14.09.11 16:13)
> Ты лучше скажи - фильм про приключения...

А почему выбор фильмы против игрушки? Не озадачмваюсь этими дилеманми.


 
Кто б сомневался ©   (2011-09-14 16:25) [310]


> А почему выбор фильмы против игрушки?

Против мультов, а не игрушек.


 
Kerk ©   (2011-09-14 17:07) [311]


> Кто б сомневался ©

Я с тобой согласен, if anybody cares :)


 
Kerk ©   (2011-09-14 17:11) [312]

Что-то мне уже кажется, что ко времени, когда я обновлюсь до самой свежей версии Delphi, мне придется язык и RTL заново учить. Быстро очень развивается все в последние годы.


 
Kerk ©   (2011-09-14 17:11) [313]


> Kerk ©   (14.09.11 17:11) [312]

Глюк, я в другую ветку отправлял


 
Игорь Шевченко ©   (2011-09-14 17:59) [314]


> это все по сравнению с веселой и интересной футурамой, и
> саркастическим бьющим в лоб южным парком.


ну и вкусы у вас



Страницы: 1 2 3 4 5 6 7 8 вся ветка

Форум: "Прочее";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.43 MB
Время: 0.013 c
2-1316988773
Krema
2011-09-26 02:12
2012.01.01
Иероглифы в справке


2-1317089272
я
2011-09-27 06:07
2012.01.01
Имитация нажатия клавиш


4-1253616407
Xmen
2009-09-22 14:46
2012.01.01
ShellListView


15-1315081792
Юрий
2011-09-04 00:29
2012.01.01
С днем рождения ! 4 сентября 2011 воскресенье


2-1316800223
HF-Trade
2011-09-23 21:50
2012.01.01
Как узнать, позицию горизонтальной полосы прокрутки TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский