Greasemonkey と XPath [NT]
ここ最近、Greasemonkey を使うために色々と JavaScript を書いている。その中で、XPath が大変便利であることを理解した。まず、XPath の構文は XPath使いのための日本語チートシート を読めばとりあえず何とかなる。
JavaScript から XPath を利用するためのサンプルコードは 前述のチートシートに記載があるが、それを PNG にしたものがXPath_cheatsheets3_v2.PNG にある。
XPath には and 演算子、contains 関数があるから、次のよう記述できる。
これは、「script タグで、type 属性が text/javascript で、src 属性に「id=100」という文字列が含まれているもの」を表す。XPath を使わないとループの中で判定しなくてはいけない部分を 1行で簡潔に記述できる。とても便利だ。尚、ORDERED_NODE_SNAPSHOT_TYPE というのは、条件に該当すタグを HTML に記述された順に返すというもの。
JavaScript での XPath の使用方法に関しては Introduction to using XPath in JavaScript - MDC も参考になる。ORDERED_NODE_SNAPSHOT_TYPE 以外の値も解説されている。
Dublin Core とは [NT]
Dublin Core とはメタデータで使う語彙(単語)の総称。Dublin Core Metadata Initiative (DCMI) が管理している。
例えば、Author ではなく、Creator を使おうみたいな話。
iKnow! で api を使っていたら、レスポンスで返される XML に dublincore.org の文字があったので何かなぁと思って調べて見た。Semantic Web 関連の話って疎いな。
参考文献
OpenX 広告配信システム [NT]
OpenX: Take control of your advertising | OpenX というソフトウェアがある。
最近、iKnow の広告が openx.org ドメインから配信されていることで知ったシステム。サイトに広告を表示する枠を設定しておき、その枠に対して、例えば、昼間は google から、夜は楽天の広告といったように、自由に配信する広告を調整できるシステムである。
http://openx.jp/ では「無料のバナー管理システム」として紹介している。一部を引用する。
OpenXはGPLライセンスで配布され、誰でも簡単に入手できる高機能なオープンソース広告配信システム(アドサーバ)です。
バナー、ボタン、ポップアップ、テキスト、動画広告などさまざまの種類、自由自在に広告を配信やトラッキングすることができ、また、キーワード、ドメイン指定、時刻別、多国言語対応、ブラウザ識別などの高機能を搭載しています。
ちなみに OpenX は、PHPAdsNew -> OpenAds -> OpenX と名称が遷移している。
最近、ホスティングサービスを始めており、iKnow はそのサービスを利用して広告を配信している。ホスティングサービスについては、
OpenX Hosted now includes up to 100 million monthly ad impressions for free.
Sign Up for OpenX Hosted! | OpenX
と説明されており、月に 100万回の広告配信(実際にユーザのブラウザで広告が表示される(または、そのリクエストが行われる))までは無料で利用できるようだ。1 つのページに複数の広告を配置することがあるから、ページビューで換算すると数十万ページビューに相当する。ポータルサイトでも運用しない限り十分な能力ではないだろうか。
参考文献
- 広告管理システム OpenX - オープンエックス phpadsnewsからOpenads、そしてOpenXへ 無料のバナー管理システム
- OpenX を導入した | smashmedia
- OpenX マスターガイド
- OpenX急成長、収入源の整備も着々 TechCrunch による OpenX の紹介記事。TechCrunch 自身も利用している。導入実績などの数値も紹介されており有益。
Greasemonkey のユーザスクリプトは Venkman the JavaScript debugger でデバッグできない [NT]
Greasemonkey のユーザスクリプトは Venkman JavaScript Debugger でデバッグできない。JavaScriptメモ、Nabble - Re: Greasemonkey and venkman によると
GM scripts are executed in greasemonkey.js, more exactly, in the
evalInSandbox method, which in turns calls the native function
Components.utils.evalInSandbox [1]:
(greasemonkey.js, 223) Components.utils.evalInSandbox(code, sandbox);
Being written in C++, this cannot be debugged with Venkman.
Greasemonkeyのスクリプトは、greasemonkey.jsのComponents.utils.evalInSandbox()メソッド で実行される。このevalInSandbox()メソッドはC++で実装されているため、Venkmanではデバッグできない。
ということだ。Venkman でデバッグしようとして 5 分くらいは悩んだ..。GM_log ではめんどくさくて...
JavaScript の連想配列のサイズを取得するには? [NT]
Q.JavaScript の連想配列のサイズを取得するには?
A.たぶん存在しない。ちょっと調べた限りでは見つからなかった。Javascriptの連想配列のサイズ では
という例が紹介されている。この例だと連想配列のサイズが大きいときや、複数回呼び出したときにパフォーマンスが悪いと思うのだが、他に方法が無さそうだ。
XMLHttpRequest の使用例 その2 [NT]
XMLHttpRequest の使用例 の続き。
XMLHttpRequest を複数使う、または繰り返し使う場合の例は次の通り。
ポイントは、
- XMLHttpRequest を関数内のローカル変数にした。
- 匿名関数を使って XMLHttpRequest.onreadystatechange イベントハンドラに XMLHttpRequest を引数として渡す。
この 2 点。XMLHttpRequest をローカル変数にすることで 2 回目に XMLHttpRequest を呼び出されたとき上書きされてしまうことを防止する。onreadystatechange には直接は引数を渡すことはできないので、匿名関数にしてそこからメソッドを呼び出す。
このようにすると、XMLHttpRequest を複数、または繰り返し使うことができる。
参考文献
- Getting Started - MDC
- onreadystatechange に引数を渡す - 英語とプログラミング気まぐれ日記
- XMLHttpRequest の onreadystatechange に引数を渡したかった
- XMLHttpRequest の onreadystatechange の this - IT戦記
XMLHttpRequest の使用例 [NT]
JavaScript から非同期に通信を行うには XMLHttpRequest オブジェクトを使う。その典型的な使用例は次の通り。
このような例は Web を検索すると多数見つかる。では、XMLHttpRequest を複数使う、または繰り返し使うにはどうしたら良いのだろうか。この場合の例はあまり見つからない。
何らかの JavaScript ライブラリを使う場合が多くて、直接 XMLHttpRequest を直接使う人は少ないためだろうか。
検索してみると XMLHttpRequest の onreadystatechange の this - IT戦記 が見つかった。この blog で amachang 氏は
Prototype.js とか MochiKit とかなので XMLHttpRequest を直接使ったことがない。
と述べられている。やはり、XMLHttpRequest を直接使う人は少ないのだろうか。
NetBeans でラベル機能を使用するには? [NetBeans]
ソースコード中にコメントとして // TODO と書いておくと、TODO が含む行を一覧表示できる。例えば、
と書いておくと次図のように表示できる(上図は69行目の例だが、95行目にも同様に書いてあるので、下図では2行表示されている)。
ここで表示するキーワードは変更することができ、次図の部分からタスクリストフィルタダイアログを表示して編集する。
既定の設定では TODO でも [TODO] でもどちらでも良い(「TODO」という文字が含まれていれば表示される)。 タスクリストフィルタダイアログで任意のキーワードを追加してフィルタ出来るので大変便利だ。
JavaScript の警告を抑制するには? [NetBeans]
NetBeans で JavaScript を書いていると
と表示されることがある。Greasemonkey ではエスケープシーケンスに変換しなくても UTF-8 で保存してあれば動作する。そこで、この警告を抑制したい。
これは、[メニュー]-[ツール]-[オプション]でダイアログを開き、次図に示した部分を変更することで抑制できる。
iKnow! を改良しよう その2 ~リストの取得~ [NT]
iKnow! を改良しよう の続き。
まずは HTML を解析してコースの URL を取得する。
HTML を見ると「お仕事の英語(単語編)」には course_name という id を持つ spanがあることがわかる。そこで、
var lists=document.getElementsByClassName("course_name");
とすれば、今、ブラウザに表示されているコースの一覧が取得できる。コースの各要素は list[0] ... list[list.length-1] となる。さらに、「お仕事の英語(単語編)」に付属しているリンクからコースIDを取得しておく。これは
lists[0].childNodes[1].attributes[0].textContent.split("/")[4]
とすれば取得できる。 だから、基本的には list[x] をループして処理することになる。
iKnow! を改良しよう その3 ~やりなおし~ へ続く。