2003年7月の技術日記


Jul.1,2003 (Tue)

AVIファイルのプレビューを作る2。

JMFで読み込みに失敗するAVIファイルがいくつかあった。
MediaTypeがCinepakで、まれに ArrayIndexOutOfBoundsException が発生。


java.lang.ArrayIndexOutOfBoundsException
        at com.sun.media.codec.video.cinepak.CPChunk.doCFUpdate(CPChunk.java:319)
        at com.sun.media.codec.video.cinepak.CPChunk.processChunk(CPChunk.java:91)
        at com.sun.media.codec.video.cinepak.CineStore.DoFrame(CineStore.java:384)
        at com.sun.media.codec.video.cinepak.JavaDecoder.process(JavaDecoder.java:124)
        at com.sun.media.BasicFilterModule.process(BasicFilterModule.java:322)
        at com.sun.media.BasicModule.connectorPushed(BasicModule.java:69)
        at com.sun.media.BasicOutputConnector.writeReport(BasicOutputConnector.java:120)
        at com.sun.media.SourceThread.process(BasicSourceModule.java:729)
        at com.sun.media.util.LoopThread.run(LoopThread.java:135)

エラーになる画像は同じモダリティーからなので、もしかしたらファイルフォーマットに起因する問題らしいけども、WindwosMediaPleyerでの再生、transcodeの変換も問題ないようなのでよく分からない。

結局、まずJMFで変換して、失敗したらTranscodeを試すという方法を使う。
これで、何とか1万個以上のAVIファイルのサムネイル生成に成功。

Jul.15,2003 (Tue)

シンプルで飽きが来ない

って、最初から飽きているのとは違う?

Jul.22,2003 (Tue)

Javaの複数VMを使い分ける方法

Bash で環境変数を書き換える。
以下は cygwin-bash on Windows用。Linuxなども同様に出来る。
JDK・SDKを /usr/java などにインストール。

インストール場所は

  • /usr/java/jdk1.1.8
  • /usr/java/j2sdk1.3.1
  • /usr/java/j2sdk1.4.2

その際、java plugin のインストールはどれか1つだけにする。
また、システムの環境変数に java のパスを入れない。

システムディレクトリ(c:/winnt/system32)から java.exe を削除する。
自分で関連付けを変えれば javaw.exe も消してかまわない。

以下のようなスクリプトを bash 起動スクリプトに入れておく。


# 元からある実行パスとよく使うクラスパス
export PLAINPATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
export MYCLASSPATH=.
# Cygwin用変数
USRC="d:/usr"
SEPC=";"
# UNIX用変数
#USRC=/usr
#SEPC=":"
# JDKの/usrからの位置
JDK118=/java/jdk1.1.8
JDK131=/java/jdk1.3.1
JDK142=/java/j2sdk1.4.2
#
function PlainClasspath() { 
    SetupClasspath $MYCLASSPATH;
}
function SetupClasspath(){
    export CLASSPATH=$1;
    export JIKESPATH=$1$SEPC$JIKESGEN;
}
function AddClasspath() {
    SetupClasspath $CLASSPATH$SEPC$1;
}
function CPCurrentDir() {
# for cygwin  "/cygdrive/d" -> "d:"
    AddClasspath `pwd|sed -e "s/\/cygdrive\/d\(.*$\)/d:\1/"`
# for UNIX
#    AddClasspath `pwd`
}
function ChangeJDK118() {
    SetupJDK $JDK118
    PlainClasspath
    AddClasspath $JAVA_HOME/lib/classes.zip
}
function ChangeJDK131() {
    SetupJDK $JDK131
    JIKESGEN=$JAVA_HOME/jre/lib/rt.jar
    PlainClasspath
}
function ChangeJDK142() {
    SetupJDK $JDK142
    JIKESGEN=$JAVA_HOME/jre/lib/rt.jar
    PlainClasspath
}
function SetupJDK() {
    export JAVA_HOME=$USRC$1
    export PATH=$PLAINPATH:$BUSR$1/bin
    hash -r
}
# 
ChangeJDK131

これで、以下のように使える。


