Firefox 拡張機能の作り方

Firefoxの拡張機能は作り始めるまでが結構大変だったので、そのやり方をメモしておきます。

まずFirefoxはプロファイル機能を持っていて、設定情報などをプロファイルごとに分けることができます。開発用のプロファイルをつくっておけばデフォルトのプロファイルを汚さなくてすみます。

プロファイルを作るには、-Pオプションをつかって起動します。

"C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote -P dev

-no-remoteは新しいインスタンスで起動するオプションです。-Pでプロファイル名を指定しています。プロファイルが存在しないと、「ユーザプロファイルの選択」ダイアログが出てくるので、ここで作成します。「今後このプロファイルを使用する」はオフにします。

プロファイルごとに違うテーマを設定しておくとわかりやすくていいと思います。

以下、devプロファイルでの作業です。

まずこのサイトにいって、拡張機能のスケルトンを作ります。

extenstionwiz.jpg

ダウンロードしたファイルを解凍して適当なフォルダに置きます。ここではC:\fxext\に置きました。

C:\fxext\myext\install.rdfを開き、<em:id>タグ内の文字列をコピーします。ここでは myext@mynameになっています。

Firefoxのdevプロファイルのプロファイルフォルダを探します。通常はC:\Documents and Settings\<ログオン名>\Application Data\Mozilla\Firefox\Profiles にあります。この下のdevで終わっている名前のフォルダがプロファイルフォルダです。

この下のextenstionsフォルダの下に、先ほどコピーした名前でファイルを作成します。ここではmyext@mynameです。次にテキストエディタで開き、拡張のあるフォルダを記述します。ここでは以下のようになります。

C:\fxext\myext\

Firefoxをdevプロファイルで開きなおします。

「ツール」->「アドオン」メニューをクリックし、自分のアドオンが登録されているか確認します。

addon.jpg

あとはここから作っていくわけですが、基本的にはXULでユーザーインタフェースをつくり、javascriptでハンドラを書く、という作り方になります。

参考リンク:
http://developer.mozilla.org/ja/docs/Extensions
http://www.xulplanet.com/

debianでWindowsの共有フォルダにオートマウント

必要なものをインストール、sambaサーバが必要なのかはよくわかりませんでしたが一応入れてあります。

# apt-get install autofs smbclient smbmount samba

マウントポイントのルートディレクトリを作成。

# mkdir sambaauto
# chmod 777 sambaauto/

auto.smbの編集

# vi /etc/auto.smb

opts="-fstype=cifs"

を以下のように変更

opts="-fstype=cifs,iocharset=utf8"

パーミションの変更。

# chmod 755 /etc/auto.smb

auto.masterを編集して、auto.smbを読み込ませる。

# vi /etc/auto.master

以下の行を追加

/sambaauto /etc/auto.smb

autofsを再起動

~# /etc/init.d/autofs restart

アクセス

$ cd /sambaauto/192.168.0.100

debianにvmware-config-toolsをインストールする

debianをゲストOSとしてインストールし、vmware-config-toolsをインストールしたときの記録。

debianは日本語設定でインストールした以外はすべてデフォルトでインストールしました。ゲストOSの種別は”Other Linux 2.6.x kernel”。カーネルのバージョンは2.6.18-6-486。インストールファイルは”VMwareTools-6.0.0-45731.tar.gz”。

まず、vmware-config-toolsのインストールに必要なファイルをインストールします。

# apt-get install gcc linux-headers-2.6.18-6-486

/usr/src/linux-headers-2.6.18-6-486のシンボリックリンクを作ってvmware-config-toolsがカーネルヘッダを見付けられるようにします。(これは不要かも)

# cd /usr/src
# ln -s linux-headers-2.6.18-6 linux

vmwaretoolsを解凍して実行します。基本的に全部デフォルトで、最後の解像度の設定だけすればOKです。

# tar xfz VMwareTools-6.0.0-45731.tar.gz
# cd vmware-tools-distrib/
# ./vmware-install.pl

消せないファイルの消し方

Windowsの話です。

ファイルが削除できない理由はいろいろあり、単純な解決策はありません。ここではさまざまな方法を使ってファイルの削除を試みます。簡単にできる方法から書いています。

1、コマンドプロンプトから削除してみる。

コマンドプロンプトを開きdelコマンド使って削除。 このときファイル名はフルパスで指定し、一番最初に\\?\をつける。

