Firefoxの新しいバージョンのアナウンスを受ける方法

諸事情によりFirefoxがバージョンアップしたらアドオンを対応しないといけないので新しいバージョンがリリースされたらそれを知りたい。

Forumに行ったら同じ悩みを持った人がいるはずだ。
http://www.mozilla.org/about/forums/

質問を探すまでもなく、どうやらアナウンス専用のML/Google Groupがあるようだ。

mozilla.announce
https://groups.google.com/forum/?fromgroups#!forum/mozilla.announce

あとはGoogle Groupの投稿ごとにメールを受け取る設定にすればアナウンスを受けられる。しかし、よく見たらFirefox7, 8, 9のアナウンスはされていないぞ・・・?

Gecko SDK 9でXPIDLのコンパイルがpythonスクリプトになった

Firefox(XULアプリ)アドオンでバイナリコンポーネント(ネイティブ実装)を含んでいる場合、アプリケーションがメジャーバージョンアップするとそれに対応したGecko SDKでビルドしなおさないと行けないという不毛な作業がある。

https://developer.mozilla.org/En/Developer_Guide/Interface_Compatibility

Beginning with Mozilla 2 (Firefox 4), this will no longer be supported: all @status markings have been removed, and extensions that use binary components will need to recompile for each major version they wish to support.

残念ながら高速リリースが始まってからこれは仕様として必須の作業なのである。

とはいえやることはGeckoSDKを差し替えてビルドしなおすだけで、今回も何も考えずにその通りやったらxpidlからタイプライブラリ(xpt)が作成できなかった。

調べたら今回から pyxpidl というXPCOMのidlをコンパイルするツールがpythonのスクリプトに変わっていた。

これまでこのツールはバイナリで提供されていたので当然このツール自体もクロスプラットフォーム対応になっていた。おそらくMozilla側もそのクロスプラットフォーム対応のためのコストを削減したかったのだと思う。そこでクロスプラットフォームで動かせるインタプリタ言語に白羽の矢が立ったと。

ただ、こっちとしては、いきなりそんな事言われてもどうしていいのかわからなかったのでWindowsでpyxpidlに置き換えたことについて書く。

xpidl から pyxpidl の置き換えでやったこと

まずどのバージョンのPythonを使うべきか書いてない。スクリプトを見てもよくわからない。とりあえず何も言わないってことは2.7で動くんだろうと判断してhttp://python.org/から2.7.2をインストールした。結果動いた。

次に置き換えであるが、どうやらパラメータ指定などは互換があるのであまりいじらなくて済んだ。Windows用のバッチだが変更前と変更後を並べると以下のようになる。

rem https://developer.mozilla.org/en/XPIDL/xpidl
%GECKO_SDK_PATH%\sdk\bin\xpidl.exe -o include\%BASENAME% -m header -I%GECKO_SDK_PATH%\idl %1
%GECKO_SDK_PATH%\sdk\bin\xpidl.exe -o %3\%BASENAME% -m typelib -I%GECKO_SDK_PATH%\idl %1

rem https://developer.mozilla.org/en/XPIDL/pyxpidl
mkdir cache
%PY% %GECKO_SDK_PATH%\sdk\bin\header.py --cachedir=cache -o include\%BASENAME%.h -I%GECKO_SDK_PATH%\idl %1
%PY% %GECKO_SDK_PATH%\sdk\bin\typelib.py --cachedir=cache -o %3\%BASENAME% -I%GECKO_SDK_PATH%\idl %1
Gecko9の際につくったバッチを使ってGecko10で実行したら以下の様なエラーになった。どうやらドキュメントを確認したら–cachedirオプションが追加されていてこれがないとエラーになる模様。

