вторник, 28 октября 2014 г.

пятница, 24 октября 2014 г.

Offtopic.И ещё побрюзжу...Просто за коллегу - ОБИДНО. Он сделал ХОРОШУЮ работу

http://habrahabr.ru/post/241377/#comment_8087033

Видимо человек "читал не читая"...

"Ничего не понятно.
Что такое GUIRunner? Чем вам стандартный не угодил, каких «галочек» не хватило? Что не так в первом листинге?"

Ключевое слово - "ничего".

Зачем тогда комментировать? Потому что "вокруг дебилы сидят"? А"сам в белом фраке"?

Смотрим профиль - http://habrahabr.ru/users/scumware/

Человек написал одну статью. Повторю - одну статью.

Неплохую. Но в общем - "Америку не открыл".

И написал массу комментов типа "это чо":

"0
scumware,#
Ничего не понятно.
Что такое GUIRunner? Чем вам стандартный не угодил, каких «галочек» не хватило? Что не так в первом листинге?
0
scumware,#
не, я на C#
–1
scumware,#
какой ужасный, отвратительный язык…
0
scumware,#
какое счастье, что всё-таки бывают люди, которые с универа не любят «лаконичность»!
прямо бальзам на душу!

признайте уже наконец, что любовь к сокращениям произрастает из лени и ни из чего больше.
0
scumware,#
Тогда какой в этом смысл? Чем это лучше обычной обфускации?
0
scumware,#
Статью читал по диагонали, поэтом заранее прошу извинить, если вопрос глупый.

Если сдампить запущенный процесс, то весь ли MSIL в нём будет и все ли метаданные, или только часть?
+1
scumware,#
Не бешено стучать по клавиатуре, а срочно выкатить результат. Бывает такое, что твой начальник мечется по офису и каждые две минуты спрашивает, когда будет готово. Ему всё равно что и как ты там напишешь — главное чтоб работало, хотя бы как нибудь. А если тебе это так важно, то переписывать и рефакторить будешь «потом», когда время появится. Во-первых, такая работа отбивает желание в этот код даже заглядывать, а во-вторых «потом» время так и не появляется, а потому в следующий раз ты, скорее всего, правишь этот код в аналогичной ситуации.

Примерно так, в таких ситуациях, может рождаться самый страшный вид говнокода — спагетти: в условиях постоянного цейнтнота некоторые люди выбирают самое простое быстрое из возможных решений. Именно так появляется SQL в GUI. Именно так появляется GUI посередине сетевого протокола.
0
scumware,#
со мной лично — никогда, но я был свидетелем таких «чудес».

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

«маньяк» это будет делать с молчаливого согласия группы.
например в деревне красного петуха не вся масса людей запускает, а лишь пара «активистов».
его потом максимум пожурят слегка — типа нехорошо так делать, люди всё-таки, но т.к. свой, то выдавать не будут.
0
scumware,#
не съесть, а принести и положить под двери.

Во-первых, я серьёзно, а во-вторых такие случаи видел лично.
+1
scumware,#
Одного мудака — «маньяка с тесаком» на сотню соседей будет более чем достаточно чтобы вам жизнь испортить. Мудак сделает то, что веща[е|ю] т полоумн[ая|ые] бабульк[а|и].

Такое вполне может сделать местное школоло, которое пока без тормозов. Школьники не знают где граница, где нужно остановиться. Именно поэтому нужно периодически смотреть, куда показывают пальцем местные «языкатые бабы», ибо то, что они несут вполне может воплотить в жизнь местный недоумок.
+12
scumware,#
ты для них чужой, и такое положение вещей может плохо кончится: колёса начнут прокалывать, или двери в квартиру испортят, если есть кошка или собака — могут отравить, или задушить.
0
scumware,#
Теперь вместо того, чтобы ждать N минут, пока скопируются все файлы, вам придётся ждать N минут, пока флэшка безопасно извлекается.
"

И т.д. и т.п.

Ну - "не понимаешь" - зачем "самовыражаться"?

Хочешь самовыражаться - напиши ПОСТ, а не коммент. Делов то...

Это я так.. Побрюжал...

Я сам - "не подарок"...

P.S. К чему я? Просто за коллегу - ОБИДНО. Он сделал ХОРОШУЮ работу.

И слава богу на Хабре есть вменяемые люди, которые "подрастили карму"...

P.P.S.

И ещё - http://habrahabr.ru/post/241377/#comment_8087845

"DUnitX как раз не хватает VCL gui. Может кто нибудь сподобится…
Гуи на самом деле не сильно нужен. Главное проблема, что и в консольном режиме нет возможности выборочного прогона тестов."

Согласен.

Если кому-то интересно - мы можем это сделать на основе - Надстройки над DUnit, которые были сделаны, а именно:

"
5. Механизм preset'ов - можно составлять наборы тестов.
6. Запуск тестов в случайном порядке. С отслеживанием RandomSeed.
7. Запись списков в файлы - какие тесты прошли, а какие - нет.
...
9. Списки исключений для тестов.
"

Ссылка. Стиль оформления кода. Вместо вступления

http://www.delphinotes.ru/2014/10/blog-post.html

