2004-12-12 ========== ua.indexOf("MSIE") != -1 ? -------------------------- Reference URI: http://lowreal.net/logs/2004/12/12/1 Written Time: 2004-12-12T00:40:50+09:00 Tags: prog web UA (User Agent) 文字列を Javascript から得るにあたり検索をかけてみたのだけど、UA (User Agent) 文字列にある文字列 (eg. “MSIE”) があるか調べるときに String.prototype.indexOf の結果が -1 であるかを調べているの が多かった。これはやっぱ String.prototype.match だと遅いとかそういう問題があるから なのだろうか……なんかダサいので今回自分は String.prototype.match を使ったけど、ど うなんだろ。 if (navigator.userAgent.indexOf("MSIE") != -1) // do something for MSIEif (navigator.userAgent.match(/MSIE/)) // do something for MSIEさらに && とか使おうとすると演算子の優先順位 (よく忘れる) とか考えることになって面倒臭い… … code をクライアント側で着色 --------------------------- Reference URI: http://lowreal.net/logs/2004/12/12/2 Written Time: 2004-12-12T03:00:30+09:00 Tags: prog web pre に現れるコードを Javascript で着色 (Javascript でやってるのはマークアップ) し てみる。重い? 少し前からこれがやってみたかったので class 属性に使用してる言語を書いていたりした 。言語ごとにトークンを使いわけたようと思ってたわけだけど、実際そこまでやるのってど うなのよ、とか思い始めた。そのうちやってみて、いけそうだったら採用してみよう。 現状でもかなり重い気が……長くとれるトークンを増やせば (ループ量が減って) 軽くなる かもしれないけど微妙。実際一文字ずつループまわしてるからなぁ。やりすぎか。 Ruby と ECMAScript は別のトークンテーブル使うようにしてみた。別にパースしてるわけ じゃない (スキャンだけ) なので微妙にアレな状況が既にいくつか思いつくわけですが…… 例えば式展開の引数で括ってるクオーテーションつかっちゃうとかが絶対おかしくなる。 それとループ回数を減らすために /[a-z][a-z0-9]*/i は identifer ってことにしてスキップしてる。 Lisp と XML (Extensible Markup Language) もすっごい適当に加えた。 [サンプル](/2004/color-code) 重いので移した。 正規表現はブラウザ毎の違いが殆どない気もする。気付いてないだけかもしれないけど。 FF (Mozilla Firefox | Final Fantasy) で右クリックから View Selection Source すると内部 DOM (Document Object Model) の内容もソースとして出てくるのが役に立った…… そもそもスキャナの実装が激しく間違ってたので修正。根本的な部分を変えたのでバグがあ るかもしれない。 Audioscrobbler で他人のやつ混ざる --------------------------------- Reference URI: http://lowreal.net/logs/2004/12/12/3 Written Time: 2004-12-12T20:01:44+09:00 Tags: web Audioscrobbler で最近 Recent Tracks に聞いてない曲が混ざることがある。バンプ (BUMP OF CHICKEN) が車輪の唄のシングルカットしてたなんてそもそも知らないのに、それのカップリングの やつが Recent Tracks に混ざっていたりする。 無作為に混ざっているわけじゃないらしく?同じアーティスト聞いてると混ざるみたい?