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ファイルを取り扱えない。(ザ・マッチメーカーズの効果音の一部とか)
他、使ってみて何かあったら連絡ください。

いろいろ計画中

PixivRSSを、現在のサーバーからGAEに移転しようか検討中。
移転するのならネイティブに行きたいからPython勉強しないとな。
ついでにホームページの写真部分をPHPで書きなおしたあれに交換を計画。
旧データはリンク貼って保存予定。
Ubuntuは起動スプラッシュ用画像の構築から。さてどうしたものか。

Ubuntuカスタムパッチ構築中

Youtubeの高速ダウンローダはできたんだけど、レンタルサーバーじゃことごとく安定しないからちょっと停止。
ついでだからUbuntuのテーマを少し編集してカスタマイズパッチを構築。
なぜかUbuntuのVirtualBoxが動かないからWindowsにもってってデバッグ中。
現在apt周りでトラブル多発中。

Jaxaに…行けなかった…

はやぶさの全天周映画が今月末までだったからみに行ってきた。
市立博物館についたところで財布忘れた事に気づき、慌てて帰宅。再度出発したのはいいもの、中間付近でチェーン脱落して自走不能+チェーンはカバーの中で開けるのにドライバーがいるから修理不能に…
速攻引き返して交番でドライバー借りて修理。防犯登録が兵庫県警になってるからいろいろ聞かれた。親戚にもらった自転車なんですよ…マジで。
修理が終わった頃には放映始まってたからそのまま散髪と本屋寄って帰宅。
買った漫画がすごく残念なコトになってた…どうしてこうなった…
調べものしてたら、wikipediaの創設者からのメッセージがいい加減ウザくなったから消去するためのGreasemonkeyスクリプトを書いた。
とりあえずメッセージが消える程度にしか確認してないけど、レンダリングも崩れてないし、大丈夫だろう。