Отладочная печать
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 17.04.11 03:23
Оценка: -1 :))) :))) :))) :))) :))
от наших загорелых зарубежных коллег...
        String printable = "Historic Avg = ((Count * Wt)/N) ";
        DecimalFormat format = new DecimalFormat("0.0000");
        for (int i = 0; i < searchTermHistoric_Counts.length; i++) {
            printable += "(" + searchTermHistoric_Counts[i] + " * " + format.format(historicWeights[i]) + ")";
            if (i < searchTermHistoric_Counts.length)
                printable += " + ";
            historicAverage += searchTermHistoric_Counts[i] * historicWeights[i];
        }

        historicAverage = historicAverage / searchTermHistoric_Counts.length;
        printable += "/ " + searchTermHistoric_Counts.length + " = " + format.format(historicAverage);
        if (logger.isDebugEnabled())
            logger.debug(printable);
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Отладочная печать
От: invisibleshadow Россия  
Дата: 17.04.11 03:35
Оценка: +1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>от наших загорелых зарубежных коллег...

LCR>
LCR>        String printable = "Historic Avg = ((Count * Wt)/N) ";
LCR>        DecimalFormat format = new DecimalFormat("0.0000");
LCR>        for (int i = 0; i < searchTermHistoric_Counts.length; i++) {
LCR>            printable += "(" + searchTermHistoric_Counts[i] + " * " + format.format(historicWeights[i]) + ")";
LCR>            if (i < searchTermHistoric_Counts.length)
LCR>                printable += " + ";
LCR>            historicAverage += searchTermHistoric_Counts[i] * historicWeights[i];
LCR>        }

LCR>        historicAverage = historicAverage / searchTermHistoric_Counts.length;
LCR>        printable += "/ " + searchTermHistoric_Counts.length + " = " + format.format(historicAverage);
LCR>        if (logger.isDebugEnabled())
LCR>            logger.debug(printable);

LCR>

Вам бы это... Отдохнуть — во!
Re: Отладочная печать
От: frogkiller Россия  
Дата: 17.04.11 06:38
Оценка: +1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>от наших загорелых зарубежных коллег...

LCR>
LCR>        // heavy printable initialization ...
LCR>
LCR>        if (logger.isDebugEnabled())
LCR>            logger.debug(printable);
LCR>


Как-то не смешно.
Но руки отрывать за такое надо, да.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: Отладочная печать
От: tlp  
Дата: 17.04.11 07:40
Оценка: :)
А по-моему, это правильно.

Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.

Сам по себе код оставляет желать лучшего, коненчо.
Re: Отладочная печать
От: Young yunoshev.ru
Дата: 17.04.11 09:26
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>от наших загорелых зарубежных коллег...

LCR>
LCR>        String printable = "Historic Avg = ((Count * Wt)/N) ";
LCR>        DecimalFormat format = new DecimalFormat("0.0000");
LCR>        for (int i = 0; i < searchTermHistoric_Counts.length; i++) {
LCR>            printable += "(" + searchTermHistoric_Counts[i] + " * " + format.format(historicWeights[i]) + ")";
LCR>            if (i < searchTermHistoric_Counts.length)
LCR>                printable += " + ";
LCR>            historicAverage += searchTermHistoric_Counts[i] * historicWeights[i];
LCR>        }

LCR>        historicAverage = historicAverage / searchTermHistoric_Counts.length;
LCR>        printable += "/ " + searchTermHistoric_Counts.length + " = " + format.format(historicAverage);
LCR>        if (logger.isDebugEnabled())
LCR>            logger.debug(printable);

LCR>



Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?
Re[2]: Отладочная печать
От: Jack128  
Дата: 17.04.11 09:53
Оценка:
Здравствуйте, Young, Вы писали:

Y>Здравствуйте, Lazy Cjow Rhrr, Вы писали:


Y>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?



char key = Console.ReadKey(); // key — дальше нигде используется.
Как считаешь — можно эту строку выкинуть???
Re[3]: Отладочная печать
От: Young yunoshev.ru
Дата: 17.04.11 10:02
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Young, Вы писали:


