気がつけば24歳になってた。
で、現在友達とゲーム開発中。
こっちはこっちでやりたい放題やってるからあまり進展はないんだけどね…
とりあえず、xmlにBase64エンコードしたpng画像放り込んでおいて、それをデコードしてSDL_Surfaceに投げ込むコードを開発中。
オンメモリのデータのデコードは配列変数で PNGデータを libpng に渡す方法
spacerを参考に。libpngで読み込んだデータの扱いはSDL_imageのコードをほぼコピペで作成中。動くのかなこれ。
で、こっちはUbuntuで書いてるから、Windowsでどうなってるかの確認用に友人にMinGWと各種ライブラリをほぼ無理やりインストールさせた。
でコンパイルさせたところ、不可解なエラー連発。
まず最初

libgcc_s_dw2-1.dllが見つかりませんという物。
原因はMinGWの例外処理でDwarf2を使おうとしてリンクしたはいいものの、肝心のDLLが見つからないからっぽい。なんで?
次は似たようなものでlibstdc++-6.dllが見つからないとのこと。
これの原因はMinGWがiostreamとかをDLLに置いといたはいいもの、やっぱりそれが見つからないからっぽい。そんな馬鹿な。
MinGWTDMだとこのへん出ないんだけどなぁ…
カテゴリー: プログラミング
YoutubePlaylistPlayer3公開中
本当にアップしたのは一昨日なんだけど。
表向きの変更点は、マニュアルペインをタブで隠してスペース確保。あとプレイリストのインポート/エクスポートボタンも、普段使わないから隠す。
動画追加も、エディットボックス入力からconfirmでの入力ダイアログ出現に変更。余計な計算をやめるくらいにしか効果ないけど。
ついでにシャッフルチェックをクリックしたタイミングでシャッフルするように変更。
システム面の変更点は、HTML5にしたこと、mysql_系関数からPDOを使用するように変更。あとはほとんど変化なし。
html5にしたから、youtube外部プレーヤーがvideoタグでも使えるようになったら移動する予定。
そうしないと、Android firefoxで使えないし…
あと、プレイリストの預かり機能を検討中。Android firefoxはxmlをアップできないからなぁ…なんでだろう…
URLはhttp://mattyan.net/ypp/
ypp3開発中
YoutubePlaykistPlayer3を開発中。
今回はインターフェースをJquery-uiのタブを使って説明ペインを隠して2ペイン構造にして、幅の制限をなくすつもり。
あとYoutubeFireがなんか面倒なことになってそうだから、ダウンロードリンクを完全に排除。YoutubeRepeatに転送するだけにした。
DBアクセスをmysql_系関数からPDOに変更。今のところだからどうした状態。ついでにhtmlも4.01 strictから5に変更。将来的にYoutubeのhtml5プレーヤーが外部でも使えるようになったら使ってみようかな。
プレイリストの仕様に変更はなし。今のyppでエクスポートしたのをインポートすればそのまま利用可能。
現在ベータテスト中。
主開発環境のEclipseが超便利。
リモートクライアントと内部ブラウザとターミナルとSVNクライアント統合で、編集もアップロードもデバッグも全部Eclipse上からできるwww
クラスのメンバ関数をマルチスレッドで動かすためのメモ書き
クラスのメンバ関数をSDLのSDL_CreateThread関数で扱うためのメモ書き。ちょっと流用すれば他のライブラリでも使えるかも?
staticメンバ渡せば一発なんだろうけど。派生することを考えるとなんか色々面倒くさそうなんで、普通のメンバ関数を呼び出すようにした。
基底クラスの用意
マルチスレッドで動かすクラスの基底クラスでは、至るところで派生クラスの型がわからないと使えないので、テンプレートクラスで作成。
template <typename T> class Thread{
private:
struct ThreadParameter{
T *instance;
void *parameter;
};
SDL_Thread *thread;
/**
* スレッド関数呼び出し
* @param[in] param スレッド情報
* @return function()の戻り値
*/
static int callThread(void *param){
ThreadParameter *tp = pointer_cast<ThreadParameter *>(param);
return pointer_cast<T *>(tp->instance)->function(tp->parameter);
}
public:
/**
* スレッド実行関数
* @param[in] param 引数
* @return 不明
*/
virtual int function(void *param) = 0;
/**
* スレッド実行関数
* @param[in] p 派生クラスのポインタ
* @param[in] param スレッドに渡す引数
*/
void run(T *p,void *param){
ThreadParameter tp = {p,param};
this->thread = SDL_CreateThread(&Thread<T>::callThread,&tp);
}
};
1.privateにSDL_CreateThreadから呼んでもらうメンバ関数をstaticで宣言。その関数への引数として、派生クラスのポインタとスレッドへの引数をまとめた構造体を渡す。
2.callThread関数では、渡されたポインタから派生クラスのインスタンスのポインタを取り出して、マルチスレッドで実行したいメンバ関数を呼び出す。
派生クラス
class Add:public Thread<Add>{
public:
virtual int function(void *p);
};
int Add::function(void *p){
FILE *file = fopen(pointer_cast<char *>(p),"w");
fprintf(file,"start = %d\n",SDL_GetTicks());
for(int i=0;i<2000;i++){
fprintf(file,"i = %d\n",i);
}
fprintf(file,"end = %d\n",SDL_GetTicks());
fclose(file);
return 0;
}
マルチスレッドで使用する関数をオーバーライドするだけ。
これが呼び出されると、プログラムが起動してからのミリ秒を記録したあと、2000回ほどループして、終了時間を記録してスレッド終了する仕組み。
実行結果は
| スレッドID | 開始時刻 | 終了時刻 | |
| 1 | 515 | 536 | |
| 2 | 515 | 536 |
だから、マルチスレッドで動いてる。はず…
ちなみにpointer_castはこんな関数
/**
* ポインターキャスト
* @param[in] p キャストするポインター
* @return キャスト結果
*/
template <typename T> inline T pointer_cast(void *p){return reinterpret_cast<T>(p);}
WallChangeLight実装中
スクリプトより、cronどうしようか実験中。
| 試したこと | 結果 |
| EDITORに設定データを吐き出すだけのスクリプトのパスを設定して投げる | 設定するユーザーアカウントが存在しないため失敗 |
| 設定ファイルを直接コピーする | 実験中。パーミッション設定に不安あり |
| local.rcに設定するスクリプトを組み込む | 未実験 |
これができたらrev 100だ。
東方スカイアリーナテンションエディタRC2公開
東方スカイアリーナテンションエディタのRC2をサーバーに置いた。
ダウンロードはこちらからどうぞ
今のところ分かっている不具合
・たまに終了しない。(ウインドウが消えてもプロセスが生き続ける。)
・一部のWaveファイルを取り扱えない。(ザ・マッチメーカーズの効果音の一部とか)
他、使ってみて何かあったら連絡ください。
一部計画変更
GAEは思った以上に制限がひどいからしばらく延期。
PixivRSSは別サーバー探してPHPのまま移転することにした。
明日、トシくんがこっち来るらしい。あいにく俺は仕事中…
いろいろ計画中
PixivRSSを、現在のサーバーからGAEに移転しようか検討中。
移転するのならネイティブに行きたいからPython勉強しないとな。
ついでにホームページの写真部分をPHPで書きなおしたあれに交換を計画。
旧データはリンク貼って保存予定。
Ubuntuは起動スプラッシュ用画像の構築から。さてどうしたものか。
Ubuntuカスタムパッチ構築中
Youtubeの高速ダウンローダはできたんだけど、レンタルサーバーじゃことごとく安定しないからちょっと停止。
ついでだからUbuntuのテーマを少し編集してカスタマイズパッチを構築。
なぜかUbuntuのVirtualBoxが動かないからWindowsにもってってデバッグ中。
現在apt周りでトラブル多発中。
YoutubeDownloader構築中
YoutubePlaylistPlayerに搭載しているダウンローダーが遅いから、高速版構築開始。
とりあえず、CURLのcurl_multi_execを使う予定。
出向で忙しいから構築はすごく遅いんだろうな