blogの引っ越ししてリニューアルしました!!

blogを引っ越ししたのでお知らせします。
レンタルサーバーなどかなり迷いましたが、以下の場所に移りました↓
http://taizou.sblog.jp/blog/

題名からなんから新しくしてみたのでよかったらどうぞ。
ちょっとはさわやかになったかな。。。。。。

WordPress関連のメタ情報


ここのblogの引っ越し作業でwordpressをいじっているので、役に立ちそうな情報を載せておきます。

PSP SDKのcontroller周りについて


PSP SDKのサンプルでcontrollerのやつがあって、それを読んでるんだけど、ゲームプログラミング初心者なので、へーと思うことが多い。ボタンが押されたかどうかは、監視スレッドとループで書いてて、PSPコーディングて結構、原始的なプログラミングが必要なんですね。関数やら構造体やらが出てきて覚えることが多そうなのでソースの解説でもしてみたいと思います。

まず、コントローラーの情報を保持する構造体であるSceCtrlDataについて。
sceCtrlReadBufferPositiveにSceCtrlDataの変数を入れることで現在入力されているボタンの情報を得ることができます。構造体の中身は以下のような感じ。

  • SceCtrlData


struct SceCtrlData {
unsigned int TimeStamp //現在読み込んでいるフレーム?
unsigned int Buttons  //ボタンのbit列。
unsigned char Lx //アナログスティクのX座標
unsigned char Ly  //アナログスティクのY座標
unsigned char Rsrv [6] //予約
}
どのボタンが押されたかを調べるために、なぜ&(AND)が使われているかは「SceCtrlDataについて〜ビット演算とは?」に詳しく書かれています。同時に押されたときに、どれが押されたのかを調べるのに基礎的なビット演算が使われています。

  • 押されたボタン情報をprintするプログラム


#include
#include
#include
#include
#include

/* Define the module info section */
PSP_MODULE_INFO("CONTROLTEST", 0, 1, 1);

/* Define the main thread's attribute value (optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

/* Define printf, just to make typing easier */
#define printf pspDebugScreenPrintf

void dump_threadstatus(void);

