2005年10月28日

VMware Player

無料の仮想PCVMware Playerを使ってみた。ちなみにWindows版。

俺はLinux版のVMware workstationを持ってるのでLinuxで仮想マシンを作成し、Windowsマシンでその仮想マシンを実行してみた。
Linuxで作成するとCDドライブの設定がLinux用になるのでそれを変更しないとダメだがちゃんとWindowsで動いた。

しかしVMwareが無料になるって言うのはかなりインパクトがあるなぁ。
でもVMware Playerは仮想マシンの設定項目がかなり少なく、自由に設定しようと思うと設定ファイルをエディタで修正しないとダメそうだ。
またフルスクリーン時、画面上部にVMware Playerのタイトルバーが表示されたりなんかちょっと不便な事もある。これは設定次第で消せるような気もするが。

VMwareは高くて気軽に導入できないなぁと考えてる人がコレを試してみて、やっぱりPlayerだけだと不便で結局製品版を買ってしまいそうな気がする絶妙のバランスのようだ。

VMwareの普及率はグンと上がりそうだし、これを機にLinuxを始める人が増えそうでPlayerの導入はナイス判断って感じだろうか。

↓WindowsXP上でGentooをインストール中の図。青色のウインドウ枠はPlayerのもの。なんかちょっとダサイ。

2005年10月27日

続StAX

先日ちょっと使ってみてStAX微妙かもと思ったがStAXでXML書き込みをやってみたらめちゃ簡単だった。
今までXML書き込みはDOMばっかり使っていたけどStAXの簡単さを覚えてしまうとDOMはめんどくさくてやってられないって感じだ。

以下のコードを実行するだけで下のXMLが出力される

XMLOutputFactory fac = XMLOutputFactory.newInstance();
XMLStreamWriter writer =fac.createXMLStreamWriter( new FileOutputStream("testout.xml") ,"UTF-8");
writer.writeStartDocument();
writer.writeStartElement("root");
writer.writeStartElement("item");
writer.writeAttribute("itemNumber","1234ごろくなな\\円");
writer.writeCharacters("テキスト");
writer.writeEndElement();
writer.writeStartElement("item");
writer.writeComment("これはコメントです");
writer.writeEndElement();
writer.writeEndDocument();
writer.close();

出力されるXML、実際はインデント、改行されない。
<?xml version="1.0" encoding="utf-8" ?>
<root>
 <item itemNumber="1234ごろくなな\円">テキスト</item>
 <item>
  <!-- これはコメントです -->
 </item>
</root>

1から新しいXMLファイルを書き出すにはとてもとても便利だ。
割と直感的に使えるので簡単だしナイス。

でもDOMのようにXML読み込んでちょっと修正してそれを保存って言うやり方はできない。

相変わらずStAXの日本語情報は皆無なのでIBM developerWorksでStAXを検索するといろいろドキュメントが出てくる。

StAX゚+.゚(人・∀・)゚+.゚ イイワァ♪

サーバ型付箋紙

Windows版の付箋紙を使っていて「会社の付箋紙を家でも見れたら楽なのにな」と思った。
さらにLinux版付箋紙的なメモソフトTomboyを使ってみて便利だったので「付箋紙がWikiみたいになればより便利なのにな」と思った。

そこで便利そうなアプリのアイデアを考えてみた。
気合い入れれば基本的な機能はさくっと作れそうだけど今開発中のアプリが放置プレイになるのでとりあえず我慢。

と言うかPukiWikiクライアントがあれば問題ないような気もしてきた。

2005年10月26日

Quake4

俺の愛するQuakeの最新作が登場。
海外ではすでに発売されているが日本では明日。
全然チェックしてなかった・・・・。

2005年10月25日

StAXでXML

現在、JavaでXMLをいじろうとすると二つの方法がある。
SAX(Simple API for XML)とDOM(Document Object Model)だ。

DOMは欲しい情報だけ取得できて便利だが、一度にすべてのデータを読み込みデータ構造をメモリに持つのでメモリの消費が激しい。
SAXは文字通りシンプルでメモリ消費も少ないが複雑なXMLを処理しようと思うとプログラマの負担が大きい。

それぞれの弱点を考慮し、この二つの良いトコ取りをした新しいAPIがStAX(Streaming API for XML)だ。

と言うところまではよく聞く話だが実際よくわからなかったので使ってみた。

とりあえずこの辺からライブラリを入手。

しかしStAX!StAX!って聞く割には情報がない・・・。
StAX XMLで日本語ページを検索しても1000件ぐらいしかヒットしないし・・・。ヘッドフォンのSTAXもガンガンヒットする。

