LINUX.ORG.RU

Java не угрожают ни PHP, ни Ruby, ни C


0

0

Джеймс Гослинг (James Gosling), автор языка Java, на конфереции Sun World Wide Education & Research, заявил (English) о том, что для Java не являются большой угрозой новые языки, вроде PHP или Ruby, которые специализируются на своих отдельных областях. По мнению Гослинга, все они также страдают от проблем с производительностью и масштабируемостью. Что же касается C#, то, в глазах автора Java, он имел потенциал, но ровно до тех пор, пока Microsoft не сконцентрировалась на одной своей платформе. Гослинг также напомнил всем, что Java может работать в связке с другими языками.

Интересно также посмотреть ответы на эти заявления из лагеря поклонников динамических языков, например http://lesscode.org/2006/03/12/someon...

>>> Собственно заявление



Проверено: Shaman007 ()
Ответ на: комментарий от anonymous

1) А какая мне должнга быть разница на чём сделана страничка?

2) Я на занимаюсь веб. Но знаю, что есть приблуда для построения
графиков которую можно использовать в том числе и для веб, но
которую я использовал в Swing'ах

3) Сразу извиняюсь, что процитирую вас (не люблю на "сам дурак"
переходить)

> Посчитай, сколько тебе в жабе надо коду налабать для вывода
> диаграмке

В ответ я привёл Java аналог, который позволяет графики строить
несколькими строчками.

4) Я не в курсе на чём написали GD

5) Не нужно вот так вот делать:

> Тебе про gc в жабе рассказать или сам самообразуешься?:)

Это по меньшей мере не прилично переходить на личности.
Про GC, я думаю, знаю побольше вас, если уж на то пошло.

anonymous
()
Ответ на: комментарий от anonymous

Ладно, sorry за "стиль профессора Луговского" - просто захотелось 
постебаться.:)

Вы поймите, что инструмент выбирается под задачу. Я знаком с 
JFreeChart и JFreeReport. Естественно, что они требуют еще одного слоя
 - JCommon.
Это еще терпимо в однопользовательской среде. Но на сервере наплодите 
кучу объектов. Бедный gc!:(

GD (точнее GD2)- смотрите исходники

Диаграмка на GD очень просто строится. Draft такой сразу напрашивается:

  $length = 150;
  $width  = 150;
  $dia_width= 15;

  $im = ImageCreate($length + 20, $width * 2 + 20);
  $bg = ImageColorAllocate($im, 255, 255, 255);
  $black = ImageColorAllocate($im, 0, 0, 0);

  $cx = $length/2;
  $cy = $width/2;

  $color[0]      = ImageColorAllocate($im, 255,  0, 0);
  $color_dark[0] = ImageColorAllocate($im, 128,  0,  0);

  $color[1]      = ImageColorAllocate($im, 128,  0, 128);
  $color_dark[1] = ImageColorAllocate($im,  64,  0, 64);

  $color[2]      = ImageColorAllocate($im, 0,   255,   0);
  $color_dark[2] = ImageColorAllocate($im, 0,   128,   0);

  $color[3]      = ImageColorAllocate($im, 0,   128, 128);
  $color_dark[3] = ImageColorAllocate($im, 0,    64,   64);

  $color[4]      = ImageColorAllocate($im, 0,    0,    255);
  $color_dark[4] = ImageColorAllocate($im, 0,    0,    128);

  // может быть и динамически формируемый массив - это просто пример для 5 бального голосования

  $data = array();

  array_push($data, $m1);
  array_push($data, $m2);
  array_push($data, $m3);
  array_push($data, $m4);
  array_push($data, $m5);

  $num = count($data);

  $sum_votes = 0;
  for ($i = 0; $i < $num; $i++) {
    $sum_votes = $sum_votes + $data[$i];  
  }
  $coeff = 360 / $sum_votes;

  
  for ($j = ($cy + $dia_width); $j > $cy; $j--) {
      $angle = 0;
      for ($i = 0; $i < $num; $i++) {
          ImageFilledArc($im, $cx, $j, $length, $width/2, $angle, $angle+$data[$i] * $coeff, $color_dark[$i], IMG_ARC_PIE);
          $angle = $angle + $data[$i] * $coeff;
      }
  }

  $angle=0;
  for ($i = 0; $i < $num; $i++) {
      ImageFilledArc($im, $cx, $j, $length, $width/2, $angle, $angle+$data[$i] * $coeff, $color[$i], IMG_ARC_PIE);    
      $angle = $angle + $data[$i] * $coeff;
  }

  for ($i = 0; $i < $num; $i++) {
      ImageFilledRectangle($im, 0, $width + 22 * $i, 20, $width + 22 * ($i + 1) - 2 , $color[$i]);
      $txt_mark  = iconv("windows-1251", "UTF-8", " баллов"); 
      $txt_votes = iconv("windows-1251", "UTF-8", " голосов"); 
      ImageTTFText($im, 10, 0, 30, $width + 22 * ($i + 1) - 6, $black, getcwd()."/arial.ttf", ($i+1) . $txt_mark . ": " . $data[$i] . $txt_votes);      
  }

  $txt_all = iconv("windows-1251", "UTF-8", "Всего голосов"); 
  ImageTTFText($im, 10, 0, 0, $width + 22 * 6, $black, getcwd()."/arial.ttf", $txt_all . ": " . $sum_votes);      

  $txt_avg = iconv("windows-1251", "UTF-8", "Средний бал"); 
  $sum = 0;
  for ($i = 0; $i < $num; $i++) {
    $sum = $sum + $data[$i] * ($i + 1);  
  }
  $avg = $sum / $sum_votes;

  $avg_text_float = sprintf("%4.2f", $avg);

  ImageTTFText($im, 10, 0, 0, $width + 22 * 7, $black, getcwd()."/arial.ttf", $txt_avg . ": ". $avg_text_float);      

  header("Content-type:image/png");
  ImagePNG($im);
  ImageDestroy($im);

Ну и вызов:

  echo "<img src='pie.php?m1=10&m2=10&m3=6&m4=10&m5=20'>";

Усовершенствования сразу можно внести - автомосштабируемость.

Для вычисления длины/высоты строки (немоноширинной!!!) можно свою функцию на С создать.

Сравниете производительность с JFreeChart+JSP. Используйте - это GPL:)

