http://portal.acm.org/citation.cfm?id=1040305.1040313

今年のPOPLにこんなのがあったそうで、まさしく今 quantitative な analysis をテーマにしてる身としてはちょっと読んでみようかなと思ったり。

それはそうとすみいさんもほそやさんも POPL 通ってて自分はさっぱりうだつがあがらんなあとちょっとがっくり

処方されたリタリンを試してみた。さすが「合法覚醒剤」の別名を持つだけあって、他の薬がいまいち効かない自分にも効く効く。なんというか、カフェインの大量投与でハイになったところにアルコールの多弁が加わった感じ。ただ、副作用の吐き気や動悸がちょっと気になったりもするが。なんにしても眠気覚ましの薬としてはかなり強い。濫用厳禁というのもうなずける。やっぱりもう少し穏やかな処方を相談したほうがよさげだ。
ただ、効き始める時間を計算間違えて飲んだ直後に二度寝してしまったのはご愛嬌。

fork()

ついでに、plugin から external process を起動して、stdout/stderr を Console につなげるということをやってみた。DebugPlugin をまじめに使うのがスジがいいのはわかってるけど、LaunchConfigurationとかを作らないといけないので、単に fork() して wait() だけしたい!という用途には不向きな気がする。私が誤解してるだけだったらごめんなさい。

  1. Runtime.exec() で process を起こす
  2. DebugPlugin.newProcess() で IProcess に attach (Launch の constructor 引数は適当で通った)
  3. IProcess.getStreamProxy().getOutputStreamMonitor() で IStreamMonitor を取ってくる
  4. IStreamMonitor.addListener() する。listener は IStreamListener の implementation
  5. IStreamListener.streamAppended() の中で MessageConsoleStream に書き込む


IStreamListener stdoutListener = new IStreamListener() {
public void streamAppended(String text, IStreamMonitor monitor) {
MessageConsoleStream streamOut = 下のやりかたで作った MessageConsoleStream;
if (streamOut != null) {
streamOut.print(text);
}
}
};

Runtime rt = Runtime.getRuntime();
Process p = rt.exec(args);
IProcess proc = DebugPlugin.newProcess(new Launch(null, ILaunchManager.RUN_MODE, null) , p, "");
proc.getStreamsProxy().getOutputStreamMonitor().addListener(stdoutListener);
proc.getStreamsProxy().getErrorStreamMonitor().addListener(stderrListener);