Да простит меня великий Visor....Не удержалсо

Не заметил)
 
Апну еще раз, чтобы человек не забывал об этом факте.
getCommand() возвращает различные строки, в зависимости от конкретной инстансы движка. Если ты этого не знал - то это твоя проблема.
Человек обосрался весьма эпично, хотел нагадить на других, а обгадился сам.

Давай, обсыкайся, попробуй переврать такой факт.
 
Последнее редактирование:

Посмотри в сторону thymeleaf, velocity на досуге.
 
Посмотри в сторону thymeleaf, velocity на досуге.
Факт состоит в том, что неадекват GenCloud обосрался и эта тема это доказывает и подтверждает. Обоврать этот факт он не может.
А на досуге, то конечно спасибо за советы.
 
Я к теме не имею никакого отношения, я по поводу разных реплейсов и остального аппенда срингов. То что я назвал можно поюзать, хорошие фреймы.
 
Ты пишешь, что к теме не имеешь отношения, но влез в нее давать советы. Итак.
Я так понимаю, что ты не понял почему я не просто так написал, что дегенерат, который кидается на людей, обосрался и что этот факт нельзя изменить.

Что ты собрался аппендить в этом классе? Или где ты и как поюзаешь хорошие фреймы? И почему ты думаешь, что нужно соединять какие-то строки в этом конкретном классе? Проще говоря - в чем по твоему говнокод?
Но следует учесть оптимизацию времени создания объекта и учесть специфику времени выполнения. Или какая цель в аппенде строк и применении хороших фреймов?
Прямо пример.
 
Последнее редактирование:
Я не Мангол, но все таки форум и открытый дискас, поэтому напишу.
С помощью того же Apache Velocity можно будет полностью избавиться от таких методов, как "showMainPage" и похожих. Все таки уже давно не "лихие девяностые", чтобы держать куски html, в коде, а тем более делать конкацию строк, при возможности использования StringBuilder'а. Это все не критично, но все равно, не слишком красиво, как по мне.
Пример одной из моих html с использованием Velocity:
Код:
<html><head><title>Get zones</title></head>
<body><center>

<br>#color("LEVEL" "Список текущих зон")
<table width=260>
<tr>
<td>#color("cccc99" "ID")</td>
<td>#color("cccc99" "Name")</td>
<td>#color("cccc99" "Type")</td>
<td>#color("cccc99" "Flags")</td>
<td>#color("cccc99" "Danger type")</td>
</tr>

#set($flags = $ZoneFlags.values())
#set($zones = $target.getZones())
#foreach($zone in $zones)
   <tr>
   <td>$zone.getId()</td>
   <td>$zone.getName()</td>
   <td>$zone.getImplName()</td>
   <td>
   #set($zoneFlags = $zone.getFlags())
   #foreach($flag in $flags)
     #if($flag.isFlag(zoneFlags))
       $flag.name()
     #end
   #end
   </td>
   <td>
   #set($dangerType = $zone.getDangerType())
   $dangerType.name()
   </td>
   </tr>
#end
</table>

<br>#color("LEVEL" "Текущие флаги:")
</center>
<table width=260>
<tr>
<td>#color("cccc99" "Name")</td>
<td>#color("cccc99" "Count")</td>
</tr>

#set($zoneCounters = $target.getZoneFlagCounters())
#set($i = 0)
#foreach($counter in $zoneCounters)
   #set($color = "ffffff")
   #if($counter == 0)
     #set($color = "999999")
   #end
   <tr>
   <td><font color=$color>$flags[$i].name()</font></td>
   <td><font color=$color>$counter</color></td>
   </tr>
   #set($i = $i + 1)
#end
</table>

</body>
</html>
 
Последнее редактирование:
Дока вело и тима есть в свободном доступе. Так же там есть примеры.
Код:
   protected void showMainPage(L2PcInstance player)
    {
        NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

        TextBuilder replyMSG = new TextBuilder("<html><title>"+getName()+"</title><body>");

        replyMSG.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ "+getName()+" ]</font></td>"
                +"<td><button value=\"Back\" action=\"bypass -h " + "admin_events"+"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
                +"</tr></table>");
        replyMSG.append("<br><center>Engine instances</center>");
        replyMSG.append("<table width=\"292\">");
        for (L2EventGroupEngineInstance event : _eventInstances.values())
        {
            replyMSG.append("<tr><td><font color=\"LEVEL\">"+event.getName()+"</font></td>"
                +"<td><button value=\"Show\" action=\"bypass -h " + getCommand()+"_show "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
                +"<td><button value=\"Edit\" action=\"bypass -h " + getCommand()+"_edit "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
                +"<td><button value=\"Delete\" action=\"bypass -h "  + getCommand()+"_del "+event.getName()+" $name"    + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
                );
        }
        replyMSG.append("</table>");
        replyMSG.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>");
        replyMSG.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h " + getCommand()+"_create $name" + "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
        replyMSG.append("</table>");
        replyMSG.append("</body></html>");

        adminReply.setHtml(replyMSG.toString());
        player.sendPacket(adminReply);
        // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
        player.sendPacket(ActionFailed.STATIC_PACKET);
    }