Y>>Здравствуйте, Lazy Cjow Rhrr, Вы писали:


Y>>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?



J>char key = Console.ReadKey(); // key — дальше нигде используется.

J>Как считаешь — можно эту строку выкинуть???

Нельзя. И компилятор это прекрасно понимает, потому что ReadKey меняет состояние объекта. Это не константная функция.
А вот есть Console.ReadKey бы не меняло состояние объекта и всегда бы возвращала константу — то таки да — можно было бы выкинуть.

Короче, к исходному примеру какое отношение имеет?
Re: Отладочная печать
От: LuciferSaratov Россия  
Дата: 17.04.11 10:10
Оценка: 1 (1) +3 :))) :))) :)))
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>от наших загорелых зарубежных коллег...


Re[4]: Отладочная печать
От: . Великобритания  
Дата: 17.04.11 12:53
Оценка: -1
On 17/04/11 11:02, Young wrote:

> Нельзя. И компилятор это прекрасно понимает, потому что ReadKey меняет состояние объекта. Это не константная функция.

> А вот есть Console.ReadKey бы не меняло состояние объекта и всегда бы возвращала константу — то таки да — можно было бы выкинуть.

> Короче, к исходному примеру какое отношение имеет?


А как узнать что меняет состояние, а что не меняет? Компилятор не бог... стоит вот вызов new DecimalFormat() и format.format() и уже хз что там у неё в нутре.
Если только hotswap догадаться сможет...
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Отладочная печать
От: о_О
Дата: 17.04.11 12:57
Оценка: -2
Здравствуйте, LuciferSaratov, Вы писали:

LS>Здравствуйте, Lazy Cjow Rhrr, Вы писали:


LCR>>от наших загорелых зарубежных коллег...


http://www.funny-potato.com/blog/wp-content/uploads/2008/02/funny-programmer.gif

ненене, вот от таких:

Re[2]: Отладочная печать
От: Кондраций Россия  
Дата: 17.04.11 15:16
Оценка:
Здравствуйте, tlp, Вы писали:

tlp>А по-моему, это правильно.


tlp>Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.


Таки имелось в виду, что if нужно в метод debug поместить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Re: ...Отладочная печаЛь
От: ononim  
Дата: 17.04.11 20:12
Оценка: :)))
Как много веселых ребят, и все делают велосипед...
Re[2]: Отладочная печать
От: Eugeny__ Украина  
Дата: 18.04.11 15:59
Оценка:
Здравствуйте, Young, Вы писали:


Y>Погоди, погоди. А что если isDebugEnabled возвращает константу какую либо этот кусок не будет в java выкинут? Тут же явно видно что, printable не используется?


Компилятор жабы вообще не пытается заниматься оптимизациями. Ну, разве что кроме замен цепочек конкатенации на StringBuilder-ы. Оптимизация производится JIT-ом на основе данных в рантайме.

Например, код
public class Comp {
    public static void main(String[] args) {
        foo();
    }
    private static void foo() {
    }
}


После декомпиляции:

public class Comp
{

    public Comp()
    {
    //    0    0:aload_0         
    //    1    1:invokespecial   #8   <Method void Object()>
    //    2    4:return          
    }

    public static void main(String args[])
    {
        foo();
    //    0    0:invokestatic    #16  <Method void foo()>
    //    1    3:return          
    }

    private static void foo()
    {
    //    0    0:return          
    }
}
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[5]: Отладочная печать
От: . Великобритания  
Дата: 18.04.11 18:39
Оценка:
On 17/04/11 13:53, . wrote:

Любопытно, с чем господин Mazay не согласен?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Отладочная печать
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 20.04.11 14:29
Оценка:
о_О,

LCR>>>от наших загорелых зарубежных коллег...

о_О>ненене, вот от таких:
Так ты посмотри на их загар!
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[4]: Отладочная печать
От: о_О
Дата: 20.04.11 14:43
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>о_О,


