トップページ⇒tech
983コメント299KB

クライアントサイドJavaどうよ? part2

■ このスレッドは過去ログ倉庫に格納されています
0001SunがダメNGNG
クライアントサイドでJAVAが普及するためにはどうすればいいか、
マターリ語りましょう。

前スレ
http://pc3.2ch.net/test/read.cgi/tech/1002160815/
003929NGNG
>>33 を見るまで気づかなかったのだけど、
jBV。って Swing を使ったインターフェイスを捨てて
proxy っぽく動作するようになったのか。

dat を直読みして適当に成形して表示すれば
そこそこ速度が出そうな気がするのだが、難しいのだろうか?
まあ自分でやろうとは思わないが (w

ちなみに PC-Unix では 「IE 以外の人は〜」の文と top.html の
中身全部が文字化けする。
漢字コード回りもちゃんと書かないと Run Anywhere にならなそう。
Kylix3 もそろそろだろうけど、過度の期待はしちゃ駄目なんだろうな。
0040デフォルトの名無しさんNGNG
>>36
>・データベース周りを作るとき
>・"C:\\Hoge" とかハードコードするバカが居るとき
は分かるんだけどさ,
>・GUI まわりを作るとき
ってもともと標準ライブラリにGUIが組み込まれてるのに何故?
携帯とかって意味?
0041デフォルトの名無しさんNGNG
おいらは自作のJavaアプリがLinuxのGNOMEでドラッグアンドドロップが動かなかった。
真面目につめていくと細かいところで色々躓きそうなヨカン。
標準入出力やストリームだけを相手にしてるのと
比べればやっぱり一筋縄ではいかないよ。

でも他の言語での「移植作業」に比べれば劇的な工数節約になってるはずなんだけど
みんな移植工数0を期待してるから悪目立ちするんだよな。
0042デフォルトの名無しさんNGNG
>>41
>おいらは自作のJavaアプリがLinuxのGNOMEでドラッグアンドドロップが動かなかった。
ああ,なるほど。そんなこともあるんですか。
#JavaはSwingアプリ作った時に何か遅いのが嫌で辞めてしまったので
#良く分かってないのです。叩かないでちょ。
0043 ◆HApPYsIE NGNG
>>39
dat直読みって早いけど、初回にスレ読むときしか使えないからね
(2回目以降も使ってるブラウザもあるけど、使ってないものもある)
まあ自分でやろうとは思わないw

文字コードの問題は、無指定だとOS標準文字コード使う処理が
まだまだ残ってるんで、多少やっぱりなって感じです。
通信関連の部分は、ほとんど指定したつもりだったけど・・・

報告さんくすでした。
近々Linux環境を整えるので、その時にでも修正してみます
0044デフォルトの名無しさんNGNG
>>41
今はどうかしらないけど、俺もそれ経験した気がする。
たしかNetscapeのブックマークは拾えたので、Motif系なんじゃないかと
0045デフォルトの名無しさんNGNG
JavaWebStartで新しいバージョンのアプリを
ダウソしてきて実行したときって、前のバージョン
にもどすことって可能?
0046デフォルトの名無しさんNGNG
> でも他の言語での「移植作業」に比べれば劇的な工数節約になってるはずなんだけど

冗談はよせ
0047デフォルトの名無しさんNGNG
>>46
具体例(体験談?)キボンヌ
KilixとかコードウォリアーとかJavaよりマルチプラットフォーム楽?
autoconfはどうなの?とかとか
0048デフォルトの名無しさんNGNG
>>47
46ではないが、日本含めて4ヶ国語対応アプリ一発でできたよ、
Windowsプラットフォームで動作確認、まぁJavaならあたりまえといえば当たり前だけど
ネイティブだと国ごとにいろいろうっとおしいからな
0049デフォルトの名無しさんNGNG
>>48
ん?通りすがりのものですが,
どのプラットフォームからどのプラットフォームへ移植したのですか?
0050デフォルトの名無しさんNGNG
JavaOneでアップルのデモ見たんだけど、MacのJava2Dで
ハードウェアアクセラレーションが使えるようになり、
素晴らしくスムーズに表示できるようになってたよ。
これはクライアントサイドの朗報じゃないかと。
0051デフォルトの名無しさんNGNG
なんか1.4.1FCSとかいうのが出てるが何がかわったんだろう・・
0052デフォルトの名無しさんNGNG
>>49
移植じゃなくて、新規でつくったんだよ
日本語Windowsで作っておいて、世界中にばらばいてやった
0053デフォルトの名無しさんNGNG
>>50
またひとつwrite once debug anywhereの要因が増えちゃったねえ
0054デフォルトの名無しさんNGNG
まあ、プラットフォーム毎に書かなくても良いだけでも OK さ。
0055デフォルトの名無しさんNGNG
だからオモチャって言われるんだな
0056名無しさん@XEmacsNGNG
>>55
それはアプレットだろ
0057デフォルトの名無しさんNGNG
>>52
ハァ?じゃあ何故>>48のような関係無い話をしたのですか?
ただの勘違いだったのならスマソ
0058名無しさん@XEmacsNGNG
>>58
>>48は頭弱いんだろ。
0059デフォルトの名無しさんNGNG
>>58 自答でつか?
0060デフォルトの名無しさんNGNG
>>48
言わんとしている事はよく理解できるが、ロケール間の動作互換性とプラット
フォーム間の移植性はまた別の問題。まぁ各国語版 Windows を異なるプラット
フォームと捉えることも出来ますが。
0061デフォルトの名無しさんNGNG
じゃあ>>48がちょこっと話の流れを勘違いしたということで終了。
0062デフォルトの名無しさんNGNG
例えばマウス動かすたびに new MouseEvent() とかなんとかやっちゃうのは、これはパフォーマンス的には、許容範囲でしょうか?

オブジェクトの使いまわしをしなければならない(あらかじめ作っておいた Event オブジェクトを listener に渡す)ほどの状況というのは、標準的にはどのくらいなのでしょうか。
1秒間に数回は起こるイベントでも、イベントオブジェクトを一個作るくらいなら気にしなくても OK なのでしょうか。
0063デフォルトの名無しさんNGNG
>>62
想定している動作環境で問題なければいいんでない?
0064デフォルトの名無しさんNGNG
>>63

そうっすね。気にしないどきます。
0065デフォルトの名無しさんNGNG

スレッドセーフってどういうこと?

コンストラクタなんかでも、例えば

--
class ACls {

..int x, y;

..public ACls( BCls b){
....x = b.getX()
....y = b.getY();
..}

}
--

この b.getX(), と b.getY() 実行する間に、b の の x と y の値がズバッと変わっちゃったりしたら、
ACls のオブジェクトの x, y の値は変なものになってしまうってこともありうるんですか。

(そうするとキリが無いような気がする)
0066U ◆tFsGiu0c NGNG
>>65
コンストラクタをスレッドセーフにする必要はないと思うけど:-)
普通のメソッドだったらそういうことです。ただ同期をとるのは
最小限にしないとパフォーマンスに悪影響があります。
0067デフォルトの名無しさんNGNG
long値がatomicに扱えないというのもあったなー
0068デフォルトの名無しさんNGNG
>>66
いや、この場合状態を持ってるのは b だから、コンストラクタ実行中に
別スレッドが b の状態を非アトミックに変えたら変なことになるかも。
あとコンストラクタ内で static フィールドいじるようなときはスレッド
セーフになるように意識しなきゃいけないし。
0069U ◆tFsGiu0c NGNG
>>68
>いや、この場合状態を持ってるのは b だから、コンストラクタ実行中に
別スレッドが b の状態を非アトミックに変えたら変なことになるかも。

