FirefoxExtention Archive

AUG
31

NicoComeAccelerator.user.js

Published:2008-08-31 03:04:59 UTC

VOCALOIDでニコニコ動画流星群【完成版】‐ニコニコ動画(夏)の勢いの速さを目の当たりにして、昔作ったグリモンスクリプトをもう一度作りなおしてみた。

内容はコメントのリロード間隔を3秒に縮めるというもの。どんどん流れてゆくコメ、ガンガン上がる再生数・マイリス数を眺めるのは結構面白いものがある。

// ==UserScript==
// @name           NicoComeAccelerator
// @namespace      http://www.sharplab.net/
// @include        http://www.nicovideo.jp/watch/*
// @require        http://svn.coderepos.org/share/lang/javascript/userscripts/GM_Libs/noriaki/NicoNicoPlayerWrapper/NNPW-20080824.1.js
// ==/UserScript==
var player = new NicoNicoPlayer();
player.onReady(function(video_info) {
	this.val("HTTP_INTERVAL","3000");
	this.val("HTTP_INTERVAL_SHORT","3000");
	this.val("HTTP_INTERVAL_ECONOMY","3000");
	this.val("HTTP_INTERVAL_SHORT_ECONOMY","3000");
});

やっぱりこれもSharpLab.:ニコ動の動画プレーヤー操作用ライブラリを使ってみた。のエントリのときと同じく、時折「Security Manager vetoed action」というエラーに悩まされるわけだけど、何が再現条件なんだろう…。

面白いGreasemonkeyスクリプト用ライブラリを見つけたので紹介。

Greasemonkeyスクリプトからニコニコ動画のFlashプレーヤーを操作するライブラリ(バージョンアップ) – We Ain’t Seen Nothin’ Yet.

Flash内部のActionScriptの変数は、SetVariable、GetVariableメソッドを使用することで、そのFlashを含むWebページのJavaScriptから読み書きできるのだけれど、その機能を使ってニコニコ動画のFlashで出来た動画プレーヤーを操作しようというもの。

ニコ動のプレーヤーを外部から操作するというのはニコニコ動画をHackするときに使えそうな変数まとめというエントリの頃から注目していたのだけれど、このようにライブラリの形に纏めた形で提供してもらえるというのは非常に有り難いことだ。

さて、早速このライブラリを使用して、今年のエイプリルフールに運営が悪ふざけでやった「コメント逆流事件」を再現してみる。このスクリプトをインストールすると、ニコ動のコメントが逆流するようになる。

// ==UserScript==
// @name           ReturnToAprilFoolsDay
// @namespace      http://www.sharplab.net/
// @include        http://www.nicovideo.jp/watch/*
// @require        http://svn.coderepos.org/share/lang/javascript/userscripts/GM_Libs/noriaki/NicoNicoPlayerWrapper/NNPW-20080824.1.js  
// ==/UserScript==
var player = new NicoNicoPlayer();
player.onReady(function(video_info) {
	this.val("isReverse","true");
});

ニコ動の動画プレーヤーはisReverseという変数を内部に持っているのだが、それにtrueをセットすることで流れるコメの向きを反対に出来ることを利用したスクリプト。エイプリルフールを過ぎたらこの変数もなくなるのかな、と思っていたのだけれども、「@逆」とかいうニコスクリプトのために残されたようだ。

ところでこれらニコ動の動画プレーヤーを操作するGreasemonkeyスクリプトだが、時折「Security Manager vetoed action」というエラーで実行に失敗することがある。どうもSetVariableメソッドによる内部の変数の操作がFirefoxのセキュリティ・ポリシーに反していて拒否される、ということのようなのだが、実行できる場合もあり、再現条件がはっきりしない。Firefox2の頃は全く問題がなかったので、Firefox3での変更だと思うのだが…。謎。

追記:cerego公式のブックマークレットがリリースされています。こっちの方が便利かも。

image

タイトルはホッテントリメーカーで生成したw 無駄に愛愛うるさい気もするが、まぁ気にしない。春じゃないのも気にしちゃいけない。

それはともかく。
iKnowは英語学習用SNSサービスで、英語を学ぶためのe-learningコンテンツと、SNSが融合したサービス。Ruby on RailsとFlashで作成された素晴らしい学習アプリが特徴で、TOEIC向け、TOEFL向けなど様々なコースを、目標日から自動で逆算されたペース配分に従って学習を進めることができる。

さて、そんなiKnowには、「iKnowアイテムバンク」という名前で、登録されている10万語超の英単語を調べることができる辞書機能が存在する。そして、その単語を集めて自分の英単語帳を作ることができる「マイリスト」という機能も存在している。作成したマイリストは、運営元のceregoによって提供されているコースと同じように、iKnowの学習アプリを使ってペース配分しながら勉強することが出来、iKnowを非常に効率的な英語学習プラットフォームとして活用することが出来る。

