IE8+prototype.js+scriptaculous.js+jquery.js=エラー

prototype.jsscriptaculous.js→jquery.jsという順番で読み込む場合、IE8(8以外のIEでは試してない)でエラーが発生する問題。

エラーが発生する箇所は、prototype.jsのgetElementsByClassNameの中。$(element)を実行する箇所で、$がjQueryになってしまっている事が問題。

jquery.jsの中で、window.$にjQueryをセットした後にdiv.getElementsByClassNameを実行する箇所が有る。グローバルの$がjQueryに置き換わっているため、prototype.jsで定義されたgetElementsByClassNameの中でjQueryが使われてしまう。jQuery.noConflictで_$から戻そうにも、jquery.jsのロード中なので外からは手が出せない(自分が知らないだけで方法があるだろうか)。

困った。

EventSourceとクロスドメイン通信

Access-Control-Allow-OriginヘッダをつけたChunked Transfer CondingなクロスドメインコンテンツをEventSourceで扱えるのかと思ったら、普通にブラウザ(Chrome, Safari)のセキュリティ機構にブロックされました。

以下のラッパーを使うことでクロスドメイン制約を回避できますが、EventSourceとAccess-Control-Allow-Originの関係を理解しないまま使って良いものやら。

さて、そろそろWebSocketも触っておいたほうがよいのかな。

HerokuのOne-Off processについて

Heroku Scheduler Add-onの記事を読んで、One-Off taskやらOne-Off admin processやらを正しく把握できていないことに気がついた。今更ながら。

Heroku Scheduler Add-onは、コマンドを毎日決まった時間に実行したり、一定の間隔で実行したりさせられる、Cron Add-onの代替となり得るもの(日/時/10分間隔で選べる)。無料でインストールすることが出来る。

で、ふと、「そういえば、コンソールやCronで使うDynoの使用料金ってどうなってるんだったろうか?」ということが気になり、正しく把握していないことに気がついた次第。

One-off processは、One-off taskを実行するために作られるプロセスで、heroku runなどを実行する際に利用されるDyno。で、料金的には、Dynoとの接続時間で課金されるものと考えればよさそう。上記リンクの後者には、「10:00にheroku run consoleを実行して、10:06にそのセッションを閉じたなら、0.1 dyno-hourと数える」という様なことが書かれている。

特にどうという話ではないけれど、正しく把握してなかったなと思った次第。

URLらしき文字列をリンクに置換するJavaScript

正規表現RubyURI.regexp(%w(http https))から得たものを利用。こんな感じで良いのだろうか?適度に短い正規表現を使うべきだろうか。

XSSに対して脆弱で無いか、試せてなし。

追記

置換対象がHTMLだと、既にリンクであるaタグのhrefの中身を置換しちゃう。置換対象をテキストノードにすると、HTMLが消えちゃう。

追記:2011/11/03

テキストノードだけを置換対象とするようにしたものも書いてみた。


追記: 2011/11/03

正確でないかもしれないけど、ブラウザのJSコンソールで見た感じ。

DOMのAPIを使えば安全に読み書きできるということだろうか。ちゃんと把握せねばならんね。

Rubyを使ってテキスト中のURL文字列を抽出して加工する方法は?

Railsを使っていてリンクにするだけならauto_linkヘルパを使うのが妥当な選択肢なんでしょうか?

auto_linkはRails 3.1から廃止されてgemに追い出されたとのこと。その理由が安全じゃないという事らしい。

自前で書くにはどうするのが楽なのか、既に最適解があるだろうと思ってググって見たんですが、どれが最適かよく分からず。
おおむね、正規表現で置換するタイプだと思います。正規表現が手書きだったり、URI.extractで処理していたりという違いはあれど。

で、実際にいくつかの文字列でで試してみると、URI.extractで上手くやる方法がよく分からなくなった(部分一致しちゃう事がある)ので、URI.regexpとgsubでごまかしてみました。
URLらしき文字列をリンクに出来ている様に見えますが、XSSに対してどうかという評価はやりきれていません。

ちなみに、Ruby(サーバサイド)でなく、JS(クライアントサイド)で置換する方法もある様ですね(やることはほとんど同じようですけどね)。