Sep 20

НИКОГДА так не делайте!

На, уважаемом мною, сайте delphiplus.org увидел ссылку на статью Фленова. Я и до этого с трудом переносил его книги и статьи, но эта статья просто возмутила!

 

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

 

Как так можно??? Вместо того, чтобы объяснить новичкам, что это ОЧЕНЬ не желательно, он призывает поступать именно так. Ну в конце-концов - есть хелперы в новых (и, относительно, не новых. например D2006) версиях Delphi.

 

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

 

Итог - НИКОГДА так не делайте и перестаньте читать Фленова!


  1. debose
     Add karma Subtract karma  +0
    Цитировать.

    Ты прав, это ужасный стиль.

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

    1
  2. Сергей
     Add karma Subtract karma  --1
    Цитировать.

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

    2
  3. aktuba
     Add karma Subtract karma  --1
    Цитировать.
    Комментарий автора

    Нет, в этом не может быть необходимости!!! Зачем менять VCL, если можно сделать наследник? Изменение VCL – это не только плохой стиль, это влияет на другие проекты, это усложняет поддержку и развитие. Ну и самый главный проект – что будете делать, когда понадобится перейти на новую версию Delphi (например, на D2009, с которой не поставляются исходники) или, например, перенести код на другую машину.

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

    3
  4. Сергей
     Add karma Subtract karma  --1
    Цитировать.

    Для начала определитесь, может быть необходимость или нет или вы не человек слова?

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

    4
  5. aktuba
     Add karma Subtract karma  --1
    Цитировать.
    Комментарий автора

    Давайте определимся: писать ОС приходится не каждый день, но иногда, кому-то, приходится. Так и тут: да, необходимость может возникнуть, но не у рядового программера, а, например, у разработчика IDE Delphi ;). Суть не в этом. Этот совет, как минимум, ОЧЕНЬ-ОЧЕНЬ вредный.

    Переход на новую версию Delphi, в случае изменения VCL, будет не просто сложным. Он Будет просто ужасный, т.к. в новой версии Delphi стандартные компоненты именно стандартные, а не измененные. Именно поэтому и не надо менять исходники стандартных компонентов.

    Видимо вы не прочли статью или просто, не подумав, написали, т.к. фраза “исходники не нужны”, после этой статьи, как минимум неверны.

    5
  6. Денис Лука
     Add karma Subtract karma  --16
    Цитировать.

    А кто вы такой, чтобы решать, какой совет вредный, а какой нет и что писать, а что нет? Кто вы такой, чтобы говорить, что читать, а что нет? Вы что-то добились в этой жизни?

    Я вижу, что вы очень и очень сильно начинающий и вам вредно вообще читать. Исходники реально не нужны. У вас уже есть измененный файл и какие проблемы его положить в папку с проектов в Delphi 2009? А может вы думаете, что стандартные компоненты изменяются каждую версию Delphi? Да, кнопка TButton изменяется каждый день… Я ржу до посинения. Уважаемый, заголовочный файл со стандартными компонентами практически не изменяется и если у вас руки из не того места ростут, то убейте себя об стену.

    Помолчите, и народ подумает, что вы умный.

    6
  7. aktuba
     Add karma Subtract karma  +6
    Цитировать.
    Комментарий автора

    Я много чего добился в жизни и могу советовать таким, как вы.

    Исходники реально не нужны.

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

    Я ржу до посинения.

    К врачу пора, лечится от психоза 😉

    Помолчите, и народ подумает, что вы умный.

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

    7
  8. Денис Лука
     Add karma Subtract karma  +0
    Цитировать.

    Я так понимаю, что Миша имел ввиду в следующем посте именно вас:
    http://www.flenov.info/blog.php?catid=231

    Удивительно, что она назвал вас умным и не понимаю, почему он не имеет право писать о нестандартных методах. Касперский в Хакере регулярно пишет о не стандартных методах и в его сторону я таких наездов не делал. Но вы (поверю Мише, что умный, потому что я сам тупой) почему запрещаете просто знать о том, что методы есть? Почему такая ненависть?

    8
  9. aktuba
     Add karma Subtract karma  +6
    Цитировать.
    Комментарий автора

    При чем тут ненависть??? Вы часто смотрите и правите чужие коды? Пару лет назад я принял решение – если меня просят посмотреть какой-то код или проект, на предмет ошибок, я смотрю только тогда, когда используются стандартные компоненты (+ те, которые я использую сам). Что будет в случае, когда новичек прочтет пост Фленова и будет править свои исходники, а потом ловить баги? Правильно – замучает других. Почему? Тоже верно – недостаток опыта и много “умных” статей в инете.

    Как я уже отписал в комментарии на блоге Фленова – обучая делать такие пакости, надо дать понять, что это плохо и что не надо к этому прибегать без крайней необходимости. Именно дать понять (с примерами, с возможными последствиями и т.д.), а не просто написать такую строчку в посте.

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

    Злят меня подобные посты не на ровном месте – я сам менял коды компонентов, а через какой-то время не мог понять, почему не работает что-то… Вот простой пример:

    В Indy есть небольшой баг при работе с куками – если для куки установлен домен с точкой впереди, то такая кука просто не сохраниться в IdCookieManager. Решается данная бага легко – добавлением одной строчки в исходники Indy. А вот баги потом ловятся очень сложно – при обновлении indy, при обновлении delphi, при переносе проекта на другой комп и т.д. приходится снова искать место для правки в indy и вставлять эту строку. Ну и перекомпилировать, соответственно. Как вы там сказали? Исходники не нужны? =)

    9
  10. Денис Лука
     Add karma Subtract karma  +0
    Цитировать.

    Вы сами пользовались таким методом, почему нельзя узнать другим о его существовании? Не надо приводить все под одну гребенку и не думайте, что мы сами не можем решить когда и что использовать. Да и почему вы считаете, что все вокруг в интернете начинающие? Просто скажите – “статья описывает не стандартные которые не стоит применять в каждодневном кодинге, а прежде чем применяете, 10 раз подумайте, а потом еще 5 раз”. Это будет объективно и без выражения ненависти, согласитесь..

    У меня был такой случай, когда для исправления бага Delphi пришлось перекомпилировать весь VCL, я просто поставил папку с исходниками на первое место. Это был баг, поэтому в следующей версии его исправили и я просто все вернул на родину. Но если бы не статья Фленова (она кстати старая и уже публиковалась в Хакере), то я бы не знал этого и не смог бы исправить косяк борланда. Как бы вы исправили косяк в исходных кодах? Писали бы своего наследника? Сочувствую.

    10
  11. aktuba
     Add karma Subtract karma  +0
    Цитировать.
    Комментарий автора

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

    Ненависть тут не при чем. У меня в день 5-10 человек в аське просят посмотреть их коды, помочь и т.д. И я уже сталкивался с такими, кто пользовался подобными методами. Итог был очень глупый – у меня все работает, у другого человека – нет. Оказалось, он пару месяцев назад правил исходники VCL.

    В вашем случае – да, скорее всего сделал бы наследника, причем именно для бажной версии. Почему? Все просто – не факт, что дальше я буду поддерживать этот код и вряд ли новый программер будет в курсе, что какая-то версия с багом. А сделав наследника, я бы избавился от бага, примерно так:
    type
    TButton = class(StcCtrls.TButton)

    procedure Paint; override;

    end;

    TfrmMain = class(TForm)

    procedure TButton.Paint;
    begin
    {$IFDEF …}

    {$ENDIF}
    end;

    Набросок, но суть, надеюсь, понятна. Заметьте – не пришлось менять исходный код TButton, но использоваться будет именно измененный, даже есть кинуть на форму стандартный. Этот подход в сотни раз лучше, т.к. будет работать везде и поддерживать проще – не надо ковыряться в VCL.

    11
  12. Денис Лука
     Add karma Subtract karma  --7
    Цитировать.

    Если выражения “Итог – НИКОГДА так не делайте и перестаньте читать Фленова!” вы считаете нормальными, то значит, у нас разные понимания.

    В исходниках вы бы все равно ковырялись, а через пару лет, когда вышла бы новая версия Delphi, и вы бы забыли про вашу заглушку, то вот тогда могут быть проблемы. А у меня их не было, потому что я просто установил новую Delphi, перекомпилировал проект и все работало, а мои извращения просто исчезли и я о них забыл. Так что подход Фленова считаю лучше.
    А то, что у вас плохой опыт, видимо вы полезли дальше. Если нужно исправить маленький косяк, то можно использовать не стандартное программирование. Если же вы хотите наростить функционал, то НИКОГДА, вот именно в этом случае НИКОГДА не используйте не стандартное программирование. Тут хочется засомневаться в ваших знаниях, но я не буду. Я надеюсь, что вы пошутили, что у вас есть несколько проектов, основаных на подобном методе. Это не метод программирования, это метод латания дыр. А программировать так нельзя НИКОГДА. Начните читать (не обязательно Фленова), но читать нужно.

    12
  13. aktuba
     Add karma Subtract karma  +0
    Цитировать.
    Комментарий автора

    Да, я считаю это выражение правильным. Это раз. Два – вы пропустили IFDEF, который и позволит избежать проблем на других версиях Delphi. Три – эти проекты (их порядка десятка) основаны на подобном, плохом, методе именно из-за багов indy. На текущий момент я так уже не поступаю и очень этому рад. Это именно “латание дыр”, как вы выразились. Сегодня я латаю подобные дыры намного проще, соответственно развивать и поддерживать новые проекты у меня получается легче, чем старые.
    Хотите сомневаться в моей квалификации – ваше право. Читать… Читаю много. Читал и Фленова, именно поэтому сейчас новичкам советую НЕ читать его книги совсем. Лучше Канту, Конопа и т.д. Мне, например, очень нравится книга Дж. Бакнелл. Фундаментальные алгоритмы и структуры данных в Delphi. Хотя и в ней есть баги, т.к. описываются старые версии Delphi. Думаю, про Маконелла, Файлера и т.д. можно не упоминать, раз вы любите книги по программингу (хотя, они больше по проектированию).

    13
  14. Денис Лука
     Add karma Subtract karma  --6
    Цитировать.

    Начинающий будет очень рад всем перечисленным книгам, особенно “Фундаментальные алгоритмы и структуры данных в Delphi”. А сомневаться есть чему, потому что вы используете Indy. Кстати, тот же Фленов не рекомендует и во второй версии Delphi глазами хакера все пишется на сокетах. Чуть сложнее, зато эффективнее.

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

    14
  15. aktuba
     Add karma Subtract karma  +1
    Цитировать.
    Комментарий автора

    вы используете Indy. Кстати, тот же Фленов не рекомендует и во второй версии Delphi глазами хакера все пишется на сокетах.

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

    15
  16. Diablo
     Add karma Subtract karma  --2
    Цитировать.

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

    16
  17. aktuba
     Add karma Subtract karma  --1
    Цитировать.
    Комментарий автора

    По поводу воспитания – адекватный ответ на оскорбления. Или вы ждали, что я промолчу? Зря, в этом случае.
    По поводу Indy – считал и считаю мощным инструментом, в умелых руках. Сделал уже не один десяток программ на нем. Говорите 5 минут экономии времени? =) Ну попробуйте сделать программу по параллельной заливке файлов на хостинг на сокетах, а потом посмотрим, сколько времени экономит инди. Учитывая, что использую последнюю версию indy – знаю только пару багов, которые давно научился обходить. Еще вопросы?

    Сори, потеряли еще одного посетителя.

    Жаль, но ваше право. В любом случае – не сильно огорчился, вы же все такие профи, мизинцем левой ноги пишете любые проги на сокетах ;). Шутка. Если серьезно – плевать, что вы ушли. У нас с вами, похоже, разные взгляды на программинг, т.ч. вам все равно не интересны будут мои посты. Читайте Фленова 😉

    17
  18. pr
     Add karma Subtract karma  +1
    Цитировать.

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

    18
  19. Ник Курков
     Add karma Subtract karma  +0
    Цитировать.

    А потом этот горе-программер передает исходники другому и тот чешет репу, какого х*я стандартный TButton не подходит…

    19
  20. Alexo
     Add karma Subtract karma  +1
    Цитировать.

    Забавно, новых сообщений не было с июля, а древняя статья Фленова вызвала такую бурю эмоций.

    [quote]Итог – НИКОГДА так не делайте и перестаньте читать Фленова![/quote]

    Говорит человек который продолжает читать 🙂 Фленов по всей видимсти популярный человек, так как в инете полно горе советчиков, но пока никто другой не удостоился рекламы в этом блоге 🙂

    20
  21. aktuba
     Add karma Subtract karma  +1
    Цитировать.
    Комментарий автора

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

    21
  22. Alexo
     Add karma Subtract karma  +1
    Цитировать.

    [quote]А антипатия к нему, как к автору, по очень простой причине – многие его посты и статьи (а также, книги) содержат такие советы, что волосы дыбом встают. Данная статья как раз из этой оперы.[/quote]

    Почему бы тогда не написать противовес статье Фленова, как надо поступать ИМХО было бы намного полезнее и корректнее. Например про это:

    [quote]Как так можно??? Вместо того, чтобы объяснить новичкам, что это ОЧЕНЬ не желательно, он призывает поступать именно так. [b]Ну в конце-концов – есть хелперы в новых (и, относительно, не новых. например D2006) версиях Delphi.[/b]
    [/quote]

    Сделать тоже самое, что и он, и показать на сколько это удобнее.

    22
  23. aktuba
     Add karma Subtract karma  +1
    Цитировать.
    Комментарий автора

    В ближайшее время так и сделаю…

    23
  24. pingback:
     Add karma Subtract karma  +1
    Цитировать.
    Полезное применение хелперов | Delphist.ru

    […] и обещал – выкладываю способ использования хелперов в Delphi, […]

    24
  25. Zuz
     Add karma Subtract karma  +0
    Цитировать.

    >>Учитывая, что использую последнюю версию indy – знаю только пару багов, которые давно научился обходить.

    Здравствуйте. Обновился когда-то до 10 версии, но возникли проблемы с SSL.
    Как решить проблему нигде не нашел, пришлось вернуться назад к 9 версии.
    Там сильно мучала проблема с куками (точка в начале и сабдомены), поэтому отказался от кукиманагера и написал процедуру подстановки куков непосредственно в запрос (после get,post и соответственно на редиректе отлавнивал новые).

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

    спасибо.

    25
  26. Zuz
     Add karma Subtract karma  +0
    Цитировать.

    после попал на главную и прочитал пост про helper. Очень занятно, но использую 7 версию делфей (немного боюсь перехода на новые версии, дабы не иметь проблем со старыми проектами).

    26
  27. Валерий
     Add karma Subtract karma  --1
    Цитировать.

    Неужели комментировать можно? Это наверное самый обсуждаемый пост? 🙂

    Немного запоздало, но оставлю собственное мнение по этому поводу.

    На самом деле порадовали комментарии и нападки сторонников Фленова. Особенно ссылки на “книги” и мега-авторитетное издание “Хакер”. “Вот ОН же написал в книжке!” – идите теперь памятник поставьте и молитесь на свою “Библию”. 🙂

    А наставление все писать на сокетах… Могу одно сказать – УДАЧИ! Если вы в жизни не писали ничего сложнее лабораторной работы для института – то да – это самое то – изобретать велосипеды и сто раз проходить по тем граблям по которым все уже давным давно прошли. Хотя кому я говорю, они же ушли все 🙂

    Про исходники тоже смешно. Вон в Delphi 2009 всю VCL перетрясли чтобы Unicode добавить, следующая – с 64-битным компилятором – тоже без изменений не останется, а такие заявления как-будто с луны свалились и до сих пор новее Delphi 7 ничего не видели. Да, в Delphi 7 по сравнению с 6 изменений в VCL почти нет.

    И что самое главное в этой истории – надо же показать свою значимость и громко “хлопнуть дверью” и объявить в комментах об уходе, а сами небось подписались на RSS и втихушку сидят читают этот блог и не высовываются. 😉

    Да даже если и ушли, все равно +1.

    2Zuz, в общем случае проблемы могут возникнуть только при переходе к Delphi 2009. Но в любом случае, что мешает попробовать? 🙂

    27
  28. Zuz
     Add karma Subtract karma  +0
    Цитировать.

    вот на 2009 перешел.. Очень резкая перемена для меня, не выдержал и недели, вернулся к 7. Просто не привычно жутко и новые фишки отнимают много времени. Сперва чтоб научиться с ними работать, а потом чтоб отключить)). Но основной причиной возврата было то что я так и не смог разобраться с ситуацией при остановке работы проекта (кнопочкой Pause): в D7 после закрытия дизассемблированного кода я мог увидеть текущую позицию в делфиевском коде и далее трассировать через ф7. В 2009 же никак не удавалось увидеть где в текущий момент выполняется код.. только в дизассемблерном варианте,ч то совсем не приемлемо. Вернулся в уже привычную среду. Ну нету там автодополнения такого продвинутого, ну и что…

    28
  29. Новичок
     Add karma Subtract karma  +1
    Цитировать.

    Полностью согласен с автором! aktuba прав, как никогда.

    Сам читал книги Флёнова, и, будучи новичком, пытался понять и запомнить массу его “полезных” советов. В голове после этого мешанина. А если, по неопытности, начать им следовать? Не дай БОГ!

    Как справедливо было кем-то замечено, то, что описано в этих вредных советах, для профессионалов плёвое дело. А для новичков, кому в новинку, – как граната, в руках обезьяны. Интеррррресная такая штука!!!!

    Результаты очевидны?

    29
  30. Ace
     Add karma Subtract karma  +0
    Цитировать.

    Сейчас найти хорошую книгу на русском вообще проблема… Я беру из нета в основном на английском в хорошем качестве, с цветной печатью, перечитываю Бьёрна Страуструпа и вобщем книги такого уровня. Не вижу смысла опускаться до маразма, который выдают за истину всяки там дебилы, тунеядцы, и просто бездари!! Всему основа первоисточник, а всё остальное комментарии к нему, чьи-то личные мнения, а в 90% книг на русском языке – это маразм!!
    И нацелено это всё в первую очередь конечно же, и как уже неоднократно было отмечено выше на новичков в программировании (не важно Delphi это или нет), дабы в ввести в заблуждение, сбить с толку, запутать, научить изначально делать “не” правильно, сломать первостепенную логику… как жаль что таких аутистов пускают в печать… ещё больше разочаровывает когда на подобных книгах стоит гриф “рекомендовано министерством образования (для вузов, школ, и т.п.)”

    30
  31. Makel
     Add karma Subtract karma  +2
    Цитировать.

    Я просто в восторге от фленова

    31
  32. admin
     Add karma Subtract karma  +3
    Цитировать.
    Комментарий автора

    Мда… Фленов кому то нравится, кому то нет, но уж точно никого не оставляет равнодушным)

    32
  33. M|a|G
     Add karma Subtract karma  +0
    Цитировать.

    Книги Фленова это просто ужас, читать их не надо. Запутаетесь и многое не поймете. Автор этих книг может и не самый плохой программист, но книги написаны очень плохо, не структурировано и запутанно. В них не объясняется “почему это происходит именно так”, “что надо сделать чтобы было вот так” и т.д., а просто даны исходники и все (причем половина не работает). С таких книг начинать изучение Delphi просто противопоказано.
    Ну это уже наверное проблема хороших книг на русском. Их практически нет.
    Что самое интересное, так это точно ни в одной книге я не видел подробного описания с примерами кода как работать с классами в Delphi. Везде написаны лишь вводные слова, которые не дают четкой и полезной информации. Может Вы что-нибудь посоветуете конкретное?

    33
  34. Ника
     Add karma Subtract karma  +0
    Цитировать.

    Да что вы говорите! У Фленова вообще ничего непонятно. А примеров вообще “0”

    34
  35. Gary_Ch
     Add karma Subtract karma  +0
    Цитировать.

    Что-то комментарий не отправляется… 🙁

    35
  36. Gary_Ch
     Add karma Subtract karma  +0
    Цитировать.

    Цитата из того злосчастного поста:

    1. Вручную изменить в dfm и pas файле предка для каждого компонента. Когда их 100 штук, процесс изменения может затянуться и будет очень утомительным

    Команду Edit — Replace all автор в меню Notepad не нашёл? 🙂

    А вообще, для модификации стандартных компонентов есть гораздо более удачный способ, не требующий ничего менять в исходниках VCL:

    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1367

    Кстати,
    a) На самом деле, никакого шаманства — прочитайте статью 🙂
    b) В самой статье и комментариях подробно разобраны все “за” и “против”, а так же почему так вообще можно делать и когда стоит данный приём использовать

    А Фленов пускай патчит DCC32.EXE в WinHex, называя это “нестандартным использованием компилятора” — глядишь у TButton ещё какие интересные свойства появятся 😀

    36

Поделитесь вашими мыслями



Ссылки в комментариях будут свободны от nofollow.

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Ссылки в комментариях будут свободны от nofollow.