2009年01月31日

javascript:MIME type「image/gif」にDOM追加

MIME タイプ 「image/gif」のドキュメントに DOM を追加。

<iframe src="image.gif"></iframe>

このようなフレーム内のドキュメントは、MIME type が image/gif になります。
でもこの document.body を見ると単に html になっています。

実は、このフレームに DOM を追加してみると問題なく出来るようです。
また javascript も難なく動きます。
ただし、(当然ですが)以下の特性があるようです。
・ MIME タイプは(一見)変わらない。
・ 右クリックでソースを見る事ができない。
・ 名前を付けて保存が期待どおり動かない。

※ javascript で追加編集された内容は、html ドキュメントであっても上記方法では確認できませんが、これは一瞬かなり動揺すること請け合いですw
※ 試していませんが、おそらく別ウィンドウ(別タグ)で開いたものも同じだと思います。
※ 調査したのは ie7 と firefox3 です。用途が?なので面倒w

イメージドキュメントとしての扱いになるので、他にも見つけていない不具合や相違があると思いますが、ちょっと試行してみました。

続きを読む


posted by HiFa at 15:29 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2009年01月16日

やばい。厳密に一致する

エンジニアと「ベーマガ」について from IDEA*IDEA 〜 百式管理人のライフハックブログ 〜
http://www.ideaxidea.com/archives/2008/10/post_863.html

プログラミング環境の変遷 from COBOL技術者の憂鬱
http://d.hatena.ne.jp/quill3/20081005/p1

う。一種、負い目すら感じる程に一致する。

「絶対あっているはずなのに!どうしてもわからない!えーい、プリントアウトして一行一行比較だ(← よくやった)」

コレ、かなり笑った。自分もよくやりました。
そういやプログラムポシェットって雑誌も結構好きだったなぁ

当時、パソコンはテレビにつなぐもんだと思ってましたねー。
ファミコンがそうだったしね。
自分は中古の FM-7 が初めてのパソコンで、CRT(≒ディスプレイ)なるものが必要と知った時は、もー愕然です。
わずかな小遣いかき集めて買ったのに!それでもすげーうれしかったw

まぁ。情報が少ないのなんのって興味があるってだけで変人扱いでした。
というか田舎のガキンチョにはファミコンすら珍しかった。

***

この時代にノスタルジーを感じるなんて公言するのは、ちょっとした勇気が要ったりします。
まだ30代なのにレガシー世代なんだよなぁ。
「趣味は仕事にしねぇ」なんて思ってたのに仕事にしちゃったしなぁ。
posted by HiFa at 09:55 | 🌁 | Comment(0) | TrackBack(0) | よもやま | このブログの読者になる | 更新情報をチェックする

2009年01月14日

php:インスタンスのクラスを変えてしまう

php で擬似的に以下2つ
・ インスタンスのクラスを変更
・ メソッドの動的な追加

幾つかのオブジェクトシステムではインスタンスのクラスを変えられますが、それを php で真似る。

■ まずは結果
// 変換先クラスサンプル
class foo{
  public $p = 'yo!';
  public function dump(){var_dump($this);}
}

// 変更させるインスタンス
$obj = new stdClass;
$obj->d = 'hi!';

// 変更前のvar_dump
var_dump($obj);// object(stdClass)#1 (1) { ["d"]=> string(3) "hi!" }
echo "<br><br>";

// クラスを変えてしまう
change_class(&$obj, 'foo');

// 変更後のvar_dump
$obj->dump();// object(foo)#2 (2) { ["p"]=> string(3) "yo!" ["d"]=> string(3) "hi!" }
echo "<br><br>";

// foo そのものから作ると
$foo = new foo;
var_dump($foo);// object(foo)#1 (1) { ["p"]=> string(3) "yo!" }
echo "<br><br>";

// 一見するとメソッドの動的な追加のような事も
add_method(&$obj, 'public function hello(){echo "hello!<br />";}');
$obj->hello();// hello!

// メソッド追加後の var_dump
$obj->dump();// object(add_method_0)#3 (2) { ["p"]=> string(3) "yo!" ["d"]=> string(3) "hi!" }
echo "<br><br>";


■ 自前の環境
PHP Version 5.2.3
System Windows NT
Server API Apache 2.0