Traceback (most recent call last):
File “C:\xulrunner-sdk\sdk\bin\header.py”, line 497, in
p = xpidl.IDLParser(outputdir=options.cachedir)
File “C:\xulrunner-sdk\sdk\bin\xpidl.py”, line 1453, in __init__
optimize=1)
File “C:\xulrunner-sdk\sdk\bin\ply\lex.py”, line 1004, in lex
lexobj.writetab(lextab,outputdir)
File “C:\xulrunner-sdk\sdk\bin\ply\lex.py”, line 175, in writetab
filename = os.path.join(outputdir,basetabfilename)+”.py”
File “C:\Python27\lib\ntpath.py”, line 96, in join
assert len(path) > 0
TypeError: object of type ‘NoneType’ has no len()
Traceback (most recent call last):
File “C:\xulrunner-sdk\sdk\bin\typelib.py”, line 313, in
p = xpidl.IDLParser(outputdir=options.cachedir)
File “C:\xulrunner-sdk\sdk\bin\xpidl.py”, line 1453, in __init__
optimize=1)
File “C:\xulrunner-sdk\sdk\bin\ply\lex.py”, line 1004, in lex
lexobj.writetab(lextab,outputdir)
File “C:\xulrunner-sdk\sdk\bin\ply\lex.py”, line 175, in writetab
filename = os.path.join(outputdir,basetabfilename)+”.py”
File “C:\Python27\lib\ntpath.py”, line 96, in join
assert len(path) > 0
TypeError: object of type ‘NoneType’ has no len()

まずヘッダファイルとタイプライブラリの出力で別々のスクリプトが用意された。これによって -m xxxx の指定は不要になった。

次にヘッダファイルの出力では拡張子を自動補完はしてくれなかったので明示的に.hをつける必要があった。タイプライブラリは補完してくれた。

以上により、変更点は

  • xpidlの代わりにヘッダの場合はheader.py、タイプライブラリの場合はtypelib.pyを使う
  • -m指定は削除する
  • ヘッダの場合に出力ファイルに拡張子.hを明示的に追加する
  • –cachedirオプションでキャッシュディレクトリを指定する(Gecko SDK 10より)

といったところ。いい加減 Gecko SDKの取得から自動ビルドで事を済ませたいのだが・・・

Firefox Conference 2010に行ってきた

行ってきたというか聞きたいセッション(Firefox Mobile & JetPack)だけちょこっと聞いて颯爽と消える。

午後一から入ったけどTシャツもらえた。

メモはこちら

JetPackは面白そうで前から興味があっただけど最近めっきりFirefoxを使わなくなった。Web開発もChrome/SafariのConsoleで十分だしIE9のF12ツールがよければ開発用途でFirefoxを使う優位性ががますますなくなる。Firefox4が速ければ使うようになるかな?

FirefoxのID/PWの自動入力を抑止する

どうもFirefoxはtype="password"なinputタグを探してそいつをパスワード、一個前のinputタグをIDと判断してくれるようだ。

ログインの時はたしかに便利なシステムだけど、情報変更のときとかでこれをやられるとパスワードのところは入って、確認用の再入力のところが入らなかったりとか意図しない動作になることがある。

この小さな親切大きなお世話な処理を止めるにはtype="password"になっているinputタグにautocomplete="off"を追加すればよい。

<input type="password" id="password" name="password" autocomplete="off">

Movable TypeプラグインではなくFirefox Extensionという選択肢

困っている。ひじょーに困っている。

今までブログの記事でAmazonの本を紹介したりしていましたが、doEditプラグイン(http://tech.bayashi.jp/archives/entry/movabletype-plugin/2006/001347.html)というMovable Typeプラグインを利用させていただいていました。

しかし、Movable Type 4.0にバージョンをあげて以来プラグインは使えなくなってしまいました。3,3xまでブログの編集画面を拡張する場合、編集画面のテンプレートを正規表現で書き換えるという方法しかなかったので4.0で画面のデザインが変わったら使えなくなってしまうのです。

4.0では正規表現で置き換えなくても普通のプラグインを追加できるようになったと聞き、自分でもdoEditプラグインなようなものを作ってみようと思ったのですが、編集画面のtextareaの入力ボタンを増やす方法はいまいちわからず。もちろんMovable Type本体のコードに手を入れれば余裕でできそうですが、なるべくそういうことはしたくない。(バージョンアップするたびにマージしないといけないから)
で、そもそもAmazonの本の紹介をするときにどういう手順を踏んでいたか見直してみました。

1. Amazonにいく
2. 本のタイトルで検索する
3. 本の商品ページを開く
4. ページをスクロールしてASINをコピーする
5. Movable Type編集画面に戻る
6. doEditプラグインのAmazonリンクボタンを押してASINをペーストする
という感じです。

正直この手順は面倒なのではてなBookmarkボタンや、TAGIRIツールバーみたいに現在開いてるページをもとに何か処理をするようなfirefox extensionを作成すればいいんじゃね?と思って昨日からfirefoxのextensionの作り方を調べています。

単にhtmlをつくるだけにすればMovable Type以外でも使えるのでできたら公開しようかなと思ってまふ。