(例)
C:\>del \\?\C:\folder\file

2、ファイルの属性を変えてみる。

C:\>attrib -h -s -r \\?\C:\folder\file

3、フォルダを共有して、ネットワークフォルダから削除してみる。

4、ファイルを開いているプロセスを見つけて、それを終了させる。

対象ファイルがDLLの場合、ここからlistdllsをダウンロードしてコマンドプロンプトから実行する。出力の中から対象ファイルが見つかったら、それを開いているプロセスを見つけてそのプロセスを終了させてから削除してみる。

対象ファイルがDLLでない場合、ここからhandleをダウンロードしてコマンドプロンプトで実行する。出力の中から対象ファイルが見つかったら、それを開いているプロセスを見つけてそのプロセスを終了させてから削除してみる。

[追記]
OpenedFileViewを使えば、どのファイルがどのプロセスによって開かれているか確認できるので、そのプロセスを終了させればいい。

openedfileview

5、knoppixなどのLiveCDを使って削除する。

最終手段。

ListViewのアイテムを選択状態にする

.NETの話です。

.NETのListViewのアイテムの選択は、ListViewにメソッドがあるわけではなくて、ListViewItemにSelectedプロパティがありますのでそれを使います。

listView1.Items[1].Selected = true;
listView1.Items[1].Focused = true;

さらに選択したアイテムが画面内で見えるようにするには、ListViewのEnsureVisibleメソッドを使います。

listView1.EnsureVisible(1);

freebsd 日本語キーボードの設定

/etc/rc.confに以下の行を加える。

keymap="jp.106"

これでCUIで106キーボードになる。X環境も使う場合は/etc/X11/xorg.confのキーボード設定のところを以下の用にする。

freebsd ps/2ホイールマウスの設定

/etc/rc.confのmousedで始まる行を以下の様に設定する。

moused_port="/dev/psm0"
moused_enable="YES"
moused_type="auto"

/etc/X11/xorg.confのマウスの設定を以下の様にする。

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
Option "Emulate3Buttons" "no"
Option "Buttons" "5"
Option "ZAxisMapping" "4 5"
EndSection

eclipse PDTとXdebugを使ってphpをリモートデバッグ

ここではサーバもクライアントも同一のマシンでOSはwindows2000を使いました。またeclipseを動かすためにはjavaが必要ですがここではすでにインストールされているものとします。

まずここからeclipseとPDTが一緒になっているAll-In-Oneをダウンロードします。ここではpdt-all-in-one-S20071213_M1-win32.zipをダウンロードしました。

all.jpg

解凍してできたファイルをC:\eclipseに移動します。

c:\eclipse\eclipse.exeを起動し、ワークスペースの場所をC:\eclipse\workspaceにします。

workspace.jpg

メニューからWindow->Open Perspective->PHPを開きます。

eclipse.jpg

PHPをリモートデバッグするためにはサーバとサーバで動くPHPが必要です。まずここへいってapacheをダウンロードしインストールします。ここではapache_2.2.8-win32-x86-no_ssl.msiをダウンロードしました。

つぎにPHPをここへいってダウンロードしてインストールします。ここではphp-5.2.5-win32-installer.msiを使いました。インストールの途中で、以下のような画面になりますがここではインストールしたapacheのバージョンを選択してください。

phpinstall.jpg

eclipseに戻ってPHPプロジェクトを作ります。メニューからFile->New->PHP Projectを選択します。プロジェクト名はmyfirstphpにし Finishをクリックします。

myfirstphp.jpg

PHP Explorer上のmyfirstphpを右クリックして、New->PHP Fileをクリックします。ファイル名にinfo.phpと入力します。

info.jpg

info.phpを編集し、以下のように入力します。

<?php
phpinfo();
?>

セーブして、C:\eclipse\workspace\myfirstphp\info.phpができているか確認します。

つぎにapacheの設定ファイルを編集して、ドキュメントルートをC:\eclipse\workspace\myfirstphpにします。まず、スタートメニューからPrograms->Apache HTTP server x.x->Configure Apache Server->Edit the Apache httpd.conf Configuration Fileをクリックし、エディタで設定ファイルを開きます。

DocumentRootで始まる行を以下のように書き換えます。

DocumentRoot "C:/eclipse/workspace/myfirstphp"

