トップページ | 2009年9月 »

2009年8月

2009年8月26日 (水)

レンタルサーバー上にSubversionを入れる

以前メインにしていた別のブログに、「SAKURAインターネットのレンタルサーバーにSubversionを導入する方法」について書いた。
その続編としてサーバーのSubversionのバージョンを上げた顛末について書こうと思う。

今回、BlackBerry Boldでの辞書アプリを開発するにあたり、EB4JというOSSのライブラリを改変して利用している。
このEB4JのライセンスはLGPLのため、改変したライブラリもLGPLで公開しなければいけない。じゃあ、どこで公開するかということで、SourceForgeとGoogle Codeで迷ったが、近い将来に仕事でGoogle Codeを使う必要がありそうなので、その練習も兼ねてGoogle Codeを選択した。

ところがeclipseからコミットしようとするとエラーになる。
(エラーメッセージは記録していない。ごめん。)

ネットで情報収集してみると、eclipseにインストールされているSubclipseプラグインのバージョンが古いのが原因のようだ。

(A) Subclipse 1.2.x ---> Subversion1.4
(B) Subclipse 1.4.x ---> Subversion1.5
(C) Subclipse 1.6.x ---> Subversion1.6

という対応関係になっているのだが、今回は、サーバー側(Google)が1.5.4(B)に対して、1.2.xのSubclipse(A)からコミットしようとしていた。
じゃあクライアントをバージョンUPすればいいじゃん、ということになるのだが、実はこのeclipseからSAKURA上にあるSubverionサーバーも利用していてそのサーバーが1.4.3(A)なのである。Subversionのサイトを見ると互換性についていろいろ書かれているが、いまいち不安。
じゃあ、いっそのことSAKURAのほうをバージョンUPしてしまえ、ということでその手順。

まずはサーバー側。
Subversionはバージョンが異なるとリポジトリの構成も異なるので、ちゃんとバックアップしないとあとから復元できなくなる。
レンタルサーバーにSSHでログインし、次のようにしてバックアップを取得する。

svnadmin dump $HOME/svn-respos/projects | bzip2 > svn-projects.dump.bz2

Subversionのダウンロードとコンパイルを実行する。GoogleにあわせてSubversionは1.5.4にした。

mkdir -p $HOME/local/src
cd $HOME/local/src

wget http://subversion.tigris.org/downloads/subversion-1.5.4.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.5.4.tar.bz2

tar xvf subversion-1.5.4.tar.bz2
tar xvf subversion-deps-1.5.4.tar.bz2

cd subversion-1.5.4
./configure --prefix=$HOME/local/subversion --without-serf

make
make install

インストールが終わったらコマンドが使えるようにするために、.cshrcを編集してインストール先($HOME/local/subversion/bin)にPATHを通す。必要があれば再ログインする。

次にリポジトリを復元する。

mkdir $HOME/svn-repos
svnadmin create $HOME/svn-repos/projects
bzcat svn-projects.dump.bz2 | svnadmin load $HOME/svn-repos/projects

復元が終わったら、eclipseにSubclipseの最新版を入れて完了となる。

この手の情報って探している人が多いので、参考までに、クライアント側のセットアップ手順も全部書いておく。

まずはサーバー側の公開鍵とクライアント側の秘密鍵を作成する。
今回はsshクライアントにはTortoiseSVNに含まれているTortoisePlink.exeを、鍵生成にはPuTTYgenを使う。それぞれのソフトはググって探す。

    1. PuTTYgenを起動し[Generate]ボタンをクリック。
    2. マウスを適当に動かして鍵を生成。
    3. Public key for pasting・・・というテキストエリアの内容を$HOME/.ssh/authorized_keysにコピペする。
     ファイルがなければ作成するが、.sshディレクトリのパーミッションは0700でauthorized_keysファイルのそれは0600にする
    4. PuTTYgenでKey passphraseは入れないで[Save private key]ボタンを押して秘密鍵を保存する。
     警告が表示されるが、今回は無視。また秘密鍵の保存先は任意でいいが、例えばC:\Sakura\id_rsa.ppkファイルに保存する。

次にスタートアップにC:\Program Files\PuTTY\pageant.exeのショートカットを登録して、Windows起動時に自動起動するようにする。
その際、ショートカットのプロパティで、リンク先に"C:\Program Files\PuTTY\pageant.exe" "C:\Sakura\id_rsa.ppk"と設定すると良い。

次に、マイコンピュータのプロパティから、システム環境変数に

SVN_SSH = "C:/Program Files/PuTTY/TortoiseSVN/TortoisePlink.exe"

を設定しておく。(""で囲む必要あり。)

これでSubclipseがTortoisePlinkを起動し、pageantが先ほど作成した鍵を使用して認証してくれる。

最後にeclipseからリポジトリに接続して検証してみよう。
リポジトリロケーションの新規作成を選択して、

svn+ssh://サーバーのユーザー名@サーバーのIPアドレス/$HOMEのパス/svn-repos/projects

と入力してみる。
復元した内容が表示されれば成功だ!

