php勉強会に参加してきました。

php勉強会に参加してきました。

会場を提供してくれたのはグリーさん。←強調するように言われたのでたくさん書きます。

最初のプレゼン

amazon EC2 , 3 で構築したサーバで月間1億PVぐらいをさばいているという話。
空気を読まずに、差し支えなければ、何台のサーバノードで月額いくらぐらいかかっているかおしえてくださいと聞いたw
100万円以下という回答を得た。貴重な答えありがとうございます。。。
答えづらい質問してすいません。。。。

月間1億PVで100万以下って安いよなぁ。。。

クラウドに移行する前は自宅サーバて、ルータも市販のルーターを使っていたというのも興味深かった。
結局、市販の家庭用ルーターを使ったやつだとさすがにアクセスを裁ききれずにダウンしてしまったということだが、市販の家庭用ルーターでも膨大な負荷をある程度裁けるものなんだなと驚いた。

クラウド楽しそうだなー。
だけどクラウドは今の仕事だとあまり使う機会がないだろうな。。。。


会場を提供してくれたのはグリーさん。

次のプレゼン

ChainRecord という railscakephp の ActiveRecode に jQuery や ZendFrameWork のメソッドチェーンを追加したようなデータベース制御用ライブラリの紹介の話。

ただ、メソッドチェーンでかけて面白いと思うんだけど、 filter() で分類する前に、一度クエリの結果を取り出してしまっているのが点でパフォーマンスの問題が気になった。
また、カーソルで実装したとしても、 filter() の中で lamda を使っていらないデータを除外しているので、結局は全件データを見なければいけないのではないかと思った。

また、モデルを作成するたびに接続が増えていってしまう点も気になった。
あと、家に帰ってから思うが、書き込みはマスターに読み込みはスレーブにという、よくありそうな分散環境をどう表現するのかが気になった。

ソースコードgithubにあるのであとで読ませてもらおう。
http://wiki.github.com/hirakiuc/ChainRecord/api

面白い設計思想のライブラリは見てて楽しいし、インスピレーションがくるっっっ。。。

会場を提供してくれたのはグリーさん。

最後のプレゼン

phpでバイナリ処理を行いましたという話。目的は jpg の exifGPS データの抽出。
冒頭で、phpでバイナリをファイルを処理して表示したことがある人手をあげてといわれた。
バイナリファイルを fseek して pack/unpack でエンディアン整えて fwrite でバイナリファイルをphpから直接書きかえたことはあれど、画面に表示したことはないので躊躇してしまった。。。引っ込み思案でごめんね。

で、 jpg の exif から GPS データを持ってくるという話なんだけど、バイナリデータを揉まないで exif_read_data関数使えばよくないと思って調べてた。
制限がきつい環境などで使えない環境もあるみたいだから、そーゆー話なんかなとおもったら、
最後に 「ってやったけど、phpexif_read_data関数使えばできるよね。」という説明があってずっこけましたwww そうきたかw

swfを分離するライブラリも作られているらしい。
swfをパースするライブラリといえば swfmill 等があると思うけど、これと比べてどうなんだろう。
#制限がきつくて、swfmillを入れられないとか、そーゆー環境向きとかもあるからなぁ。


会場を提供してくれたのはグリーさん。

懇親会

おしゃれな場所だったんでビクビクしていた。。。というのは嘘で会場を提供してくれたグリーさんの人達といろいろ話していた気駕する。赤い服着ていた電波な人です。今度あってもいじめないでください。

KVSでは、tokyo tyrant を選択している人が結構いたので驚いた。
やっぱり、tokyo tyrant はバランスがいいソフトウェアだと思う。

gcc で スレッド境界の問題を抱えたソフトのデバッグするとか聞いて、VC++で骨抜きにされた私は引いてしまいました。
VC++の楽さにへろへろです。

LinuxのメモリデバッガのValgrindってどうなんでしょう。(私も人から教えてもらったんですが、、)
http://ja.wikipedia.org/wiki/Valgrind

あと beer フレームワークの作者とお話できて面白かった。
意地悪な質問ばかりしてすいません。。。

自分で作っているへっぽこフレームワーク l-php っていうまだ動かないフレームワークがあったりするので、この辺は興味津々です。。。
l-phpも人様に見せて大丈夫なものにしたい。
開発サボってすいません。。。
暇な人は l-php googlecode rti とかで検索すると、、、

会場を提供してくれたのはグリーさん。

php pack/unpackの例とか。。。

Omega Chart というC#で書かれたフリーの株式チャートがあるんですが、その株式データを なぜか php から更新するための関数の一部の抜粋です。
バイナリファイルを楽しく読み書きしています。がりがりー

unpack と pack はエンディアン解決してくれるし、楽ちんだと個人的には思ってます。。。。

	//OmegaChartのデータの大きさ
	define('OMEGA_DATA_STRUCT_SIZEOF' , 8 * 4);
	//日付の位置
	define('OMEGA_TIME_POSSTION_OFFSET' , 1);
	//終値の位置
	define('OMEGA_CLOSE_POSSTION_OFFSET' , 5);

	//オメガチャートのデータディレクトリ
	define('OMEGA_DATA_DIRDECTORY' , dirname(__FILE__) . '/OmegaChart/data/');
	//index.txtファイル
	define('OMEGA_INDEX_FILE' , dirname(__FILE__) .  '/OmegaChart/index.txt');

	//Omegaチャートのデータをアップデートする
	function OmegaChartFileUpdate($line)
	{
		//OmegaChartのデータ形式のバイナリ列
		$writeBinary = MakeOmegaChartBinary($line);
		$searchTime = $line['time'];
		$filename = OMEGA_DATA_DIRDECTORY . sprintf("%04d" , $line['ticker']);

		$fp = @fopen($filename , 'r+b');
		if ($fp === FALSE)
		{//ないなら新規で開く
			$fp = fopen($filename , 'w+b');
			if ($fp === FALSE)
			{
				throw new Exception("ファイル {$filename} が開けません");
			}
		}
		while( ! feof($fp) )
		{
			$binary = fread($fp , OMEGA_DATA_STRUCT_SIZEOF);
			$stockData = unpack('V*' , $binary);
			if ( count($stockData) < OMEGA_CLOSE_POSSTION_OFFSET)
			{
				break;
			}
			$time = $stockData[OMEGA_TIME_POSSTION_OFFSET];
			$close = $stockData[OMEGA_CLOSE_POSSTION_OFFSET];

			if ($searchTime == $time)
			{
				//データの上書き!
				fseek($fp , -OMEGA_DATA_STRUCT_SIZEOF , SEEK_CUR );
				fwrite($fp , $writeBinary , OMEGA_DATA_STRUCT_SIZEOF);
				
				fclose($fp);
				return;
			}
		}
		//新規
		fwrite($fp , $writeBinary , OMEGA_DATA_STRUCT_SIZEOF);

		fclose($fp);
		return ;
	}

	//OmegaChartのデータ形式のバイナリ列
	function MakeOmegaChartBinary($ll)
	{
		return pack(
			 'V*'
			,(int)$ll['time']
			,(int)$ll['open']
			,(int)$ll['high']
			,(int)$ll['low']
			,(int)$ll['close']
			,(int)$ll['volume']
			,0
			,0
			);
	}

会場を提供してくれたのはグリーさん。(しつこいwww