Так же такой код можно будет собирать куда лучшим способом
Но я понел что таким как ты лучше вообще ничего не советовать. Тебе лишь бы свою желчь вылить на ровном месте, и не важно несешь ты полную херню или нет, главное что ты всегда прав.
П.С. Хочу увидеть где я сказал говнокод. Данный случай это случай когда не совсем удобно работать с таким кодом, я бы даже сказал совсем не удобно с ним работать, когда есть фреймы которые могут облегчить жизнь и читаемость данного кода.
 
Последнее редактирование:
Какую желчь, ты видишь кто эту тему создал?
Ты не сказал "говнокод", но начал подпрягаться - советы давать начал мне. Это есть в паре сообщений выше.
А чего ты не стал давать советы неадеквату, который эту тему создал?
Там не просто желчь - там говнище хлещет и пердак уже сгорел.

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

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

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

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

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

    Med_ved

    Баллов: 1
    За клоунаду :D
А чем отличается TextBuilder от StringBuilder ?
 
И да, питушок ты наш - завалился бы и дальше сидел бы с кокс нюхал, как обычно ты и делаешь.
P.S. тронешь говно, вонять будет -> тронешь визора.... нутыпонел
 
Последнее редактирование модератором:
Обосрался, так рот закрой и не воняй. Уже показано какое-ты гнилое.
 
Обосрался, так рот закрой и не воняй. Уже показано какое-ты гнилое.
Бозечьки, бозечьки. Воняет твоя немытая жопа после получасового дрыстания дерьма.
P.S. "какое-ты" это пишется без дефиса.
 
Да с твоей жопой явно что-то не так
Ты не осилил обоврать факт, что ты явный дебил? Расскажи людям, зачем ты дебил взял не используемый класс и написал его в первом посте?

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

Для тех, кто хочет еще улыбнуться с потуг GenCloud - это история, как покемон за свой ненужный код придумал цену в 18к рублей и .
 
Последнее редактирование:
На самом деле, там действительно говно код.
Доказательства:
1. Много конкатенаций и вызовов getCommand(). Результат вызова надо закэшировать. Да и в принципе лучше явно команду указать, а не конкатенировать.
2. Вместо этого: "getCommand().length()+6" намного лучше получить длину строки с ЯВНОЙ команды, а не с этого.
3. Вместо 3-х вызовов eventName.isEmpty() намного логичнее сделать 1 и закешировать.
4. Конкатенация в TextBuilder - е

Итого: код имеет излишнюю нагрузку и почти не читаемый. Вывод - это говнокод.
НО! Лучше иметь работающий говнокод чем ненаписанный идеал.
 
Последнее редактирование:
getCommand() - команда может быть разной, я писал выше. Ее нельзя явно указать, это класс модели. Напиши пример кеширования команды, которая неизвестна на момент времени написания. То есть минимум 2 пункта поста выше - это бред.
Второе - разве обращение к переменной через метод ведет к копированию объекта и его передаче? Нет - объект передается по ссылке.
Конкатенция строк может быть в какой-то версии ява оптимизирована, и тогда "вдруг" это станет работать оптимизировано. Но оно и до и после не говнокод и не может им являтся, использование стандартных функций java не является говнокодом, если java не является говнокодом вообще.
3. Закешировать eventName.isEmpty() ?
4. Конкатенация в TextBuilder - фреймворк не менаяет подходов, он может что-то ускорить, но при этом модель кода не поменяется.

Нельзя любой не оптимизированный для данной версии java код называть говноком.
Пример - программы написанные на с++ и скомпиленные под конкретную платформу работают быстрее чем java - значить любое java-приложение говнокод?
Вот такой вот факт, что на самом деле там нет никакого говнокода. Все твои пункты являются как минимум спорными, а так вообще некорректными, как доказательство.
Опровергни.

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

Я так понимаю этот echipachenko тоже был в команде с GenCloud - или это только предположение?
Если же это так, то это выпрыгивание тоже автоматически цирковое, а не типа "объективное".

Тут рассуждение покемона GenCloud - который обосрался и не смог доказать, что даже нашел типа говнокод. Слово "говнокод" не формализовано и не равно слову "оптимизированный" или "не оптимизированный". Вопрос говнокода не доказан и может быть субъективным. Это факт номер 3.

Жду опровержения очевидных фактов.
 
Последнее редактирование:
1. Я более чем уверен что пока выполняется код метода, команда точно не поменяется, а это значит что getCommand() вернёт одинаковый результат.
А даже если меняется - то это в корне не правильно.
Ибо вы при первом вызове к примеру сравниваете результат с "предполагаемым значением", а так как команда может поменяться, то у Вас есть случай непопадания не под один ИФ, потому что при первой проверке команда была одна, а при второй другая, но она могла подойти под первый иф, в следствии чего обработка не запустится.
3. Имеется ввиду сделать так: boolean isEmpty = eventName.isEmpty(); if (!isEmpty) {....}
4. Во первых это не фреймворк. Во вторых конкатенация во всех подобных случаях ведёт к неявному созданию StringBuilder-a, смысл тогда юзать текстбилдер пропадает. И что бы Вы понимали, в чём отличия фреймворка от библиотекы: фреймворк дает Вам Flow и LifeCycle, которому Вы должны подчинятся.

Согласитесь, этот код не идеален. А вот используется этот класс или не используется - это уже не моё дело.
 
Последнее редактирование: