[galatea] イベントとISTC総会

昨日、情報処理学会第71回全国大会の特別セッション「擬人化エージェントとの音声対話を実現する基盤ソフトウェア」にて、Galatea for Linux の最新版を紹介しました。お集まりいただいた皆様にお礼を申し上げます。

またその後に ISTC 実行委員会と総会が開催され、4月以降に sourceforge.jp でオープンソースソフトウェアとして公開するという方針も、正式に了承されました。

個人的には私は昨日ずっと Ubuntu 8.10 で Impress!ve を使ってプレゼンテーションをしました。ThinkPad X300 で、Galatea のデモでは USB-Audio アダプタを使用。下記の記事のおかげです。いまや Impress!ve に比べたら Galatea なんて軽い、軽い。。

実行委員の間では、オープンソースのライセンス戦略について様々な質問・意見がありました。また、国際化も重要な課題という認識が実行委員メンバーで共有されつつあります。

Galatea は2003年に IPA のプロジェクト成果として公開後、正式には最新版を公開していません。しかし IPA 最終版についても、公開後多くの方から利用方法やライセンスについてお問い合わせをいただいてきました。これからも利用者・関心をお持ちの方からのご意見を伺っていきたいと思います。

JMC を使って Java で MP3 を再生する

下記の記事

を読んで、JavaFX のクラスを Java 言語から使うためのパターンがわかってきたので、Java Media Components を Java から使い MP3 ファイルを再生することに挑戦。やっと成功しました。

ただし Windows XP で Java FX SDK 1.1 を C:\Program Files\JavaFX\javafx-sdk にインストールしています。

JavaFX の機能は重要だがスクリプト言語は嫌い、という主張には同意できる点もあるのですが、下記の書き方がやたら冗長に感じるのも事実です。

私としては、Java で過去に実装した資産をうまく再利用するためにこのテクニックを使ってみたいと思います。

// Java MP3 Player using JavaFX JMC classes 
// 2009-03-08 by nishimotz@gmail.com
// based on work of Matt Hicks
// http://www.matthicks.com/2009/02/i-hate-javafx-i-love-javafx.html
//
// Requirements (Eclipse 3.4.1)
// To avoid 
//   java.lang.UnsatisfiedLinkError: 
//   com.sun.media.jmcimpl.plugins.directshow.DShowEngine.ndsInit()
// add jmc.dll as follows:
// Java -> Build Path -> User Library
//   jmc-dll
//   File : C:\Program Files\JavaFX\javafx-sdk\lib\desktop\jmc.dll
//   Location : C:/Program Files/JavaFX/javafx-sdk/lib/desktop
// Notes
//   javafxgui.jar : for javafx.scene.media.* 
package test;
import java.io.IOException;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
public class MyMediaPlayer {
public MyMediaPlayer() throws IOException {
Media media = new Media(); {
media.initialize$();
String mediaUrl = "http://hoge.hoge/hoge.mp3";
// String mediaUrl = "file:///C:/hoge/hoge.mp3";
media.$source.set(mediaUrl);
}
MediaPlayer mediaPlayer = new MediaPlayer(); {
mediaPlayer.$media.set(media);
}
MediaView mediaView = new MediaView(); {
mediaView.$mediaPlayer.set(mediaPlayer);
}
Scene scene = new Scene(); {
scene.impl_setWidth(100.0f);
scene.impl_setHeight(100.0f);
scene.$content.insert(mediaView);
}
Stage stage = new Stage(); {
stage.$title.set("MyMediaPlayer");
stage.$scene.set(scene);
}
mediaPlayer.play();
}
public static void main(String[] args) throws Exception {
new MyMediaPlayer();
}
}

参考までに、上記の元になった JavaFX の実装例はこちら:

// based on http://gihyo.jp/dev/serial/01/javafx/0010?page=1
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.media.*;
var mediaUrl:String = "http://hoge.hoge/hoge.mp3";
var theWidth:Number = 100.0;
var theHeight:Number = 100.0;
var media = Media {
source: mediaUrl
};
var mediaPlayer = MediaPlayer {
media: media
};
Stage {
title: "MP3 Player"
scene: Scene {
width: theWidth
height: theHeight
content: MediaView {
mediaPlayer: mediaPlayer
}
}
}
mediaPlayer.play();