Удачи!

anonymous
()
Ответ на: комментарий от anonymous

> Я на занимаюсь веб

Тогда и не говорите лишнего. И не пытайтесь показать себя всезнайкой. А то нехорошо получается.

anonymous
()
Ответ на: комментарий от anonymous

Кусок сервлета аналогичный приведённому:

int length = 150;
int width = 150;
int dia_width = 15;

int cx = length / 2;
int cy = width / 2;

Color[] color = new Color[] {
new Color(255,0,0),
new Color(128,0,128),
new Color(0,255,0),
new Color(0,128,128),
new Color(0,0,255)
};

Color[] color_dark = new Color[] {
new Color(128,0,0),
new Color(64,0,64),
new Color(0,128,0),
new Color(0,64,64),
new Color(0,0,128)
};

BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2d gr = createGraphics.createGraphics();

int [] data = new int[] {
Integer.valueOf(get(m1)),
Integer.valueOf(get(m2)),
Integer.valueOf(get(m3)),
Integer.valueOf(get(m4)),
Integer.valueOf(get(m5))
};

int num = data.length;

int sum_votes = 0;
for (int i = 0; i < num; i++) {
sum_votes += data[i];
}

int coeff = 360 / sum_votes;


for (int i = 0; i < num; i++) {
gr.setSolor(color[i]);
gr.fillRect(0, width + 22 * i, 20, width + 22 * (i + 1) - 2);
gr.setColor(Color.BLACK);
gr.drawString(Integer.toString(data[i]), data[i], 22 * (i+1) * 6, 30);
}

// Тут результирующие надписи и прочее и прочее

ImageIO.write(result, "png", out);

А теперь в доки про Java2D API.

Ну и вызов:

в html <img src='servlet?m1=10&m2=10&m3=6&m4=10&m5=20'>

И никаких jfreechart. И производительность не хуже уже в любом случае чем у приведённого когда

удачи

anonymous
()
Ответ на: комментарий от anonymous

Кстати " не занимаюсь" не есть "не занимался" телепат вы наш

anonymous
()
Ответ на: комментарий от anonymous

Я игрался с JFreeChart. Равно как и с 2D.

Нет, это не аналог моего кода.:( Ну а теперь вставьте все это в сервлет / JSP. Сравните 100% аналог.:)

> И производительность не хуже уже в любом случае чем у приведённого когда

