DOM

iframe

Ajax通信で戻るボタンをサポートするのに、iframeの状態変化で履歴を持つテクニックが紹介されてて、あーなるほどと思った。現状fileをajaxでアップロードしようと思ったらiframeを使用する方法が使われてるっぽくて、それぐらいの使い道だと思ってた。HTML5になったらレガシーなテクニックになるらしい。

innerHTML

結構ばんばん使われているけど、公然の独自拡張というのが意外な感じ。HTML5には定義が残るそう。

イベント

イベント処理は個人的にはjQueryとかのライブラリを使うのがいいと思う。ブラウザごとの差異とか時前で吸収するより、実績あるプラグインに任せる方が余計なバグとか生まないですむわけだし。

タグごとに使用できるイベント

考えてみれば当たり前だけどimageにonLoadってあったよねという話。画像が読み込み終わったかはこのイベントで判定できる。

関数

関数の種類の違い

宣言型の関数は宣言が出てきたときに構文解析される。Functionコンストラクタを使用した場合、動的に関数が生成されて実行のたびに毎回解析される。関数リテラルを使用した場合、一回だけ。(そもそもFunctionコンストラクタって使ったことなかった)
var foo = function fooName() { }; と名前付きでリテラル関数にすると、再帰する時に名前で呼べる。無名関数の時はcalleeを使って再帰する。

クロージャ

関数内関数。クロージャは外側の関数で定義された変数にアクセス出来る。外側の関数が内部の関数を戻り値で返したりしても、外側にあった関数がスコープを持ってた変数は使用できる。

function(x, y) { 
	function addValue() {
		return (x +y);
	}
	return addValue;
}

addValueがreturnされた後でもx,yは値を保持している。キャッシュに使ってる記事があったなーと思って調べたらPythonの話だけど http://satoshi.blogs.com/life/2009/11/python-hack.html にあった。PHPでも使えて、コードサンプルは http://phpspot.org/blog/archives/2010/10/php53.html こんな感じ。

変数宣言のあたり

一つの動詞で表しにくいと感じたら機能が多すぎるから分割する事を考える。

一個の関数にいろんな事をさせようとするとテストが出来ないし関数が長くなる。
基本的なとこだけど、機能が多すぎないかどうかの指針として一つの動詞でその関数が表現できるかという事を意識したいと思った。

CakePHPでMongoDBを使ってみる

CakePHPでMongoDBが動くまで

CakePHP側の準備

WEB ROOT
/var/www/html

CakePHPを取得
/var/wwwにlibを作成

libでCakePHPを取得
git clone git://github.com/cakephp/cakephp1x.git
ブランチを1.3に切り替え
git checkout origin/1.3

これでCakePHP1.3がlibにインストールされた状態。

appを公開用フォルダに移動
(本番はWebrootだけ移動するのが望ましい)

cp /var/www/lib/cakephp1x/app /var/www/html/projectname

webrootのindex.phpのパスの定義を修正

ROOT, APP_DIR, CAKE_CORE_INCLUDE_PATHの内容を実際の構成に合わせて変更

	if (!defined('ROOT')) {
		define('ROOT', DS.'var'.DS.'www'.DS.'html');
	}
	if (!defined('APP_DIR')) {
		define('APP_DIR', 'projectname');
	}
	if (!defined('CAKE_CORE_INCLUDE_PATH')) {
		/* define('CAKE_CORE_INCLUDE_PATH', ROOT); */
		define('CAKE_CORE_INCLUDE_PATH', DS.'var'.DS.'www'.DS.'lib'.DS.'cakephp1x');
	}

MongoDBのインストールと起動はここを参照。
http://d.hatena.ne.jp/camelmasa/20100222/1266798151
起動スクリプトなど作成するならここを参照。
http://www.ihpsystem.com/blog/196

PHPからMongoDBを操作するためのライブラリをインストール

pecl install mongo

php.iniにextension=mongo.soを追加
php.iniにコメントでextentionを入れるための場所が定義されてるので、そのあたりに追加)

MongoDB-Datasourceをインストールする

app/plugins/に移動

git clone git://github.com/ichikaway/mongoDB-Datasource.git

mongoDB-Datasourceに本体がダウンロードされるので、ディレクトリ名をmongodbに変更する

app/config/database.phpを編集

	var $mongo= array(
	    'datasource' => 'mongodb.mongodbSource',
	    'database' => 'test',
	);

あとはDB側で$mongoを使用するように設定する。
もしくはdatabase.phpのdefaultをmongoDBの定義にしても良し。

mongodbのデフォルトポートは27017