mochibot

koyachi2006-05-05

mochibotFlash SWFファイルのトラフィック計測アプリです。flvの転送量等も計測出来るようでアクセスカウンタの豪華版、といったところでしょうか。正直にいうとアプリ自体には今のところあまり興味なくて、Flash / JavaScript Integration Kit見てたら長めのmochikit利用例として良さそうな感じだったので読み始めています。サービスのデモとしてアクセス出来る画面のコードで気になる部分を抜粋します。

非キャッシュjson読み込み

jsライブラリのバージョン上がったときに最新版がダウンロードされるようにするテクニックと同じ要領で非キャッシュjsonドキュメントを読み込む、はず。
http://mochibot.com/include/js/my_common.js

function loadUncachedJSONDoc(uri) {
  return loadJSONDoc(uri + "&nocache=" + (new Date()).getTime());
}

RSSレンダリング

これは普通か。左下の★From the MochiBot Blogの下のリストを以下のコードで生成している。
http://mochibot.com/include/js/cb_dashboard_blogposts.js

function parse_rss(req) {
  var xml = req.responseXML;
  var items = xml.getElementsByTagName("item");
  var children = [];
  for (var i = 0; i < items.length && i < 3; i++) {
    var item = items[i];
    var href = item.getElementsByTagName("link")[0].firstChild.nodeValue;
    var title = item.getElementsByTagName("title")[0].firstChild.nodeValue;
    children.push(LI(null, A({"href": href}, title)));
  }
  appendChildNodes("blogposts", children);
}

function load_blogposts() {
  var r = doSimpleXMLHttpRequest($("feedlink").value);
  r.addCallback(parse_rss);
}

Flashへの値渡し

DashboardManager.prototype.setGraph()内でFlashObject(現SWFObject)が使われている。Flashへの値渡しは関数の最後のほうで行われていて、urlにグラフの項目(tags)とその色(colors)が入っててそれを元にflash側でグラフ書いているっぽい。右側のチェックボックスのアクションとしてsetGraph()が呼ばれて左側のSWFが再描画される。
SWFObject ExamplesのPassing variables into your movies using the "Flashvars" parameter:に書いてあるけどFlashからは_rootのメンバとして(この場合は_root.xmlpathとして)アクセス出来るようです。
http://mochibot.com/include/js/cb_dashboard_json.js

  if (fo.not_loaded) {
    delete fo.not_loaded;
    fo.addVariable("xmlPath", urlEncode(url));
    fo.write("graph_v1");
  } else {
    fo.call('reset', url);    
  }

webmonkeyによるFlashObject説明。sIFRってここに繋がるのか。1年くらい前のFlash業界がやっとわかったかも。

その他

ループ内で配列オブジェクト参照するときはテンポラリの変数に入れて高速化してたり、numberFormatter, nodeWalk使ってるの初めて見たり。mochikitの会社なんだから当たり前だけど使いどころが勉強になる。