熱収縮チューブ用ヒータ
熱収縮チューブ用に、RZ-502を買ってみた
プロパンガスで使用できるバーナで、付属のアタッチメントで、ヒートガン、半田ゴテとしても使用できる。
5mmと2mmのチューブで使ってみた感じでは、2mmだといい感じだけど、5mmだとちょっと熱量が足りない感じ。でもちゃんと時間をかければきれいに仕上がった。仕事用としては無理としても、たまに使うにはいい感じだ。ヒートガンの場合、火がついているのか、ちょっと見にくいのが難点かもしれない。
アノテーションとequals()
JSR-299で、アノテーションを比較する概念が出てくるので、ちょっと色々テストしてみる。
--- Foo.java ---
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target({METHOD, CONSTRUCTOR, FIELD})
@Retention(RUNTIME)
public @interface Foo {
}
--- Bar.java ---
import java.lang.annotation.Annotation;
public class Bar {
@Foo int foo1;
@Foo int foo2;
public static void main(String[] args) throws Exception {
Annotation foo1 = Bar.class.getDeclaredField("foo1").getAnnotation(Foo.class);
Annotation foo2 = Bar.class.getDeclaredField("foo2").getAnnotation(Foo.class);
System.err.println("foo1 = " + foo1);
System.err.println("foo2 = " + foo2);
System.err.println(foo1 == foo2);
System.err.println(foo1.equals(foo2));
}
}
結果
shanai@shanai-laptop:/tmp$ java -cp . Bar
foo1 = @Foo()
foo2 = @Foo()
false
true
別インスタンスのようだけど、equals()をオーバーライドしてないのに、equals()比較はtrueになっている。メンバを持たせていると、
--- Foo2.java ---
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target({METHOD, CONSTRUCTOR, FIELD})
@Retention(RUNTIME)
public @interface Foo2 {
String[] value();
}
--- Bar2.java ---
import java.lang.annotation.Annotation;
public class Bar2 {
@Foo2({"Hello", "World"}) int foo1;
@Foo2({"Hello", "World"}) int foo2;
@Foo2({"Hello"}) int foo3;
public static void main(String[] args) throws Exception {
Annotation foo1 = Bar2.class.getDeclaredField("foo1").getAnnotation(Foo2.class);
Annotation foo2 = Bar2.class.getDeclaredField("foo2").getAnnotation(Foo2.class);
Annotation foo3 = Bar2.class.getDeclaredField("foo3").getAnnotation(Foo2.class);
System.err.println("foo1 = " + foo1);
System.err.println("foo2 = " + foo2);
System.err.println("foo3 = " + foo3);
System.err.println("foo1 == foo2: " + (foo1 == foo2));
System.err.println("foo1 == foo3: " + (foo1 == foo3));
System.err.println("foo1.equals(foo2): " + foo1.equals(foo2));
System.err.println("foo1.equals(foo3): " + foo1.equals(foo3));
}
}
結果
shanai@shanai-laptop:/tmp$ java Bar2
foo1 = @Foo2(value=[Hello, World])
foo2 = @Foo2(value=[Hello, World])
foo3 = @Foo2(value=[Hello])
foo1 == foo2: false
foo1 == foo3: false
foo1.equals(foo2): true
foo1.equals(foo3): false
ふ〜ん、やっぱりメンバの一致まで見てくれるんだ。おもしろいな。この挙動は、Annotation.equals()のAPI仕様書に記載されている。
8009ポート
なんか、JBoss-5.1.0が動かなくて、8009ポートが既に使われているよとエラーになる。
sudo netstat -nplしてみると、webAccessなるなぞのプロセスがつかんでいる。で、調べてみると、VMWareのWebAccess用のプロセスのようだ。/usr/lib/vmware/webAccess/tomcat/apache-tomcat-6.0.16/conf/server.xmlを開いて(chmod +wする必要あり)、8009、8005を8809、8805に変えて再起動したところ直った(webAccessは、/etc/init.d/vmware start/stopしても、影響を受けない)。
しかし、VMWareがTomcatを抱えこんでいたとはね。でもポート設定をデフォルトのまま出すってのは、ちょっといただけないな。
箱根の湯
昨日は、会社の創立記念日で休みだったので、箱根の湯に行ってきた。
といいつつ、行きがけに中華街。

