Home

日記
form.onsubmitとEvent.observeに関する実験Edit

<script type="text/javascript" src="prototype.js"></script>
<form id="test" onsubmit="return formOnSubmit();">
<input type="submit">
</form>
<script type="text/javascript">
function formOnSubmit()
{
alert('formOnSubmit');
return false; /* A */
}
Event.observe('test', 'submit', function() {alert('EventObserve'); return false; /* B */}, false);
</script>

上記のようなコードを、Firefox 1.5.0.1、IE 6.0.2900.2180、Opera 8.5でテスト。

イベントハンドラー実行順序はどれも、form.onSubmit→Event.observeの順序。ただし、form.onSubmitの戻り値がfalseであっても、必ずEvent.observeした関数も呼ばれてしまう。

つまり、もしform.onSubmitのコードがバリデーションロジックで、バリデーションでエラーがあったのでfalseを返したとしても、その後に続くEvent.observeした関数=Ajaxリクエストコールは呼ばれてしまうし、Event.observeした関数には、バリデーションロジックの戻り値は伝わってこない。HTML_QuickFormみたいに、alertでエラーメッセージを表示するバリデーションロジックを出力する場合は、単純にEvent.observeしてAjaxリクエストコードを追加するパターンは使えない*1

ちなみに、A、Bの戻り値をいろいろ変えて試してみたところ、そのあたりの処理にはブラウザ互換性がないことが分かった。

A:true/B:trueA:true/B:falseA:false/B:trueA:false/B:false
Firefox止まらない止まる止まる止まる
IE止まらない止まる止まらない止まる
Opera止まらない止まらない止まる止まる

Firefoxはどちらかがfalseだったら、submit動作が止まる。IEは最後に実行されたイベントハンドラーがfalseを返したときのみ、submit動作が止まる。Operaはform.onsubmitでfalseを返したときのみ、submit動作が止まる。なんだか面倒くさいなー。

ちなみに、

Event.observe('test', 'submit', function(event) {alert('EventObserve'); Event.stop(event);}, false);

なんてしちゃえば、すべてのブラウザでsubmit動作が止まったんで、自分のコードで確実にsubmit動作を止めたければ、Event.stopを使えばいいのかな。

で、トータルでどうすればいいのかいろいろ試行錯誤して、

var currentHandler = $('test').onsubmit;
$('test').onsubmit = undefined;
Event.observe('test', 'submit', function(event) {
if ((typeof currentHandler == 'function') && (!currentHandler())) {Event.stop(event);return;}
alert('EventObserve');
Event.stop(event);
}, false);

なんて感じで、デフォルトのonsubmitを強引に後から追加したイベントハンドラーの中で実行し、その結果によって後から追加したイベントハンドラーのメイン処理を実行するかどうか分岐できるようにしてみたんだけど、FirefoxとOperaではこの方法でいけるんだけど、IEでは思ったように動いてくれないなー。

でも、どうにかしたいんだったら、こういう方向のアプローチくらいしかない気がする。JavaScriptのイベントハンドラー周りの実装っていまいち理解できていないから、その辺をちょっとお勉強してから、もう一度チャレンジしてみるか。

*1 Event.observeした関数内でもう一度バリデーションロジックを呼んだら、エラーがあったときに2回もalertが表示されてうざい

Published At2006-03-11 00:00Updated At2006-03-11 00:00

日記
バーレーンGP予選Edit

今年の予選の第1、第2セッションは面白いな。ただ、今回みたいに赤旗とかのトラブルが出たときの影響がちょっと大きすぎる気がするから、その辺はもうちょっと何とかした方がいいかも。

で、それに対して第3セッションは、最初何をやっているのかさっぱり分からなかった。第3セッションには、燃料制限があるってことは知っていたけど、それがどういう意味なのかよく分かってなかったっつーか。

要するに、第3セッションは

  • 第3セッション開始時に入れた燃料で、決勝(のスタート)を走らないといけない。だから、第3セッション開始時には決勝スタートのための燃料を入れておく。
  • 予選中に使用した分の燃料は(周回タイムが極端に遅くなければ)周回数に応じて、決勝前に補給できる。
  • 予選でタイムを出すためには、燃料が少ない方がいい。だから、第3セッションの序盤は、終盤のタイムアタックのために燃料を減らすことに費やされる。
  • ある程度燃料が減った段階で、タイムアタックをはじめるチームが出てくる。ただし戦略によって、どの程度燃料が減った段階でタイムアタックをはじめるかの判断は異なるし、第3セッション中もタイヤ交換も可能なので、戦略の幅は非常に大きい。

