2008年11月27日木曜日

WindowsでのPID取得

一覧を取得するScript類はいろいろ見たが、自分のを調べるのは少ないようだ。


一覧を取得するコマンド:
コマンド類の説明:Managing Processes in Windows NT 4 / 2000 / XP

C#によるコード:知識のゴミ箱:プロセスIDを取得する(.NET) CommentsAdd Star

自分のを調べるPolymorphicScript:Windows Script Programming:バッチファイルで現在や親のプロセスIDを調べる。

Bashの一文字コマンド

さっきのPolymorphicScriptの参考リンク中に「bash の : コマンド」が
出てくる。これはbashの組込コマンドであり、意味は、

: [arguments]
何もしません。このコマンドは arguments を展開し、指定されたリダイレクトを実行する以外には何も行いません。終了コード 0 を返します。

ということだ。他に有名な1文字コマンドは、

. filename [arguments]
source filename [arguments]
filename からコマンドを読み込み、現在のシェル環境のもとで実行します。

がある。

PolymorphicScript

1つのスクリプトに複数の言語を混在させているものをこう名付ける。

例)Windows CMDファイルにJscriptを内包する
 両者で文法エラーにならず、片方は読み飛ばせる文を使用する。

1)CMD:変数の設定文 JScript:環境変数の設定+ブロックコメントの開始
@set @_=1/*
CScript.exe //NoLogo //E:JScript "&~f0" %*
GOTO :EOF
*/

2)CMD:1行IF文 JScript:ifマクロで、@endまでスキップ
@if(0)==(0) ECHO oFF
CScript.exe //NoLogo //E:JScript "&~f0" %*
GOTO :EOF
@end

*JScriptでは、このように解釈され、if(0)はfalseなので文法チェックされない
@if(0)
==(0) ECHO OFF
...
@end

* "%~f0" は実行したファイルパスそのものを指す

参考:
それはそれ。これはこれ。:[CMD]WSHスクリプトのBATスクリプトへの組み込み(前編)

Windows Script Programming:バッチファイルで現在や親のプロセスIDを調べる。

2008年11月26日水曜日

Swing BeanBinding DateをJTextFieldにBindするには

NetBeans6.5にてDBアプリの自動生成を使用して、テーブルデータを表示する画面を作成した。
ところが、リストを選択した時にすべての項目が「詳細部分」に表示されるテーブルと、されない
テーブルがある。ログをみると、表示されない場合は、以下のようなExceptionがあった。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2951)
at org.jdesktop.beansbinding.Binding.convertForward(Binding.java:1312)
at org.jdesktop.beansbinding.Binding.getSourceValueForTarget(Binding.java:844)
at org.jdesktop.beansbinding.Binding.refreshUnmanaged(Binding.java:1222)


いろいろ調査してみた結果、問題はDateオブジェクトをJTextFieldのtextプロパティにCast
して設定しようとしているところらしいと判明。
 こんな感じ: jTextField1.setText((String)dateObj);
JFormattedTextFieldで日付を扱うものを用意し、そのValueにBindさせてみると、
無事にExceptionなしに表示された。

 教訓:IDEは便利だが、すべてをやってくれるわけではない。

Swing/EDT

 Swingはシングルスレッドモデルで、実際に動いているスレッドがEDT。
ここで長い処理をしたり、WaitやBlockをさせると画面描画関連が
すべて止まってしまうので、注意。
 Java6からは、Swingから非同期処理行うSwingWorkerが追加された。SwingWorkerのTutorial
Java5でもBackPortがある。SwingWorker-ackPort

SwingのDeBugなどに使用できるツール。Swingの処理速度の劣化原因を発見する。Detangler

 応用の一つで、ある一定の間隔が開くと処理を開始するWorkerの実装が紹介
されている。DelayedWorker
 たとえば、長いリストをスクロールしている時に早くスクロールすると
変化しないが、スクロールを止めたりゆっくりになると行の状態を表示
する機能などではこれがあると便利。

2008年11月19日水曜日

NetBeasn+TopLinkで作成されるEntity

対象がOracleだと、Entityに以下のようにスキーマ情報が入ってしまい、
スキーマを切り替えるとエラーになる

catalog = "", schema = "CQS01"

2008年11月18日火曜日

JPA:TopLinkEssential

NetBeans6.5にてJPAとSwingのサンプルを作成中、SQLでOrder By をかけると奇妙なエラーが発生。

select b from XXX ORDER BY b.JOB_INSTANCE_ID
token null
select b from XXX ORDER BY b.JOB_INSTANCE_ID
illegal
select b from XXX ORDER BY b.JobInstanceId
illegal

どうやら、使用できるカラムは、Entityとして使用しているクラスのフィールド名であり、大小文字もクラス定義に合わせて先頭が小文字でないとだめだったお。

select b from XXX ORDER BY b.jobInstanceId

2008年11月17日月曜日