ちなみに以前も書いたのだが、レンタルサーバーは普通何人のユーザーで共有しているので、ポートが競合するんじゃないか、などと心配してしまうかもしれない。しかしSubversion 本家サイトの説明に書かれているとおり、SSHで接続することにより、その接続にのみ有効なSubversionのプロセス(svnserve)が起動するので、全く問題なく動作する。
SAKURAのレンタルサーバ(スタンダード)は年6,000円で容量3GBというなかなか良心的な価格になっているので、個人的には気に入っている。

なお、BlackBerry用のライブラリは、ここ で公開している。

| | コメント (0) | トラックバック (0)

2009年8月20日 (木)

BlackBerry辞書アプリで、外字が表示できるようになった

またまたBlackBerry Boldで辞書アプリ作成の話題。
ついに外字フォントが表示できるようになった。
Extfont

先頭の方に表示されている部首とか、5行目の[意味]とかが外字。

でもこれかなり苦労した。
まずEPWINGの外字データっていわゆるモノクロのDIB形式で1ビットが1ピクセルっぽい、というのはすぐ分かったんだけど、辞書から取り出したバイト配列(rawData)をそのまま

Bitmap bmp = new Bitmap(Bitmap.ROWWISE_MONOCHROME, fontWidth, fontHeight, rawData);

ってやると、IllegalArgumentExceptionがthrowされてしまう。おまけに何もメッセージがなくて何が悪いのか最初はまったく見当が付かない・・・。
ふとWindowsのDIBフォーマットのことを調べてみると、横のピクセル数は32bit(4バイト)の倍数でないといけないということが判明。その仕様に合うようにバイト配列を加工してから、上記のBitmapオブジェクトを生成する。

そして、冒頭のように無事に外字の表示に成功した!!!

| | コメント (2) | トラックバック (0)

2009年8月17日 (月)

BlackBerry Boldで広辞苑の検索に成功!?

先日から取り組んでいるBlackBerry BoldでのEPWING辞書検索!
なんとか検索だけは実行できるようになった。

検索画面はこんな感じ。 外字の部分([GAIJI=wB850])がまだうまく処理できていない。
Search_6

本文の表示画面はこんな感じ。
Result_3

モバイル機ってJava MEというエディションが利用されているのは薄々知っていたのだが、いざ蓋を開けてみると思ったより厄介。
というのも、今回利用しようとしているEB4JはJava SE 5を前提としているのでannotationやgenericsがバリバリ使われているが、Java MEでは対応していない。それにListやMapなどのコレクションフレームワークやRandomAccessFileなどもMEには用意されていない。
そういうのを考えるとEB4Jにそれなりに手を加える必要が・・・。といっても辞書検索の部分ってそれなりに作りこまれているので変にいじると何が原因か分からなくなりそう。

考えた挙句、とりあえずVectorをListに見せたり、HashtableをHashMapに見せたりするようないわゆるアダプタのようなクラスを作成することに。これだとクラス名・メソッド名が同じでパッケージ名だけを変えればいいので、元のソースはほとんどいじる必要がない。不具合が起こったとしても、なんとか切り分け出来そう。

そんなこんなで冒頭のように検索の基本機能はうまくできた。
ひとつはまったのがjava.io.IOException:File System Out of Resourcesというメッセージ。
調べてみると17以上のファイルハンドルを開こうとしたのが原因とのこと。これはEB4Jの1.0.3の不具合のようで、ファイルをclose()しないで放置しているところがあったのを修正したら、無事BlackBerryのシミュレータで動作した。Windowsだとファイルハンドルってもっとたくさん使えるので、こういうのって判明しないんだよね。

とりあえず動いたはいいが、まだ30%くらいの完成度かな。

  • 外字の埋め込み処理
  • 画像の表示
  • 複数の辞書を切り替えて使えるようにする

など徐々に対応していこう。早く公開出来るくらいまで仕上げたい!

 

| | コメント (0) | トラックバック (0)

2009年8月14日 (金)

BlackBerry BoldでEPWING形式の辞書が見られるようにする!

BlackBerry Boldが発売されて半年になる。
欲しい、欲しいと思いつつも、今使っているのがSoftbankなのでMNPするとなるといろいろ費用がかかるし、それ以外にも今使っているウインドウズモバイル機(X02HT)に比べると機能面でも不安がある。

もっとも大きい不安は、EPWINGに対応した辞書アプリが存在しないことだ。
ただ、いろいろ調べてみると、
1. BlackBerryのアプリはJavaで開発できる
2. EB4JというJavaで実装された電子辞書関連のクラスライブラリが存在する
ということが判明。
だったら自分で作ればいいじゃん、ということで早速RIMのサイトからSDKをダウンロードしてみた。

サンプルアプリを動かしてみた。
NokiaのS60のときは苦労したけど、こっちは素直に動いていい感じ。
9月の頭に夏休みを取る予定なので、それを目安に公開できるくらいまで仕上げたいと思っている!
興味のある人はぜひコメントをお願いします。

| | コメント (0) | トラックバック (0)

トップページ | 2009年9月 »