2009年 05月 16日

宗教上の理由で、リア充的な人がカッコいいと思うようなことをできないので……

memo

自分が JavaScript を書くときの規約みたいなのは既にだいたい決まっていて、結局のところ

  • クラス作成ライブラリなどを使わない
    • → そのライブラリを使わなくなったときにいちいち移植する必要があるから
    • → 普通に function Constructor () {} と prototype への代入を使う
    • → 継承みたいなことは基本しない。プロパティにオブジェクトをもって delegate する。
  • DOM, Event 関係はライブラリを使う
    • → クロスブラウザはここらへんに集約されているので……
  • 小さな snippet を組み合せる
    • → 必要なものを必要な分だけ
    • → クライアントサイドなので、変なものをいれない
2009年 05月 14日

ショウガをどうしても食べたい気分だったので冷蔵庫に残っていた紅ショウガを食べた。

色ついてないショウガ漬けを普通に常備したい……

2009年 05月 13日

雨がふっているけど、ちょうどふきこんでこないので窓をあけてる。風にいい匂いがする。雨の匂い (実際は何の匂い?) というのは落ち着く。

Leopard 10.5.7 で Nokia N73 との Bluetooth 相性問題が解決された。

10.5.7 のリリースノートには特に Bluetooth のことについて書いてなかったので、ダメ元で試したみたんだけど、繋るようになった。Apple++ Leopard の悪口ばっかりいっててすいません

JavaScript の正規表現のメタ文字をエスケープ

String.prototype.replace は正規表現じゃないと ignore case しつつ global マッチとかできないけど、JavaScript には RegExp.escape 的なものがないのでメタ文字が問題になる。

var escaped = 'f[oo'.replace(/[\s\S]/g, function (_) {
    return '\\u' + (0x10000 + _.charCodeAt(0)).toString(16).slice(1)
});

'F[oobarf[oof[oo'.replace(new RegExp(escaped, 'gi'), 'xxx');

たぶんこれでいける?っぽい。正確にはメタ文字のエスケープではなくて、全部エスケープしてメタ文字を無効化しているだけですね。

ignore case しなくてよくて、search が空文字列に絶対ならないなら

'f[oobarf[oo'.split('f[oo').join('xxx');

とかもいいのかな。どんなケースでもうまくいくかまでけんしょうしていないです。(頭まわってない)

前提が抜けてて大変申し分けないのですが、

  • JS は日常的に使用される処理系がいくつもある
  • 仕様が決まっているとはいえ特定文字だけエスケープすると漏れがでる可能性がある
    • 少なくとも全ブラウザであらゆるケースをテストする必要がでてくる
  • そもそも全部列挙するのがめんどくさい

ので、最も安全で楽な形を考えた、という感じです。

2009年 05月 12日

少しずつ戻りつつはあるかな。

コードの確かさはそれこそ人の意見100%でもいいけれども (コードというのがコミュニケーションのためにあるのだと考えればそういうものだ)、せめて生きかた (全くの個人的なもの) ぐらいは、能動的に何らかの形を、自分で見つけるべきだろうと思う。

「見つける」というと、言いすぎな感じもする。何を組み合せるかを選ぶ程度だろう。

「Century Gothic」がなぜか全く覚えられなくて困る……