なるほどね。じゃあ、

synchronized(b) {
}

で囲む必要があるわけか。でももし仮にgetX、getYがstaticフィールドの
値を返すのであればこれも意味ないね。

>あとコンストラクタ内で static フィールドいじるようなときはスレッド
セーフになるように意識しなきゃいけないし。

それはもちろん。
0070デフォルトの名無しさんNGNG
>> 1
こんなのどうですか?

JDesktopPaneとJInternalFrameを使って、
動的に読み込んだクラスをJInternalFrameに
表示するアプリを作る。(ある意味仮想デスクトップ)

各アプリは、InternalFrameで表示できる形にしておく。

仮想デスクトップなアプリを常時立ち上げておき、
そこにそれぞれのアプリを呼び出せば、
それぞれの立ち上げは速いはず。
今試してますが、結構いけそうな・・・

InternalFrame対応のアプリ
(ほとんど単にJFrameをJInternalFrameに置き換えるだけ)
がどんどん増えていけば、標準的な環境になるかも?
0071デフォルトの名無しさんNGNG
>>70
単にランチャーではだめなの?
007270NGNG
ランチャーでいいかも。
InternalFrameだと統合環境みたいで
かっこいいかなと思いました。(^^;

どちらにせよ、
内部的に読み込むことで、それぞれSwingを
立ち上げなおさなくていいから
その分の時間が軽減できると思うのだけれど。。

0073rubyistNGNG
無駄無駄w
0074名無しさん@XEmacsNGNG
>>70
http://www.jdistro.com/
とりあえず、あんたの言うようなものは既に開発されてる。
0075デフォルトの名無しさんNGNG
↑ほほー面白いけど遅くてつかえねー

つーかどうしてJavaでクライアントサイドつくるヤツってこうセンスがないんだろう
Swingそのものも問題だけどSwingを扱ってるヤツらのセンスも相当問題だ
0076デフォルトの名無しさんNGNG
Swingは「美しさ」を大前提に作られていますが何か?
Javaが第一義とするのは「美しさ」であることを理解していない
ヴァカは今すぐ殺んでほしいですね。
0077デフォルトの名無しさんNGNG
「殺んで」ってなんて読むの?
0078デフォルトの名無しさんNGNG
あややがほしいですね。
0079デフォルトの名無しさんNGNG
>>76
言語屋のオナニー?
0080デフォルトの名無しさんNGNG
>>76
美しくないという意見は多いのは事実。
事実ぐらい受け入れろよ。
0081デフォルトの名無しさんNGNG
>>80
誰の意見?
まさか2ちゃんでそういう発言が多い
とか言わないよね(藁
008270NGNG
ああ、荒れて。。。

>>71
ランチャで十分でした。

>>74
やっぱり思いつくようなものは
たいがい作られてますね。
めざせKDEってとこでしょうか。
使い方はわかりにくいですが。

>>75
センスってどの辺の話?
0083デフォルトの名無しさんNGNG
>>50, >>53
「Mac でハードウェアアクセラレーションが使えるようになった」
→「Debug Anywhere の要因が増える」
っていう話の流れを他でも見かけますが、これってどういう理屈なんでしょう?

「(Win の?) Java 1.4 でビデオメモリに直アクセスするようになったので
描画が速くなった」という話とは根本的に違うことなのでしょうか?

あと、Mac で速くなるのは Swing の Mac Look and Freel だけ?
それとも Swing 全体について速くなるのでしょうか?

なんか中途半端な知識で書いてるので
突っ込みどころ満載な文章でスイマセヌ。
0084デフォルトの名無しさんNGNG
(´・ω・`)ショボーン
008550NGNG
>「Mac でハードウェアアクセラレーションが使えるようになった」
> →「Debug Anywhere の要因が増える」
> っていう話の流れを他でも見かけますが、これってどういう理屈なんでしょう?

APIの中身は変わったけれど、外見は変わらないので、既存のコードは
理屈上問題なく動く。
でも人間のやる仕事に完璧はないので、もしかしたらピュアJava版Java2Dと
OpenGL版(だったと思う)Java2Dで動作が違うことはあり得る。
それでDebug Anywhereの要素が増える。
DirectX版Java3DとOpenGL版Java3D程度の差だろうな。

だから、
> 「(Win の?) Java 1.4 でビデオメモリに直アクセスするようになったので
> 描画が速くなった」という話とは根本的に違うことなのでしょうか?

これは違わない。

> あと、Mac で速くなるのは Swing の Mac Look and Freel だけ?
> それとも Swing 全体について速くなるのでしょうか?

MacのSwingがネイティブコード使ってるってのは本当?
もしもそうなら、Mac Look and Feel以外は速くなると思うんだけど。
たぶんSwing全体で速くなるけど、どちらかというと重要なのは
たとえばJavaでフラッシュ的なことやゲームとかを書きたい時とかじゃないかと。
画像に複雑な回転だとか拡大縮小をかけてピュアJava版と比較してたが、
ピュアJavaだと秒間5か6フレーム程度だったが、
ハードウェアアクセラレーションかかってるのは500フレームとか
無茶な数字が出ていて、そのくせメモリ消費量は減っていた。
JDKのおまけのJava2Dのデモもサクサク動いてた。
あれで何か書いてみたいなあ。
0086デフォルトの名無しさんNGNG
>>Swingは「美しさ」を大前提に作られていますが何か?

ギャグにもならんな

>>センスってどの辺の話?

どの辺もなにも全部、アイコンもメニューも何もかも

Swingはクラス設計はよく出来ている(というか美しく出来ている)
だけにUIのダサさは許せん、即刻腕のいいデザイナーを雇うべき

MacのJavaは高速でAqua LookAndFeelを兼ね備えているらしいので気になっているが
MacOS Xそのものがもう少し軽く、使いやすくならないと買う気にはならない
0087デフォルトの名無しさんNGNG
Swing綺麗ジャン。
MFC見ろよお前ら
0088デフォルトの名無しさんNGNG
きれい汚いは主観の問題。ネット上じゃあまりマトモな論議にならんと思われ
0089デフォルトの名無しさんNGNG
↑ただし今のが良いとは思ってないけどね。Metal 最初に見たときはきれいと思ったけど
ああいうのはすぐに見飽きるもの。Flash 程度の Swing 用 Look and Feel ビルダー
(スキン感覚程度で使えるもの) を求む。
0090デフォルトの名無しさんNGNG
なんつーか、Java関係のライブラリの美しいは最近歪んできているようなきもする
なにとはいえないが、なんか変な気がする
なにがこう私に感じさせるのだろうか・・・
0091デフォルトの名無しさんNGNG
>>90
古いバージョンに対する後方互換を維持しながら、おなじ層を担当する
(初期には想定していなかった)新機能を織り込んでいこうとすると、
マクロ的な見方ではでかいばかりでこ汚い、というものになってくとお
もう。コレは仕方ないことかも。

今から入ってくるヒトには分け分からんこともあるだろうね。
java.ioとjava.nioなんて、なんで両方あるか(なんでこんな分け方
してるのか)納得できるnewbeeっているのかね。
0092デフォルトの名無しさんNGNG
見た目の美しさじゃなくて設計、構造の美しさの話なんですけと?
ヴァカですか?
0093デフォルトの名無しさんNGNG
古いコレクションクラスは例外に対し安全じゃないとか聞いたなあ
0094デフォルトの名無しさんNGNG
>>83 >>85

今月のソフトウェアデザインに関連記事があります。
「Macには元々ココア&objectiveCというネイティブな開発環境があって、
それがjavaから呼び出せるようになった。」と解釈したけど。。。
なのでswingでもピュアjavaでもなさげです。
ちょっと興味出てきたけど。
009594NGNG
あとjavaの設計、構造が美しいとよくきくけど、
ちょっとでも性能を上げようとするとどんどん汚くなってくよね。。
なので可読性&汎用性か性能のどちらを重視するかで
話は変わってくると思う。
ただ性能重視の場合、Cで書いたほうが賢い。
009694NGNG
あとswingがダサいとか汚いとかもよくきくけど
それってmetalとmotifのことを指してるの?
WindowsLookAndFeelを使えばべつに普通だし、
SkinLFとか使えば見た目は好きにできるので
ダサいも何もって感じなのですが。
0097デフォルトの名無しさんNGNG
>>96
Windows風であってWindowsそのものではない
その微妙な違いがクライアントに評判悪いという話をどこかのスレで見たよ
0098デフォルトの名無しさんNGNG
おまえらJavaをJava特有の方法で高速化する方法を教えてください。
とりあえず、使えるところではなるべくfinalにすること、
くらいしか思いつきません。
0099デフォルトの名無しさんNGNG
>>98
実機を高速なものにする
010096NGNG
>>97

はあ。。。勉強不足でした。
そういう次元の話なんすね。

個人的にはL&Fで好きにできるのが
気に入ってますが。

>>98

java特有の方法なら、
できるだけコードを美しく書いて
あとはマシンのパワーでカバーって
ことになる?

それ以外なら
・なるべくインスタンスを使わずに1クラスで書く
・インスタンスは使いまわす
とかなんでしょうか。
0101デフォルトの名無しさんNGNG
>>98
アルゴリズムを勉強して、設計も勉強しろ。
0102デフォルトの名無しさんNGNG
・バイトコードで書く
・オブジェクト指向を捨てる
010398NGNG
>>99
>>101
Java特有の話ではないじゃないか。

>>100
・なるべくインスタンスを使わずに1クラスで書く
これよくわかん

>>102
Javaのインラインアセンブラ萌え

どこかのコードで、高速化のためかフィールドをtransient宣言しまくってるのを
見た事有るんだけど、意味あるんだろうか。
0104名無しさん@XEmacsNGNG
>>98
javaは(VMの起動を除いて)遅いのではなく、処理にかかるコストが見えにくく
なってるだけで、ロジックの処理速度自体は、他の言語と大して変らない。

便利さを犠牲にすればスピードアップは可能
Reader/Writerより、Stream. Stringよりbyte[]かchar[].
JDKクラスライブラリよりプリミティブ型を使って自前で実装
とか。

> どこかのコードで、高速化のためかフィールドをtransient宣言しまくってるのを
> 見た事有るんだけど、意味あるんだろうか。

直列化のコストが減る。
010596=72NGNG
>>98
>>・なるべくインスタンスを使わずに1クラスで書く
>これよくわかん

>>102 におじ

あとgcとフィールド変数のnull化をしっかり行う。
なんにせよどんどんjavaらしさはどんどんなくなってくね。

あとはVM立ち上げのオーバーヘッドをなくすために
ランチャ(以下略)




010698NGNG
>>104
>javaは(VMの起動を除いて)遅いのではなく、処理にかかるコストが見えにくく
>なってるだけで、ロジックの処理速度自体は、他の言語と大して変らない。
状況によってはJavaの方が原理的に早くできる可能性があったりするしね。

・実行時に実行環境(CPUのモデルなど)の情報が得られるので、
実行環境にあわせて最適化する事が出来る。
・GCがメモリのデフラグしてくれるので、ヒープメモリの取り扱いに有利
・実行時の統計(if文でどっちに分岐するか等)を元にして、
動的に最適化することができる。

これをJREが実装してるか否かは別の問題モナー

>直列化のコストが減る。
直列化しないときでも影響あるのかな?

あと細かいところでは、StringじゃなくてStringBufferを適宜使う、
変数名を短くする(←そんなに効果有るのか?)、
内部クラスはなるべくstaticにする、
ArrayListで要素のサイズが確定した後はObject[]にコピーしてそっちを使う、
try catchはなるべく使わない、
等を思いつくのだけど、どうだろう。突っ込み歓迎。
0107デフォルトの名無しさんNGNG
起動が遅めのNetscape が半起動待ち受け状態に
対応してるのだから、JavaVMも対応しろYo。
0108デフォルトの名無しさんNGNG
http://java.sun.com/mail/index.html
Java関連のコメントや要望宛先一覧。
0109デフォルトの名無しさんNGNG
>>107
OSに組み込め
0110デフォルトの名無しさんNGNG
>>106
Javaのtry-catchはC++と違って性能に影響を及ぼさない
0111デフォルトの名無しさんNGNG
>>110
でも、throw使うと急に性能が悪くなるんだよな、これが。
0112デフォルトの名無しさんNGNG
>>110-111
それってVMの実装に依存するんでないの
0113デフォルトの名無しさんNGNG
>>98

ボトルネックな部分を探して、そこに
・なるべく処理を回さない
・それがio系なら裏で処理をさせる
・その部分だけ、バイトコードorCで書く
0114デフォルトの名無しさんNGNG
ボトルネックな部分を探して,その部分の
・最初に/*を書く
・最後に*/を書く
・コンパイル&実行
↓
ウマー
0115デフォルトの名無しさんNGNG
>>112
try-catchの部分のバイトコードを逆アセンブルしてみれば
「例外が投げられないかぎり」性能に影響を与えないコードになってるのがわかる
例外が投げられると性能が落ちるのは111の言うとおり
(C++だと例外が投げられようが投げられまいがtry-catchを書いただけで性能が落ちる)
011698NGNG
バイトコード直書き説が有力になってきた・・・
1.5でasmブロックの導入きぼーん(大嘘)

今日の作業で、Jythonで記述したPlug-inへの呼び出しが
パフォーマンスのボトムネックになってることを発見しますた。
Plug-inの記述言語をJythonから生バイトコードにしようか検討中(萎え
0117アフォNGNG
どうでもいいけど、PerlのCPANみたいなJavaサイト知らない?
CYGWINのSETUPみたいにTOMCAT落とせると最高なんだが。
0118デフォルトの名無しさんNGNG
age
0119デフォルトの名無しさんNGNG
>>117
一瞬WebStartのことかとオモタ。
ちなみに知らない。糞レスすまそ
0120デフォルトの名無しさんNGNG
ハーボットもFlash化…
やっぱりクライアントサイドはだめぽ
0121デフォルトの名無しさんNGNG
1.4.1_01
0122デフォルトの名無しさんNGNG
1.4.1_01 か。
グラフィックカード依存の Windows クラッシュバグが直ってないと入れる気にならん…。
でもそういう情報ってどこにあるんだろ。
試してまた青画面ってのも精神衛生上良くないし。。
0123名無しさん@XEmacsNGNG
>>122
リリースノート
0124デフォルトの名無しさんNGNG
リリースノートじゃ 1.4.1 と 1.4.1_01 の違いってわからないのでは?
と思ってたらちゃんと書いてあるのね。失礼。

1.4.1: http://java.sun.com/j2se/1.4.1/relnotes.html
1.4.1_01: http://java.sun.com/j2se/1.4.1/ReleaseNotes.html

でも俺が気になってるバグは直ってなかった…。トホホ。
0125デフォルトの名無しさんNGNG
ウィンドウを常に手前に表示する(アクティブではなく)ことがいまだに出来ない
BugParade じゃなんか勘違いしてるみたいだし鬱
0126デフォルトの名無しさんNGNG
Macに常に手前に表示ってあるの?
というあたりがネックになってると妄想
0127デフォルトの名無しさんNGNG
Sunがまた、どんなDQNなWinXP LookAndFeelを出してくるか楽しみだ
0128デフォルトの名無しさんNGNG
Windows XPに設定されているLook And Feelに変更するLook And Feel
0129デフォルトの名無しさんNGNG
>>127
SWT Look and Feel が出る予定です
0130デフォルトの名無しさんNGNG
やっぱりGUIをJavaだけで作るのは失敗だったな。
0131名無しさん@XEmacsNGNG
>>130
ハァ?
0132デフォルトの名無しさんNGNG
このスレの住人はともかくとして、一般的にSwingはクソって
いう共通認識がある。というか、実際クソ。
0133アフォNGNG
久しぶり。
俺は、J2EEをもったいぶらずに、クライアントサイドへ持ってくればいいと思う。
CachedRowSet 欲すぃ。
そして、それを利用したライブラリからライセンス料搾取しないでホスィ。
Swingのどの辺が駄目?CollectionViewとか見てみた?

久しぶりにこっちも。
http://www.bekkoame.ne.jp/ha/vzy03312/asrabbit/
そしてWeb上にでっかいメモ帳が欲しい。 no-ip.com 検索中。
0134デフォルトの名無しさんNGNG
Swingけっこう好きなんだけどなあ。
速度もそんなに遅くなくなってきたし、融通は利くし。
0135デフォルトの名無しさんNGNG
>>129
一応つっこむけど
嘘だよな!?
0136デフォルトの名無しさんNGNG
>>133
>>CachedRowSet 欲すぃ。

Serializeの使い方わかってるなら、ValueObjectを適当に作って
RMIでオブジェクト丸ごと投げればいいだけじゃないのけ?
0137デフォルトの名無しさんNGNG
SwingにしてもAWTにしても
どうでもいい機能がいっぱいついているクセに肝心な機能がついてない

レイアウトマネージャの動きも
マトモな人間が考えたとは思えん
0138デフォルトの名無しさんNGNG
肝心な機能とは?
■ このスレッドは過去ログ倉庫に格納されています