で、今回はそのマイリスト機能を活用するための基盤となる、iKnowアイテムバンクを検索するための検索プラグインを作成してみた。なお、iKnowアイテムバンクはAjaxを活用しているので、SearchQueryGeneratorは使えないので注意。

OpenSearchプラグイン

Firefox向けOpenSearchプラグイン。以下のリンクからインストールできます。
iKnow ItemBank Searchをインストール(Firefox)

image これを使えば、

  1. 英語ページをブラウズ
  2. 分からない単語に出会う
  3. その単語を検索バーにD&D
  4. 検索結果のページからマイリストに登録
  5. 分からなかった単語リストが出来て、しかもiKnowで復習できるので(゜Д゜)ウマー

となれる。

検索エンジンの切り替えが面倒だ、という場合は、コンテキストメニューから検索できるようにするContext Searchという拡張を入れれば幸せになれるかも知れない。

なおこのOpenSearchプラグインはIEでは使用不能。iKnowが対応していないのか検索結果ページを上手く表示できない。残念…。よってIEコンポーネントブラウザであるSleipnir、Lunascape等も同様。

本気でやるならクロスプラットフォームは避けてMozillaアプリを作るべき-hogehoge

うーん、そうかな。自分もクロスブラウザスクリプティングの労に嫌気が差して、Firefoxの拡張制作に逃げ込んだ経験がある。でも逃げ込んだ先のMDCのドキュメント漁ってたら仕様変更・方針転換の痕跡がゴロゴロあって、サンプルコードとか読んでも、バージョン毎に処理分けしてたりと、クロスブラウザスクリプティングと大差ない面倒を抱え込まなきゃいけないことに気づいて萎えてしまった。

何で後方互換性という基本的なことさえ担保されないのか。

色々事情は有るのかもしれないけど、ブラウザがバージョンアップするたびに動作しなくなった拡張が死屍累々・・・、という状況を許容しているMozillaとは、とてもじゃないが付き合いきれないと自分は思った。やたらと乱発される仕様変更によって、非生産的な対応作業を、ユーザーと、拡張作者に強いるMozillaのやり方は賢いとは思えない

対照的なエピソードがMSにはある。Windowsリリース時の話だ。

スポルスキー氏は2004年にマイクロソフトの基本的な戦略について興味深いことを書いている。DOSからWindowsへ移行する時期に、バギーなアプリケーションをWindows上で走らせるためにアドホックな機能追加を行っていたと証言しているのだ(参考リンク

その具体例に驚かされる。往年のヒットゲーム「SimCity」はメモリの扱いで致命的なバグがあった。開放したメモリを、開放した直後に再び使ってしまうというバグだ。これは1度に1つのアプリケーションしか動かないシングルタスクのDOSでは問題がないが、マルチタスク環境のWindowsでは重大な問題を引き起こす。開放したメモリは、すぐに別のアプリケーションによって利用されるからだ。このためSimCityはWindows上でクラッシュを繰り返したという。SimCityのバグの原因をディスアセンブルして突き止めたマイクロソフトは、SimCityの稼働を検知したらメモリアロケータを特殊なモードで走らせるという機能追加を行った。

これは特殊な話ではなく、Windowsを新バージョンにアップデートしたときに、あらゆるアプリーションが稼働するよう同社のテストチームは非常に多くの“回避策”をWindows上に仕込んでいったという。たとえアプリーション側に問題があったとしても、それはWindowsユーザーには関係ない。ユーザーは、Windowsをアップデートしたら自分のアプリケーションが動かなくなったと考える。問題のあるアプリケーション開発者全員に修正させることができない以上、Windows側で回避策を打つ、というアプローチだ。

Webブラウザ戦争でAcidレースの局地戦が白熱 - @IT

どうだろう?今でもこのカルチャーがMSに受け継がれているかは知らない。IE8では原則に反してドラスティックな変更が入るかもしれないことがこの記事でも言われている。だから、IEを勧めたいのではない。だが、自分の知る限り、.netの世界ではライブラリの後方互換性が大きく破壊されることはこれまで起きていない。設計が良いのだろう。というわけで、Silverlightはどうだろう?Silverlightなら、プレーヤーのバージョンアップが入っても、まず間違いなく後方互換性は担保される。レンタリングするのはMS製のエンジンでしか有り得ないのでクロスエンジン互換性を気にすることもない。Silverlightなら、色々な人を悩ませてきた、色々な問題を解決してくれる…筈。

何アホ言ってたんだ自分・・・。猛省。