Bullet を iPhone 用にビルド(Lion + Xcode4)

Xcode4 に移行中のメモ。

CMake (guiで)を使って生成する訳ですが、デフォルトの状態だと CMAKE_OSX_SYSROOT に MacOSX10.7sdk
が設定されていて、arm 用にビルドできない(と思う)。

なので、CMAKE_OSX_SYSROOT を "iphoneos" に変更。
ついでに余計なチェック(チェックできる箇所全部)を外した。

で、Xcode用にgenerateするとプロジェクトファイルごと生成されるので、こいつを開いてビルド。

しかし、OpenCL 関連でエラーがでた・・・
恐らく、まだiOSで対応していないはずなので、OpenCL関連のターゲットを削除したが、
その他にもエラーが出るターゲットがあったので、以下だけ残してもう全部削除。


 ・ALL_BUILD
 ・BulletDynamics
 ・BulletCollision
 ・BulletSoftBody
 ・BulletMultiThread
 ・LinearMath

(MultiThread は PosixThread な様なので、使えると判断してとりあえず残した)



とりあえず、Xcode4 変わり過ぎなのと、CMakeが相変わらず良く分からん。
慣れると便利そうだけど・・・


ひとまず望み通りの事はできているので、このまま進めつつ有用な突っ込みを待つ事にします。

Mac(VNCホスト) + OpenVPN よりも Chrome Remote Desktop が早い。

環境の都合上、Macに対してWindowsからリモートで使える様にしておく必要がある為、
これまで 自前VNC + OpenVPN を使って利用していたが、これが異常に遅かった。

Chrome Remote Desktop を利用したところ、上記組み合わせより圧倒的にパフォーマンス
が良くてビビった。

が、接続先の環境では特定のポートしか解放していないのに、何故かつながる。
Mac本体に対してポートスキャンかけてみたが、それっぽいポートもない。
と言う事は、Chromeのソースポートを使ってリクエストに対する"応答"として
実現しているのかな。

何にせよ良い技術だなー。

でも、セキュリティ的にはどうなんだろう。

ワンタイム認証な様なので、ある程度の事はクリアできているかもしれないが、
とりあえず今度パケットキャプチャして採用を検討してみる事にする。

LevelDBをiPhone実機で試す。

LevelDBいいね。さすが。
パフォーマンスが相当優秀みたいですが、それよりもシンプルに纏まっているドキュメントに魅力を感じる。
iPhone用のDBで色々迷ってたが、これに確定。

で、実機で動かしてみる。
ここのページからlipoでマージされたlibrary、inludeファイルがゲット可能。

試したコードは以下。

#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>

#include <iostream>
#include <sstream>
#include <string>

#include <leveldb/db.h>

using namespace std;
class LevelDBTest {
    private :
    string getDocumentsDirectory(){
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];

        return string([documentsDirectory cStringUsingEncoding:NSASCIIStringEncoding]);
    }
    
    public :
    
    bool doTest() {
        // Set up database connection information and open database
        leveldb::DB* db;
        leveldb::Options options;
        options.create_if_missing = true;
        
        leveldb::Status status = leveldb::DB::Open(options, getDocumentsDirectory() + "/LevelDB", &db);
        
        if (false == status.ok()) {
            cerr << "Unable to open/create database" << endl;
            cerr << status.ToString() << endl;
            return -1;
        }
        
        // Add 256 values to the database
        leveldb::WriteOptions writeOptions;
        for (unsigned int i = 0; i < 256; ++i) {
            ostringstream keyStream;
            keyStream << "Key" << i;
            
            ostringstream valueStream;
            valueStream << "Test data value: " << i;
            
            db->Put(writeOptions, keyStream.str(), valueStream.str());
        }
        
        // Iterate over each item in the database and print them
        leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
        
        for (it->SeekToFirst(); it->Valid(); it->Next()) {
            cout << it->key().ToString() << " : " << it->value().ToString() << endl;
        }
        
        if (false == it->status().ok()) {
            cerr << "An error was found during the scan" << endl;
            cerr << it->status().ToString() << endl;
        }
        
        delete it;
        
        // Close the database
        delete db;
        return true;
    }
};

バッチリ動いた。

最近は Open GL ES2 にべったりやったけど、やっぱDB系の技術はグッとくる。
・・・で、どうやって使っていこうかね。