トップ «前の日記(2007-01-11) 最新 次の日記(2007-01-14)» 編集

Route 477



2007-01-12

[softs] fub使ってみた

メニューの開き方がわかるまでに40分かかったorz

[softs] fub最初の一歩

Windows用のタブブラウザfubの導入方法。

特徴

  • シンプルながら高いカスタマイズ性
  • 多段タブ(グループタブ)が実装されているので、タブを開きまくっても大丈夫
  • grep検索とかインクリメンタル検索とか
  • お気に入りはIEと共通
  • 「しいて挙げれば起動が遅いです。」だそうです。

ダウンロード

公式サイトの「導入方法」から fub_net_full.zipをダウンロード。

インストール

解凍するだけ。

初期設定

起動すると、メニューバーがないのにびっくりするかも知れません。fubではツールバーの青いアイコンからメニューを開きます。 その隣(★)がお気に入り、その隣(時計)が履歴、その隣がエクスプローラバーの表示/非表示です。

fub menu

とりあえず最低限の設定を済ませてしまいましょう。

ツールバー
表示→ツールバーから表示するツールバーを選択しましょう。
プロキシ
ツールバーの緑の三角マークをクリックすると、プロキシのON/OFFができます(明るい緑のときがON)。右クリックするとプロキシのアドレスを設定できます。
マウスジェスチャ
オプション→マウスジェスチャの設定 から。「←で戻る」とか「↓で閉じる」とかそういうやつです。
タブ
F4キー(またはオプション→設定)で設定画面が開きます。タブ→新規タブ のページで、「新規タブをどこに追加するか」「タブを新しく開くかどうか」「開いたタブをアクティブにするかどうか」を設定しましょう。
グループタブ
デフォルトではOFFになっています。F4キーで設定画面を出して、グループタブ→表示 からONにできます(再起動が必要)

とまあとりあえずこんなところで。より詳しいことはヘルプをどうぞ。

[javascript] JavaScriptの簡易プロファイラ(非prototype版)

http://d.hatena.ne.jp/llamerada/20050919/1127096571 がうまく動かなかったので、 prototype.js非依存にしたバージョンを作ってみた。

Array.prototype.sum = function(){
        for(var i = 0, sum = 0; i < this.length; i++){
                sum += this[i];
        }
        return sum;
}
Array.prototype.mean = function(){
        return (this.length > 0) ? (this.sum() / this.length) : 0;
}
Array.prototype.max = function(){
        if(this.length == 0){
                return 0;
        }
        for(var i = 1, max = this[0]; i < this.length; i++){
                if(this[i] > max){
                        max = this[i];
                }
        }
        return max;
}
Array.prototype.min = function(){
        if(this.length == 0){
                return 0;
        }
        for(var i = 1, min = this[0]; i < this.length; i++){
                if(this[i] < min){
                        min = this[i];
                }
        }
        return min;
}

function Profiler() {
        this.keys = [];
        this.records = {};
}
Profiler.prototype.observe = function(object, name){
        name = name || "Method";
        for (property in object) {
                if(typeof object[property] == "function"){
                        var key = name + "::" + property;
                        this.keys.push(key);
                        this.records[key] = [];
                        object[property] = function(__method, __timeRecord){
                                return function(){
                                        var start = new Date;
                                        var rv =  __method.apply(this, arguments);
                                        __timeRecord.push( (new Date) - start);
                                        return rv;
                                }
                        }(object[property], this.records[key])
                }
        }
}
Profiler.prototype.result = function(){
        var out = []
                for(var i = 0; i < this.keys.length; i++){
                        var rs = this.records[this.keys[i]];
                        out.push("<td>"+ this.keys[i] +
                                        "</td><td>count</td><td>" + rs.length +
                                        "</td><td>total</td><td>" + rs.sum() +
                                        "</td><td>mean</td><td>" + Math.floor(rs.mean() * 10) / 10 +
                                        "</td><td>max</td><td>" + Math.floor(rs.max() * 10) / 10 +
                                        "</td><td>min</td><td>" + Math.floor(rs.min() * 10) / 10 + "</td>"
                                );
                }
        return "<table><tr>"+out.join("</tr><tr>")+"</tr></table>";
}

単純に書き換えただけですね。あとresultをテーブル形式にした。

使い方は

p = new Profiler;
p.observe(ClassA.prototype);
p.observe(ClassB.prototype);
//重たい処理
document.write("<div align=left>"+p.result()+"</div>");

とか。