Считаю, что почитать - полезно.

Хотя я лично видимо - "на третьем уровне".

Скажем так - я стараюсь придерживаться того стиля, который примят в "исправляемом модуле".

Ну или переформатирую модуль полностью. Если уж "совсем невозможно".

А ещё у нас есть кодогенерация - она сама "диктует правила".

Ну и я уже писал (https://plus.google.com/u/0/112237078267495937667/posts/BdaZtLGzed7?cfem=1):

"мы тоже когда-то "ломали копья".. а потом - "помудрели что ли"... у нас есть инструкция... но гораздо более важно как ни странно - уважение к коллегам" (хотя я лично в этом как раз и не очень преуспел).

Побрюзжу. О коде и "спойлерах"

https://plus.google.com/u/0/113567376800896602748/posts/EvWwkjuM9oC?cfem=1

"Из-за большого количества кода пост выглядит раздутым. Я б посоветовал спрятать код в spoiler-ы."

Знаете - мне странно. Для программиста код это - зерно.

Всё остальное - "наносное".

На "пальцах" и "в курилке" объяснять это уже - дополнительно.

Если "код требует объяснения" (для программиста), то значит проблема в коде и может быть стоит задуматься.

На мой вкус.

Посему - я лично - никаких спойлеров - для кода - никогда применять - не буду.

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

И другим - не советую. Лень читать код - пусть не читают. Простите, если резок.

ToDo. Написать как замена "ассемблера" на нормальное ООП привело к отказу от "алгоритма маляра"

ToDo. Написать как замена "ассемблера" на "нормальное" ООП (в собственной реализации IStorage) привело к отказу от "алгоритма маляра".

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

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

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

НА N-й итерации рефакторинга этого кода я нашёл эти проблемы и наконец - переделал.

Это было непросто - потому что эти проблемы были скрыты "бутылочным горлышком". Даже несколькими.

В итоге проблемы были переосмыслены только тогда когда были другие проблемы найдены.

Напишу про всё. Как дойдут руки.

Там много материала. Очень показательного для "меня лично". Прям новые горизонты открываются.

P.S. Ну и "вдогонку".

Просто приведу реальный код. (15-летней давности)

В нём есть "алгоритм маляра":

 procedure   Tm3StorageStream.Seek(AOffset     : Int64;
                                   AOrigin     : TSeekOrigin;
                                   var AResult : Int64;
                                   var AReturn : HRESULT
                                  );

  procedure    __Seek(const APosition: Int64;
                      var   AResult: Int64
                     );
  var
        LCount:                   Int64;
        LPosition1:               Int64;
        LPosition2:               Int64;
        LPosition3:               Int64;
  begin

   with f_StreamHeader.TOCItemDataPtr^.RBody do
    begin

     if ((APosition >= 0) and (APosition <= RRealSize))
      then
       begin

        if (APosition = FPosition)
         then
         else
          begin

           LPosition1:=FPosition-FTOCBuffBodyOffset;

           if ((APosition >= LPosition1) and (APosition < (LPosition1+TOCBuffBodySize)))
            then
             begin

              FTOCBuffBodyOffset:=APosition-LPosition1;

             end
            else
             begin

              with f_StreamHeader.FRootStreamManager do
               begin

                SaveTOCBuffData(RTOCBuffRootPosition, f_CurFilePos,
                                FTOCBuffData^, FTOCBuffDataCompare^,
                                FTOCBuffDataModifed, ReadOnly);

                LPosition2:=Int64(-1);
                LPosition3:=RTOCBuffRootPosition;

                LCount:=APosition div FTOCBuffBodySize;

                while (LCount <> 0) do
                 begin

                  LoadTOCBuffData(LPosition2,LPosition3,LPosition2,
                                  FTOCBuffData^,FTOCBuffDataCompare^,
                                  FTOCBuffDataModifed,False);

                  LPosition3:=FTOCBuffData^.RNextPosition;

                  Dec(LCount);

                 end;

                LoadTOCBuffData(LPosition2,LPosition3, f_CurFilePos,
                                FTOCBuffData^,FTOCBuffDataCompare^,
                                FTOCBuffDataModifed,True);

                FTOCBuffBodyOffset:=APosition mod FTOCBuffBodySize;

               end;

             end;

           FPosition:=APosition;

          end;

       end
      else
       begin

        Exit;

       end;

    end;

   AResult:=APosition;

  end;

 begin

  if SUCCEEDED(AReturn)
   then
    begin

     case AOrigin of

      soBeginning: begin

                        __Seek(AOffset,AResult);

                       end;

      soCurrent: begin

                        __Seek(AOffset+FPosition,AResult);

                       end;

      soEnd: begin

                        __Seek(AOffset + f_StreamHeader.TOCItemDataPtr^.RBody.RRealSize, aResult);

                       end;

      else             begin

                        OleError(E_UNEXPECTED);

                       end;

     end;
     
    end;

 end;

Оформление кода приведено "авторское".

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

P.P.S. Что я ещё хотел сказать? А то, что "читабельность кода" очень часто влияет на его производительность.

Хотя мне известны и обратные примеры.

Ссылка. О Test Driven Development (TDD) из личного опыта