<   2007年 02月 ( 18 )   > この月の画像一覧
JavaScript の for文のベンチマークを取ってみた
 前回のエントリーの続き。

 「グダグダ言わずにベンチとってみればエエやん」ということで、JavaScript の for文のスタイルが、どんだけ速度に影響を及ぼすのかを調べてみた。

 で、まずベンチマークのツール探しから。ググってみたら amachangさんの作ったベンチマークツールが見つかった。ありがとう、amachangさん! ありがたく使わせていただきます!!

 ということで、こんな感じでベンチマークを取ってみる事にした。
benchmark({  
test_a: function(){
var sum = 0;
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0, l = arr.length; i < l; i++) {
for (var j = 0, m = arr.length; j < m; j++) {
for (var k = 0, n = arr.length; k < n; k++) {
sum += arr[k];
}
}
}
},

test_b: function(){
var sum = 0;
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
for (var k = 0; k < arr.length; k++) {
sum += arr[k];
}
}
}
}
});
for文を3重にして、配列の値を足し込んでみるテスト。test_a が配列長を一旦変数に入れるバージョン。test_b が lengthメソッド(プロパティ?)を直接使うバージョン。


結果
Win: IE6
*** test_a ***
result : 0.9447833999999999[ms]
.
*** test_b ***
result : 1.241418[ms]

Win: FireFox1.5 (なぜか1.5w)
*** test_a ***
result : 0.8368538[ms]
.
*** test_b ***
result : 0.9928537999999999[ms]

Mac: Safari
*** test_a ***
result : 4.361354[ms]
.
*** test_b ***
result : 4.571354[ms]

Mac: FireFox2
*** test_a ***
result : 0.5450144[ms]
.
*** test_b ***
result : 0.7530144[ms]

 確かに、配列長を一旦変数に入れた方(test_a)が速い事は速いが、ビミョー。1 ms も違わないよ(むしろ、Safari の異様な遅さが目を引いてしまう)。タイプする時間を考えたら、トータルでは後者(test_b)の方が効率的な気がする。

 ということで、「オレは配列長を一旦変数に入れるのを止めるぞ!ジョジョーッ!!」という結論になりました。
[PR]
by fkmn | 2007-02-28 23:17 | IT
JavaScript の for文の謎
JavaScripter の皆さんは、for文を
for (var i = 0, l = array.length; i < l; i++) {
// 何かの処理
}
って書くんだけど、配列長の値を一度別の変数に入れるのは何か理由があるんだろうか? 例えば、「まるごとJavaScript & Ajax !」の弾さんの記事のコードとか、Prototype.js のコードなんかがそう。length メソッドってコスト高いの?

 個人的には、
for (var i = 0; i < array.length; i++) {
// 何かの処理
}
でいいじゃん、って思うんだけど。あ、でも「最速インターフェース研究会」のma.laさんは後者の書き方だなぁ。

 うーん、よく分からん。


# ちなみに、ma.laさんが落とした原稿って、MochiKit の部分なんだろか?
# ここだけ筆者が "編集部" になってて、浮いてる気がする。



2/28 追記
 気になったので、ベンチマークを取ってみた
[PR]
by fkmn | 2007-02-27 23:55 | IT
JavaScript (+ Prototype.js) 面白いわ
a0057891_119552.jpgAmazon.co.jp: まるごとJavaScript & Ajax ! Vol.1: 本

 「まるごとJavaScript & Ajax !」が届いたので、手を動かしながら読んでいる。amachangさんの記事を読んで、やっぱ Prototype.js のソースも読まないといけないと思って、「prototype.js v1.5.0 の使い方」を参考にしながら、そっちも読んでみたり。

 で、最初、JavaScript には、Iterator とか、foreach にあたるものが無いのがめんどいなーとか思ってた。例えば1から10までを足すコードなんかは次のようになる。
(alert関数の文字列が、セキュリティーに引っかかるので、"print" に置き換えてあります。)
var sum = 0;
var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0, l = nums.length; i < l; i++){
sum += nums[i];
}
print(sum); 

 ところが、Prototype.js には、ObjectRange クラス というのがあって、これと eachメソッドを使うと、同じ処理をするコードが次のように書ける。
var sum = 0;
var num = new ObjectRange(1, 10);
num.each( function(e){ sum += e} );
print(sum);

もうちょっと短くすると、次のような感じ。
var sum = 0;
new ObjectRange(1, 10).each( function(e){ sum += e} );
print(sum);

で、ふと気づく。これってRubyじゃない? 同じ処理をするコードを Ruby で書いてみると、次のようになる。
sum = 0
(1..10).each{|e| sum += e}
p sum

 JavaScript (+ Prototype.js) の方がコードはちょっと長いけど、やってる事は Ruby と変わらない。

 「prototype.js v1.5.0 の使い方」で言われている