って感じなのね。で、そういうことだって分かった上で、今回の予選の結果を考えると、フェラーリの1−2ってことの意味は、現状ではまだ何とも判断できない。少なくとも去年よりは速そうではあるけれども、ルノーやホンダとは戦略が全然違うんじゃん?って可能性がものすごく高そうだし。

なんて感じで、今年の予選の第3セッションは、単に見た目(序盤にみんなでだらだら走っている意味)がわかりにくいというだけでなく、その結果から決勝や各チームの実力が読みにくい、という意味でも分かりにくい。

ただ、このわかりにくさは、一応考えればそれなりのパターンに整理することは可能なので、ある程度情報がそろって、その解釈の仕方に慣れてくれば、F1の(見ての)面白さを増す効果があるかもしれない。

それにしても予想を外さなかったのはマクラーレンだな。今年も信頼性に問題がありそうと誰もが思っていたと思うけど、見事にその予想が当たっていることを示して見せた。しかも突然リアサスペンションが折れるって、去年のリアウイングが飛んだシーンとか思い出したな。ああいかん、今回も最初にリアウイングが外れて、それでリアサスペンションを壊したのか。サスペンションが折れた方が先かと思っていたよ。

一応レースに参加できているアグリチームは、ひとまず最初の数戦は走行距離を稼いでデータと(井出は)経験を蓄えつつ、他のチームの邪魔にならないように頑張りましょうって感じか。車が壊れないようならば、琢磨の方は2、3戦で下位チームの争いに参加できるようになるんじゃないかな。

Published At2006-03-11 00:00Updated At2006-03-11 00:00

日記
バーレーンGP決勝Edit

formula1.comのlive timingが認証サーバーのアクセス過多でログインできなくて見れず、テレビ中継の方だけだと情報が不足し、さらにその音声情報も子供が騒いでよく聞き取れず、非常にフラストレーションが溜まる決勝観戦だった。今度は早めにlive timingにログインしておこう。

で、結局今年のフェラーリ+シューマッハは十分戦闘力があるけれども、それでもルノー+アロンソの方がちょっと上手で、ホンダも車自体は負けていない気がするけど、相変わらず決勝のレース運びが「なんかうまくねーなー」という印象で、一方マクラーレンは相変わらず信頼性は微妙だけど速さはあるし、特にロングラン戦略で盛り返すパターンは昨年同様に通じるって感じか。

そういやトヨタは全然ダメっぽいね。トラブルとかではなく、「現在の車の実力があんなもん」というドライバーを初めとした関係者の評価らしいし。やっぱり去年のうちに一勝しておくべきだったよなー。

そういや全然ダメでこんなんだったら琢磨を走らせておいた方がよかったじゃん、とか思わせてくれたバリチェロは、どうやら序盤からギアが1個死んでいたらしい。まあそれならしょうがないか。あとバトンはスタート時にクラッチトラブルが出て出遅れた、とか。

そういやマッサって、序盤よかったのに中盤以降ぐだぐだになったのは、ドライバーの問題なのかなー、それとも車にトラブルが出たのかなー。何にしろ、「速さはあるけどずいぶんもろいな」という印象だった。

アグリチームは、1台完走できたし、もう1台も終盤まで走れたし、他人を巻き込むトラブルも出なかったみたいだし、情報収集+経験という意味ではとてもよかったんじゃないでしょうか。でも、井出の「マシンをより良くするために、僕が何をできたかはわからないけれど、でもメカニックの全員がハードに働いてくれたことはわかっている。ただ、自分の経験の無さが申し訳ない気持ちだよ。」ってコメントは、とても正直ではあるけれども、なんか「他にもっとちゃんとしたフィードバックができるドライバーを乗せた方がいいのでは」と思えたりするんで、言わない方がよかったかも。

Published At2006-03-13 00:00Updated At2006-03-13 00:00

日記
1470.netサービスを停止していますEdit

高負荷のため、ほとんどアクセスができない状態になっていたので、サービスをいったん止めました。DB周りの最適化を行ってから再起動をかけるため、復旧には数時間かかります。利用者の方々ごめんなさい。

復旧しました

19時過ぎにサービスを復旧しました。復旧してしばらくは、キャッシュが効かないんで重いと思いますが、徐々に通常レベル(っつっても大して軽くないけど)に戻っていくと思います。