LCR>>>>от наших загорелых зарубежных коллег...

о_О>>ненене, вот от таких:
LCR>Так ты посмотри на их загар!
фиг ли занар, коль руки из жопы :о)
Re[3]: Отладочная печать
От: blackhearted Украина  
Дата: 20.04.11 15:08
Оценка:
Здравствуйте, Кондраций, Вы писали:

К>Здравствуйте, tlp, Вы писали:


tlp>>А по-моему, это правильно.


tlp>>Если бы под if-ом был весь кусок кода, поведение проги менялось бы в заисимости от настроек логгера (например, мог бы вылететь exception при делении на 0), а так — поведение различается минимально, меньше сюрпризов.


К>Таки имелось в виду, что if нужно в метод debug поместить.


это еще зачем?
Re[4]: Отладочная печать
От: Кондраций Россия  
Дата: 26.04.11 19:27
Оценка:
Здравствуйте, blackhearted, Вы писали:

...
К>>Таки имелось в виду, что if нужно в метод debug поместить.

B>это еще зачем?

Чтобы не повторять его везде.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Re[5]: Отладочная печать
От: Ромашка Украина  
Дата: 26.04.11 20:00
Оценка:
17.04.2011 15:53, Здравствуйте, . :
> А как узнать что меняет состояние, а что не меняет? Компилятор не бог...

А ты бог? Ты знаешь, что меняет состояние? Отдашь аппендикс на отсечение
что, скажем, перехваченный эксепшен в индексере historicWeights не
взводит isDebugEnabled == true?

ЗЫ. Код странный. Но обсуждение еще более странное.
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[6]: Отладочная печать
От: . Великобритания  
Дата: 26.04.11 20:52
Оценка: +1
On 26/04/11 21:00, Ромашка wrote:

> А ты бог? Ты знаешь, что меняет состояние? Отдашь аппендикс на отсечение

> что, скажем, перехваченный эксепшен в индексере historicWeights не
> взводит isDebugEnabled == true?
Если так, то таких писателей гнать в шею надо.

> ЗЫ. Код странный. Но обсуждение еще более странное.

Код нелепый, автор не читатель, достаточно прочитать доку для isDebugEnabled и становится всё очевидным.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Отладочная печать
От: MescalitoPeyot Украина  
Дата: 26.04.11 21:56
Оценка:
Здравствуйте, Кондраций, Вы писали:

К>Здравствуйте, blackhearted, Вы писали:


К>...

К>>>Таки имелось в виду, что if нужно в метод debug поместить.

B>>это еще зачем?

К>Чтобы не повторять его везде.

Однако сие может иметь определенные неприятные последствия.

Так нормально
if (debug) Log("Проверили серийник и результат Окейный");


Так вроде бы тоже, хотя не уверен, давно проверял
Log("Проверили серийник и результат Окейный");


А вот так легко ловим сторонний эффект и оставляем в сборке то чему в ней быть не следует.
Log("Проверили серийник и результат Окейный: " + getAuthenticationToken());


Да, конечно, есть обфускатор который может это удалить (а может и не удалить), но лично у себя пишу if (debug) Log(). Как-то спокойней.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[6]: Отладочная печать
От: Кондраций Россия  
Дата: 29.04.11 17:17
Оценка:
Здравствуйте, MescalitoPeyot, Вы писали:
...
MP>А вот так легко ловим сторонний эффект и оставляем в сборке то чему в ней быть не следует.
MP>
MP>Log("Проверили серийник и результат Окейный: " + getAuthenticationToken());
MP>


Так это-же геттер! Хотя быть всякое, наверное, может, во всяком случае вызов остаётся. Жаль, если для явы это наилучшее решение. Ну в таком случае лучше уж макрос VERIFY из MFC.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Re: Отладочная печать
От: slskor  
Дата: 02.05.11 01:31
Оценка: -2
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>от наших загорелых зарубежных коллег...

