2008/08/31

MacOS XでARToolKitアプリの開発 -環境準備編-

ちょっと前からARToolKit(http://www.hitl.washington.edu/artoolkit/)を使ってアプリを作ろうと画策中です。
ARToolKitとはAR(拡張現実感)を簡単に実装することができるライブラリ集です。
最近ではニコニコ動画でARToolKitを使って撮影したおもしろい動画がたくさんアップされてます。
本なども出版されドキュメントも充実してきているようです。

ネットなどのほとんどの情報はWindowsのものばかりで、Macに関しては非常に少ないです。
しかし、本家からダウンロードできるソースにはXcodeプロジェクトが含まれています。
なのでMacでこのXcodeプロジェクトを開いてビルドすれば簡単にサンプルコードのビルドが可能です。

さて、自分でアプリを作成する場合はこの同梱されていたXcodeプロジェクトを使用すればできるっちゃできるのですが、自分で0からXcodeプロジェクトを作れないと何かと不便だし、できないことはないはず。
というわけで探したら以下のような記事をみつけました。

 Xcode で空のプロジェクトから ARToolkit が使えるようになるまでをまとめてみる

この記事を参考に自分でもやってみました。
ちなみに今回試した環境は下記のとおりです。

  • MacOS X Leopard 10.5.4

  • Xcode 3.1


  1. 新規プロジェクトの作成

  2. まず、Xcodeを起動し新規プロジェクトを作成します。作成するプロジェクトは「Mac OS X→Other→Empty Project」です。選択ボタンを押すとプロジェクト名と保存場所を聞かれますが、適当でかまいません。今回はデスクトップにtest_arというプロジェクト名で作成します。


  3. グループの追加

  4. 左のメニューの一番上のtest_arを右クリック(Ctrl+クリック)しグループを追加します。グループ名はResource、Framework、Library、Sourceの4つを作成します。


  5. 新規ターゲットの作成

  6. 上部にあるアクションを押し、「追加→新規ターゲット」を選択します。作成するターゲットを「Carbon→Application」を選択し、次へを押します。ターゲット名を聞かれるので適当に入れ、完了を押します。これがどうやらアプリケーション名になるようです。今回は適当に「SimpleAR」にしました。


  7. ライブラリとヘッダファイルの設定

  8. 本家からダウンロードしてきたファイルに含まれるlibとincludeを今回のプロジェクトのディレクトリの直下にコピーします(今回だとデスクトップ上のtest_ar)。そしてターゲットの設定から「ビルド→検索パス」にあるヘッダ検索パスとライブラリ検索パスのそれぞれにパスを追加します。

  9. 既存フレームワークの追加

  10. このアプリで使用するフレームワークの追加を行います。とりあえず今回は QuickTime.framework、OpenGL.framework、GLUT.framework、Cocoa.framework、Carbon.frameworkの5つが必要です。まず、左メニューのtest_arを右クリックし「追加→既存のフレームワーク」をクリックします。すると、フレームワークを選択するダイアログが表示されるのでLibrary→Frameworksフォルダ以下にある前述5つのフレームワークを選択し、追加ボタンを押します。するとターゲットに追加するか聞かれるので追加ボタンを押します。左メニュー上にフレームワークが5つ追加されるので整理するためにそれらを選択しFrameworkグループに入れます。



  11. 使用するライブラリの追加

  12. 今回のアプリで使用するARToolKitのライブラリを追加します。ライブラリはプロジェクトのフォルダにコピーしたlib以下にあるので、そこからlibAR.a、libARgsub.a、libARvideo.aを使用します。追加するには左メニューのLibraryグループを右クリックし、既存のファイルを選択します。表示されたダイアログから該当のライブラリを選択したら追加ボタンを押します。フレームワークのとき同様ターゲットに追加するか聞かれるので、追加ボタンを押します。



  13. dataディレクトリの追加

  14. 本家のソースの中のbin/Dataをプロジェクトのディレクトリにコピーします。次にライブラリ同様このディレクトリをResourceグループ以下に追加します。この際にターゲットに追加するかどうか聞かれるダイアログで「追加したフォルダにフォルダ参照を作成する」を選択し、追加ボタンを押します。

  15. ソースファイルの追加

  16. 次に「アクション→新規ファイル」を選択し空のファイルを作成します。ファイル名は適当でかまいません。今回はhoge.cppにします。追加されたソースファイルに本家のexamples/simple/simpleTest.cの内容をコピペします。


  17. ビルドそして実行

  18. 最後にビルドして実行ボタンを押しましょう。そして、SimpleTestと同じプログラムが動いたら大成功です。このサンプルコードをカスタマイズする場合はhoge.cppを編集すればOKです。


最初やったときはライブラリの追加がうまくいってなかったり、検索パスがどこにあるかわからなかったり、Dataディレクトリが読み込めなかったりとうまく行きませんでしたがどうにか動かせました。
そもそも、Xcodeの使い方がわかってないのでそっちから勉強すべきかもしれないですね。

とりあえずMacでARToolKitを使ったアプリの開発をやる準備は整いました。

2008/08/28

DNRH-001が熱い

昨日から玄箱のデータをいくつかの外付けHDDに避難させて、帰ったらとりあえず終わってた。
ようやく玄箱のHDDを取り出して、DNRH-001につけられる。

んで、玄箱からHDDを取り出してみたらなんとMaxtor製。
Maxtorは発熱量が確か多い傾向にあったような…
とりあえず考えていてもしょうがないのでDNRH-001につけてCentOS5.2をインストールした。
今は外付けHDDに避難したデータをサーバに移動中。

やはり電源をつけると結構熱くなる。
とりあえず当分はHDDの温度を定期的に見ながら運用してみよう。
その間になんらかのきっかけでHDDが壊れてデータが飛んだらあきらめよう、うん。

ちなみに、以下のコマンドでHDDの温度を見ることができる。
# smartctl -a /dev/hda|grep -i temp
194 Temperature_Celsius 0x0032 044 253 000 Old_age Always - 53

さっきまで40度台だったのにいつの間にか53度に。
とりあえず常時55度を超えるようであればファンを買ってこよう。

2008/08/27

DNRH-001購入

家にある玄箱をだましだまし使っていたが、やはり音が気になる。
またミシン油をファンにさせば静かになるんだろうけども…
そろそろ買い替え時期かなぁと思っていた今日この頃。

静かなPCを購入することにした。
DNRH-001というファンレスで3.5インチHDDがつめるPCを買ってみた。
今の玄箱のHDDが使えるので3.5インチHDDがつめるのはなかなかいい感じ。

先ほど届いたので早速先日作ったCobblerの環境を使いネットワークインストール中。
DNRH-001をPXEブートするときの注意点は

  • BIOSでBootの順番でLANを一番頭に持ってくる

  • BIOSでOnboard Lan Boot ROMをEnableにする

  • LANケーブルはLAN2に差し込む

というところですね。

あとCobblerでなんか変なときはとりあえずcobbler syncをしてみるのが大切ですね。
なんか最初bootできなかったときに余計な場所をいろいろいじくったりしてしまった。

電源をつけた印象は思った以上に本体が熱くなる。
これは考えないとダメかも。
あとHDDが意外とうるさい。
これは静かなHDDを買えば解決するでしょう。

とりあえず今週中に玄箱のデータをDNRH-001に移行します。
今日はなんか風邪気味で頭が痛いのでインストールして放置。

2008/08/24

Macのドロー系ソフト

姉の結婚式の2次会の招待状の作成をすることになり、ちゃちゃっと書いてみることに。
何かドロー系の良いソフトがないか探してみました。

ドロー系のソフトだとIllustratorが有名ですが、いかんせん価格が高すぎます。
フリーのものだとInkscapeがあります。
本も出てたりして結構使われているみたいですね。
InkscapeはWindows以外にLinuxやMacでも動かすことができて便利なのですが、Macで使用するときは日本語入力がちょっとめんどくさい。
# テキストエディットあたりで書いてコピペすれば良いのですが

そこで、Macで使用できる新しいドロー系のソフトを探してたらGCDrawKitというのを見つけた。
これはソフトではなくドローエンジンというもので、エンジン部分だけらしい。
MacOSX向けに作成されており、MacOSのQuartzエンジンなどをフル活用している。
デモでGCDrawKitを使ったアプリが配信されており、それを使ってみた。

デモとは言ってもかなり高機能でInkscapeと同じくらいに感じる。
Cocoaベースなので日本語入力なども問題なく利用できる。
かなり便利です。
しかし、レイヤをいじってると突然落ちます。
安定性はまだまだなようです。

作成中に保存してない状態で2、3回落ちたので、結局Inkscape使いました。

2008/08/23

CobblerでOSネットワークインストール

ノートPCにCentOSをインストールしようとしたら、CDドライブしかついてなかった。
CDイメージを落としてインストールすればいいんだけど、CDが何枚にもなるし、ダウンロードするのもめんどくさい。
だから、ネットワークインストールを試してみることにした。

ネットワークインストールの環境を整えることができるのが、Cobbler(http://cobbler.et.redhat.com/)というもの。
Cobblerを使えば、様々なディストリビューションをネットワークインストールすることが可能になる。
CobblerをインストールしてCentOS5.2をノートPCに導入する。

  1. Cobblerに必要なパッケージをインストール

  2. 今回は、CentOS5.2がインストールされているPCにCobblerをインストールする。Cobblerで必要なパッケージのうち下記のものはyumでインストールすることができる。

    ・yum-utils
    ・createrepo
    ・python-setuptools
    ・tftp-server
    ・httpd
    ・dhcp

    他にpython-cheetahというテンプレートエンジン(?)をインストールする必要がある。
    EPELというyumリポジトリを有効にすればpython-cheetahもcobblerもyumでインストールできるが、僕がやったときは503とか返されてうまくいかなかった。
    もしかして安定してないのだろうか。
    結局はrpmをダウンロードしてインストールすることにした。
    ダウンロードするrpmは結局EPELのものを利用することになったみたいだ。

    # wget ftp://rpmfind.net/linux/EPEL/5Client/i386/python-cheetah-2.0.1-1.el5.i386.rpm
    # rpm -ivh python-cheetah-2.0.1-1.el5.i386.rpm


  3. Cobblerのインストール

  4. ここまできたらCobblerをインストールする。
    ここからCobblerのtar.gzもしくはsrc.rpmをダウンロードできる。
    rpmの方が何かと楽なのでsrc.rpmからリビルドしてrpmを作成してインストール。
    # wget http://cobbler.et.redhat.com/download/cobbler-1.0.3-1.src.rpm
    # rpmbuild --rebuild cobbler-1.0.3-1.src.rpm
    # mv /usr/src/redhat/RPMS/noarch/cobbler-1.0.3-1.noarch.rpm .
    # rpm -ivh cobbler-1.0.3-1.noarch.rpm


  5. 設定ファイルの編集

  6. まず、tftpサーバを有効にする。
    有効にするためには/etc/xinet.d/tftpのdisableを削除する。
    編集後は下記のようになる。
    service tftp
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    per_source = 11
    cps = 100 2
    flags = IPv4
    }

    編集したら/etc/init.d/xinetd restartでxinetdを再起動する。

    DHCPサーバの設定ファイルはCobblerで編集されるため今の時点でバックアップをとっておく。
    # cp /etc/dhcpd.conf /etc/dhcpd.conf.default


    次にCobblerの設定を行う。
    /etc/cobbler/settingを以下のとおりに編集する。
    ・text:~を削除:グラフィカルモードを使用
    ・next_server <IPアドレス>:TFTPサーバのIPアドレスを指定。今回の場合は自分のIPアドレス
    ・server <IPアドレス>:イメージ配布サーバーのIPアドレス
    ・manage_dhcp 1:DHCPサーバをCobblerで管理


    次にDHCPサーバの設定を行う。
    DHCPサーバの設定ファイルを直接編集するのではなく、CobblerのDHCPサーバ設定ファイルのテンプレートの/etc/cobller/dhcp.templateを編集する。
    subnet 192.168.100.0 netmask 255.255.255.0 {
    option routers 192.168.100.1;
    option subnet-mask 255.255.255.0;
    range dynamic-bootp 192.168.100.101 192.168.100.254;
    filename "/pxelinux.0";
    default-lease-time 21600;
    max-lease-time 43200;
    next-server $next_server;
    }


  7. デーモンの起動

  8. Cobblerデーモン、DHCP、HTTPの起動を行う。
    その際にDHCPサーバの設定ファイルを生成する必要がある。
    # /etc/init.d/cobblerd start
    # cobller sync
    # /etc/init.d/httpd start
    # /etc/init.d/dhcpd start


  9. ISOイメージのコピーとインポート

  10. まず、ISOイメージを任意のディレクトリにコピーする。
    コピーするときにISOイメージの2倍以上の容量がないと作業できない。
    ISOイメージから直接インポートすると失敗した。
    何か書き込んでるのかもしれない。
    # mount /dev/cdrom /media/cdrom
    # mkdir /tmp/centos5
    # shopt -s dotglob
    # unalias cp
    # cp -rf /media/cdrom/* /tmp/centos5/
    # umount /media/cdrom

    ディレクトリにコピーをしたら、Cobblerでインポートを行う。
    これは結構時間がかかった。
    # cobbler import --path /tmp/centos5 --name=centos5

    インポートが終了したらデフォルトで配信するイメージの設定などを行う。
    cobbler reportコマンドで表示されたプロファイル名を使用する。
    # cobbler report
    # cobbler system add --name=default --profile=centos5-i386



あとはインストールしたいPCからPXEブートすればインストールが始まる。
何か他に設定があるようで、勝手にインストールが進んでいつの間にか終了してた。
どういう設定を行うかも設定することができるようだ。

これでPXEブートさえできれば、どんなPCにでもインストールできる。
とりあえず家にあるThinkpad R40e、Thinkpad X20にインストールしてみた。
すごく便利。

2008/08/17

SpamAssassinの設定

スパムメールの数が増えてきたので、サーバーのMTAにSpamAssassinをかませていたのだが、効果がいまいちだった。
とりあえずSoftwareDesign 2008/3を参考に以下のような設定をしてみたので、そのメモ。

・ベイジアンフィルタの学習データとホワイトリストのデータベースの場所を準備
# mkdir /var/spool/spamd
# chmod 777 /var/spool/spamd


・SpamAssassin用のレシピをダウンロード(TLECのを使います)
# wget http://tlec.linux.or.jp/docs/user_prefs
# cd /etc/mail/spamassassin
# mv local.cf local.cf.default
# cp ~/user_prefs local.cf

・レシピに下記を追記(ベイジアンフィルタの学習データなどの場所を指定)
bayes_path /var/spool/spamd/bayes
bayes_file_mode 0666
auto_whitelist_path /var/spool/spamd/auto-whitelist
auto_whitelist_file_mode 0666