Published At2006-03-13 00:00Updated At2006-03-13 00:00

日記
Athlon64とPentium4のサーバー用途での性能Edit

結局のところ、同等のモデルナンバー/クロックのAthlon64とPentium4(たとえばAthlon64-3200+とPentium4-3.2GHz)って、サーバー(Web+DB) 用途での絶対性能としては、どっちがいいんだろう? 価格とか消費電力とかは考えずに、Web/DBサーバーとしてそれなりの環境を整備した上での絶対性能ね。

総合評価はほぼ同等らしいから、64ビットコンパイルしたアプリ(特にDB)が使える分、サーバー用途ではAthlon64の方が上なのかなーと思いつつも、やっぱり最終的にはクロック速度が効いてPentium4の方が上かもなーとも思う。

ググって見ても、Athlon64に関してはホビー用途での事例がほとんどだし、その評価に関する記述も、たいていの場合はコストパフォーマンスや消費電力も加味した総合評価っぽくなっていて、いまいちその実用レベルでの絶対性能評価が見えない。

その辺具体的に比較してみた事例ってどこかに公開されてないでしょうか? っつーかぶっちゃけ、さくらのAthlon64ってどうよ、と思っているわけですが。

Published At2006-03-15 00:00Updated At2006-03-15 00:00

日記
誠実という評価の不確かさEdit

実際のところ、「誠実な人」「不誠実な人」がいるわけではなく、実際にあるのは「誠実な態度」「不誠実な態度」であろう。それは、ある状況において、ある人によって観察された、一つの出来事である。

そのような出来事がいくつも積み重なることによって、「誠実な人」「不誠実な人」という評価が固まっていくが、それは理論的に再現性が保証された事実ではなく、単にある限られた状況において、ある人の目からはそのような出来事が多く観察されたという話であり、結局のところそれはある人の印象にすぎない。

また、「誠実な態度」を取った人が「誠実な人」であるかどうかはわからない。「誠実な態度」は(近年のネットワークがメディアとして有効に活用される状況においては)戦略的に有効であるので(不誠実な態度によってネットワークを介して広まる悪評は、即効性の毒のようなものだ)、つまりある人が「誠実な態度」を取っているのは単なる合理的な判断によるのかもしれない。

逆に(特に知的に)誠実な態度を採用せず、「俺は信じたいから信じる」のような態度を取る人が、「不誠実な人」であるというわけでもない。そういう態度を取る人にいわゆる「いい人」(時には「誠実な人」と評価される)が多いのも現実である。

日常的な行動の多くは、人に対する印象を判断基準として採用してもかまわないだろう。しかし、そのような印象レベルの評価とは別に、ありとあらゆる情報を用いての判断が必要とされることも、場合によってはあり得るし、そのような場合は印象ではない評価をきちんと行うべきであろう。

そのような評価を行う際に、「何らかの差別的に扱われかねない事実を考慮に入れるべきかどうか」については、近代においてはそのような判断基準はできる限り重視しない態度が是とされる。基本的には私もその態度が望ましいとは思う。

しかし、「その事実自体を完全に無視するべきだ」あるいは「その事実は知らされない方が望ましい」とは思わない。そのような事実はきちんと知らされた上で、その事実をどのレベルで採用するかを個々人の判断に任せることが望ましいと思う(現時点において、それがいい結果を生むかどうかはさておき、理念としては)。

もちろんこのような一般論には、合致する事例もあるだろうし、合致しない事例もあるわけだが、一般論は一般論であって、現実に適用する際には、それぞれの実情に合わせていく必要がある。この段落はエチケットペーパーである。

Published At2006-03-16 00:00Updated At2006-03-16 00:00

日記
ソニー損保にしてみたEdit

そういや車検を通したはいいけど、自動車保険の延長契約をするのをすっかり忘れていた。今契約しているところから「延長しませんか」というお知らせがずいぶん前に来ていたらしいけど、その手紙を探しても見つからなかったんで、ためしにオンラインものに手を出してみることに。

オクサンのお勧めはソニー損保。個人的にはソニー関連の保険会社なんて、そろそろどこかに売られちゃいそうだし、あまり手を出したくないなー、とか思いつつも、まあしょせん1年単位だから何かあってもそれほどいたくないし、ほかのところを選ぶ根拠もなかったんで、結局ソニー損保に。

