変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

インターネット

JavaのBean

実体は、
private なプロパティにSetter/Gettorを付けただけのもの。

class  xxxBean {

private int aaa;

int getAaa(){ return aaa; }

void setAaa( int aaa) { this.aaa = aaa; }

}

これが美味しいのは、
ちょこっとコードを付け加えると、容易に似たものがいっぱい作れるからだ。
例えば、
void setGMT(Date gmtTime) { this gmt = gmtTime; }
で時刻をセットしたら、
Date getJst() /* 日本 */         { return gmtTime  + 9 hour; }

Date getEst() /* アメリカ西部*/{ return gmtTime  –  9 hour; }

Date getEt() /* アメリカ東部*/{ return gmtTime  –  5 hour; }
で判れば便利だからだ。
でも、全世界分のメソッドを作っても、賞味期限は不明なので、別のやり方(Locale)で延命している。
Localeでも新しい標準時刻が規定されれば、新しいstatic Locale を追加しなければならないが、メソッドそのものを追加する必要はない。
だが、50歩100歩なので、実際は大きな差は無い。
新しいメソッドを追加しないと国際問題になるが・・・
新しいstatic Localeを追加しなくても
代用で済むならOKな世の中の情勢によるところが大きい。
このBeanを使うと全てのメソッドは大雑把に

XxxBean   aMethod (YyyBean)

に纏めることができる。
が、それはC言語どころかCOBOLでもBASICでも同じで、できないのは古い版のFORTRANぐらいなものだ。
※構造体の概念が欠落しているからね。
しかし、JavaだけBeanとか言っているところが、幼い感じがする。
そう、今のJavaは幼い。
見の丈が足らない。
例えば、インターフェースのための、ヘッダーファイルを定義できない。
インターフェースとして外殻だけだがクラスとしての実態を持たなければいけないので、
インジェクションによる初期化が必要なクセにそのコードの実装は実に巧みに隠しているため、
ソース上は丸く収まっても、実行してみれば・・・インターフェースのオブジェクトの実体はnullポインターなので、Exceptionが容易に発生する。
つまり、一通り出来上がっている振りをしているが、実は使い物にならないのだ。
そのため、jarをいくつもクラスパスに記述しないと、executeすらできない
ボロクソなものになってしまっている。
なぜこうなってしまったのかと云えば
java  xxxxx  -jar zzzzz.jar
と手軽に実行できるので、null pointer exceptionが起きたら・・・
足りない何かをくっ付けて
java  xxxxx  -jar zzzzz.jar -jar yyyyy.jar
とすれば済んでしまうので、
Javaコードの集合体はセキュリティ的には非常に危ない作りになっている。
java  xxxxx  -jar virus.jar -jar zzzzz.jar -jar yyyyy.jar
で簡単に乗っ取ることができる。
しかしサーバー内の話なのでOKということになっている。
ま、侵入されるなら、それ以前の出来事と云うところなのだろう。
 
 



Javaのインジェクションと節操のない初期化の山

簡単に書くと
ドコの
xxxDao   dao; /* 実は普通のクラスではなくinterfaceクラス */
なソースに
dao.selectXXXX(dto);
すれば、
簡単にNullPointerExceptionが起きて使えないが、
どこかでコッソり
dao = new xxxDaoBean();
してしまえば使える様になるたったそれだけのこと。
@EJB    ejb.jarのどこかのクラスのstatic Mainメソッド
とか
@Resource   ibatis.jarのどこかのクラスのstatic Mainメソッド
とか
アノテーションを書いておけば、誰かがやってくれる。
ハズ。
え?勝手にどうやって動くのか?

class   xxxx{

static {

/* スタティックの無名領域で初期化を無意識に恣意的に実行 */

initialize();

}

void  static initialize () {

/* 沢山の初期化処理 */

}

}

 で、いいじゃないですかね?
簡単でしょ?
※同じことはC++でも出来ます。
 
実は、環境に応じて、
dao = new batchDaoBean();
とか
dao = new onlineDaoBean();
とか
dao = new androidDaoBean();
とか
dao = new iosDaoBean();
とかに差し替えが効くところが良いのだが、
 
実際にはそんな使い方をすることは・・・
 
