2009年11月16日月曜日

ClojureのvectorやlistをJavaの配列にキャストする方法

ClojureからJavaのメソッドを呼び出すときなどに、
ClojureのvectorからString[]やint[]などにキャストする必要がある場合、
to-arrayやinto-arrayを使うとキャストできる。

user> (to-array ["a" "hello"])
#
user> (into-array ["a" "hello"])
#
user> (into-array String ["a" "hello"])
#
user> (into-array Number [1 1.2])
#
user> (into-array [1 2])
#
user> (into-array [1 1.2]) ;これはエラーに
; Evaluation aborted.

2009年6月5日金曜日

UsedのThinkpad X60s購入

UsedのThinkpad X60sを¥39,800で購入しました。ちなみに英語キーボードです。
Ubuntuを入れて快調です。メモリは2G追加。
インストールはUSBメモリからで、ひっかかることもなく
とても簡単にできました。無線LANもデフォルトで使用できました。
右パームレスト部分が無線LANカードの発熱のために熱くなりますが、
これは仕様なようです。無線OFFにしておくと熱くならなかったし、
無線もともと使わない予定なので問題なし。
久方ぶりにマイノートPCを手に入れ感無量。
半年くらいしたらSSDにしたいなぁと妄想は膨らむ。

2009年5月31日日曜日

JavaOne 2009 Script Bowl

JavaOne 2009では、去年のJavaOne 2008に引き続きScript Bowlのセッションがあるようです。
Script Bowlでは、JavaVM上のスクリプト言語同士でプログラミング対決をしたり、
言語の特長を紹介したりするようです。
去年は、Scala,Groovy,JRuby, Jythonだったのですが、
今年はこれにClojureが加わって5つの言語で対決するようです。
JavaVM上のスクリプト言語は、他にも山ほどあるわけで、
JavaOneで5つめに選ばれたってことは、けっこう注目度がたかいということでしょうか。
これをきっかけにさらに盛り上がるといいなぁ。

2009年5月19日火曜日

Clojure勉強の進捗

1.Clojureでマクロ
マクロの練習に、パターンマッチングのマクロを書いた。
マクロの基本的な書き方や、mapやvector、sequenceの基本もわかってきた。

gitの使い方を覚えて、antの使い方の基礎を覚えたら、
githubにのせてみたい。

2.Clojureでモナド
Clojure.contrib.monadsの使い方を下記の解説をみて覚える。
Monads in Clojure
A monad tutorial for Clojure programmers (part 1)
part 2
part 3
part 4

http://stefan-klinger.de/
のところにある
The Haskell Programmer's Guide to the IO Monad — Don't Panic.
をもう一度読む。
Arrow syntax
8.10. アロー記法
も読んでArrowも理解したい。

3.その他
軽くJavaの復習。antやJDEEなども。
あとConcurrent-Programming-Java-TM-Principles
を注文したのできたら読む。

LWGL - Lightweight Java Game Library
というのを見つけた。よさそう。

2009年5月10日日曜日

Tokyo CabinetをUbuntuにインストール

Tokyo Cabinet
Tokyo CabinetはHirabayashi Mikio 氏により新しく実装された高速なDBMです。

DBMというのは、Database Managerの略で、非常にシンプルなキー:バリュー型の
データベースです。プログラミングでいうところのハッシュマップや連想配列、辞書と同じような機能を、ファイル上に永続化して使用できるというようなものです。
Berkeley DBなどが有名です。

Tokyo Cabinetは、とても新しく実装されたDBMで、
高速な処理や非常に大きいデータベースファイルを扱えるなどのすぐれた
特徴を持ち、Java,Perl,Ruby,Lua用のAPIが公式に用意されています。

ClojureでオレオレDBMSを実装するためのバックエンドとして使いたいと思っているので、
今回はまず、UbuntuにTokyo CabinetとJava APIをインストールします。

sudo apt-get update
wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.20.tar.gz
sudo apt-get install build-essential
sudo apt-get install zlib1g-dev
sudo apt-get install libbz2-dev

wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.20.tar.gz
tar xzvf tokyocabinet-1.4.20.tar.gz
cd tokyocabinet-1.4.20
export CPPFLAGS="-I/usr/lib/jvm/java-6-openjdk/include/"
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export PATH=$JAVA_HOME/bin:$PATH

./configure
make

ここで前回インストールしたPacoを使用して
sudo make install

のかわりに、
sudo paco -D make install

としてインストールしてみた。
つぎにJava用APIをインストール。

wget http://tokyocabinet.sourceforge.net/javapkg/tokyocabinet-java-1.18.tar.gz
tar xzvf tokyocabinet-java-1.18.tar.gz
cd tokyocabinet-java-1.18
./configure
make
make check
sudo paco -D make install


http://tokyocabinet.sourceforge.net/javadoc/
にあるサンプルを実行。

import tokyocabinet.*;
% cat TCHDBEX.java
import tokyocabinet.*;

public class TCHDBEX {
public static void main(String[] args){
HDB hdb = new HDB();
if(!hdb.open("casket.tch", HDB.OWRITER | HDB.OCREAT)){
int ecode = hdb.ecode();
System.err.println("open error: " + hdb.errmsg(ecode));
}
if(!hdb.put("foo", "hop") ||
!hdb.put("bar", "step") ||
!hdb.put("baz", "jump")){
int ecode = hdb.ecode();
System.err.println("put error: " + hdb.errmsg(ecode));
}
String value = hdb.get("foo");
if(value != null){
System.out.println(value);
} else {
int ecode = hdb.ecode();
System.err.println("get error: " + hdb.errmsg(ecode));
}
hdb.iterinit();
String key;
while((key = hdb.iternext2()) != null){
value = hdb.get(key);
if(value != null){
System.out.println(key + ":" + value);
}
}
if(!hdb.close()){
int ecode = hdb.ecode();
System.err.println("close error: " + hdb.errmsg(ecode));
}

}
}

% javac TCHDBEX.java
% ls
TCHDBEX.class TCHDBEX.java% java TCHDBEX
hop
foo:hop
bar:step
baz:jump

% ls
TCHDBEX.class TCHDBEX.java casket.tch


インストールは成功した模様。

PacoをUbuntuにインストール

"make install"したソフトウェアを管理できる超便利ツール「Paco」
を参考にPacoをUbuntuにインストール。

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libgtkmm-2.4-dev
wget http://downloads.sourceforge.net/paco/paco-2.0.6.tar.gz
tar zxvf paco-2.0.6.tar.gz
cd paco-2.0.6/
./configure
make
sudo make install
sudo make logme

2009年5月8日金曜日

Clojure 1.0

Clojure 1.0 - Clojure Clojure | Google Groups
Clojure: Clojure 1.0News about Clojure by Rich Hickey

ついにClojureの1.0がでました。
Congratulation!