Посмотрите сколько объектов наплодили.

anonymous
()
Ответ на: комментарий от anonymous

Да все эти объекты умрут в молодом поколении и GC даже не заметит этого. Этот код вставится в Servlet без проблемю

anonymous
()
Ответ на: комментарий от anonymous

Вы полное решение представьте. А потом отпрофилируйте. Теоретически мы все сильны философствовать.:)

---------------------------------

Кстати, а куда вычислитель длины строк подевался? Слинял?

anonymous
()
Ответ на: комментарий от anonymous

SwingUtilities.computeStringWidth() - медитируй.

А что тут профилировать. Я не сохрянял нигде ссылок - поэтому GC собирёт эти объекты в первый же свой проход по молодому поколению.

anonymous
()
Ответ на: комментарий от anonymous

эх сколько слов что де на php много сайтов, на java меньше и из этого пытаются сделать аргумент. Разговаривая недавно с одним человеком, держащим сайт, посвященный java задал ему вопрос - а почему сайт то на пхп - ответ был один - хостинг с java стоит денег. И это действительно единственная причина (равно как и простота) почему PHP популярен. И не надо приводить в пример OSCommerce - если Zend регулярно кричит что PHP созрел до enterprise рынка, разве это не говорит об обратном?

вам нужны примеры? http://atlassian.com/software/jira/ лучшая Bug Tracking, Issue Tracking, & Project Management cистема (да да против trac я ничего не имею, но аналоги на пхп есть?). или вот ещё изучите http://manageengine.adventnet.com/

vansickle
()
Ответ на: комментарий от r

Если уж вам new Ciolor не нравиться.. То вы конечно можете его в сервлете заэкстрактить в static final поле - это сократит немного времени. Но это я не считаю таким уж критинычм, но то что это разумное замечаение - согласен.

anonymous
()
Ответ на: комментарий от r

ВНИМАНИЕ: КОД ДЛЯ TTF!!!

ВСЕ - ТЫ СДЕЛАН!!!!!! 


  $str  = "Hello, World!";
  $path=getcwd();

  $font = $path . "/arial.ttf";
  $array = imagettfbbox ( 12, 0, $font, $str);
  echo $array[2] - $array[0];

  echo "<p>";


  $font = $path . "/impact.ttf";
  $array = imagettfbbox ( 12, 0, $font, $str);
  echo $array[2] - $array[0];

  echo "<p>";


  $font = $path . "/times.ttf";
  $array = imagettfbbox ( 16, 0, $font, $str);
  echo $array[2] - $array[0];

  echo "<p>";


  $font = $path . "/arial.ttf";
  $array = imagettfbbox ( 14, 0, $font, $str);
  echo $array[2] - $array[0];


-------

Или с "линеечкой"


  $length = 200;
  $width  = 200;

  $str  = "Hello, World!";
  $path=getcwd();

  $size = 16; // поиграемся:)

  $font = $path . "/arial.ttf";
  $array = imagettfbbox ( $size, 0, $font, $str);
  $sl = $array[2] - $array[0];
  

  $im = ImageCreate($length, $width);
  $bg = ImageColorAllocate($im, 255, 255, 255);
  $black = ImageColorAllocate($im, 0, 0, 0);
  $blue = ImageColorAllocate($im, 0, 0, 255);

  ImageTTFText($im, $size, 0, 0, 50, $black, $font, $str);      

  imageline($im, 0, 10, $sl, 10, $blue);

  header("Content-type:image/png");
  ImagePNG($im);
  ImageDestroy($im);




anonymous
()
Ответ на: комментарий от anonymous

Да это не мне не нравится. Просто этот PHPшник реально думает что "new Color()" это "вон сколько объектов наплодили" а $color[0] = ImageColorAllocate($im, 255, 0, 0); или даже $length = 150; ему дался совершенно бесплатно...

r ★★★★★
()
Ответ на: комментарий от r

СЛИВ ПРИНЯТ!:)

Ты просто показал, что ты - ламо и болтун! Иди на Майдан, расскажи, что тебя клятые москали обижают.

anonymous
()
Ответ на: ВНИМАНИЕ: КОД ДЛЯ TTF!!! от anonymous

BufferedImage result = new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB); Graphics2d gr = createGraphics.createGraphics();

String str = "Hello World!";

int x = 10, y = 10;