ちなみに今の損保ジャパンの契約とさほど変わらない内容(だと思うけど、特約関連のカバー範囲とかいまいちよくわからん。お金的にわかりやすい部分は同等かそれ以上にした)で1万円くらい安くなった。ほとんど乗っていない原付特約をはずせばさらに1万5千円くらい安くなっただろうし、もはや1年以上放置しているDJEBEL125を復活させることはなさそうな気もするんだけど、一応バイクを持っている間は念のため入っておくことに。っつーか乗らないならちゃんと処分したほうがいいよな。

Published At2006-03-16 00:00Updated At2006-03-16 00:00

日記
コメントとトラックバックとブックマークEdit

コメントは、著者に対してのメッセージという意味合いが強い。トラックバックは、自分自身の考えを述べたテキストを一般に向けて公開することが主となる。ブックマークは、ある程度他人の目を意識しつつも、基本的には自分のためのメモであろう。

宣伝や頷きトラックバックの類などは無視すると、その敷居の高さは、トラックバック>>コメント>>>ブックマークといった感じだろうか。

コメントから、著者に対してのメッセージという意味合いを弱め、ブックマーク的な気軽さで記述できるような環境を整えれば、現在よりも多くのフィードバックを得られるようになるだろうか?

Published At2006-03-17 00:00Updated At2006-03-17 00:00

日記
そろそろPHP5への移行タイミングかEdit

ようやくPHP5に移行する決心がついた。本格的に移行するための調査を始めよう。

今までPHP4にとどまっていた理由は、

  1. 既存のPHP4ベースのアプリケーションのメンテの都合上
  2. PHP5で(安心して)使えるアクセラレータが見あたらない
  3. PEARを中心とした主要なライブラリがPHP5にフル対応していない

が主な理由だったけれども、1番目については、

  • 今後作成するアプリケーションの将来のメンテの都合

との兼ね合いで、この時点でPHP5に移行した方がましだろうと判断。

2番目については、すでにPHP 5.1系は速度的にはPHP4系の標準状態を大幅に上回っているらしいし、PHP5系に対応したアクセラレータもそろそろ出始めているようなので、許容範囲と判断。

最大の問題は3番目なんだけど、ちらっとながめてみた限りでは、PEARのライブラリもだいぶPHP4、5両対応になってきているようだ。また、次のPHP5.1系では、classのインスタンス変数をvarで宣言しても警告を出さなくなるらしいし、そうなるとE_STRICT非対応なライブラリもだいぶ使いやすくなる。あと、Zend Frameworkで発表されたライブラリ群でPEARの置き換えを狙っているものも結構あるみたいだし、その辺と組み合わせれば何とかなりそうな気配。

ただし、実際には主要な(今メインで使っている)ライブラリでもPHP5ではそのまま動かないものが結構ありそうだし、一通り調査する必要があるだろう。ただ、よほどのことがない限りは、同等のライブラリを自前で書いたり移植&メンテナンスすることになったとしても、PHP5に移行する方針は進めるつもり。

っつーかもう、PEAR_ErrorStackを使ったとしてもPHP4ベースのエラーハンドリングは限界だよ。素直にtry catch throwしたい。

あと、httpd周りの環境もApache 2.2系をフロントに置いて、PHP実行環境はlighttpd+fastcgiに移行するつもりだけど、こっちはまだ全般的に調査不足なんで、この方針でいけるかどうか未検証。うまくやれば、PHP4と5を同居させたり、複数のユーザー権限のアプリケーションを同居させたりできそうだし、パフォーマンス的やポータビリティも良さそうに思えるんだけど。

Published At2006-03-18 00:00Updated At2006-03-18 00:00

日記
マレーシアGP予選Edit

決勝グリッドの発表があったら書こうと思っていたんだけど、いつまで経っても発表されないんで、自分で暫定グリッドを書いてみよう。予選結果が、

  1. フィジケラ(ルノー)
  2. バトン(ホンダ)
  3. ロズベルグ(ウィリアムズ)
  4. ミハエル・シューマッハー(フェラーリ)
  5. ウェバー(ウィリアムズ)
  6. モントーヤ(マクラーレン)
  7. ライコネン(マクラーレン)
  8. アロンソ(ルノー)
  9. クリエン(レッドブル)
  10. ラルフ・シューマッハー(トヨタ)
  11. クルサード(レッドブル)
  12. バリチェロ(ホンダ)
  13. トゥルーリ(トヨタ)
  14. ビルヌーブ(BMW)
  15. ハイドフェルド(BMW)
  16. スピード(トロロッソ)
  17. マッサ(フェラーリ)
  18. リウッツィ(トロロッソ)
  19. アルバース(ミッドランド)
  20. モンテイロ(ミッドランド)
  21. 佐藤琢磨(アグリ)
  22. 井出有治(アグリ)

