MySQL C API

MySQL C API

ユーザー管理はMySQLデータベースでやってみようと思う。いつものようにラッピングクラスを作ったら,MYMYSQLになってしまう。まいまい。

まずMySQLのデータベース作成を忘れやすい(mediawikiとwordpressの2回のみ作成)のでメモ。

プログラミング・メモ – MySQL の C API を使ってみるを参考にMYMYSQLクラスを作成。テーブルがひとつもないのでmysql_queryがエラー終了。そしてテーブルの作り方も分からない。MySQLというかデータベースのことが何ひとつ分からないので道のりは長い。

BHACCOUNTSクラスを作成。これはhas-a関係だな,ということでMYMYSQLクラスをメンバーに持たせた。MYMYSQLにCREATE TABLEする関数とINSERT INTOする関数を作って,BHACCOUNTSクラスのLogin関数から呼んで,ログイン処理の骨組みができてきた。XML-RPCとつなげれば,BHクライアントからログイン/ユーザー登録ができるようになる。

SQLの文法は思ったより難しくなかった。C++から呼び出す際の,もっとジェネリックな仕組みを考えなければならない。現状は,泥臭い文字列操作ばかり。


XML-RPC

Vortex LibraryをラッピングするMYVORTEXSERVERクラスとMYVORTEXCLIENTクラスを作ってみて,うまくサーバークライアント間で通信ができるようになった。しかし依然としてアプリケーションプロトコルのイメージが頭に浮かばない。XMLをやりとりしたら自由度が高そう,と思っていたら,VortexでXML-RPCがサポートされていたので,使ってみようかと思う。IDL/XDLを作ってコンパイルするワンクッションが面倒くさいが,車輪の再発明よりは良いだろう。

MYVORTEXSERVERにXML-RPCのサポートを追加したら,

とエラー発生。./configureのパラメータ足りなかったかな? と思ってvortexを再ビルドしたが,単に,

が足りないだけだった。libvortex-xml-rpc-1.1.aのリンクも追加。

MYVORTEXCLIENTもXML-RPC対応(IDL/XDLは使わずRaw API手動呼び出し)したら,

の呼び出しでアボートしたので削除。無事動作。

IDL/XDLのコンパイル出力はCになるようなので,アップデート後にいちいちC++に書き換えるのが面倒だ。なので,このままRaw API使用で突っ走るかも。

さらにBHPROTOCOLSERVERとBHPROTOCOLCLIENTでラッピングして,BHPROTOCOLの実装準備完了。BHPROTOCOLからVortexを呼んでいるところは直すこと。抽象化。疎結合。


Quaternion

http://www015.upp.so-net.ne.jp/notgeld/quaternion.html

http://www.arakin.dyndns.org/gl_torusquat.php

3次元物体の回転には,四元数(しげんすう、quaternion;クオータニオン)を使う。

静止軌道にいるスパイ衛星を考える。スパイ衛星は,カメラを常に地球に向けていなければならない。つまり,ふつうに静止軌道にいるだけでは,カメラはあさっての方向を向いてしまうので,公転周期と同じ周期で自転していなければならない。すなわち,物体には,瞬間の絶対的な回転角度だけでなく,単位時間あたりの回転速度(角速度)ももたせなければならない。面倒。

OpenGL上での回転の話は, http://wisdom.sakura.ne.jp/system/opengl/gl11.html を参考にする。


BEEP Core protocol central

BEEP Core protocol central

Project BHはクライアント・サーバ型システムとして作る予定なので,プロトコルをどうしようかあれこれ考えていたのだが,BEEPというものを発見したので使ってみようと思う。

BEEPは,Block Extensible Exchange Protocolの略。Peer-to-peer通信の下回りを面倒みてくれるようだ。

Cでの実装に,Vortex Libraryがある。中を見たところ,結局はアプリケーションレイヤーは自分で設計して作らなければならなさそうだ。当たり前といえば当たり前。ぱっと思いつくのは,ログイン処理や自機の移動など。自機近傍に他機が近づいた時も,通信が必要だろう。

Voltex Libraryをビルドしてみた。Axl Libraryが必要なので先にビルド。特に問題なし。python-devが必要なので,apt-get install。makeすると,

とエラー発生。仕方ないのでBH用のリモートブランチを作成して修正する。

const修飾が足りないので追加。コンパイルエラーはとれた。ドキュメントの生成でエラーが出るがよく分からないのでmake install。とりあえず作業終了。