そこにシビれる!あこがれるゥ!

いや,なんのことはない。ウィンドウ分割の「Split Vertically」「Split Horizontally」がキーバインド可能だってことに,ついさっき気がついただけだ。


当然,アサインしたキーバインドは,こうだ。

Split Vertically Alt+W,V
Split Horizontally Alt+W,S
Unsplit Alt+W,C
Goto Next Splitter Alt+W,Alt+W

できることなら,Ctrl+Wに充てたいところなのだが,IDEAではCtrl+W(Select Word at Caret)は大事なキーなので,やむなくAlt+Wにした。


これのなにがシビれるのかって言うと,キーバインドがよりいっそうvimに近づいたからに他ならない。
ああ,ホントウにvi指(vim指?)でよかったと思う希な瞬間であるな。:-)


ちなみに,IDEA+IdeaVIMの組み合わせによるvimの再現度合いは,素晴らしいの一言に尽きる。あんまりスゴイんで,この際だから更にvim風にしようと,こんなキーバインドにしている。

Declaration Ctrl+] タグジャンプと言えば,Ctrl+]でしょ。
Back Ctrl+T Ctrl+]で移動したらCtrl+Tで戻るのが当然だ。
Down Alt+J どうでもいいようで,この2つはすごく大事。
UP Alt+K


特にカーソルのUP, DownをAlt+J, Alt+Kにバインドできるのがイカす。これのお陰で,viモードが無効になるコードアシスト中は,Alt+J, Alt+Kで候補を選ぶことが出来るのだ。


vi指でJavaやる人にとって,IDEA+IdeaVIMは神様からの贈り物以外の何ものでもないな。こんなIDE他に知らない。:-D
#最近だと,HTMLやCSSJavaScript,ふつーのXML文書も編集できるから,別にJava限定ってことはないけどね。

JavaでThreadを強制終了する方法はないものだろうか...

多分無い。:-D


Winstone調べてたときに,わざと無限ループするサーブレットを動かして,監視ポート経由でシャットダウンできるかどうか試してみたら,ちゃんとシャットダウンできたんで,もしかして出来るかな?と思った次第。
でもそれは単なる勘違い。Winstoneの実行スレッド(RequestHandlerThread)は,Thread#setDaemon(true)となっているので,たとえそのスレッドが無限ループ状態に陥っていたとしてもシャットダウン・プロセスの邪魔をしないというだけだった。orz


やってみたかったのは,非同期処理とかってワケじゃなく,ユーザプログラムを監視可能なスレッドで実行したかった。コードで書くと,こんな感じか。

public class Executor implements Runnable {
    private Command command;

    public Executor(Command cmd) {
        command = cmd;
    }
    public void run() {
        cmd.execute();
    }
}
public interface Command {
    void execute();
}

---- 起動方法 ----
Thread thread = new Thread(new Executor(new SomeCommand()));
thread.setDaemon(true);
thread.start();

そこで監視だけでなく,管理もしてみたいなぁと,たとえば「タイムアウト越えたら強制終了させる」とかだ。でもね,Thread.interrupt()を送ったとして,だれがInterruptExceptionを受け取るのか?
この実装では誰もいない。orz


グレースフルにスレッドを終わらせようと思えば,「Two-Phase Termination」あたりを利用するんだろうけど,実行される側(Command)は,そんな都合知らんだろうし。そもそも,タイムアウトだとか無限ループで暴走状態にあるスレッドをグレースフルに終わらす必要もないだろとか思いつつも,決定打にいたらずだった。


なお,禁断の秘術であるThread.stop()を使うと,無限ループ状態だろうと見事に止めてくれる。一瞬,これでもいいんじゃないかと思ったけど,あたし自信,スレッドに対する理解が甘いので,もうしばらく調べてみようと思う。
#それに,どうしても実現したいワケでもないし。


ps.
Java5から登場したExecutorServiceも使ってみたんだけど,これのshutdownNow()も運が良かったら止まる程度でしかなかった。でも,Thread使うよりお手軽なのは確か。

Java並行処理プログラミング

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

上記のことを試している時に,手元に置いてた本。
これはこれで良い本なんだけど,理解力が足りなくて本屋で結城さん本を立ち読みしたから,最初にコッチを買うべきだったなぁと,ちと後悔。
#両方買えば良いんだけどね。

RootFTP

なぜか周りは圧倒的にFFFTP派ばかりなのだが,あたしは昔からRootFTPを愛用している。


なぜか?ご覧の通りリモートのみ表示しとくと,エクスプローラと良く馴染むからだ。
無論,アップロード・ダウンロードはエクスプローラとのドラッグ&ドロップでやる。