AppServerからの自Servletアクセス

先週末は、RmtWebプロジェクトのバグをほぼつぶした。しかし、実行してみるとAppServerにRenderをさせる場合も、Proxyをさせる場合もTimeoutが発生したりして思うように動作しない。(初回はまず間違いなく失敗するが、数回やると成功する、、、とか安定しない)
■Servlet仕様
RenderServlet JEditoPane を利用して他サイトのURLをRenderし画像として返すもの
例) xxx/scrn.render?url=http://xxx.example.com/yyy/zzpage.html

DelegateServlet Proxy的に動作し、指定のURLの出力をそのまま返すもの
例) xxx/scrn.wget?url=http://xxx.example.com/yyy/scrn.capt?Size=25

そこで、さらに切り替えを増やして直接画面キャプチャを指定できるようにした。
外部ネットからだとアクセス不可になってしまうが、安定した。

■不安定な理由の推定
1)Render:
SwingのイベントモデルはSingleのため、HTTP接続で待ちが発生するとすべてが待ちになってしまう。
これは、通常のJEditoPaneがHTMLの解釈と要素のDonwloadが非同期であり、終了したことを検知しにくいことから、同期式の取得に変更した場合に発生した。
 もともとのJEditorPaneでは非同期でHTMLを解釈するために、上記のような詰まりは発生しないと思われるが、今度は画像リンクの解釈がうまくいかなかった。たとえば、xxx/scrn.capt で、「PNG画像」が来るのだが、これを画像と認識してくれず変な表示となる。同期式に変えた場合にはきちんと表示できるので、JEditorPaneのバグっぽい。

2)Proxy:
AppServerのServletから自分自身へHTTP接続することになるのだが、これが問題のようで、頻繁にConnectionTimeoutする。リトライするようにコードを追加したが、ちょっとましになった程度で安定せず。Servletのスレッドから自AppServerの他ServletへのNetアクセスに制限があるのかもしれない。

2008年11月13日木曜日

SwingはSingleThraedなので、、、

JEditoPaneのHtml表示のスレッドからSwingを使用するような
コードを呼び出してそこが invokeLater() などとしていると
デッドロックになってしまう!!!
 ところで、robot ってSwingスレッドを使用するの?
Maven2でPON.XMLで使用しているVersionをJavaのソースやリソースの中と同期させたいのだが、やり方がわからない。

たとえば、Java側で 特別なクラスを作成し、そこに
static final String VERSION = "0.2-SNAPSHOT";
などど定義しておいて、これをPOM.XMLから
$XXX.YYY#VERSION
などのように、使用することなのだが、未だやり方が可能なのかも含めて見つからず。
Pluginを自作するしかないのか?

2008年11月12日水曜日

世界のとらえ方

オブジェクト指向に限らず、システム分析の重大な関心事項の1つは対象とする世界(ドメインということが多い)をどうとらえ、どう表現するかということだ。分析の主眼が現状認識であることから、認識したものをシステム的な表現に落とし込むことが主たる作業となる。

対象とするものは複雑なものであったり、変動するものであったり、出来事や関係だったりする。よってそれを理解し管理しやすい塊へと分解してゆくことが求められる。そして、分解の仕方は、「それらをどう取り扱うのか」というシステム目的によって恣意的に変化し、大まかな捉え方から精密なものまで種々のくくり方ができる。

こうしてくくりだした事象をシステム的に表現する場合、塊(事象の枠組み)に対して名称を与え、その事象が持っている属性(プロフィール)を設定することになる。

プロフィールの記述には、「記述可能」特性を使用する。
「記述可能」とは、数値、文字、日付のような、何らかの文字や記号で記録し、他者とコミュニケーション可能なものという意味で用いる。また、記述可能特性には、「比較性」を持つものと持たないものがある。

「比較性」とは、~より大きい小さい、~より長い短い、~より広い狭い、など等号・不等号の関係でとらえることができるものである。言い換えれば数値に換算できるものと言ってもよい。比較可能でないものとしては、たとえば、「名前」や「国籍」などの同じだとか一部が似ているだとかの評価はできるが、不等式での評価ができないものをあげることが出来る。

「記述可能」でない特性としては、音楽や絵画などの時空間との関連でしか意味を持たないものなどがある。

たとえば、対象とする世界を乗り物と考え、子供が使う三輪車と、多くの乗客を乗せるジャンボジェット機を取り上げてみる。この2つのものは具体的なものとして存在し、触れることができるし、それぞれの機能性を持っている。

2008年11月4日火曜日

S2BatchでRestart

BatchがRestartableである時は、Execution_Contextに途中経過が保存され、再実行の時にそれを利用して続きから実行するようになる。
誰が何を書き込めばいいかを調査中。SampleではLOGN:2などの取得番号が保存されている。

2008年11月3日月曜日

大阪王将

また家族で行った。オーダーバイキングなので、できたてでおいしくて、満足度が高い。