gr.setColor(Color.BLACK);

gr.setFont(Font.getFontt("Arial")); gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Impact")); gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Times")); gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Arial")); gr.drawString(str,x,y += 30);

gr.setColor(Color.BLUE); gr.drawLine(0,y, 200,y);

ImageIO.write(result, "png", out);

Что-то у тебя делалка по-моему сломалась. Иди учись мальчик.

anonymous
()
Ответ на: комментарий от r

На любуйся

"А что он уже научился считать длину стринга в немоноспейсед шрифте? Или афинные трансформации?"

Ты это брякнул? Вот и получил ответ.

ТРАНСФОРМАЦИИ вместо "преобразований" это круто! Почти как "перша прохiдня".

anonymous
()
Ответ на: ВНИМАНИЕ: КОД ДЛЯ TTF!!! от anonymous

BufferedImage result = new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB);
Graphics2d gr = createGraphics.createGraphics();

String str = "Hello World!";

int x = 10, y = 10;

gr.setColor(Color.BLACK);

gr.setFont(Font.getFontt("Arial"));
gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Impact"));
gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Times"));
gr.drawString(str,x,y += 30);

gr.setFont(Font.getFont("Arial"));
gr.drawString(str,x,y += 30);

gr.setColor(Color.BLUE);
gr.drawLine(0,y, 200,y);

ImageIO.write(result, "png", out);

Что-то у тебя делалка по-моему сломалась.
Иди учись мальчик.

anonymous
()
Ответ на: комментарий от anonymous

Ты мне какую-то хренотень написал. Ты разве не понял, что я показал, как в PHP GD считается длина строки немоноширинного шрифта, а то тут брякнул кто-то про "афинные ТРАНСФОРМАЦИИ" (!). Иди проспись! :)

anonymous
()
Ответ на: комментарий от anonymous

Я понимаю почему Гослинг утверждает что PHP не угрожает Java. Разве можно серъёзно воспринимать вот таких вот ораторов :) Тебе уже доказали, что что ты выдвигаешь как уникальную особенность PHP Java легко умеет. Так что остынь

anonymous
()
Ответ на: комментарий от anonymous

А как ты собираешься кстати писать под углом например в 32 градуса? Или же вывести картинку под углом 37 градусов?

Я например в Java сделаю так gr.rotate(Math.toRadian(27 )); и выведу то что мне нужно. А ты то как это будешь делать?

anonymous
()
Ответ на: комментарий от anonymous

>СЛИВ ПРИНЯТ!:)

Слышишь ты мутант? Тебе показать как твой говеный скрипт нахер пошлет весь твой сайт или сам документации по используемым функциям почитаешь?

Наплодилось дибилов.

r ★★★★★
()
Ответ на: комментарий от anonymous

>ТРАНСФОРМАЦИИ вместо "преобразований" это круто!

Это все что тебя беспокоит? Бедняга.

r ★★★★★
()
Ответ на: комментарий от anonymous

>Так что остынь

Да он просто дите, которое нашло что его любимый пых пых хоть что-то таки умеет и теперь его просто прет.

r ★★★★★
()
Ответ на: комментарий от r

Что-то меня и вправду зацепило.. Ведь не вебом же занимаюсь. Просто странно года 4 назад делал для веб на Java графики и все работало, а тут появляется чел и говорит, что Java это тормоза и нужно много кодить что-то там и вообще PHP наш выбор. Вот и вспылил :)

Ладно буду дышать глубже.

anonymous
()
Ответ на: комментарий от anonymous

>Ладно буду дышать глубже.

Точно. Пускай ищет как его суперскрипт заваливается достижением memory limita.

Нет раковое решение конечно есть как защитится от out of memory. Но во что превратиться код сколь нибудь сложного графика....

r ★★★★★
()
Ответ на: комментарий от r

Почему он должен завалиться от memory limita? Он не создаёт долговременных ссылок на объекты? Если ты действительно силён в Java то для тебя не составит труда сделать выводы.

anonymous
()
Ответ на: комментарий от r

Упс. Походу я запутался я думал ты про Java код.

anonymous
()
Ответ на: комментарий от anonymous

Я сам три раза видел как рисование картинок из Java выносили в вызов gnuplot-а и graphviz. Потому что так было быстрее. В общем Java может там чего и умеет но тщательно это скрывает.

ebuilder
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.