git を使う

Vine Linux 4.2 に git のパッケージがあったので、使ってみました。

下記の手順の中で、別の場所に新しいディレクトリをまったく作らないで作業ができている、というところが、CVS や Subversion と異なる点(手軽さという意味で大きなメリット)だと思います。

インストール(Ubuntu でも同様)

$ ssh yellow
$ sudo apt-get update
$ sudo apt-get install git-core
  • Vine 3.x には git-core パッケージはないみたいです

個人のデフォルトを設定する

git config --global user.email "nishimoto@m.ieice.org"
git config --global user.name "Takuya Nishimoto"
  • ~/.gitconfig に書き込まれるようです

既存のディレクトリをバージョン管理下におく。ここでは職場で使っている bibdb という自前ツールの例。

$ cd /export/htdocs/html/bibdb/
$ git init
  • カレントディレクトリに .git ディレクトリが作成され、これがレポジトリになる

管理したいファイルを追加する

$ git add *.php *.txt
$ git add cgi-bin/update_publication.cgi
$ git add *.jpg *.gif .htaccess

追跡されているファイルとされていないファイルを確認する

$ git status

commit する

$ git commit -m "first commit"
  • これにより、追跡されているファイルが .git 内に保存され、比較・復元が可能になる

編集してみる

$ emacs -nw 00readme.txt

差分を確認

$ git diff
diff --git a/00readme.txt b/00readme.txt
index ff26fee..c15f626 100644
--- a/00readme.txt
+++ b/00readme.txt
@@ -4,3 +4,7 @@
TODO:
<A5><A2><A5><C3><A5><D7><A5><ED><A1><BC><A5><C9><A4><B5><A4><EC><A4><BF>pdf<A4><F2>chmod 644<A4><B9><A4>
+
+2009-03-06 by nishimoto
+
+ $ git init
  • TODO: 文字化けの解決
    • 環境変数 GIT_PAGER を使うのかな?

差分を commit する

$ git commit --all -m "readme updated"
[master]: created b5f0737: "readme updated"
1 files changed, 4 insertions(+), 0 deletions(-)

履歴を確認する

$ git log
commit b5f073788c35befd95f5a907777c221f17e63d1e
Author: Takuya Nishimoto <nishimoto@m.ieice.org>
Date:   Fri Mar 6 17:01:05 2009 +0900
readme updated
commit 42dff939ec85d2faa212ba42ff617f5fdac215e6
Author: Takuya Nishimoto <nishimoto@m.ieice.org>
Date:   Fri Mar 6 16:42:51 2009 +0900
first commit

ブランチを確認する

$ git branch
* master

ブランチを作る

$ git branch experiment
$ git branch
experiment
* master

別のブランチで作業してみる

$ git checkout experiment
Switched to branch "experiment"
$ emacs -nw 00readme.txt
$ git diff
diff --git a/00readme.txt b/00readme.txt
index c15f626..be17e40 100644
--- a/00readme.txt
+++ b/00readme.txt
@@ -8,3 +8,8 @@ TODO:
2009-03-06 by nishimoto
$ git init
+
+2009-03-06 by nishimoto
+
+ git branch : experiment
+

experiment ブランチに commit する

$ git commit --all -m "00readme modified"
[experiment]: created 609c427: "00readme modified"
1 files changed, 5 insertions(+), 0 deletions(-)

master ブランチに戻す

$ git checkout master
Switched to branch "master"
$ cat 00readme.txt
[yellow]
/home/httpd/html/bibdb/
TODO:
アップロードされたpdfをchmod 644する
2009-03-06 by nishimoto
$ git init

experiment の更新を master にマージする

$ git merge experiment
Updating b5f0737..609c427
Fast forward
00readme.txt |    5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

マージできたことを確認する

$ git branch
experiment
* master
$ cat 00readme.txt
[yellow]
/home/httpd/html/bibdb/
TODO:
アップロードされたpdfをchmod 644する
2009-03-06 by nishimoto
$ git init
2009-03-06 by nishimoto
git branch : experiment

リンク

更新記録

  • 2009-03-10 : 事前に git config で user.name などを指定するようにしました。