またDirectoryタグの以前のDocumentRootと同じフォルダの部分を以下のように書き換えます。

<Directory "C:/eclipse/workspace/myfirstphp">

セーブして、apacheを再起動します。Programs->Apache HTTP Server x.x->Control Apache Server->Restart

ブラウザで http://localhost/info.phpを開きエラーにならないことを確認します。

localhost.jpg

次にXdebugをPHPにインストールします。ここのページからインストールしたPHPにあわせたWindows moduleをインストールします。ここではインストールしたPHPは5.2.5なのでPHP 5.2.1-5.2.7をクリックして、php_xdebug-2.0.2-5.2.5.dllをダウンロードしました。

ダウンロードしたファイルをPHPインストールフォルダのmodulesフォルダの下へ移動します。modulesフォルダがなければ作成します。

PHPをインストールしたフォルダのphp.iniをテキストエディタで開き、最後に以下の2行を追加します。(実際のフォルダはPHPをインストールしたフォルダに変えてください)

zend_extension_ts="C:/Program Files/PHP/modules/php_xdebug-2.0.2-5.2.5.dll"
xdebug.remote_enable=1

apacheをリスタートし、ブラウザで http://localhost/info.phpを開き、以下のようなXdebugの記述があるか確認します。

xdebugconfirm.jpg

eclipseに戻り、新しくphpファイルmytest.phpを作成し以下のように入力し、保存します。

<?php
print ("AAA\n");
print ("BBB\n");
print ("CCC\n");
?>

メニューからRun->Open Debug Dialogを開き、以下のように入力します。

debugdialog.jpg

Apply->Debugをクリックし、デバッグできることを確認します。

eclipsedebug.jpg

【関連記事】
eclipse 3.4にPDT 2.0をインストールする

JPackageを使ってFedora8でsunのjavaを使ってeclipseを動かす

Fedora8でeclipseをインストールしようとすると、依存関係がgcjとくっついているため、gcjを綺麗に削除できない。しかしgcjでeclipseを動かすと固まることが多い気がする。

そこでjpackageを利用してgcjとsunのjavaを両方入れて、alternativeで切り替えるようにする。

まずsunから jdk-6u5-linux-i586-rpm.binをダウンロードしてインストール。

つぎに、ここから java-1.6.0-sun-compat-1.6.0.05-1jpp.i586.rpmをインストール。

最後にalternativeを使って、/usr/bin/javaのリンク先を切り替える。

# alternatives --config java

There are 2 programs which provide 'java'.

Selection Command
-----------------------------------------------
1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*+ 2 /usr/lib/jvm/jre-1.6.0-sun/bin/java

Enter to keep the current selection[+], or type selection number:

これでsunのjavaを使ってeclipseが起動するはず。

Linuxでアンマウントできないとき

umountやautofsを終了しようとすると、リソースがビジー状態などでアンマウントできないときがある。umount -fで強制的に行うと書いてあるがこれはNFSだけのようだ。

リソースがビジー状態とはほとんどの場合ファイルが使われているということなのでファイルを使っているプロセスを終了すればよい。

lsofを使った方法

どのプロセスがファイルを使っているかを調べるにはlsofコマンドをつかう。このコマンドを引数無しで実行するとすべての開かれているファイルが表示される。よってここからマウントポイントを探して、そのプロセスを終了させるかkillすればいい。

# lsof|grep '/sambaauto'
lsof: WARNING: can't stat() smbfs file system /sambaauto/192.168.0.12/Share Output information may be incomplete.
automount 13797 root 4r DIR 0,16 0 127019 /sambaauto
bash 15569 grape cwd DIR 0,26 0 10 /sambaauto/192.168.0.2/Share/Ts.tar
bash 17960 root cwd DIR 0,16 0 127019 /sambaauto
automount 18959 root 4r DIR 0,16 0 127019 /sambaauto

上の例だと、automountはマウントプロセスなので無視して、それ以外の2つのbashを終了させればよい。面倒な場合はkill -9で強制的に終了できる。

# kill -9 15569 17960

これでアンマウントできる。

fuserを使った方法

$ fuser -va /mnt
このコマンドは/mnt以下にアクセスしているすべてのプロセスを表示する。

$ fuser -k -TERM -m /mnt
このコマンドはマウントポイント/mnt以下にアクセスしているプロセスをすべてTERMシグナルでkillする。