カテゴリ:comp( 63 )
disown
tcsh から zsh へ移行して半年くらい経った.
戸惑うというか,何か面倒だなと思っていた点のひとつに
GUI アプリケーション(ほぼ ImageJ のみ)をインタラクティブシェルから起動した後に
シェルだけ終わらせようとすると

~/wc/kbi/ijp/src% exit
zsh: you have running jobs.

と言われ,もう1回 exit すると ImageJ も終わってしまうという挙動があったので
思いたって調べてみた.

disown という内部コマンドを実行すれば,ひとまず警告は出ず,また,
子プロセスは終了しないことがわかった(bash にも同名の内部コマンドがあるらしい).
ただし複数のバックグラウンドジョブがある場合には,それぞれに発行しないといけないようだ
(引数にジョブ番号を与えることができる).

別のアプローチとして,バックグラウンドジョブ投入時に & でなく &! を使ってもいいらしい.
結局,こちらの方法を用い,これまでの ~/.zshrc の

function ij() {
"${HOME}/wc/kbi/ImageJ/imagej_boot.py" $* &
}


function ij() {
"${HOME}/wc/kbi/ImageJ/imagej_boot.py" $* &!
}

に書き換えた.
[PR]
by edogawadai_bio | 2009-11-09 22:00 | comp
eelll
研究室の後輩がt-codeを試しはじめたので少し影響されてやってみた。
「うなぎ」はeelだから、「うなぎぎぎ」だということに今さら気付いた。
これ定期的に練習するのは自分の苦手とするタイプの作業だな…。
[PR]
by edogawadai_bio | 2009-04-29 18:50 | comp
Fisher's Iris data set
「フィッシャーのアヤメのデータ」とか単に「Iris」などとして統計やパターン認識の本に出てくるので,形態の測定をしたのもフィッシャー本人かと勝手に想像していた.が,実際はデータをとった人は Edgar Anderson というアメリカの植物学者ということを知った.

http://en.wikipedia.org/wiki/Iris_flower_data_set
http://home.hiroshima-u.ac.jp/chubo/index.cgi?IrisData

Rのマニュアルでは「Anderson's Iris data set」という表記がされている
http://stat.ethz.ch/R-manual/R-patched/library/datasets/html/iris.html

アヤメのデータ自体の論文
Anderson E (1935) The irises of the Gaspe Peninsula. Bulletin of the American Iris Society 59: 2–5.
American Iris Society は今もあり,この雑誌も季刊で出版されているようだ.
http://www.irises.org/
[PR]
by edogawadai_bio | 2009-01-30 12:01 | comp
赤軸
http://www.scythe.co.jp/input-device/mx-board-r.html
のG80-3600LYCJA-2(赤軸日本語109黒)を買った。
展示品ではキートップの「り」が「い」になっているという話だったが、購入したものでは「り」になっていた。ただし使っているフォントのサイズが他より大きい。
箱にN-key rolloverと書いてある通り、適当に10本の指で同時押しすると、全部入力される。
[PR]
by edogawadai_bio | 2008-12-03 17:19 | comp
scala 2.7.2 final
手元の scala のバージョンを 2.7.1 final から 2.7.2 final に上げた。
ubuntu用のdebパッケージもあったが、それは試さなかった。
scalaで書いているImageJ用プラグイン類をコンパイルしなおすと、いくつか error と warning が出た。

implicit function に関する error
/home/maro/wc/kbi/ijp/src/Kbi_EvacColor.scala:29: error: type mismatch;
found : (int, int, int)
required: int
Note: implicit method rgb2i is not applicable here
because it comes after the application point and it lacks an explicit result type
ist, (fromR(), fromG(), fromB()), (toR(), toG(), toB()))


rgb2i の型を明示し、利用する箇所より前に書くようにした。

Java の varargs メソッド呼出しの warning