int done = 0;

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common)
{
done = 1;
return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp)
{
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();

return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("update_thread", CallbackThread,
0x11, 0xFA0, 0, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

int main(void)
{
SceCtrlData pad;
//デバッグスクリーンの初期化
pspDebugScreenInit();
SetupCallbacks();
//コントローラーの入力サイクルを設定(通常は0に設定する)
sceCtrlSetSamplingCycle(0);
// アナログスティックの入力を有効にする
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);

while(!done){
//デバッグスクリーンの開始位置(x,y)
pspDebugScreenSetXY(0, 2);
        //コントローラの入力を取得する(ブロッキング
sceCtrlReadBufferPositive(&pad, 1);
//アナログスティクの座標
printf("Analog X = %d ", pad.Lx);
printf("Analog Y = %d \n", pad.Ly);

if (pad.Buttons != 0){
//□ボタン
if (pad.Buttons & PSP_CTRL_SQUARE){
printf("Square pressed \n");
}
            //△ボタン
if (pad.Buttons & PSP_CTRL_TRIANGLE){
printf("Triangle pressed \n");
}
//○ボタン
if (pad.Buttons & PSP_CTRL_CIRCLE){
printf("Cicle pressed \n");
}
            //×ボタン
if (pad.Buttons & PSP_CTRL_CROSS){
printf("Cross pressed \n");
}
//上ボタン
if (pad.Buttons & PSP_CTRL_UP){
printf("Up pressed \n");
}
            //下ボタン
if (pad.Buttons & PSP_CTRL_DOWN){
printf("Down pressed \n");
}
            //左ボタン
if (pad.Buttons & PSP_CTRL_LEFT){
printf("Left pressed \n");
}
            //右ボタン
if (pad.Buttons & PSP_CTRL_RIGHT){
printf("Right pressed \n");
}
//startボタン
if (pad.Buttons & PSP_CTRL_START){
printf("Start pressed \n");
}
            //selectボタン
if (pad.Buttons & PSP_CTRL_SELECT){
printf("Select pressed \n");
}
            //Lボタン
if (pad.Buttons & PSP_CTRL_LTRIGGER){
printf("L-trigger pressed \n");
}
            //Rボタン
if (pad.Buttons & PSP_CTRL_RTRIGGER){
printf("R-trigger pressed \n");
}
}
}
    //ゲーム終了
sceKernelExitGame();
return 0;
}

監視スレッドでHOMEボタンからゲームを終了するを選択するまでループで"ボタン情報取得"→"ボタン情報出力"を繰り返します。

PSP開発で役に立ちそうなサイトまとめ


PSP開発で役に立ちそうなサイトをまとめます。

CentOSにpsptoolchainをインストールしてみた


前回まででVMwareCentOSを入れて、sambaの設定をしてWindows環境でLinuxを使えるようようになった。で、肝心のpsptoolchainをインストールしてPSP開発環境を完成させよとだけどつまずくはつまずく。subversionクライアントが入っていないので、インストールしてpsptoolchainをダウンロードする。


#yum install subversion
#svn checkout svn://svn.pspdev.org/psp/trunk/psptoolchain
次にtoolchain.shでインストールしようとしたんだけど、最小構成のCentOSなので無いものがたくさんあってインストール失敗が多発した。結局、インストールしたパッケージは以下のもの。(gccVMwareの設定のときにインストールした)


autoconf
automake
bison
flex
patchutils
texinfo
libusb
libusb-devel
gmp
gmp-devel
ncurses-devel
readline
gcc-c++
・/usr/include/readline/readline.hが見つからないてエラーが出たら
yumからreadlineをインストールしてもエラーが出てきた。エラーの場所は、/pspstoolchain/depends/check-readline.sh。
GNU(ftp.gnu.org/gnu/readline/)から新しいもの(readline-6.0.tar.gz )をダウンロードしてきて手動でインストールをします。エラーが出ているのは/pspstoolchain/depends/check-readline.shなので/check-readline.shでreadline.hがあるかチェックしている行をインストールしたreadline.hに置き換える。これでエラーはでなくなった。


toolchain.shを実行してから、インストール完了するまで、だいたい2時間ぐらいかな。途中でインストールされていないものがあったら、makeが失敗した止まってやり直しになった。結局、3回ほど失敗してインストールすることができました。サンプルプログラムも実行できた。

PSP開発環境のためのCentOS 5.0 on VMware Server


PSPアプリ開発がしてみたい!
てことで休みを使って開発環境を用意しています。PSPの開発環境にはLinuxMac(gccコンパイルできる環境)が必要なのでVMwareにCentOS5.0を入れてWindowsで動かすことにした。"PSP開発"でググってみると、"WindowsCygwinを入れて開発"を勧めている人が多いですが、Cygwinは遅いイメージがあるのでVMwareを選択してみました。
WindowsユーザーのLinux開発環境にはかなり選択肢に迷うところだと思う。仮想環境だったら持ち運びが簡単なのでその点ではいいのかな。
ここからVMwareの設定でつまずいた所をメモ程度にまとめます。(VMwareのインストールなどは割愛します。)
・開発環境

CentOS 5.0のServerCDのイメージの場所

使ってるThinkPadX61にはドライブが入っていないのでisoファイルから読み込みにした方がラクと思ったんだけど在りかが分からなかった。探してみると、作ってる人がありました↓
CentOS5 1CD化プロジェクト始動
VMware Tools インストール
ここからが一番つまずいた。VMware Toolsがインストールできない。
調べてたら全く同じ症状の人を発見っ↓
vmware toolsインストールしてみたが・・・
X Windowが起動できない
上の人と同じように対処してもXが起動できない。エラー内容は


Undefined monitor "vmware" referenced by "Screen0"
下のサイトを再度確認してxorg.conf.BeforeVMwareToolsInstallをxorg.confにコピーして起動したらできた。
Installing VMware Tools in Fedora Core 6
Undefined monitor "vmware" referenced by "Screen0"


つまずいたのはここら辺かな。
あとは、sambaサーバーの設定、psptoolchaineをインストールして完了です。

ウェブがもたらすOpen Laboratory


僕が所属していた研究室は今年で教授が定年ということで研究室ごとなくなることになっています。今日は教授の最終公演ということで一日中、大学で準備などをしていました。
公演の最後に、「宇宙研究はお金にならないが、なぜ世界中で行われているのか」という質問が出た。先生の回答は「学問追求は人間の欲求の一つであって、音楽などの芸術と本質は同じあり、お金にならないとしても人間は宇宙研究をやめない」だった。
学者は社会から離脱していて、経済観念が鈍いとは思うが、それが苦手というわけではなく、人間の欲求のままに生きているということを実感した。幼稚園や小学生の時にモノに対して抱いていた、どうしてだろう、なぜだろうと、いう本質を突こうとする思考を大人になっても純粋に持ち続けている人たちでありそれが楽しくてしょうがないのである。前回書いた、"お金儲けに興味がないリードプログラマ"も同じ感じで、プログラミングをすることが楽しくてしょうがなく、創造物を発表する場が論文ではなくウェブなのかもしれない。
そんな感じで考えていくと、ウェブの進化は学問領域にも大きな影響を与えるような気がしてきた。大学という組織から学会に発表するという従来の研究方法はなく、オープンソースプロジェクトと同じように、ウェブを媒体に研究効率と学問追求だけを考えて、世界中から研究した人を集って「距離」や「時間」に関係なく研究する人たちが出てくるのではないかということ。ウェブを媒体にしたOpen Laboratoryはすでに存在するとは思うけど、歴史ある基礎研究(物理、数学、化学など)で行われることに大きな意味があると思う。ソフトウェアとは違い表現方法が難しいが、PCのユーザビリティーが高まれば無理ではない話だと思う。梅田さんがいう文型のためのオープンソースプロジェクトも可能なのではないだろうか。
もしもそのような学問スタイルが確立したとしたら、大学のヒエラルキーや学閥などを通り越して、世界中で眠っている学者肌の人たちも活躍するような世界になるような気がする。