とりあえずJavaWorldにあったサンプルで試してみる。
StAXにはCursor APIとEvent Iterator APIの二つがあるらしい。
そして今回はCursor APIを使ってXMLを読み込む。

// 初期化
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r = f.createXMLStreamReader( filename , new FileInputStream(filename));
while( r.hasNext() ){
	r.next();
	// r.getText()やらr.getEventType()やらする
}

おお、すげー簡単。SAXよりもシンプルなんではなかろうか。
しかしあまりにシンプルすぎてこれではプログラマの負担がSAXと変わらない気が・・・・。
まぁ確かになじみの深いIteratorのように使えるからイベント駆動のSAXよりかは使いやすそうだが。

Cursor APIと言う名前の通り最初から1エレメントずつ読み込んでいく感じでSAXに対する別の解なのかもしれない。書き込みもできるのでSAX使うならこっちかなぁって感じ。


Event Iterator APIも気になったので調べてみた。StAX Event Iterator APIでググると日本語の情報8件・・・。頑張れStAX。仕方なく英語の情報で探す。この辺とか。
XMLEventReader r = f.createXMLEventReader( filename , new FileInputStream(filename));
するだけでEventReaderが取得できる。
後はCursor APIと同じようにr.nextEvent()すればXMLEventが取得できる。

・・・、ってそれだけ?
Cursor APIを通して取得できる情報がXMLEventと言う形でまとまってボコッと取得できるぐらいの差しかないのかな・・・。

SAXとDOMには弱点があるからStAXを作ったぜ!みたいな前評判(?)だったのでちょっと興味があったが俺が期待していたようなモノではなかったようだ。
DOMの代わりにはならないがSAXの代わりとしては便利そうな予感。むしろSAX要らないかも。
巨大なXMLファイルを書き込む必要があるならStAXしかないと言う場合もありそうだ。

ちなみに300バイト程度のXMLファイルを読み込むのに200~250ミリ秒かかっていた。
XMLInputFactoryのインスタンスの取得に100ミリ秒。
XMLStreamReaderのインスタンスの取得に100ミリ秒。
このあたりはDOMやSAXと同じぐらいだろうか。
読み込みが開始すれば速いが、小さなXMLファイルを大量に読み込む必要がある場合はちょっと遅いかもしれない。

2005年10月23日

メインサーバ調子悪い

今日朝起きたらメインサーバに接続できなかった。
Pingも届かなかったのでモニターを見てみるとカーネルパニックを起こして止まっていた。
エラーメッセージを見るとext3がどうたらこうたらというメッセージがでていたのでHD関連だろう。

再起動するとRAIDのステータスがdegradeになっていた。
これはRAID0のミラーリングの整合性が取れていないと言うことだろうか。

