-
Про стили написания кода: думал придираетесь Одному то все понятно было, а тут вот, когда толпа.. Вот такое встретилось: Summa:=0; SummaNds:=0; chislo2:=16; вот нахрен оно равно 16? Что это такое? Смотрим: chislo,chislo2,n:Integer; никаких коментов нигде, нихрена..
-
может день месяца? :)
-
16=4^2=2^4 :)
-
ставка НДС, это же очевидно :) поменяй на 18 :)
-
Замени на const ;)
-
16d = 10h = 10000b. Хм. Там где-нить shl/shr/and/or есть? А вообще интересное программное решение :) Можно посмотреть код?
-
Ведущего программера с канделябром не было :D
-
может как раз их ведущий и написал :)
-
> chislo2:=16;
жесть.
-
> [6] Romkin © (14.05.08 18:40)
Как показала практика ведущими программистами вполне могут работать ребята не далеко ушедшие от простого батонокидательства.
-
> @!!ex © (14.05.08 18:43) [9]
Но не очень долго. Либо подрастают, либо возвращаются в кодеры.
-
> Romkin © (14.05.08 18:40) [6] > > Ведущего программера с канделябром не было :D
Вот часто и ведущие так пишут, когда "думать некогда, тут прыгать надо". И сдать проект нужно было ещё месяц назад...
-
> Поп Гапон (14.05.08 19:07) [11]
Те, кто уже созрел для ведущего, хороший код и плохой код пишут за одинаковое время. Точнее, хороший они пишут не задумываясь, на автопилоте, а плохой не пишут вообще. Просто не умеют его писать.
Зато на отладку хорошего кода времени уходит меньше (по сравнению с плохим). В итоге получается, что хороший код экономит время, а вовсе не расходует лишнее. Проверено много-много раз.
-
> Юрий Зотов © (14.05.08 19:21) [12] > > > Поп Гапон (14.05.08 19:07) [11] > > Те, кто уже созрел для ведущего, хороший код и плохой код > пишут за одинаковое время. Точнее, хороший они пишут не > задумываясь, на автопилоте, а плохой не пишут вообще. Просто > не умеют его писать.
Часто бывает уже готовый "студенческий код" и нужно его заставить как-то работать(не переделывая). Глючит после этого оно по прежнему, но уже даже почти работает(можно впарить заказчику).
А студент стоит в три раза дешевле ведущего. А ведущий в режиме подтирания соплей из кода может прибрать за пятью студентами.
Хоть продукт будет говно, но он будет дешевле чем у конкурентов. Пример - Vista и MacOS.
-
> Поп Гапон (14.05.08 19:33) [13]
Увы... знакомая картина... :-(
Причесать код за пятью все же сложно (еще ведь и своя работа есть, ее же никто не отменяет). За тремя - реально (более-менее). Причем нередко это причесывание сводится к полной переписке довольно больших кусков (вплоть до изменения иерархиии и функционала классов).
В итоге получается, что код (который остался все же не совсем хорошим, а поэтому еще неизвестно, как будет работать) обошелся в зарплату трех студентов и частично ведущего. И скорее всего, потребует доработки, а это дополнительные затраты.
Простая арифметика показывает, что если бы на зарплату этих трех студентов взяли второго ведущего (который и написал бы весь код, не отвлекая первого), то код был бы написан быстрее, лучше по качеству и обошелся в итоге заметно дешевле.
Жаль, что лишь редкие манагеры это понимают. "Скупой платит дважды" или "Мы недостаточно богаты, чтобы покупать дешевые вещи" - золотые поговорки. Они ведь и к найму работников тоже относятся.
Вспоминается стих Маршака про семь шапок из овцы. "Больше" не всегда значит "лучше".
-
> Юрий Зотов © (14.05.08 19:49) [14] > > > Поп Гапон (14.05.08 19:33) [13] > > Увы... знакомая картина... > :-( > > Жаль, что лишь редкие манагеры это понимают. "Скупой платит > дважды" или "Мы недостаточно богаты, чтобы покупать дешевые > вещи" - золотые поговорки. Они ведь и к найму работников > тоже относятся.
Здесь вы не правы. Студент стоит допустим 1 единицу денег, ведущий 3 единицы.
Заказчику при определённых ухищрениях можно представить студента как девелопера ~ ведущему.
Студент может писать код со скоростью той же что и ведущий(пусть и будет этот код особо глюкавым). Если ведущий только "подтирает"(работа у него в фиксе багов) то он может справится за 5 студентами.
Итого стоимость хорошего продукта 3*6 = 18 денег.
Стоимость плохого 1*5 + 3 = 8 денег.(тоесть почти в два раза дешевле).
И пусть это будет калл, но "ано палюбому дешевле чем у конкурентов".
Ну ещё сюда нужно приплюсовать зарплату впаривателя(менеджера продажника) в две деньги. Итого плохой продукт стоит 10 денег.
Ну а переделки за дополнительные деньги.
А вот для заказчиков пока особо долго доходит, что совокупная стоимость владения плохим продуктом обойдётся в три раза дороже, хоть заплатил он с самого начала дешевле.
В общем это бизнес, цель которого, не посеять хорошее, доброе и вечное, а найти лоха и обуть его.
-
> никаких коментов нигде, нихрена..
а ниже по коду?
-
Поп, ты бы все же похмелился бы, а ?)
-
> вот нахрен оно равно 16? Что это такое? Смотрим: chislo, > chislo2,n:Integer;
Какая разница, что это? Главное, чтобы работало!
Это что, самое плохое, что удалось откапать? :)
-
>[18] Loginov Dmitry © (2008-05-14 22:49:00) откАпать? чего капаем? накапайте мне 1024 капли.
--- Understanding is not required. Only obedience.
-
> [9] @!!ex © (14.05.08 18:43)
ведущий не ведущий, а РП почти все не в зуб ногой. не с проста в России нету адобе, корелов и т.п. микрософтов.
-
> ketmar © (14.05.08 22:53) [19] > > >[18] Loginov Dmitry © (2008-05-14 22:49:00) > откАпать? чего капаем? накапайте мне 1024 капли. >
Сразу видно отличие "программиста" от персонажа "художественного" романа.
-
> не с проста в России нету адобе, корелов и т.п. микрософтов.
есть Компасы, 1Cы...
-
> Поп Гапон (14.05.08 20:21) [15] одна поправочка - продажник нужен всегда - хороший это продукт или плохой... просто навыки у него должны быть в разных случаях слегка разные
и в том, что этот момент многие упускают, и есть большая беда "хороших программеров", которые сами пытаются продать свой продукт
-
>[23] wicked © (2008-05-15 01:31:00) «впариватель» это называется.
--- Understanding is not required. Only obedience.
-
> ketmar © (15.05.08 02:09) [24] как хошь называй, хоть трутнем он должен быть в команде, если команда хочет самостоятельно успешно что-то продать
-
>Поп Гапон (14.05.08 20:21) [15]
и в результате мы имеем такое понятие как "пилка деньгов"... ни кого не интересует будущее продукта, его сопровождение и работа как таковая... тошно, от этого уже уходят...
-
>[25] wicked © (2008-05-15 02:11:00) если команда хочет самостоятельно, то она впаривателей на порог не пустит. со впаривателем — это как раз когда продавать не хочет, только писать.
--- Understanding is not required. Only obedience.
-
Я бы удивился если бы было записано chislo16:=16;
-
нашел что это было chislo2:=16; // vlad 14.05.2008 это оказывается место в шаблоне Excel, куда выводить. итого: Const NumStrFromTOP=16; наверное, так будет
PS комментария ниодного вообще на весь модуль
.FieldByName('Izdelie').AsString; .FieldByName('SAP').Asstring; .FieldByName('Brand').AsString; .FieldByName('Specification').AsString; .FieldByName('PcCount').AsString; - такое хоть как-то понятно
-
Удалено модератором Примечание: Чини прокси
-
Удалено модератором
-
-
Удалено модератором Примечание: Выражения выбираем
-
> KSergey © (15.05.08 10:20) [33] > Удалено модератором > Примечание: Выражения выбираем
А вот это зря. Я не знаю ка ксказать это иначе. Извините. Тем более, что никого лично здесь это не касалось. Просто типичные термины, я других не знаю. Еще раз извините.
-
> Студент может писать код со скоростью той же что и ведущий
Угу... пишу со скоростью миллион строк в час... такая фигня получается. Нафих-нафих. Плавали - знаем.
-
одного грамотного именования переменных/методов/классов/таблиц/полей достаточно чтобы разобраться в основах чужого алгоритма, даже без комментариев. Себя в свое время к этому приучил, поэтому в свои старые исходники вникаю быстро )
-
Ну обычно когда не знаешь что такое chislo2 проще поискать поиском в файлах проекта и посмотреть, зачем же оно действительно нужно. Я не думаю что это такая проблема. Гораздо хуже когда переменная называется, "правильно" - NumStrFromTOP, но предназначена она совсем для другого ) так что в данном коде думаю ничего страшного нет, меня больше смущает отсутствие пробелов между переменной и ее значением, это нечитабельно!
-
SPeller (15.05.08 11:08) [36]
> одного грамотного именования переменных/методов/классов/таблиц/полей > достаточно чтобы разобраться в основах чужого алгоритма, > даже без комментариев
недостаточно
-
> одного грамотного именования переменных/методов/классов/таблиц/полей > достаточно чтобы разобраться в основах чужого алгоритма, > даже без комментариев
чтобы разобраться в основах чужого алгоритма - даже комментариев не достаточно )))
-
Глубокое заблуждение, что начинающий пишет с той же скоростью, что и опытный. Сколько раз уже измеряли, скорость иногда на порядок отличается. А если работа ведущего убирать мусор за подчиненными - то и ведущего быстро не станет, и студенты ничему не научатся. Есть, конечно, такие фирмы, с жуткой текучкой кадров, по этому признаку их и распознать можно. Но сейчас они уходят: написать-то продукт таким стилем можно, а вот сопровождение сделает его золотым.
-
Romkin © (15.05.08 11:34) [40]
> Глубокое заблуждение, что начинающий пишет с той же скоростью, > что и опытный.
Начинающий даже быстрее может писать. Вот только исправлять за ним потом дольше
-
> Поп Гапон (14.05.08 20:21) [15]
Принимаем, что зарплата ведущего равна 3-м студенческим. Получаем вот что.
1. Вариант: 3 студента плюс ведущий. 3*1 - зарплата 3 студентов за месяц; 0.5*3 - зарплата ведущего за консультации студентов и правку их кода в том же месяце; 0.5*3 - зарплата ведущего за следующий месяц, в котором он писал тот код, который недописал в предыдущем месяце из-за того, что потратил время на студентов и правку их кода.
Итого на суммарный код потрачено 1.5 месяца, 6 зарплат, отчисления конторы за 4-х человек, стоимость аренды площади 4-х рабочих мест и амортизация 4-х компов. Плюс время и зарплата, потраченные потом на ловлю оставшихся студенческих багов. Плюс недовольство заказчика (программа глючит, срок ее сдачи затягивается). Из-за этого - возможная потеря престижа конторы (а оно в немалые деньги обойтись может).
2. Вариант: два ведущих.
Итого на суммарный код потрачено 1 месяц, 6 зарплат, отчисления конторы за 2-х человек, стоимость аренды площади 2-х рабочих мест и амортизация 2-х компов.
Вот такая арифметика. Два ведущих по срокам - быстрее, по деньгам - дешевле, по качеству - лучше.
-
Впрочем, не так страшен код с непонятными названиями и без комментариев, как код с большой связностью. Это когда покрутил что-то в одном месте - и гадость лезет в куче других, совершенно неожиданно :) Вещи эти в какой-то мере взаимосвязаны: если код написан как курица лапой, то скорее всего и вся программа будет единым куском в стиле "не трогать!!!!!!!". Но иногда бывают программы "переходного периода", комментарии есть - а трогать нельзя. Так вот, о чем я: программу такую часто легче переписать, чем привести в нормальный вид. К сожалению, такой опыт уже был :(
-
А откуда возьмутся ведущие, если везде кроме трех студентов посадить одного опытного?
-
Проблема программистов - "художников" решается достаточно просто. Во-первых, следует не полениться и написать "Стандарты" - на программный код, на код сервера, на оформление документации, на требования к интерфейсу и т.д. Во-вторых, каждому вновь пришедшему дать эти все стандарты и приказать иметь их на столе в печатном формате. В-третьих, с первых же проектов контролировать соблюдение этих стандартов.
За 2 года, что я работаю с молодежью, у меня был только один момент, когда молодому надо было не просто объяснить, но и слегка придавить "авторитетом", чтобы соблюдал.
Сейчас у нас несколько десятков проектов, написанных разными программистами. Любой из них легко въезжает" в любой проект. Правда, необходимо заметить, что очень много реализовано в библиотечных юнитах "системного" назначения.
-
> Впрочем, не так страшен код с непонятными названиями и без > комментариев, как код с большой связностью. Это когда покрутил > что-то в одном месте - и гадость лезет в куче других, совершенно > неожиданно :) > Вещи эти в какой-то мере взаимосвязаны: если код написан > как курица лапой, то скорее всего и вся программа будет > единым куском в стиле "не трогать!!!!!!!". Но иногда бывают > программы "переходного периода", комментарии есть - а трогать > нельзя.
Все это от лукавого! Сначала пишут программы, а потом пытаются менять архитектуру ) Вместо того чтобы переписать большую часть, начинают мудрить и делать заплатки - лишь бы работало. В итоге абсолютно не понятная и порой даже не логичная структура проекта. А дело то в том, что на этапе проектирования надо было учесть все возможное и даже не возможное, что может происходить с программой или базой, какие могут потребоваться доработки и как сделать так чтобы в дальнейшем можно было бы без труда внести изменения или доработать проект.
-
> Во-вторых, каждому вновь пришедшему дать эти все стандарты > и приказать иметь их на столе в печатном формате.
Необязательно. Когда я работал в известной компании, у нас все стандарты лежали на сервере в общем доступе.
-
Практика показывает, что печатный материал лучше "инсталлится" в мозги, чем экранный. К тому же можно карандашом пометить для Пети одни разделы, а для Тани - другие для первоочередного "усвояевания" ;)
-
> Практика показывает, что печатный материал лучше "инсталлится" > в мозги, чем экранный.
Это от типа мозга, зависит. Современный универсальный мозг, способен воспринимать информацию на разных носителях )
-
> MsGuns © (15.05.08 12:05) [45] > но и слегка придавить "авторитетом", чтобы соблюдал.
А почему авторитетом, а не з/п? Или авторитетом - более тонкое искуство при тех же (или лучших?) результатах, а з/п - это грубо?
-
> Современный универсальный мозг, способен воспринимать информацию > на разных носителях
Главное, чтобы он ее потом не вываливал на разные носители :)
MsGuns прав, бумажный вариант всяко лучше.
-
> MsGuns прав, бумажный вариант всяко лучше.
ну с кпк книжки читать тоже вполне удобно )
-
> Все это от лукавого! Сначала пишут программы, а потом пытаются > менять архитектуру ) Вместо того чтобы переписать большую > часть, начинают мудрить и делать заплатки - лишь бы работало.
Да не обязательно. Реальная история: надо было написать небольшое простое приложение, а точнее, просто переписать то, что было под ДОС на win, ну и немного расширить возможности. Наняли "вчера студент", я ему примерную структуру БД нарисовал, фигня, десяток таблиц всего там. К сожалению, я был загружен, и не проконтролировал код. Мдя. Получился уродец, но кое-как работающий :) Через пару месяцев посадил опытного программиста чуть доделать (не менять), убрать иногда появляющийся AV, ну и пару кнопок приделать. Мелочи. Через месяц с ним случилась истерика :)
-
Код был примерно такой (выдрал отрывок, весь метод не поместится точно!) Panel1.Height := h div 3;
dbreQuestionText.Width := w - h div 3;
AnswerCount := 0;
if ((Info.AnswerPicture1.Height <> 0) or (Info.AnswerText1DataSource.DataSet.FieldByName(Info.AnswerText1DataField).AsStr ing <> '')) then
AnswerCount := AnswerCount + 1;
if ((Info.AnswerPicture2.Height <> 0) or (Info.AnswerText2DataSource.DataSet.FieldByName(Info.AnswerText2DataField).AsStr ing <> '')) then
AnswerCount := AnswerCount + 1;
if ((Info.AnswerPicture3.Height <> 0) or (Info.AnswerText3DataSource.DataSet.FieldByName(Info.AnswerText3DataField).AsStr ing <> '')) then
AnswerCount := AnswerCount + 1;
if ((Info.AnswerPicture4.Height <> 0) or (Info.AnswerText4DataSource.DataSet.FieldByName(Info.AnswerText4DataField).AsStr ing <> '')) then
AnswerCount := AnswerCount + 1;
if (AnswerCount = 0) then
AnswerCount := 1;
Panel4.Width := w div AnswerCount;
Panel5.Width := w div AnswerCount;
Panel6.Width := w div AnswerCount;
Panel7.Width := w div AnswerCount;
if (Info.QuestionDataSource.DataSet.FieldByName(Info.QuestionDataField).AsString = '') then
dbreQuestionText.Visible := False;
if (Info.QuestionPicture.Height = 0) then
begin
Panel2.Visible := False;
dbreQuestionText.Align := alClient;
Panel1.Height := h div 4;
end;
temp := h - (stQuestion.Height + Panel1.Height + stAnswers.Height);
if (Info.AnswerText1DataSource.DataSet.FieldByName(Info.AnswerText1DataField).AsStr ing <> '') then
if (Info.AnswerPicture1.Height = 0) then
begin
dbreAnswer1.Height := temp - bbAnswer1.Height;
iAnswer1.Visible := False;
end
else
begin
dbreAnswer1.Height := temp - min(w div AnswerCount, temp div 2) - bbAnswer1.Height;
iAnswer1.Height := min(w div AnswerCount, temp div 2);
end
else
if (Info.AnswerPicture1.Height = 0) then
Panel4.Visible := False
else
begin
dbreAnswer1.Visible := False;
iAnswer1.Height := temp - bbAnswer1.Height;
end;
Так практически везде. И это еще цветочки :))) Стоило чуть поменять где-либо - все сыпалось непредсказуемым образом... Типа один метод что-то делает с таблицей, за ним запускается другой (вообще из другого модуля), который рассчитывает, что первый метод точно все сделал и спозиционировал таблицу именно так, как надо. Ну и тд..
-
Ну не самый страшный код ) Но как минимум студента заставить именовать грамотно объекты - надо было!
-
Romkin © (15.05.08 12:34) [54]
Ночной кошмар программиста
-
> Ночной кошмар программиста
ну-ну проснувшись от такого кошмара, рекомендуется пойти на кухню выпить стакан водки с перцем, покурить, вздохнуть, залезть под одеяло и долго думать об троекратном росте свой заработной платы, до тех пор пока не уснешь!
-
Style © (15.05.08 12:42) [55] Ночной кошмар программиста Ц графика - нистрашно... Вот када такая "программа" на непрерывном производстве железкой рулит автоматически, а эта железка высотой в 3 этажа - вот это страшно!
-
> TUser © (15.05.08 12:04) [44]
> А откуда возьмутся ведущие, если везде кроме трех студентов > посадить одного опытного?
Проблема подготовки кадров - отдельный вопрос. Готовить их нужно, в том числе и на реальных проектах - но при этом не нужно говорить что проект стал дешевле.
Конечно же, он стал дороже - ровно на стоимость ресурсов, потраченных на обучение. И на соответствующее время длительнее.
-
В [42] небольшая погрешность в расчетах по первому варианту. Отчисления конторы за 4-х человек, стоимость аренды площади 4-х рабочих мест и амортизация 4-х компов - все это нужно еще и умножить на 1.5, потому что на суммарный код было потрачено 1.5 месяца, а не 1.
Итого разница между двумя вариантами становится не просто немалой, а ОЧЕНЬ немалой.
-
> а эта железка высотой в 3 этажа - вот это страшно!
Судный День грядет! :)
-
Юрий Зотов © (15.05.08 13:55) [60] ОЧЕНЬ немалой кроме амортизации компов еще совт нужен... скока лиц на дельфи стоит? :)
-
> Slym © (15.05.08 13:59) [62]
Точно! Разница увеличилась еще на 2 лицензии (притом, не только на Delphi, а и на систему, да и вообще на ВЕСЬ используемый софт).
-
> Ночной кошмар программиста
Эх, не видели вы чего тут народ творит на С++... :( Причём творил дядька грамотный, головастый, который отреверсинджинирил кучу чужого, вскрыл разные структуры данных, интерфейсы и протоколы. Это талант. Но какой он писал код, мама родная!
-
Alkid © (15.05.08 14:22) [64]
Чего я только не видел на своем веку :) "Кривое не может сделаться прямым". (Еккл.)
-
> Эх, не видели вы чего тут народ творит на С++... :(
Есть такая должность программист-обфускатор! )))))
-
>KSergey © (15.05.08 12:23) [50]
>А почему авторитетом, а не з/п? Или авторитетом - более тонкое искуство при тех же >(или лучших?) результатах, а з/п - это грубо?
Я не сторонник подобные вопросы, связанные с обучением молодых специалистов, регулировать денежкой. Надо дать человеку понять, что деньги - это стимул или розги, не более. Но никак не средство форсирования обучения или поддержки дисциплины. Если чел не хочет или не может (такое тоже бывает), то бесполезно его "воспитывать" рублем. Скорее всего, ошибся сам руководитель, который неверно выбрал для него тему или даже предметную область. Либо человек просто не на своем месте,- в этом случае с ним проще сразу расстаться, хотя я лично считаю такие случаи (благо у меня их было совсем немного) собственными промахами.
А вообще полностью согласен с Юрием, утверждающим, что кадры - это отдельная песня. Я бы даже назвал это не песней, а целой "фонотекой" ;)
-
> Игорь Шевченко © (15.05.08 12:58) [56] > > Romkin © (15.05.08 12:34) [54] > > Ночной кошмар программиста
Ну вот это мой код первого "коммерческого" проекта. Просто в НИИ куда я пришел после института про стандарты, похоже, никто не подозревал и каждый писал как думал.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, registry, Spin, VasMessageBox;
type
TForm4 = class(TForm)
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
CheckBox2: TCheckBox;
GroupBox1: TGroupBox;
SpinEdit4: TSpinEdit;
SpinEdit5: TSpinEdit;
SpinEdit1: TSpinEdit;
GroupBox2: TGroupBox;
Label1: TLabel;
SpinEdit2: TSpinEdit;
CheckBox3: TCheckBox;
Label2: TLabel;
SpinEdit3: TSpinEdit;
Label3: TLabel;
Label4: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
VasMessageBox1: TVasMessageBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
SpeedButton1: TButton;
SpeedButton2: TButton;
ComboBox1: TComboBox;
Label11: TLabel;
Label12: TLabel;
procedure SpeedButton1Click(Sender: TObject);
procedure OnCreate(Sender: TObject);
procedure OnClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton2Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
public
end;
var
Form4: TForm4;
implementation
uses unit1;
procedure TForm4.SpeedButton1Click(Sender: TObject);
var Registry: TRegistry;
begin
if (SpinEdit5.Value>SpinEdit4.Value) and
(SpinEdit1.Value>SpinEdit5.Value) then
begin
Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
Registry.OpenKey('SOFTWARE\GART\CS',False);
if CheckBox2.checked=true then
Registry.WriteInteger('Default Minization',1)
else
Registry.WriteInteger('Default Minization',0);
if RadioButton1.Checked=True then
Registry.WriteInteger('Default Status',1);
if RadioButton2.Checked=True then
Registry.WriteInteger('Default Status',2);
Registry.WriteInteger('Time Good',SpinEdit4.Value);
Registry.WriteInteger('Time Normal',SpinEdit5.Value);
Registry.WriteInteger('Time Answer',SpinEdit1.Value);
Registry.WriteInteger('Packet Item',ComboBox1.ItemIndex);
Registry.WriteInteger('Packet Size',StrToInt(ComboBox1.Text));
Form1.NMPing1.PacketSize:=Registry.ReadInteger('Packet Size');
if CheckBox3.checked=true then
Registry.WriteInteger('Corupted Message',1)
else
Registry.WriteInteger('Corupted Message',0);
Registry.WriteInteger('Time Automatic',SpinEdit2.Value);
Registry.WriteInteger('Time Corupted',SpinEdit3.Value);
timealarm:=Registry.ReadInteger('Time Corupted');
CorrMess:=Registry.ReadInteger('Corupted Message');
mainbedtime:=Registry.ReadInteger('Time Answer');
maingoodtime:=Registry.ReadInteger('Time Good');
mainnormaltime:=Registry.ReadInteger('Time Normal');
Registry.Free;
Form1.AutoTimer.Interval:=SpinEdit2.Value*60*1000;
if RadioButton1.Checked=True then
begin
Form1.SpeedButton4.Enabled:=true;
Form1.AutoTimer.Enabled:=False;
automode:=1;
end;
if RadioButton2.Checked=True then
begin
Form1.SpeedButton4.Enabled:=false;
Form1.AutoTimer.Enabled:=True;
automode:=2;
end;
Form1.Showstatus('Настройки змінені');
Form4.Close;
end
else
VasMessageBox1.Execute;
end;
procedure TForm4.OnCreate(Sender: TObject);
var Registry: TRegistry;
begin
Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
Registry.OpenKey('SOFTWARE\GART\CS',False);
if Registry.ReadInteger('Default Minization')<>0 then
CheckBox2.checked:=true;
if Registry.ReadInteger('Default Status')=1 then
RadioButton1.Checked:=True;
if Registry.ReadInteger('Default Status')=2 then
RadioButton2.Checked:=True;
SpinEdit4.Value:=Registry.ReadInteger('Time Good');
SpinEdit5.Value:=Registry.ReadInteger('Time Normal');
SpinEdit1.Value:=Registry.ReadInteger('Time Answer');
ComboBox1.ItemIndex:=Registry.ReadInteger('Packet Item');
if Registry.ReadInteger('Corupted Message')<>0 then
CheckBox3.checked:=true;
SpinEdit2.Value:=Registry.ReadInteger('Time Automatic');
SpinEdit3.Value:=Registry.ReadInteger('Time Corupted');
Registry.Free;
Form4.ShowModal;
end;
procedure TForm4.OnClose(Sender: TObject; var Action: TCloseAction);
begin
systemloc:=0;
Action:=caFree;
end;
procedure TForm4.SpeedButton2Click(Sender: TObject);
begin
Form4.Close;
end;
procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_ESCAPE then
SpeedButton2Click(nil);
end;
end.
-
на днях очень долго медитировал на такой код:
switch(forumAttribute) { case 18: iSrc = imgSrc[0]; break; case 530: goto case 18;
-
> [69] clickmaker © (15.05.08 17:07)
Исправили бы, и не думали. switch(forumAttribute)
{
case 18:
case 530:
iSrc = imgSrc[0];
break;
...
-
case forumAttribute of 18, 530: iSrc := imgSrc[0]; end;
Несколько элегантнее, не так ли? :о)
-
>[64] Alkid © (2008-05-15 14:22:00)а, кстати. помнится, почитывал код хороших реверсверов для Z80. screaming fear. хотя и работал. это совсем другое мышление. >[71] Юрий Зотов © (2008-05-15 17:37:00)>Несколько элегантнее, не так ли?да. только в php/c всё-таки лучше. switch (ch)
if (wasA) printf("AAAAAA!\n"); пример безмозглый, конечно. --- Understanding is not required. Only obedience.
-
У нас на днях был найден отжиг: if (ModularOrder.MANYTOONE_STATE == UnicmDefines.CATALOG_ORDER_STATE_FINISHED) Обе константы. Причем обе _текстовые_ константы! (Java)
-
> Kenny © (16.05.08 14:57) [73] > >
А что такого? Завтра я поменяю константы и ок.
-
> TUser ©
Еще один :D
-
> switch (ch) { > case 'A': wasA = true; > case 'B': printf("A or B\n"); break; > default: printf("wtf?\n"); > }
Сквозное выполнение веток -- это, конечно, прикольный трик, но и источник глупых багов тоже.
Глядя на чужой код не всегда (чит.: практически никогда) можно определить, является ли отсутствие бряка между ветками случайной забывчивостью или фишкой. Приходится въезжать во весь код детально.
-
> Еще один :D >
А зачем еще делают константы в программах?
-
-
> TUser © (16.05.08 15:11) [74] Это Java. Там строка - это объект, а переменнаяи типа "строка" - это ссылка на объект. Поэтому условие if (строка1==строка2) ... проверяет равенство ссылок, а не тел строк. Ясно, что если обе строки - константы, то это условие не выполнится никогда.
-
-
> han_malign © (16.05.08 17:08) [80]
Если объявления и присваивания в разных пакетах, то стопудово не будут. А иначе -- как звёзды сложатся.
-
А, про жавности не знал. Теперь буду.
-
-
|