Entries
Google Gears を使って Game of Life を作る: その2 - Workerpool について
- Date
- 2007-07-08 (Sun)
- Category
- Google | javascript
暫く間があきました。6月の後半から先週まで、プロジェクト3つが並列に走っていたので、ちょっと時間が取れませんでした。忘れてしまう前に Google Gears の Workerpool について少しまとめておきたいと思います。
- 以前のエントリにも書きましたが、PC のメモリが無限でないように、Workerpool も無限に作る事は出来ません。
- エラーがあるときは、基本的に無言で Firefox ごと落ちます。それが精神的にも良くないし、問題の特定を難しくしていますが、理不尽な仕様やバグなど、僕はまだ聞いていません。つまり無言で落ちるような状況では、おそらく自身のコードを疑うべきでしょう。
- Worker が他の object とメッセージ交換する方法は、worker の id を指定してメッセージを送るだけ、それのみです。String や Number 以外のものをやり取りしようと思ったら、Object を JSON にシリアライズして、それを eval するしかないようです。ここでメモリが共有できたりすればスピードアップでも出来そうだけれども。
- Worker を作る時に、その Worker がすべき作業書のようなものをスクリプトとして渡さなければいけません。mycom の "重たいJavaScript処理"もこれで解決! - Google Gearsのワーカプールを試す や本家 Google の Google Gears WorkerPool Demo では オブジェクトをStringのコンストラクタとして渡して、JSON シリアライズをやっていますが、まず僕にとってその方法が直感的でないし、将来 Safari なんかで動くようになった時にそれでは動かないでしょう。それにメインで使わない関数で object の名前空間を汚染するのもやだし。
そこで別の方法を考えました。Here Document が使えれば一番いいんだけれどもブラウザ上の Javascript 実装にはそんな機能は存在しません。結局 HTML の pre タグ内にコードを書き込んでおいて、それを取得する、という形にしました。その時ただ読み込むだけだと、Browser が勝手に挿入する WBR 要素と、大なり/小なり記号が実体参照に変換されてしまうのでそれだけ変換するようにしました。コードは以下。
Union.prototype.initScript = function (elm_id) { // workscript holder should be <pre> tag or // you have to set white-space: pre on CSS property. var elm_pre = $(elm_id); var script = ""; var len = elm_pre.childNodes.length; for (var i = 0; i < len; ++i) { switch (elm_pre.childNodes[i].nodeName) { case '#text': script += elm_pre.childNodes[i].nodeValue; case 'WBR': default: // do nothing; } } return script.replace(new RegExp(/\<\;/), '<').replace(new RegExp(/\>\;/), '>'); } - Main Thread から Worker にメッセージを送る場合、Workerpool オブジェクトのインスタンスを使っての sendMessage メソッドを使ってメッセージを送ります。
- 逆に各 Worker から、メッセージを送り返す場合は google.gears.workerPool.sendMessage という static メソッドを使います。しかしこの static method は Firefox の DOM Inspector には出てきません。あと、Google の例では gearsWorkerPool.sendMessage という別のメソッドを使っています。興味深いですね…
そんな所でしょうか。あとまた気がついたら追記します。
URL designing with &id=...
URLのパラメータに「id」を使用すると google にインデックスされない
へぇ〜。じゃぁこれは??
“?id=” でページ内検索してみよう!
正直、僕も知らなかったし、ヘェ〜と思った。でも Webmaster Help Center - Webmaster Guidelines を読んで、マジで?と思ったね。ID でページ内検索していくつか抜粋。Technical guidelines と中見出しのついているリストの以下3つ。
- Use a text browser such as Lynx to examine your site, because most search engine spiders see your site much as Lynx would. If fancy features such as JavaScript, cookies, session IDs, frames, DHTML, or Flash keep you from seeing all of your site in a text browser, then search engine spiders may have trouble crawling your site.
- Allow search bots to crawl your sites without session IDs or arguments that track their path through the site. These techniques are useful for tracking individual user behavior, but the access pattern of bots is entirely different. Using these techniques may result in incomplete indexing of your site, as bots may not be able to eliminate URLs that look different but actually point to the same page.
- Don't use "&id=" as a parameter in your URLs, as we don't include these pages in our index.
前の二つは session ID と入ってるけど、page ID の話なんてしてねぇよ、って?もちろん session ID と page ID が違うのくらい知ってるけれど、まぁここで Search Engine 的に問題としているのは、dynamic に生成されるページなので、やや強引ですが一絡に話をします。まずは訳してみましょう。
- Lynx のようなテキストブラウザを使って自身のサイトを確かめてください。多くのサーチエンジンは Lynx で見えるような世界を見ています。Javascript, Cookie, Session ID, Frame, DHTML あるいは Flash のような派手な機能を使っているのなら、テキストブラウザでも見られるようにしてください。そうすればサーチエンジンも難なくあなたのサイトを収集できるでしょう。
- ユーザのページ閲覧順序を確認するための Session ID や引数を使わなくても、サーチエンジンがページを収集できるようにしてください。それらの技術は個別ユーザの閲覧行動を確認するためには非常に有用ですが、サーチエンジンのアクセスパターンは全く違います。Session ID や引数を使うことで、サーチエンジンが URL を見て、実際には同じなのに違うように見えるページを確認しきれずに、あなたのサイトの索引生成作業が完了しないままになる可能性もあります。
- “&id=” を URL に含めないでください。我々はそういったページを索引生成作業に含めません。
っていうか、Google ってそんなに馬鹿なんですか(反語)??ずいぶんと上からのもの言いだし。。
Google こそ究極の Bottom up の集団だと思っている僕としては、あのページはアジテーション以上ではないなと思う。件のページに書いてあるのはあくまで、サイト作成・管理の指針となるようなものであって、本当にそうしている、という仕様書ではないはず(僕だって Google の中の人ではないので、ホントはどうだか知らないけれど)。だって、整理の下手なダメ人間ばかりのこの世界で、そんな少数の整理|仕様|規格好きだけを相手にして、トップの座を守り続けられるわけない。
だから My RSS 管理人 aka さんのコンセプトというか結論というか主張には 100% 賛成するし、del.icio.us の Joshua が主張するような理由からも、&id= なんて ugly な URL は使うべきじゃない(ちょっと前に似たような記事書いたとこだし)と思う。けれども Subject にあるような 『URLのパラメータに「id」を使用すると google にインデックスされない』というのは、看板に偽りありと云うほかない。
GMail の検索演算子では ! (否定)が使える
なんだか最近 GMail の演算子を語るのがはやってるらしい(オレンジニュース とか はてブとか)。以下は最良のまとめ。というか Google 本家の日本語訳酷い。
Gmailの検索やフィルタで使用できるコマンド(演算子)一覧表
そこでも載ってないのが ! (否定演算子)。手前味噌ですが1年前のエントリで解説ちう。
去年の今頃の GMail の変化を A to Z に追っかけてた感覚からいうと、こういう細かい仕様は結構ちょこちょこ変わるのだが。というわけで ! が使えるのをもう一度調べてみました。効果が確認できたのは…
- has:attachment
- is:unread
- is:starred
- in:inbox
- is:sent
- in:drafts
- in:spam
- in:trash
あまり用途が思いつかないけど、label: も使えるっぽい。というか、僕はラベラーではないので確認できない。。