LCR>
LCR>        printable += "/ " + searchTermHistoric_Counts.length + " = " + format.format(historicAverage);
LCR>        if (logger.isDebugEnabled())
LCR>            logger.debug(printable);

LCR>


Боюсь что в данном случае индус оказался более профессионален чем вы. Подобный код лично я встречал нередко и не только у индусов, но и в первоклассных проектах Apache. По идее, isDebugEnabled надо употреблять там, что нужна оптимизация по скорости, но некоторые пишут повсюду, считая это за полезную привычку, типа привычки сравнивать строку с переменной, а не переменную со строкой. Зачем так делают? Потому что у Log4j есть один очевидный нестаток. Описано здесь:

http://dev-things.blogspot.com/2010/06/logger-isdebugenabled.html

Если в данном случае перенести printable внутрь условия, то всё станет на свои места. Программист знал что делает, но немного ступил или запарился. Не смешно.
Re[2]: Отладочная печать
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 02.05.11 19:16
Оценка: :)
slskor,

LCR>>от наших загорелых зарубежных коллег...

LCR>>
LCR>>        printable += "/ " + searchTermHistoric_Counts.length + " = " + format.format(historicAverage);
LCR>>        if (logger.isDebugEnabled())
LCR>>            logger.debug(printable);

LCR>>


S>Боюсь что в данном случае индус оказался более профессионален чем вы. Подобный код лично я встречал нередко и не только у индусов, но и в первоклассных проектах Apache. По идее, isDebugEnabled надо употреблять там, что нужна оптимизация по скорости, но некоторые пишут повсюду, считая это за полезную привычку, типа привычки сравнивать строку с переменной, а не переменную со строкой. Зачем так делают? Потому что у Log4j есть один очевидный нестаток. Описано здесь:

S>http://dev-things.blogspot.com/2010/06/logger-isdebugenabled.html
S>Если в данном случае перенести printable внутрь условия, то всё станет на свои места. Программист знал что делает, но немного ступил или запарился. Ну о чём и речь. Не смешно.

Можно я тебе расскажу, где лопата?

А лопата в том, что построение printable требует уйму ресурсов, и даже более того, O(n) времени и памяти, и используется только при выводе на печать. В свете этого факта проверка isDebugEnabled — совершенно не вписывается в общий пейзаж, и попытка сей оптимизации (а эту строчку с isDebugEnabled вставляют именно для оптимизации расходов на отладочную печать — особенно при установке уровня выше debug) меня и улыбнула.

Очевидно, что чел либо копипастил на автомате, либо писал (тоже на автомате). Также очевидно, что формирование printable _нужно_ внести внутрь if(isDebugEnabled), а такая одинокая сопля как выше оптимизирует один только call virtual для метода debug объекта logger (порядка 3-х машинных инструкций).

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

Теперь уже и мне не смешно. :crush:
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[3]: Отладочная печать
От: slskor  
Дата: 03.05.11 07:05
Оценка: :)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Так вот, в качестве морали, коллега: не надо писать код на автомате.


Да чего мелочиться. Посоветуй уж сразу не делать ошибок.
Re: Отладочная печать
От: Vyacheslav Benedichuk Интернет  
Дата: 08.05.11 15:48
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR> String printable = "Historic Avg = ((Count * Wt)/N) ";

LCR> DecimalFormat format = new DecimalFormat("0.0000");
LCR> for (int i = 0; i < searchTermHistoric_Counts.length; i++) {
LCR> printable += "(" + searchTermHistoric_Counts[i] + " * " + format.format(historicWeights[i]) + ")";
LCR> if (i < searchTermHistoric_Counts.length)
LCR> printable += " + ";
LCR> historicAverage += searchTermHistoric_Counts[i] * historicWeights[i];
LCR> }


У нас 60-80%% на таком вопросе на собеседованиирежутся.
Любят машинку поднапрячь, что бы память покушать и проц погрузить.
--
http://www.slideshare.net/vyacheslavbenedichuk
https://www.linkedin.com/in/vbenedichuk
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.