signature として ": _*" が必要だという warning が出た。
/home/maro/wc/kbi/ijp/src/lib/Util.scala:24: warning: I'm seeing an array passed into a Java vararg.
I assume that the elements of this array should be passed as individual arguments to the vararg.
Therefore I follow the array with a `: _*', to mark it as a vararg argument.
If that's not what you want, compile this file with option -Xno-varargs-conversion.
String.format(fmtStr, args.map(_.asInstanceOf[AnyRef]))

http://www.gracelessfailures.com/2008/08/invoking-java-varargs-methods-from.html に同じような例が紹介されていた。

Predef で int や float が deprecated となった
Int や Float に書き換えた。

Predef.Randomが scala.util.Random に移動した
該当ファイルに import scala.util.Random を加えた。
[PR]
by edogawadai_bio | 2008-11-13 21:28 | comp
Scala すばやいよ Scala 。
多数の言語処理系で同じ内容のプログラムを実行し、その実行速度を比べるComputer Language Benchmarks Game (shootout benchmark) で使われている測定マシン環境が新しくなったことに気付いた。

これまでは Pentium4 と Sempron が用いられていたが、今回は Core2Quad Q6600 が加わった。 32 bit OS だけでなく 64 bit OS での測定結果も示されている。 さらにクアッドコアマシンであることを活かし(?)、レギュレーション的にシングルコアとクアッドコアに分かれている。このため C2Q Q6600での測定条件は {32|64} bits * {1|4} core の4種となっている。

マルチコア環境を活かすのが容易な Erlang では、binary-trees テストの場合、 シングルコアで 35.15秒(言語間の順位は4位)、クアッドコアでは19.21秒(順位は2位)となっている。

まだクアッドコア版の結果に登録されているプログラムはマルチコア対応されているものが少ない。自然とマルチコア対応になる Erlang を除くと、一部テストで Intel C Compiler with OpenMP や Scala with Actor で明示的に対応しているくらいだ。あとは JVM 上で動く処理系 (Java, Scala, Nice, CAL, そしてインタプリタなのでこれらより遅いけれども Groovy も) が、意図的にマルチスレッド化などをしていなくても、マルチコア環境における速度向上が binary-trees テスト等ではみられる。 JVM の並列化 GC の恩恵だろうか。 また、これらとは別に、シングルコアにおいても Java をはじめとするバイトコードにコンパイルするタイプの JVM 向け言語は実はいずれも速いんだなぁ、と改めて思う。

個人的には Scala や Python 、そして ML の類が頑張ると良いな…。
[PR]
by edogawadai_bio | 2008-09-11 04:04 | comp
scala 2.7.1 final 他
scala のバージョンを 2.7.1 final に,JDK を 1.6.0_06 にした.
[PR]
by edogawadai_bio | 2008-05-13 22:55 | comp
scala 2.7.1 RC2
scala のバージョンを 2.7.1 RC2 に上げた.
RC1 で match で落ちることがあったのが修正されたかもしれない.

ImageJ プラグインを scala で書いて渡す場合,どうするのが楽なのかと幾つか試したが,結局, scala_library.jar とプラグイン自体の jar ファイル2つをプラグイン用ディレクトリにコピーしてもらうことに落ち着いた.
[PR]
by edogawadai_bio | 2008-04-25 20:23 | comp
scala 2.7.1 RC1
scala のバージョンを 2.7.1 RC1 に上げた.
また,
% sbaz install scala-tool-support
で emacs の scala-mode.el を導入した.
とりあえず,これまで scala で書いた ImageJ プラグインは正常に動いているようだ.
[PR]
by edogawadai_bio | 2008-04-13 13:14 | comp
Scala による ImageJ プラグイン
ImageJ の拡張のために Java を使ってプラグインを書いたり独自仕様のマクロを書いたりしてきたが,どうもしっくりこない. Java は面倒な時があるし, ImageJ のマクロは再利用性に乏しい(importや#includeに相当するものがない).

Python が好きなので Jython + ImageJ を試したり,CPython + ImageJ 用のプラグインを作ってはみたものの,遅かったり,準備が面倒で共同作業先に持っていきにくかったりする.そこで JVM 上で動く言語を調べたり試した挙句, Scala を試用することにした.

ImageJ 起動時の CLASSPATH に scala-library.jar を加えるだけで, Scala で ImageJ プラグインを書くことができた.以下は単純なバックプロジェクションをする例.ImageJ API を呼ぶだけなので Java との差は型宣言の量くらいになった.そういえば Scala には ImageJ マクロと同じく break と continue がない.

import ij._
import ij.plugin._
import ij.process._
import ij.gui._

object Kbi_TestScala_ {
private def getHorizLine(ip: ImageProcessor, y: int) =
(for (x <- 0 until ip.getWidth) yield ip getf (x, y)).toArray[float]

private def makeEmpty(ip: ImageProcessor) =
new FloatProcessor(ip.getWidth, ip.getHeight)

private def project(fp: FloatProcessor, angle: double, line: Array[float]) = {
val ipTmp = makeEmpty(fp)
val numX = fp.getWidth
for (y <- 0 until fp.getHeight)
for (x <- 0 until numX)
ipTmp setf (x, y, line(x))
ipTmp setInterpolate true
ipTmp rotate angle
fp copyBits (ipTmp, 0, 0, Blitter.ADD)
}

def process(ipTomo: ImageProcessor, step: double) = {
val ipRet = makeEmpty(ipTomo)
var angle = 90.0
for (y <- 0 until ipTomo.getHeight) {
project (ipRet, angle, getHorizLine(ipTomo, y))
angle -= step
}
ipRet
}

def processAsPlugIn(imp: ImagePlus, step: double) =
new ImagePlus(WindowManager getUniqueName (imp.getTitle + "_bp"),
process(imp getProcessor, step)) show
}

class Kbi_TestScala extends PlugIn {
def run(arg: String) = {
val imp = IJ.getImage
val gd = new GenericDialog("parms")
gd addNumericField ("angle", 1.0, 1)
gd showDialog
if (!(gd wasCanceled))
Kbi_TestScala_ processAsPlugIn(imp, gd getNextNumber)
}
}


b0095474_630418.jpg

左上: 原画像(植物培養細胞),右上: 原画像を1度ずつ回転後,投影して得たシノグラム,左下: 上記プラグインにてバックプロジェクションして得られた復元像,右下: 復元像の高周波数成分のみを取り出した像.
[PR]
by edogawadai_bio | 2008-03-17 02:51 | comp