で、ミハエル、バリチェロ、クルサード、ラルフが10位降格、マッサが20位降格だから、

  1. フィジケラ(ルノー)
  2. バトン(ホンダ)
  3. ロズベルグ(ウィリアムズ)
  4. ウェバー(ウィリアムズ)
  5. モントーヤ(マクラーレン)
  6. ライコネン(マクラーレン)
  7. アロンソ(ルノー)
  8. クリエン(レッドブル)
  9. トゥルーリ(トヨタ)
  10. ビルヌーブ(BMW)
  11. ミハエル・シューマッハー(フェラーリ)
  12. ハイドフェルド(BMW)
  13. スピード(トロロッソ)
  14. リウッツィ(トロロッソ)
  15. アルバース(ミッドランド)
  16. モンテイロ(ミッドランド)
  17. ラルフ・シューマッハー(トヨタ)
  18. 佐藤琢磨(アグリ)
  19. クルサード(レッドブル)
  20. 井出有治(アグリ)
  21. バリチェロ(ホンダ)
  22. マッサ(フェラーリ)

が決勝グリッドになるはずだよね。

で、今回謎だったのはアロンソ。予選最後のアタックで存在感がないままに8位に沈んだけど、理由は何? 作戦ミスなのか、戦略通りなのか、トラブルなのか、ミスったのか、さっぱりわからなかった。フィジケラがポールだし、それまでのアロンソのタイムも悪くなかったから、車が悪いってことはあり得ないはずだけど、戦略だとしても8位は悪すぎだよな。フィジケラはエンジン交換しているから、その分の差が出たって可能性もなくはないんだけど。

あと、相変わらずバリチェロはぱっとしないけど、今回は実力通りなんだろうか? こんなんじゃ本当に琢磨の方が良かったと(主に日本のファンは)思ってしまうぞ。っつーか実績からいって、バトンを食うくらいの勢いがあるかと期待していたんだけど、実はバトンってものすごくいいドライバーなんだろうか? いやもちろん悪いドライバーとは思っていないけど、強いて言えばピークの頃のクルサード程度?みたいな印象だったんだけど。

そういや前回決勝で速かったウィリアムズが、今回は予選も速かったね。ウィリアムズはシーズン後半つらくなる(伸びしろが他のチームより少ない)という予想がくっついているから、ここで活躍して来シーズンの大口スポンサー(というかエンジンメーカー)をゲットしないとね。っつーか、今年ぱっとしなかったトヨタが、ひとまずエンジンだけでも勝っておきたいということで、ウィリアムズと組むというシナリオがありそうな予感。

あとはまあふつうですか。ただ今回は(特にエンジン周りの)トラブルが予想されることだし、上位が軒並みトラブルでつぶれるという展開がありそうだよね。フェラーリが予選グリッドを下げてまで2台ともエンジン交換してきたのが、結構怪しい。そういう展開を予想しているんじゃなかろうか。

っつーかバトン+ホンダって、最後の最後でトップを走っていてエンジンブローとかやりそうで怖いなー。今回ホンダは前回よりも早めに前に出る戦略をとってきたっぽいから、序盤から飛ばしていくつもりなんだろうし、終盤にエンジンがきつくなるってのはすげーありそうなんだよなー。まあそういうときにバリチェロがちゃんと後ろからあがってこれるようだと、今シーズン期待できるんだけどね。

追記

アロンソは給油機のトラブルで、予定よりも多く給油しちゃってたんだそうな。そういやそんな映像もあったっけ。ってことは決勝で予定外のロングラン作戦を実施する羽目になっちゃったんだね。

決勝グリッドは俺は予選順位の上位から順に、降格していくという予選順位に降格分を単純に足していく方法を採用したけど、誰から降格するかが明確でないらしい。なんか予想されるグリッドのパターンはいろいろあるみたい

バリチェロは、エンジン交換のせいでセットアップが間に合わなかったという見解が発表されているけど、それだけでバトンとあんなに差が出るの?と思わないでもない。

Published At2006-03-18 00:00Updated At2006-03-18 00:00