ここで提供する例とリファレンスを読んでいると、プログラミング言語 Ruby に詳しい開発者は Ruby のビルトインクラスと、このライブラリが実装している拡張が非常に似ていることに気がつくかもしれません。
ってのは、この事か。

 JavaScript 自体の言語仕様は凄くシンプルだけど、だからこそ柔軟に色々出来るのは面白い。特に、関数がオブジェクトになってるのが肝な気がする。Lisp っぽくて、書いてて楽しい。
[PR]
by fkmn | 2007-02-26 23:12 | IT
田舎に同じ苗字の人が多い理由、ミトコンドリア・イブの誤解
苗字の多様性が減って問題があるのかどうかは不明ですが、現象としてはあるかもと想像してみました。
Geekなぺーじ:日本中が佐藤さんと鈴木さんになる日

 日本全体の規模で考えるとちょっと分かりづらいけど、田舎のように規模が小さくて、そしてある程度外部との交流が限られていたりする場所では、割と普通に見られる光景ですよね。「この辺、XXさんばっかじゃねーか」みたいな。

 話のスケールを少し大きくすると、実はミトコンドリア・イブというのも、これと同じ現象から来ています。人類発祥初期のまだ人類の数がそれほど多くない時期に、遺伝的変動によって "偶然" 残った1系統の祖先の女性が「ミトコンドリア・イブ」だというのが、本当の話です。ミトコンドリア・イブの存在は、「イブ一人から人類が始まった」ということを表しているわけではありません。
