擬似乱数に反応するやつは間違いなく・・・

http://d.hatena.ne.jp/nowokay/20081110#1226302607

所詮擬似乱数なので値の偏りがあるのは当たり前かと。でも、種を0から5000にすると少し緩和されますし、5000から10000では偏りを探すのは難しいという結果が出ました。きしださんのいう5000から10000が偏るというのが再現できませんでした。

で、こういった擬似乱数を扱う場合、種が重要です。8bit時代から種の値には時刻を使うというのが常識でした。今回も時刻を入れると偏りはまず出ません。

r.setSeed( System.nanoTime() );

んで、調べるとわかりますが、種を入れない場合これ使っています。つまり下手にやるくらいなら何もしないほうがまだ安全というわけです。

乱数の調整なつかしいですね。なんか20年前を思い出します。ゲームでは頻繁に使う(最近だとリプレイの維持のために自作するのが多いですが)基本的なものだけに、当時からいろんな試行錯誤がありましたけど、「種はマイナスだろJK」、「RND(-1)ですねわかります」という人は間違いなくおっさん技術者。

JavaSE 6 update10でのアプレットの起動時間

update10での改善点にアプレットの起動時間短縮というものがある。

というわけで試してみた。update7以前で計測していないため、比較は出来ないのだが確かに問題になる時間はない。しかし、もともとSunのJDKでは大幅に改善されており、特にhotspot VMになってから大幅に改善された。hotspotVMのコアの技術はサーバーサイドで恩恵がそんなにあるものではないということ。

Appletが遅いといわれた理由はずばり当時のブラウザの主流であったNetscapeに搭載されたシマンテックJIT VMにある。コンパイルしてから起動するので非常に速度が速く、ベンチマークでも圧倒的な速度を誇っていたのだが、起動時間がすさまじく遅く、インタプリタ時代のほうが使いやすかったというオチがついたのだ。1分とかブラウザが固まるってのはとんでもないことだとは誰も思わなかったのかねぇ。

その反省点からhotspotVMの開発が始まったと考えると悪いばかりではないと思うのだが、ちゃんとそのままアプレットが普及していれば少なくとも現在のWebアプリのような陳腐なHTMLを組み立てるWebアプリがこれほど普及することもなかったし、リッチクライアントの技術競争が激しくて面白かったのかもしれない。

起動後初回起動

マシンを起動し、ブラウザのみを立ち上げて、アプレットのあるページを表示。
何度か再起動させたが、おおむね3秒。まったく問題ない速度だね。これが10年前に実現できていれば・・・。

ブラウザ再起動

ブラウザを再起動し、アプレットのあるページを表示。つまりJavaアプレットのプロセスの起動時間の計測。
何度も確認したが、おおむね1秒以内に表示される。ブラウザをこまめに閉じる使い方をする人も多いので、これも問題ない速度なのがわかる。

アプレットのみ

一度アプレットを表示し、ブラウザはそのまま他のアプレット等のあるページを表示。
ずばり0秒。



はは・・・アプレット全然問題ないやん。今後はアプレットで作ろうかなぁ。でもJNIまわりが面倒だからやっぱりアプリケーションにしようかな。アプレットが動くということはスタンドアロンJavaアプリケーションも起動するわけで。入り口としてアプレット、本格的なアプリはアプリケーションスタイルということになるかな。通常のアプレットでもJNLPが使えるようになったおかげでWebStartアプレット(元々使ってる人少ないけど)の存在意義はなくなったかな。ドラッグでデスクトップにおけるようだし。


Javaは元々サーバーサイドの技術用に作られたのではなく、クライアントサイドで動くように作ったのがはじまり。したがってJavaでクライアントアプリを作ることこそがもっともJavaの本質をあらわす・・・ことになるよね?はてなキーワードからいろいろとみてると、Javaはサーバーサイドの話ばかりでつまらんよね?仕事ならともかく、趣味でもサーバーサイドばかりなんてなんとつまらんことよ(暴言)。

Webアプリよりはるかにゲーム開発のほうが敷居は低いのになんでネットで情報が少ないんだろう。書籍にしても10年以上の歴史がある中、Javaのゲーム関連書籍でまともに書かれてるのが1冊しかない(15歳からはじめる〜とかいうやつ)という時点でおかしいんだよ。

というわけでJava使いはみんなゲームつくろうぜ。DRAGON 'J' SPIRITとかそういうの楽しいだろJK。