続きを読む
posted by HiFa at 22:29 | 🌁 | Comment(0) | TrackBack(1) | ときどきPHP | このブログの読者になる | 更新情報をチェックする

2009年01月12日

PHP:var_dump だって見やすくなりたい(デバッグ用 var_dump)

「この程度のスクリプトでデバッグ用ライブラリなんてかったりぃなぁ。」
ってな時などにvar_dumpをより見やすくする関数。
前回、var_dump が循環参照に意外と抵抗力があるってな記事を流したんで、これに乗じて今まで使ってた関数をアップグレードしました。しかも、調子こいて色付けやら強調やらも。
var_dump()を使う前に
http://blog.cles.jp/item/1512

pre タグでもいいのですが、string データに html ドキュメントや改行があるとそれもまた見難いので、ついでにそれも変換します。
PHPでvar_dump()を使ったお手軽デバッグコード by ウェブライフハック
http://www.mapee.jp/wlh/phpvar_dump.html

まー。実のところ、いままでは var_export の出力結果を整形してたんですが、これがいっつも循環参照でひっかかる。どうせデバッグ用なので、面倒がって見て見ぬ振りしましたが、とうとう我慢し切れず前回のテストに至った訳ですw
てことで var_dump を可視化エンジン(笑)にしたオブジェクトビジュアライズ関数(!)

■ やってくれること
・ WEBページで var_dump を見やすくする
・ 重要要素には文字修飾する

■ 出力例
object(stdClass)#1 (3) {
      ["ary"]=>
      array(3) {
          [0]=>
          int(100)
          [1]=>
          int(200)
          ["key"]=>
          string(5) "value"
      }
      ["txt"]=>
      string(34) "<div>html ドキュメント</div>"
      ["obj"]=>
      object(stdClass)#2 (1) {
          ["child"]=>
          object(stdClass)#3 (3) {
              ["name"]=>
              string(6) "太郎"
              ["old"]=>
              string(6) "4歳"
              ["recursive"]=>
              object(stdClass)#1 (3) {
                  ["ary"]=>
                  array(3) {
                      [0]=>
                      int(100)
                      [1]=>
                      int(200)
                      ["key"]=>
                      string(5) "value"
                  }
                  ["txt"]=>
                  string(34) "<div>html ドキュメント</div>"
                  ["obj"]=>
                  object(stdClass)#2 (1) {
                      ["child"]=>
                      object(stdClass)#3 (3) {
                          ["name"]=>
                          string(6) "太郎"
                          ["old"]=>
                          string(6) "4歳"
                          ["recursive"]=>
                          *RECURSION*
                      }
                  }
              }
          }
      }
  }


■ 出力例の試料
$a = new stdClass();
$a->ary = array(100, 200, 'key' => 'value');
$a->txt = '<div>html ドキュメント</div>';
$a->obj = new stdClass();
$a->obj->child = new stdClass();
$a->obj->child->name = '太郎';
$a->obj->child->old = '4歳';
$a->obj->child->recursive = $a;

var_html($a); // 出力


■ 自前の環境
PHP Version 5.2.3
System Windows NT
Server API Apache 2.0

続きを読む
posted by HiFa at 01:35 | 🌁 | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする

2009年01月11日

PHP:循環参照に対する動作の違い

・ 循環参照を持つ変数に何らかの処理を加えた時の動作の相違
・ 循環参照を見つける簡易関数(php5)

自前環境で、循環参照に対する幾つかの関数の動作を試行。
ちなみに、php v5.3 では循環参照をガーベッジ・コレクターが検出し、循環参照に使用されているメモリーを解放することができるとのこと。

■ 循環参照の例
A)配列で値渡し(※)
$a = array();
$a[0] = $a;

B)配列で参照渡し
$a = array();
$a[0] = &$a;

C)クラスインスタンスで値渡し
$a = new stdClass;
$a->p = $a;

D)クラスインスタンスで参照渡し
$a = new stdClass;
$a->p = &$a;


※ うーむ。これは循環参照というのかなぁ???

■ 自前の環境
PHP Version 5.2.3
System Windows NT
Server API Apache 2.0

続きを読む
posted by HiFa at 18:25 | 🌁 | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする