log.metatype

Archive for October 2007

Object.prototype.length (Firefox only)

適当にlengthもgetterで書いてみた。

SnipplrObject.prototype.length (Firefox only)

Posted by inamorix on October 23rd, 2007

  1. Object.prototype.__defineGetter__('length', function () {
  2.         var cnt = 0;
  3.         for (var i in this) {
  4.                 if (this.hasOwnProperty(i)) cnt++;
  5.         }
  6.         return cnt;
  7. });

オブジェクト型の長さを返すだけ。

var obj = {
	a: 1,
	b: 2,
	c: 3,
	d: 4,
	e: 5
};
alert(obj.length);

あまり使う時無いかな?あるかな?

Object.prototype.list (Firefox only)

オブジェクト型の値をリストアップするgetterを書いてみた。
デバッグ用、Firefoxでのみ確認。

普通の関数にすれば、他にも対応できるのだろうけど、
単にgetterが使ってみたかっただけ。
※ __defineGetter__に対応していれば動作するかも。

SnipplrObject.prototype.list (Firefox only)

Posted by inamorix on October 23rd, 2007

  1. Object.prototype.__defineGetter__('list', function (dep) {
  2.         var r   = [];
  3.         var ind = '';
  4.         var dep = (typeof(dep) == 'number') ? ++dep : 0;
  5.        
  6.         for (var i = 0; i < dep; i++) { ind += '\t'; }
  7.         for (var i in this) {
  8.                 if (this.hasOwnProperty(i)) {
  9.                         var is_obj = (typeof(this[i]) == 'object');
  10.                        
  11.                         r.push(ind + i + ': ');
  12.                         r.push(is_obj ? '' : this[i]);
  13.                         r.push('\n');
  14.                         r.push(is_obj ? arguments.callee.apply(this[i], [dep]) : '');
  15.                 }
  16.         }
  17.        
  18.         return r.join('');
  19. });

var obj = {
	a: 1,
	b: 2,
	c: {
		a: 31,
		b: 32,
		c: {
			a: 331,
			b: 332,
			c: 333
		}
	}
};
alert(obj.list);

みたいな感じで、リストアップできるはず。

iPod Off (alpha) released

Offline browsing in iPod touch.

When offline, you can browse at special bookmark of Safari of iPod touch.
iPod Off is small application to make that bookmark.


» iPod Off

String.prototype.matchIndexOf

JavaScriptのString.matchをif文の条件によく使うけど、
switch文に使えたら便利かなぁ〜
なんて思い付いて書いてみた。

SnipplrString.prototype.matchIndexOf

Posted by inamorix on October 22nd, 2007

  1. String.prototype.matchIndexOf = function (regexp) {
  2.         var ptns = regexp.toString();
  3.         var opt  = ptns.match(/\/([a-z]*)$/)[1];
  4.             ptns = ptns.replace(/^\/(.+)\/([a-z]*)$/, '$1');
  5.             ptns = ptns.replace(/\\\|/              , '^^');
  6.             ptns = ptns.split('|');
  7.        
  8.         for (var i = 0, ix = ptns.length; i < ix; i++) {
  9.                 var ptn = new RegExp(ptns[i].replace(/\^\^/, '\\|'), opt);
  10.                 if (this.match(ptn)) {
  11.                         return i;
  12.                 }
  13.         }
  14.        
  15.         return -1;
  16. };

引数の正規表現で複数パターンを入れておいて、
マッチしたパターンの順番を返す。

var str = 'Http://www.example.com/';
switch (str.matchIndexOf(/^ftp|^https|^http/i)) {
	case 0 : alert('FTP');   break;
	case 1 : alert('HTTPS'); break;
	case 2 : alert('HTTP');  break;
	default: alert('Not Found');
}

みたいな使い方。

CakePHP 1.2.0.5847 pre-beta

  • Oct 22, 2007, 03:40
  • Tags: php

CakePHPが1.2.0.5847に更新されていたので試してみた。

デバックレベルの設定がConfigure経由に変わっていた。
その他、core.phpのいくつかの設定もConfigureに変更されたっぽい。
※ 旧defineのままで動作するかは未確認

Model::validatesに引数渡すと警告されるのも変わらず。
※ $this->dataを渡さないと全てtrueが返る。
  使い方間違っているかな?

とりあえずメモ。