# 各JDKに切り替える
$ ChangeJDK118
$ ChangeJDK131
$ ChangeJDK142
#
# カレントディレクトリをクラスパスに追加する
$ CPCurrentDir
#
# クラスパスを追加する
$ AddClasspath c:/usr/java/lib/...
#
# クラスパスを元に戻す
$ PlainClasspath

Eclipseは、タブが気に入らないのと、環境の安定度が微妙。特に設定画面や、Linuxで日本語など。現在のメインはやっぱり JDEE on Meadow + CVS。

Jul.24,2003 (Thu)

Java Installer

Java VM ごとインストールできるインストーラーを探す。

InstallAnywhere Now! を使ってみる。
マルチプラットフォームを対象に出来て、かなりいい感じ。Webブラウザを使ってOSを選択し、インストールする。署名つきJavaが動けば、ボタン一つでインストール開始。
ただ、インストーラーがほとんど英語なので、英語の読めなさそうな人向けのソフトの配布には向かないかもしれない。

Jul.26,2003 (Sat)

式日を入手
式日 式日』 DVD
キングレコード
出演者: 岩井俊二,藤谷文子, その他
監督: 庵野秀明
発売日: 2003/07/24, 価格: \3,800, 時間: 110 分
音声: 日本語
音声仕様: Dolby Digital 2.0 Stereo

映像がきれい。はるにれと同じくらいいい感じ。
懐かしい感じ。そう思うのは多分宇部人だけかも。
こういうものが作れるくらいの存在になりたいと思う。

「はるにれ」 姉崎 一馬 ISBN4834008576
bk1 / amazon / Yahoo! / 旭屋 / Jbook / 紀伊國屋 / 楽天 / skysoft

Jul.28,2003 (Mon)

xmlrpc-1.1で日本語

普通にやると日本語の文字列が通らない。どうやら iso-8859-1 で符号化されてしまうので日本語が?になる。
クライアント側で以下のように、エンコード方法を指定する必要がある。(追記:以下の方法はうまくいかない。 2003/07/31)


XmlRpc.setEncoding("Windows-31J");//WindowsのSJISで送りたい場合

Windows間ならこれでうまくいくが、Linuxでサーバーを動かすと、文字化けになってしまう。どうやら InputStream -> InputSource -> パースの過程でデフォルトエンコード方式で文字列を再構築されてしまうらしい。
そんな時は、サーバーの起動プログラムの先頭に以下のように書いて、デフォルトエンコーディングを強制的に変えるとうまくいく。


System.setProperty("file.encoding","Windows-31J");

しかし、これでは送信側が好きな文字コードで符号化して送れないので、本来ならばUTFに統一するべきというか、やっぱりサーバーがちゃんとXMLのエンコード名を読んであわせるべき。しかし、あんまり詳しく調査する時間が無いので詳しい原因や解決方法は不明。次のバージョンに期待、と思っていたら、次の1.2でもいろいろ問題があるみたい。
XML-RPC using Xi

Jul.31,2003 (Thu)

xmlrpc-1.1で日本語2

先日の方法では、受信側で問題が起きる。
xmlrpcは内部で簡単なSAXパーサーを使っているのだけども、英語以外のことは考えてないのでユニコードや日本語をうまく処理できない。実行時にプロパティーか、プログラム中でパーサーを指定する必要がある。

結局正しそうな方法は以下のよう。

クライアント側で、文字コードを UTF-8 か、適当な文字コードにする。
サーバー側でも、同様に返事用の文字コードを指定する。


XmlRpc.setEncoding("Windows-31J");//WindowsのSJISで送りたい場合
XmlRpc.setEncoding("UTF-8");//ユニコードで送る場合
//なお、この文はなるべく最初の方で実行する。

サーバー側で、パーサーを指定する。
例えば Xerces-J を使う場合は以下のよう。


起動時にプロパティーで指定
$ java -Dsax.driver=xerces .....

プログラム中で指定
XmlRpc.setDriver("xerces");

これで、送信側がどんな文字コードで送ってきてもきちんと処理できるようになる。



[最新にもどる]
桜井雅史: E-mail : m.sakurai@cmt.phys.kyushu-u.ac.jp
Web page : http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/