なんでHDすぐ死んでしまうん?(節子AA略

これはファイルシステムが壊れただけなのかHD本体が逝ってしまったのかどっちだろうか・・。
ちょっと今は時間がないが早めにバックアップをとって調べる必要がありそうだ。

SWTの限界

う〜ん、Explorerクローンを作っているがGUIのLinuxとWindowsで動作が違う・・・。
もちろんそれはSWTの利点なんだがクリックイベントの発生順まで違うとは・・・。

ディレクトリを表示するツリーでディレクトリを開くために[+]マークをクリックするとツリーが開かれ[-]になる。
そのときWindowsはマウスボタンダウンの段階でWindowsのGUIコンポーネントの機能でツリーが開かれた後Javaのクリックイベントが発生する。
Linuxの場合はマウスボタンダウンでJavaのクリックイベントの後にマウスボタンアップでGTKのGUIコンポーネントのマウスクリック処理が行われる。

WindowsのExplorerの動作にできる限り似せるようにしているのでマウスイベントあたりでいろいろごちゃごちゃ処理を行っているのでマウスクリックでの処理の順番やタイミングが違うと意図しない動作になってしまう・・・。

う〜む・・・、不本意だがOSそれぞれによって処理を書く必要があるなぁ。

SWT/Jfaceは好きなんだけど同じコトをさせようと思うとやっぱ困ることがある。
Swingも自在に使えるようにしておいた方がいいな。
Linuxでも使えるナイスデザインのSwing L&F
https://looks.dev.java.net/

ほかにも躓く点があるなら次作るアプリはSwingにしてみるか・・・。

2005年10月22日

カメレオンルミィ

rumy1.png
Jakarta-Commons VFS (Virtual File System)を導入してみた。
ディレクトリと同じようにアーカイブが表示されていてディレクトリと同じようにアーカイブを開くことができる。
VFS専用のオブジェクトを使用するように無理矢理変えたからちょっと設計が微妙に・・。
まぁVFSにしてのメリットが大きいから使わないというわけにはいかないけど・・。

次はファイルコピペ、ドラッグアンドドロップの実装だな。
ファイル操作のUndoRedoはめんどいからいいか・・。

2005年10月21日

VMware Player

VMware PlayerなるものがVMwareから発表された。
無料で使えるVM実行環境らしい。
今はLinux版のライセンスしか持ってないのでWindows上でVMwareを使うことができないけどコレ使えばできるのだろうか。

ちなみにVM実行は無料だけどVM作成は普通のVMware Workstationなどで作成する必要があるようだ。

Linux版のゲストOSとWindows版のゲストOSは互換性あるのかなぁ。
これで仮想マシンライフが充実するだろう。

2005年10月20日

Jakarta-Commons VFS

現在JavaでExplorerクローン作成している。
すでに最初の開発バージョンで俺が最初に必要としていた「Linux上でのファイル一覧の閲覧とダブルクリックでMP3の再生」は実現できていたがもっと高機能なファイラにしてSourceforgeあたりでオープンソースプロジェクトとして公開しようかと思う。

で、JakartaプロジェクトのCommonsでいろんなファイルシステムを抽象化するライブラリ VFSを使ってみると面白そうなので使ってみる。
コレを使うとローカルファイルシステムもHTTPもFTPも圧縮ファイルもWebDAVも同じように使える。
つまりExplorerのCドライブやDドライブなどの隣にFTPのホストが同じように表示され同じようにファイルのコピペなどが行うことができるわけだ。
圧縮ファイルは中身のファイルの読み込みだけらしい。

また、Java標準のファイルを扱うオブジェクトはファイルの移動や、ディレクトリの削除が非常に面倒だった。
が、このライブラリではそのあたりが解消されていて別のディスクに移動や、FTP上に移動なども簡単に行える。

ただディレクトリを"移動"すると移動先に同じ名前のディレクトリがあった場合、上書きせずに削除してから移動になるようだ。
このあたりは不便そう。自分で実装する必要がありそうだ。

FTPの接続がうまくいかなかったのでパッシブモードで接続する方法を以下に。
設定方法がわからなかったのでソース読んで解決。ドキュメント少なめでソース読むの必須かも。
単にドキュメント探し切れてないだけかもしれないけど。
以下のコードを実行するだけでローカルのtestディレクトリとその中のファイルをアップロードすることができる。簡単!


FileSystemManager fsManager = VFS.getManager();
String copyDir = "test";
FileObject file1 = fsManager.resolveFile("file:///c:/" + copyDir);
FileSystemOptions opt = new FileSystemOptions();
FtpFileSystemConfigBuilder cb = FtpFileSystemConfigBuilder.getInstance();

// パッシブモードON
cb.setPassiveMode( opt , true );

FileObject file2 = fsManager.resolveFile("ftp://USER:PASSWORD@HOST/DIR/"+ copyDir , opt );

file2.copyFrom( file1 , new FileSelector(){
public boolean includeFile(FileSelectInfo arg0) throws Exception {
return true;
}
public boolean traverseDescendents(FileSelectInfo arg0) throws Exception {
return true;
}
});

2005年10月17日

White Box Enterprise Linux 3 から CentOS3.5へ

家のメインサーバはWhite Box Enterprise Linux 3だった。
導入当時、すでにメンテナンスが遅れ始めていたが現在はほとんどメンテナンスがなされていないようだ。

そして同じRHELクローンであるCentOSは割と活発に活動している。

と言うことでWBELをCentOSに移行した。

参考は
http://www.centos.org/modules/smartfaq/faq.php?faqid=19

手順は簡単で
#yum clean
#rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-3
#rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-release-3-5.3.i386.rpm
#rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/yum-2.0.8-1.centos.7.noarch.rpm
#rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-yumcache-3.1-0.20050526.3.noarch.rpm
#rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-yumconf-1-11.noarch.rpm
#cp yum.conf.rpmnew yum.conf
#yum update

として再起動するだけでCentOSになる。
各種サーバがアップデートされてセキュリティも向上したはずだ。
これでメインサーバの寿命が延びた。

2005年10月04日

ちょっと便利なNFS

普通のNFSはマウントしたディレクトリのメディアしか共有できない。
つまり/exportがHD1にあって、/export/otherHDにHD2がマウントされていた場合、/exportをNFSでマウントしてもotherHDを見に行くことができない。

これはちょっと不便だ。
そこでunfs3と言うモノがある。

このNFSなら別のHDも共有することができる。
インスコしてnfsdを実行すればおk。

2005年10月その他のエントリー