あさりそばがウマい。

この、あわびのクリーム煮を、チャーハンにかけて食べるのが、ひそかな楽しみ。うーむティルトしたはいいけど、アイピースファインダ持っていかなかったから、ピントが外れてしまった。


なんだかんだで、横浜を出たのは3時近く。そのまま温泉に直行。

本当に温泉だけ、1時間ほどゆっくり楽しんで、帰ってきました。
パターンマッチは関数リテラルなのか。
scala> val func: Option[Int] => Int = { case Some(x) => x; case None => 0 }
func: (Option[Int]) => Int = <function>
だから、matchと組み合わせる必要なんて全然無くて、関数の替わりにどこでも利用できるわけだ。とすると、あのmatchってやつも、関数を引数にとる関数なんだろうか。ちょっと探してみたけど、見つからなかった。
EmacsからMercurial
Ubuntu 8.10のEmacs-snapshotにdvcを入れてみた。
参考ページ:
http://download.gna.org/dvc/
http://xtalk.msk.su/~ott/en/writings/emacs-vcs/EmacsDVC.html
sudo apt-get install bzr
sudo apt-get install autoconf
sudo apt-get install texinfo
bzr get http://bzr.xsteve.at/dvc/
cd dvc
autoconf
mkdir ++build
cd ++build
../configure
make
sudo make install
これで、/usr/local/share/emacs/site-lisp/dvcに入るんでロードパスにシンボリックリンクを張っておく。
ln -s /usr/local/share/emacs/site-lisp/dvc /usr/share/emacs-snapshot/site-lisp/dvc
あとは、.emacsに、
(require 'dvc-autoloads)
試しに使ってみる。
cd /tmp
mkdir tmp
cd tmp
hg init
ls >a
Emacsで、M-x describe-bindingsして、dvcを探してみると、C-X V ...にバインドされている。
C-x V s dvc-status
を実行。ディレクトリを聞かれるので、上で作った、/tmp/tmpを入力。

追加してみる。aと押せばいいようだ。y/nと聞かれるので、yを入力。diredと同じように、mで選択できるので、大量にaddする時は、選択してからaするといいだろう。画面上、何も変化しないけど、gを押せば更新される。

cを押してコミットする。バッファが開くので、コミットログを入力して、C-c C-cで終了。なんかtipsが表示されるのでqで抜ける。
Scalaのcase
てっきり、matchを使う時の文法要素に過ぎないのかと思っていたんだけど、こんなところにも書けるのか。
object Test {
def main(args: Array[String]) {
val data = Map(1 -> "A", 2 -> "B")
val values = data map {
case (key, value) => value
}
values.foreach(println(_))
val keys = data map {
case (key, value) => key
}
keys.foreach(println(_))
}
}
shanai@shanai-desktop:/tmp$ scala Test
A
B
1
2
奥が深い。というか、_ match {...}を省略して書けるってことなんだろうか。
Wolfram Mathematica
Webで使えるようになっているという情報を聞き、ジエチルエーテルを表示してみた。
すごいすなぁ。環状構造まで含めて、全異性体が出てるよ。と思ったけど、もっと分子量の大きい、ショ糖でも、異性体の数が全然少ないので、別に計算で出してるってわけじゃないのかも。
というか結果の1つに、Sodium aluminosilicateとか出てるし。そりゃ全然違うだろう。
アキバへ。
なんかチチブ電気の1Fが変わってた。チチブ電気自身は、3Fで営業中とのこと。ヒートガン買おうかと思ったんだけど、家族の強い反対で断念。丸五、テクノハウス東映、秋月、千石あたりを回ったけど、なんか人が少なかった気がする。








