2007-01-12
■ [softs] fub最初の一歩
Windows用のタブブラウザfubの導入方法。
特徴
- シンプルながら高いカスタマイズ性
- 多段タブ(グループタブ)が実装されているので、タブを開きまくっても大丈夫
- grep検索とかインクリメンタル検索とか
- お気に入りはIEと共通
- 「しいて挙げれば起動が遅いです。」だそうです。
ダウンロード
公式サイトの「導入方法」から fub_net_full.zipをダウンロード。
インストール
解凍するだけ。
初期設定
起動すると、メニューバーがないのにびっくりするかも知れません。fubではツールバーの青いアイコンからメニューを開きます。 その隣(★)がお気に入り、その隣(時計)が履歴、その隣がエクスプローラバーの表示/非表示です。
とりあえず最低限の設定を済ませてしまいましょう。
- ツールバー
- 表示→ツールバーから表示するツールバーを選択しましょう。
- プロキシ
- ツールバーの緑の三角マークをクリックすると、プロキシの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>");
とか。