log.metatype

Archive for December 2007

Reflection of JavaScript

JavaScriptでリフレクションって、どんな感じだろう?
ひとまずnew演算子を直接指定しないで、インスタンスを取得する感じを
グローバルスコープ限定で適当に書いてみたけど、
使い道があんまり思いつかない。

Snipplrref

Posted by inamorix on December 4th, 2007

  1. String.prototype.ref = function () {
  2.         for (var args = [], i = 0; i < arguments.length; i++)
  3.                 args.push('arguments[' + i + ']');
  4.         if (window[this] && window[this] instanceof Function)
  5.                 return eval('(new window.' + this + '(' + args.join(',') + '))');
  6.         throw new Error('Function window.' + this + ' does not exist.');
  7. };


function test () {
	this.fn = function () { return 'hello'; };
}

こんな関数があったとして、

str = 'test';
str.ref().fn(); // 'hello'

文字列からインスタンスを生成、そのままメソッドコール。

str = 'Array';
str.ref(1, 2, 3).length; // 3

配列とかも出来るかな。
他は全然チェックしていない。

OS X Leopard My Setting (Plagger)

  • Dec 10, 2007, 11:55
  • Tags: mac

PlaggerをLeopardにインストールしてみる。
デフォルトのPerlとCPANを使う。


CPANの依存ライブラリをインストール

  1. MacPortsでインストール。
    ※ インデントは依存関係で自動的にインストールされる。
    sudo port install lynx
    	sudo port install openssl
    	sudo port install ncursesw
    	sudo port install ncurses
  2. sudo port install wget
    	sudo port install openssl
    	sudo port install expat
    	sudo port install libiconv
    	sudo port install gettext
  3. sudo port install ncftp
    	sudo port install ncurses
  4. sudo port install gnupg
    	sudo port install zlib
    	sudo port install libiconv
    	sudo port install bzip2
    	sudo port install readline

CPANの設定

  1. ファイアウォール環境であれば、
    export FTP_PASSIVE=1
    をしておく。
  2. sudo cpan
    で設定が始まるので設定していく。
    ※ Asia, Japan, 適当なCPANミラー

Plaggerの依存ライブラリをインストール

  1. 以下、全てCPANでの操作。
    sudo cpan
  2. Plaggerの依存ライブラリをチェック。
    test Plagger
    依存ライブラリがリストアップされるので、
    “missing” になっている不足ライブラリをインストールしていく。
  3. そのまま依存ライブラリを自動インストールしても、
    全てインストールできないので、
    個別に手動でインストールしていく。
    install 依存ライブラリ
  4. XML::AtomとXML::Feedだけ、
    インストールできないので、
    force install XML::Atom
    force install XML::Feed
    で強制インストールする。
  5. 地道にインストールしていって、
    test Plagger
    で全て “loaded” になればOK。

Plaggerのインストール

  1. CPANでインストール。
    sudo cpan
    install Plagger
  2. インストールし終わったら、
    plagger -v
    でPlaggerのバージョンが表示されればOK(だと思う)

cronメモ

情報があまり見つからなかったからメモっておこう。
Plaggerをcrontabで定期実行させる時の環境変数の話。
僕の場合、MacPortsを使っているから、

/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

をPATHに指定。

/System/Library/Perl/5.8.8/darwin-thread-multi-2level
/System/Library/Perl/5.8.8
/Library/Perl/5.8.8/darwin-thread-multi-2level
/Library/Perl/5.8.8
/System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.8.8

をPERL5LIBに指定したよ。


OS X Leopard My Settings

  1. Applications
  2. Subversion
  3. Apache
  4. MacPorts
  5. MySQL
  6. PHP
  7. phpMyAdmin
  8. Plagger

$n (Type of Number)

もっと良い方法がありそうだけど、思いつきメモ。

JavaScriptの数値を、
条件式で扱う場合と、暗黙の型変換されると困る場合に
うまくできないかなと。

Snipplr$n

Posted by inamorix on December 6th, 2007

  1. function $n (n) {
  2.         return (typeof(n) == 'number') ? new Number(n) : NaN;
  3. }


条件式

条件式の中で「0」はfalse扱いなので、

alert(0 ? true : false);

は、falseが返る。

alert($n(0) ? true : false);

は、trueが返る。


型変換

文字列の数値は型変換されるけど、

alert($n('5') ? true : false);

は、falseが返る。

alert($n(5) * 100);

は、500が返る。

alert($n('5') * 100);

は、NaNが返る。

alert([] * 100);

は、0が返る。
自覚が無いとはまりそうなので、

alert($n([]) * 100);

は、NaNが返る。

im.port (bugfix)

im.portのbugfix。
よく考えたら、Internet Explorerの確認をしていなかった。

» im.port
» Download


動作確認してみたリスト

  • Mac Safari 3.0.4
  • Mac Firefox 2.0.0.11
  • Mac Opera 9.24
  • Windows Internet Explorer 7.0
  • Windows Internet Explorer 6.0
  • Windows Internet Explorer 5.5
  • Windows Internet Explorer 5.01
  • Windows Firefox 2.0.0.9
  • Windows Firefox 1.5.0.8
  • Windows Opera 9.20

でも、やっぱりいまいちだ。

im.port

ports.js次期バージョンの読込み機能の試作。

» im.port
» Download


概要

ページ読込み完了後でも、
外部ファイルのJavaScriptやCSSを読込めるだけ。


使い方(その1)

<script src="js/import.js" type="text/javascript">
css/styles.css
js/events.js
</script>

みたいに1行ごとに読込みたいファイルを書いておくだけ。


使い方(その2)

<script src="js/import.js" type="text/javascript"></script>
<script type="text/javascript">
im.port('css/styles.css');
im.port('js/events.js');
</script>

関数コールでも読込めるだけ。


よしっ、いまいちだ。


追記
» bugfix版