アリエナイ話。(爆
 
 
実にJavaは、何かのjarのMainが勝手に初期化するので、どんな動きになるか、判ったものではない。
当然のことだが、安易なインジェクションはソースレベルデバッグを困難にさせる。
strutsもそうだが、ソースが無いclassを跨いでワークフレームを作ることが多いからだ。
 
競合が起きて当たり前だし、上記の初期化処理に膨大な時間がかかるのも当然の話。
 
で、なんでそんなものを使うのか?
一つにはモジュールの差し替えがしやすい点があるものの。
 
そんなものはワークフレーム側の話で、それにぶら下がるクラスは普通に作ればいいはず。
でも、過去のインジェクションのデザインは、その上下関係が間違っていて、ワークフレームに作り込む方が
自動的にインタフェースじの変数にオブジェクトがインジェクションされることを前提にしている。
これは、ワークフレーム側がインジェクションの仕組みをカスタマイズする手法を勘違いして作ってしまったためだろう。
というかサンプルでサクっと作ったら、出回ってしまったと考えた方がいいだろう。
だって
/*  フレームワークのソース */

for(Class class :  all_class_list ) {

if(   class.isClass() ) {

for(Method method :  class.getMethodList() ) {

if( method.class.isInterface ) {

if(method.value == null) {

Object object = classMap(method.getClassName());

if( object != null ) {

method.value = object.getInstance();

}

}

}

}

}

}
な感じでnullにオブジェクトを挟んでくれたら楽そうに思える。
でも、その実態は・・・
 
interface  xxx = new XxxBean();
XXX.method()

@xxxInjection
interface  xxx;
XXX.method();
と書いて、全ソースのインジェクションを巡回する長~い初期化に時間を費やすことになり、
デバッグも面倒なので、
何も得るものはない。
ま、失敗なのだが、駄作であれ、悪貨であれ、出回ってしまったものが勝ちな世の中。
強いて云えば、
自分で作るつもりが無い部分をinterfaceとしてコードし、
その実装を外注に出せばいいだけだが
interfaceをclassに書き換えらる。(自分のコードを書き換えられるのが嫌)なら、
先のEJB手法が必要だ。
もっとも、
java   -jar 自分のソース.jar   -jar interface.jar

java   -jar 自分のソース.jar   -jar interfaceの処理を実装したクラス.jar
で実行すれば済む話でしかないのがEJBだ。
もちろん、自分のソース.jar にinterfaceの処理を実装したクラス.jarを使ってコンパイルしておかないとうまく動かない気がする。
ので、やっぱりEJBがいい。と思ってしまうのだろう。
だが、そんなEJBの動作テストはどうやるのか?
実装.jarができるまで放置しておくのか?
その辺の考慮がごっそりと抜け落ちているのが
やはりJavaerの幼さなのだろう。
 
でも、世の中どんどん変なものが残っていくのも仕方がないことだよね。(大笑 



CPGPUでウイルススキャンしない謎

ありそうで無いのが、CPGPUでウイルススキャンを高速化するウイルスセキュリティソフト。
これができたら、セキュリティ向上のためにグラボが必須になるのは間違いない。(大笑
思うに、X86ベースで構築してしまってGPUに手を出すのがメンドクサイのだろうが、
ユーザからすればCPUを使いながら空いているGPUでスキャンしてくれた方がいい。
マルチコアが主流だが、大多数は2コアしかないので、意外とヒマが無い。
しかしGPUの方は動画やゲーム以外は結構ヒマな時間が多く使わない手は無い。
第一、同じようなことを延々と処理するなら

パイプライン処理がしやすいGPUの方が

長時間に及ぶウイルスのフルスキャンに向いているのだ。 

INTELあたりは渋い顔をしている気もするが、
APUを持っているAMDは推進してくれそうな気がする。
ウチならグラボなしでもCPGPUでウイルススキャン速いっすよ!(笑
な調子で・・・(爆
 
もっともグラボなんて付けてないPCが多いハズだが、
この際!

セキュリティ強化のためにグラボを買いましょう!

ってキャンペーンを貼れば良いではないか!
一つだけ問題があるとすれば消費電力。
ウルトラ・ハイエンド・グラボをフルパワーで実行すれば困るくらい燃費が悪いが
発熱がほどほどな程度に使えば、格安グラボより燃費が良いし、煩くも無い。
格安グラボとウルトラ・ハイエンド・グラボ比較で、
ウイルスフルスキャン・ベンチマーク・イベントでもやればはっきりとした結果が出るだろう。
何となくCPUはi5でいいけどGPUはTITANにする
とか変なことを言い出す会社も出てきそうな気がするけどね。(大笑
 
ps.
後、数日でカウンタが30万。
つまり、DBに30万レコードある訳だ。
そろそろ+30万にしてレコードを削除した方がいいような気もする。



根っこが腐ってるSubclipseこんなの誰が作ったのか?

Eclipseでsvnに長い(といっても1万行未満)ソースをコミットしたらコリジョンが発生。
クリーンナップしてみると誰かがボクのソースを消したと表示される。
バックアップを取って、プロジェクトを取り直すと、そんなrevisonのログはドコにもない。
実は長いソースの保存が遅延し絶妙にバットなタイミングでファイルの差し替えが行われる際に発生する。
ソースエディターにはフォーマッタの他にFindBugsなどが満載しており、ソースファイルは文字通り引っ張りだこ。
にも拘わらず、このソースと云うリソースの競合管理なんて機能はなく、プラグインがただ順番に処理されるだけ。
残念だが今のファイルシステムは大容量のバッファリング機能があるし、VM上のデスクトップだったりすると、漫然と順番に処理しているだけでは、バッファをflush実行がドンドン後回しになり、もう我慢できないところまで来ると一気に物理デバイスに吐き出さるので、肝心のファイルが古いままビルドしてしまうこともままある。
それだけなら、もう一回ビルドしなおせばよいのだが、SubclipseつまりEclipseのsvnクライアントがそんなことになると、訳が判らない結果とイカレタ履歴が残るのでソース破壊を簡単にやってのけてしまうのである。
タダのEclipseが使えることで、Javaの開発環境は見かけ上リッチなクライアントになったけど、ソースが壊れているなんてことになる出来損ないの見かけ倒しの開発環境なのだ。
よく注意して使ってください。よく確認してください。とか云われるけど、Eclipseがダメダメなシロモノであることを経験的に知っているが、それを操作ミスと断定してしまっているのだ。
ま、Javaソースは書けるけど、jarファイルの作り方知らないとかも多い。ボクもEJBの仕組みは仮想化されてて実装がさっぱり見えないからよく判らない。
そんなJavaシステムがちゃんと動くのは中身をちゃんと知っている知らない誰かが知らないうちに直してくれているからだ。
そんな人がプロジェクトから抜けた途端。earファイルすらまともに作れなくなるのは当然。
もちろんEclipseも同じ。
もうかなり年月が経った。そろそろEclipseもMS-Windows並に中身がよく判らないシロモノになっているので、
そろそろ捨て時である。



Javaのコーディング・スタイル

今でもコーディング スタイルに煩いのがいる。
見た目の美しさなんて、個人差が大きすぎる。
例えば
<A>

String     text  = form . getText() ;

<B>

String     text  = null ;
form . getText() ;

のどっちが良いかと云えば、
ボク的には、
Aは手抜き。
Bの方が優れている。
でも、気分でどっちでもOK。
これらを try ~ ctach で括り、form. getText()でthrowが起きた場合を考えると、
Aでは、text に初期設定が行われないから、厳密にはtext が初期化されない場合がありますと、あの小姑(Find Bugs)が喚かなければおかしい。
※大体、 form == null だったら、NullPointerException が確実に起きるコードなんだから。再現性は100%。
でも、ある人に言わせれば・・・

Bは、悪質な行数稼ぎだ!

だそうだ。
※実話です。
それくらい、コーディングの見方には、個人差がある。
もっとも、ソースレベル・デバッガをよく使う場合は、Bは必須なコーディングになる。
2行目にブレークポイントを付け、
デバッグ中にtextの値を書き換え
formをnullにして NullPointerException の場合の
動作とログの内容の確認するには・・・
Aは不可!
Bでなければならない!(大笑)
なぜなら、
(1)Aの1行目は、変数宣言だからブレークポイントが打てないバージョンもありうる。
(2)仮にブレークポイントを打てても、止まった時点では、変数宣言文は実行前なので、変数を書き換えられないバージョンもありうる。
と云う感じで開発環境の微妙な仕様のブレに左右されてしまう。
※この点は、MS-Visual Studioはうまく出来ていて、行中をステップ動作で進められるので、Aでも問題は無い!(大笑)
 
と云う訳で、コーディング規約なんて書いてるヒマがあったら
Eclipseのテキストエディタ様に まともなテキストフォーマッタ(整形プラグイン)を作った方がマシだと
ずーっと、思っているが、
多分、タダのツールに金(または人)をかけてプラグインを作るのが嫌なのだろう。
 
勿論、色々なコーディングが混ざると読みにくいと云う気持ちは判るが、不適切で個人の趣味満載で雰囲気で書き換えられてしまうコーディング規約の方が、金の無駄と云うものだ。
 
だが、svnリポジトリにコミットされたソースを自ら見易く徹底的に書き直しつくす管理人の存在は否定しない。
なぜなら、それこそがコーディング規約の実践であるからだ。
なぜなら、コーディングスタイルが個人の趣味である以上、
 

たった一人で精査することが重要であり、手分けして精査するなぞ、ヒマつぶしでしかない。

 
そして、忘れてはならないことがある。
書き換えたソースは大抵期待通りには動かなくなるのだ。
そして、精査に精通している人はそれを知っている。
故にJUnitなんてものが嬉しがられるのだ。
もちろんそれを自分で使うハズも無いのだが・・・
 
では、毎度の後セリフを・・・
 
だから、今時分は原発があーなるのも仕方が無いよね。
 
 
 
 



HASWELL Core i3 Pentium

これも微妙。
予算の都合でCore i3かPentiumを選択するならHASWELL版が出るのは丁度良い。
しかし、買い替える動機にはならない。
なぜなら性能はちっとも変わらないし、目玉の待機電力の低消費電力もデスクトップ系はほとんど意味が無く
逆に電源ユニットはHASWEL対応品を選択するか、スリープのステータスが下がり過ぎないようにBIOSを設定しなければいけない面倒さがある。
※WakeUpに失敗しかねないからだ。
またオンダイのGPUがどの程度なのかも定かではなく、Sandy-brigeと変わらない気もする。
高いGPU性能なぞCore i3かPentiumに期待しないだろうが、Windows7ならそれなりの性能が必要だ。
そうしないと、ノッペリと画面が塗り替えられるところを観てしまうことになる。
悪く云えば、そんなものを買うつもりならAMDの方がマシだ。
※低価格帯はAMDの方が強く、AMDの弱さはアップグレードパスがほとんど無いことだ。
そう考えると、PCがタブレットに押されているのは、低価格帯では買い替える魅力がほとんど少ないのが本当のところかもしれない。
 
 
だが、もっと判らないものがある。
ここのことだ。
暫く記事を書いていなかったが・・・
ヒット数が次第にUPしている。
 
記事を書かない方が人気が上がるらしい。(笑
 
 



NEXUS7(2013)

微妙。
ハイスペックな7インチタブレットに観える。
しかし、CPUやモニターなどのパーツを高いものに差し替えただけのグレードアップしたので、価格は相当上がっている割に、基本的な使いにくさはそのまま。
それに内臓のSSDを16GB増量するだけで1万円近く高くなってたりする割に3千円ほどアップするとLTE対応になっているのは、LTEは要らないけど、あと32GBメモリに増えてれば大方は満足するハズというマーケッティング上の見込みあっての価格設定だろう。
マーケッティングで価格を(Googleにとって)旨みのある設定にしたせいで、旧世代(2012年版)での低価格な製品としてのNEXUS7の魅力は無かったことになっている。
つまり、策士策に溺れるの例えの良い例になっている訳だ。
それに3千円のLTEモジュールって感度悪そうな感じもするし、重量もかなり増える、しかもLTEの契約がほぼ従量制に傾いている状況では、実際にHD解像度で動画を観るのはWifi環境かSDメモリに取り込んだ後にじっくり観ることになりそうで、カーナビ兼用で使いたい人を除けば、LTE版は買うべきとは思えない。
この辺は9月末に発売されたら次第に判ってくるところだろう。
となると、16GBWifi版が買いと云うことになる。
一方、NEXUS7をアプリやゲームの開発のリファレンスマシンとして捉えるとこの高性能が絶妙すぎて困る。
これに合わせて性能を調整すると、TEGRA3ではさっぱり動かないことになりそうだ。
次第に低性能・低価格のタブレットが消えていけば困らないか安い中古(2012年版)でOKな人が多ければ目論見が崩れてしまう。
とりあえず、両方持って見比べるというところだろうか。
もし、NEXUS(2014)なんてのが出てしまったら、リファレンスマシンとしての価値も短命。
 
 
 



Z87 Mini-ITx マザボ

今は3種類しかないらしい。
ASRock Z87E-ITX
Z87E-ITX(m)


MSI Z87I
z87i_01


GIGABYTE GA-Z87N-WIFI [Rev.1.0]
main_package


価格は時価12K~19Kとリーズナブル。
いづれもHalf-size mini-PCIe slotに無線LAN・BlueToothモジュールが入っている。
画像からは見えないがマニュアルには、Z87E-ITXの裏面にはmSATA/mini-PCIeの記載がある。
Z87E-ITX、 Z87IはFastBoot対応。
Z87I、GA-Z87N-WIFI [Rev.1.0]はLANが2ポートで、Z87E-ITXは替わりにeSATAが付いている。
Z87IがDDR3-3000対応で、Z87E-ITXとGA-Z87N-WIFI [Rev.1.0]はDDR3 2933(OC)となっているが、どれも2スロットでMax16GB。
ほとんどスペックは同じだ。
ASUSのXeon向けのもの(P9D-I)もあるが、なんとなくパス。
これから出るものとしては、
eVGA Z87 STINGER がmini-PCIe slotはなくBluetoothはUSBタイプな気がする。
R.O.G.のminiITX (MAXIMUS VI IMPACT)も気になる。と云うのも、mPCIeコンボII にM2.TypeのSSDスロットがついているからだ。
しかし、ドータガード風のVRMの冷却、ハイエンドのビデオカードがケース内に多めに排気 する傾向にあるので、ケース内部のエアフローも良く考えないとCPU水冷すら難しい。
 



GIGABYTE  GB-XM1-3537

ギガバイトのNUCのi7版
INTELのNUCはコネクタを縦置きにしているので高さ3cm。
ギガバイトのNUCはコネクタを横置きにしているので高さ2cm。
高さが低くなっている分、USBコネクタが1個少ないUSB3×2構成だが余り問題にはならない気がしそうだが、真っ先にWindowsのインストールではまりそうな気がすので、GIGABYTEのセンスが問われそうだ。
店頭で購入するなら、USBハブとか、1個のUnifyingレシーバーで接続できるLogicoolのキーボードとマウスが接続できるMK270はいかがと店員が勧めてくるだろうが、ネット購入ならガックリくるんじゃなかろうか?
※インスト中にマウスやキーボードを繋ぎ変えるのは失敗の元。
※メインPCと切替機でモニターとキーボードとマウスを共有するならUSBは2個で十分な場合もある。
メモリはいづれもMax16GB(8GB×2)となっている。INTEL  GIGABYTE
ところが、Core™ i7-3537U Processor のスペックではMax32GBとなっている。1枚16GBのDIMMは見たことが無いので誤植かもしれない。
価格は両メーカとも似たり寄ったり。
ケースが小さいので発熱の不安要素があるNUC、INTELはケース底面のスリットから基板とケースの隙間を経由してファンから裏面へ排気、GIGABYTEはケース左側面から吸気、ファンを経由して裏面へ排気。
INTELの場合、柔らかなカーペットの上に置くと吸気の邪魔になり段々と温まってくるし、VESAマウントに取り付けると吸気しにくそうで、GIGABYTEの方が置き場所を選ばないような気がする。
なお、メーカーや製品によりコネクタの穴の位置が違う場合は、ケースの使いまわしはできないので、好みのケースに変える場合は注意が必要。
いづれも、サウンド出力のコネクタが無いので、BlueTooth付きの無線LANアダプタを接続してBlueToothのヘッドホンかスピーカー、またはHDMI接続のモニターから聴くことになる。



Giada D2305-i5  (model:D2305-BQ641)

Powerful Entertainment Center 
Giada Tech Mobile Ivy Bridge スリムベアボーン i53B-BQ001とは違いスモールPC系。
第3世代Core i5、NVIDIA® GeForce® GT640 Graphics Card、Bluetoothに加えDVD(またはBDドライブ)が取り付けられる。
32GB SSD+500GB HDD構成になっているので、多分SSDはHDDのキャッシュディスクとして使うのだろう。
そしてDDR3 DIMMスロットが2つになっている。(MAX 8GB:4GB×2)
リモコンも付いている。
サイズ:230mm x 54.5mm x 173.5mm で、スリムPCに比べれば一回り大きい。
アマゾンUSで$759.95。
Core i3のB00DZG1G36(model:D2301-B4531)は、 $579.95もあるが、320GB HDDで、USB3はなさげ。
 
 
 
 




top