(参考:ミトコンドリア・イブ - Wikipedia

 ミトコンドリアも、苗字と同じように、片親からしか受け継がれませんから、上記二つの話は、基本的には同じ話です。なので、遠い将来、日本人の苗字が数種類にまで減ってしまうというのは、「妄想」という程のものでもなかったりします。(ただ、そんなに長い間、日本という国があるのか?むしろ、人類文明が残っているのか?となると、はなはだ疑問ですが。)


*この辺りの話を、数式できちんと説明できればカッコいいんだけど、僕にはそういう素養は無いので、検索して見つけたエントリーを置いておきます。「Geekなぺーじ」さんのコメント欄でも、同じエントリーが投稿されてるけど、あれは僕ではありませんので、あしからず・・・。

参考:最尤日記: イブは何人? --- 単為生殖の系統生存確率
[PR]
by fkmn | 2007-02-25 23:47 | ライフサイエンス
ブラウザとメーラの入力補完
「最速インターフェース研究会」さんで紹介されていたブラウザのURL補完が、意外と便利で重宝している。実は、メーラのメールアドレスも同じように補完してくれて、こっちもかなり便利。

ブラウザの場合:
Sleipnir(というかIE)やFireFox(Win版とMac版の両方とも)のURL欄にURLの一部を打ち込むと、結構賢く補完してくれる。

例えば今の僕の環境では、URL欄に"yaho"と打ち込むと、きちんと"http://www.yahoo.co.jp/" を候補として出してくれる。"rea" と打つと"http://reader.livedoor.com/reader" を出してくれる。先頭の数文字じゃなくて、URL中の特徴的な部分を打てばよいので、結構便利。最近は、マウスを使って Bookmark から選択、なんてことはほとんどしなくなった。

IE(Sleipnirも)の場合は Alt+d で、FireFox の場合は Win版は Ctrl+l(エル)、Mac版は Command+l でURL欄にフォーカスが移るので、これと組み合わせると、行きたいサイトにすぐに行ける。


メーラの場合:
これもブラウザのURL欄の場合とほとんど同じ。あて先欄でメールアドレスの一部を打つと、候補を出してくれる。

会社ではOutlook(Not "Outlook Express")を使ってるんだけど、例えば、fkmn-hoge@gmail.com というアドレスの場合、"fkm" ぐらいまで打てば、"fkmn-hoge@gmail.com" というアドレスを候補として出してくれる。Mac の Mail.app でも同じ。

いままでメールアドレスを選択する時にすごくイライラしていたんだけど、キーボード直打ちにしてからそんな事も無くなった。もはや、これ無しではやっていけない。
[PR]
by fkmn | 2007-02-23 23:56 | 日記
【感想】カラマーゾフの兄弟
a0057891_1175315.jpga0057891_118425.jpga0057891_1181290.jpg

Amazon.co.jp: カラマーゾフの兄弟〈上〉: 本: ドストエフスキー,原 卓也
Amazon.co.jp: カラマーゾフの兄弟〈中〉: 本: ドストエフスキー,原 卓也
Amazon.co.jp: カラマーゾフの兄弟〈下〉: 本: ドストエフスキー,原 卓也

 ドストエフスキーの、いや、世界文学の最高傑作とまで評される作品。父殺しをベースに、神の存在や「大審問官」など、この作品で扱われているテーマは幅広く、そして深い。正直、自分でも、この作品で述べられている事をきちんと理解している自信が無いし、自分なりの考えもまとまらないでいる。なので、ここでは、あまり多くを書かないでおきたい。

 あと2-3回ぐらい読まないと、この作品について何か言えるまでにはならないかな。

 上のリンクにもある通り、今回読んだのは新潮文庫の原卓也訳なんだけど、さすがに昭和53年に出版されたものだけあって、訳の日本語が古くて、若干読みにくかった。光文社から古典新訳文庫として、カラマーゾフの兄弟の新訳版も出ているので、今度はこっちを読んでみようと思う。
[PR]
by fkmn | 2007-02-21 23:08 | 読書記録
【感想】不都合な真実
公式サイト(英語)(日本語)

 地球温暖化について、元アメリカ副大統領のアル・ゴアの講演を元に構成した映画。温暖化の深刻さについて考えさせられる作品。

 「不都合な真実」というのは、温暖化の事実が "アメリカの政治家にとって" 不都合だ、という意味で使われている。けれど、温暖化の事実を「不都合な真実」としてとらえているのは、自分たちも同じじゃないかと思う。台風の増加や降雪量の減少など、温暖化の影響を卑近な事例として目にする事は多い。けれど、それらの事実を、どこか他人事としてとらえてしまったりする、そんな自分に気づく。

 既に、温暖化の影響は、僕たちの生活にも影響を及ぼしている。そんな、ある意味当たり前の事実に、あらためて気づかされる作品だった。


 ただ、やっぱりアメリカの映画だなぁ、という感じはすごくする。特に、アル・ゴアの締めのこんな言葉。(正確な言葉の内容は覚えていないので、大体の内容です。)
温暖化に大きな悪影響を及ぼしているのは中国とアメリカです。つまり、我々アメリカが生活を改善すれば、温暖化の問題は解決可能なのです。地球温暖化は我々(アメリカ人)にかかっているのです!

 最後のこのくだりで、イスからずり落ちそうになるくらいビックリした(笑)。結局そこかよ!みたいな。
[PR]
by fkmn | 2007-02-19 23:53 | 日記
YAPC::Asia 2007 Tokyo のチケットを買った
YAPC::Asia 2007 Tokyo

 この手のイベントに参加した事って無かったんだけど、せっかく関東圏に居るんだから参加しとかないと損だと思って、チケットを買った。4/4-5 の日程だけど、2日連続で仕事を休んで行くのは難しいかな?

 Audreyたん や 弾さんのトークが楽しみ(僕は基本的にミーハーなのです)。

# デブサミ2007 にも行っておけば良かったな・・・。
[PR]
by fkmn | 2007-02-16 23:46 | IT
四捨五入の常識/非常識
たとえば、1.25 と 1.15 を有効桁数2桁に四捨五入する場合、両方とも最後の桁が偶数になるように、1.2 に丸めるので正しいのだけど、(後略)
odz buffer - [Computer]四捨五入

 えーっと、そんな事、四捨五入して30歳になるまで知りませんでした orz。

 ちょっと調べてみたところ、上記のような最後の桁が偶数になるように丸める四捨五入の方法は、別名「銀行型丸め」と言うそうな。

 参考:Radium Software Development - Banker's Rounding

 金融系のシステムを作ってる連中にとっては、常識なのかな?
[PR]
by fkmn | 2007-02-15 23:57 | IT
YahooPipes で Biotechnology Japan のニュースを読む
 今更だけど、最近話題の YahooPipes を触ってみた。どこかで「Visual Plagger」という喩えをされていたが、まさにそんな感じ。(イケてる)GUI で RSS を自分好みに編集できる。

 「萌え理論Blog」さんが、いろいろとまとめています。

 で、僕も YahooPipes をちょっと試してみた。題材は、Biotechnology Japan のニュース。BTJ は、RSS を配信してくれていないので、これを YahooPipes で取得してみる。

 が、しかし、「YahooPipesで」と言ったけど、YahooPipes は RSS 配信していないサイトからフィードを生成する事は出来ないらしい。なので、MyRSSでRSSフィードを作る。なんかいきなり趣旨から外れてる気が・・・(笑)。とにかく、このRSSフィードを YahooPipes でいじくってみる。

 まず、「Fetch」を選んで、RSS の URL を入力。
a0057891_1194233.jpg


 MyRSS で作ったフィードには、かなりの重複が含まれるので、「Unique」モジュールでタイトル が重複しているものを排除。
a0057891_1221349.jpg


 広告は邪魔なので、フィルターをかける。「Filter」モジュールを選んで、タイトルに "PR" という文字列が入ったものをブロックする。
a0057891_127325.jpg


 これで完成。全体図はこんな感じで、かなりシンプル。
a0057891_1293188.jpg


 Plagger なんかに比べると、お手軽感はかなり強い。今後、この手のフィード作成/編集ツールは盛上がってきそうな感じ。
[PR]
by fkmn | 2007-02-13 23:52 | IT


とあるWebアプリケーションエンジニアの日記
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
人気ジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX