スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
Cygwinの導入手順
投稿日時 : 2008-10-30 18:58
 Firefoxの拡張はWindowsXP + EmEditorの環境で開発していましたが、「Windowsで作成したXPIファイルをLinuxで展開した時のパーミッションの問題」があります。これを回避するためにWindows上でUnixなパーミッション設定をする必要があったのでCygwinを導入しました。そのときのメモをまとめました。今回はCygwinの導入手順を解説します。次回は日本語文字化けの修復を扱います。
 

■環境

PC-MV1C3E/1.0GHz/768MB/WinXPSP3/Cygwin2.573.2.3
 

■Cygwinとは

 CygwinはWindows上で動作するLinux類似環境です。VMWareやQEMUなどのエミュレータと違い、あくまでWindows上でcygwin1.dllが提供するPOSIX相当の機能を利用して各プログラムが動作するという仕組みなっています。
 

■Cygwinインストーラのダウンロード

 Cygwinのインストーラは公式ページからダウンロードできます。トップページ右端の「Install Cygwin now」と書いてあるリンクが最新バージョンのインストーラへのリンクになっています。
Cygwin Download
 

■Cygwinのインストール

cygwin install 01
ダウンロードしたsetup.exeというなんともそっけないファイル名のインストーラを実行してインストールを開始します。それにしてもバージョン番号ぐらい書けばいのにね・・・
 
cygwin install 02
ネット上から必要ファイルを適宜ダウンロードする設定にします。個人で自分のPCにインストールする場合は通常はこれでしょう。
 
cygwin install 03
インストール先を指定します。一般的にはC:\cygwinにインストールすることが多いようですが、Windowsの再セットアップ時のことなどを考えるとシステムドライブとは分離しておくべきだと思うのでD:\cygwinにインストールします。このフォルダがCygwinから見たルートディレクトリになります。オプションは推奨(RECOMMENDED)通りデフォルトでいいと思います。
 
cygwin install 04
パッケージファイルの保存先を指定します。インストール時の各パッケージはここで指定したフォルダにダウンロードされます。Cygwin関係はすべてD:\cygwinにまとめたいのでD:\cygwin\pkgにしました。Cygwinから見ると/pkgになります。
 
cygwin install 05
インターネットへの接続環境を指定します。自宅PCの場合は大体Direct Connectionでいいと思いますが、学校や会社の中からなら「use IE5 settings」か、最後の選択肢のプロクシサーバの設定をしなくてはならないかもしれません。うまくいかない場合は管理者に問い合わせてください。
 
cygwin install 06
ダウンロード元のサーバを選択します。基本的にネットワーク的に近いサーバを選ぶべきなのでjpドメインのものの中から選びます(jpドメインなら必ず近いというわけではありませんが・・・)。サーバによっては接続できなかったり、一部のパッケージがダウンロードできなかったりします。インストール中にそういう感じのエラーが出る場合はサーバを替えて試してみてください。いくつか試してみた結果ftp://ftp.jaist.ac.jpでうまくいったのでこのサーバを使うことにしました。
 
cygwin install 07
インストールするパッケージを選択します。初めての時はどれ入れればいいのか見当もつかないと思いますが、とりあえず何もいじらずにそのままの状態で次に進んでも構いません。スクリーンショットの通りデフォルトの状態でもbashやその他最低限のパッケージはインストールされるようになっています。パッケージは後からいつでも追加・削除できるので必要なものが分かったら随時追加するという方針でもいいような気がします。もちろん必要なパッケージが分かっているならここで選択した方が二度手間になりませんが。デフォルトの状態で次に進んだ場合、インストールされるファイル容量は300MB程度になります。一応追加インストールしたものを示しておきます。
  • Web/wget
  • Editors/vim
その他、一般的にはgccやmake、openssh、opensslなども必須なんでしょうか。
  • Devel/gcc
  • Devel/make
  • Net/openssh
  • Net/openssl
まあとにかくいっぺんにたくさん入れると自分で把握しきれなくなってしまうのでやりたいことに応じて追加していく方がいいかと。
 
cygwin install 08
パッケージの選択が終わったら、先ほど選択したサーバに接続しパッケージのダウンロードが開始されます。
 
cygwin install 09
選択されたパッケージが全てダウンロードできたらインストールが開始されます。もしサーバに接続できない、または接続はできるが指定されたパッケージが存在しない、ダウンロードできないなどの問題がある場合はその時点でインストールが中断されます。このときはサーバを替えて再度試してみてください。
 
cygwin install 10
インストールが終了すると最後にショートカットを作成するか聞かれます。これは「<インストール先フォルダ>\Cygwin.bat」へのショートカットです。好みの問題でもありますが、デスクトップかスタートメニューのどちらかには作っておいてもいいと思います。
 

■Cygwinの起動の前に

 Cygwinの初回起動時(正確には起動ではなくログイン)はユーザのホームディレクトリが自動で作成されます。しかしここで少し問題があります。Windowsに「HOME」という環境変数が存在するとその値がCygwinのホームディレクトリパスとして使用されてしまいます。環境変数HOMEを削除するか、それが無理ならcygwin.batに以下の赤文字の部分を追記します。環境変数HOMEが存在しないならこの作業は必要ありません。
@echo off
 
D:
chdir D:\cygwin\bin
set HOME=
bash --login -i
この設定でCygwin起動前に一時的にHOME変数を空にできます。この変数の書き換えの影響はこのプロセス内のみで、Windows全体には及びません。
 

■Cygwinの起動

 それではCygwinを起動してみます。インストールの最後でショートカットを作成したならショートカットから、作成しなかったなら「<インストール先フォルダ>\Cygwin.bat」を実行して起動します。
cygwin install 01
初回起動時はホームディレクトリが作成され、デフォルトの設定ファイル群が/etc/skelからコピーされます。
 
cygwin boot 02
 

■Poderosa

 タブ型ターミナルエミュレータのPoderosaを使ってもCygwinにログインできます。動作に.NET Framework 2.0が必要なのがアレですが、非常に高機能で安定性も申し分ありません。Alt-CとAlt-Vでコピペできるのも地味に便利です。
 
Poderosa
3つ同時に接続して画面を3分割して表示している様子。
 
ただデフォルトではBackSpaceキーはShift + BackSpaceとしないといけません。これはツール - オプション - 操作の「BackSpaceキーで0x7Fを送信」のチェックを外すとBackSpaceキーだけでBackSpaceできるようになります。
Poderosa Option
 

■パスを通す

 「インストールフォルダ\bin」にパスを通しておくとWindowsのコマンドプロンプトからlsなどのコマンドがlsと入力するだけで使用できるようになります。コントロールパネル-システム-詳細タブ-環境変数 のPathにセミコロン区切りで「D:\cygwin\bin」などのように通したいパスを記述します。
cygwin path
 
以下はコマンドプロンプトでlsを実行しています。
cygwin cmd
この時点では文字化けしてますが。
 

■後からパッケージを追加・削除するには?

 はじめのインストールで選択したパッケージが不要だった/足りなかった場合はもう一度setup.exeを起動してやり直せば問題ありません。初期設定に戻されることはないので安心してください。はじめと同じようにパッケージ選択画面まで進めて必要/不要なパッケージをクリックして選択状態を変更して続行すればちゃんとパッケージの追加・削除ができています。
 
 
次回は日本語文字化け修復について。
 
 
スポンサーサイト
2008-10-30 18:58 | Cygwin | Comment(0) | Trackback(0)
中央管理型イベントマネージャ『evtmgr.js』 0.05 beta
投稿日時 : 2008-10-26 14:47
 Javascriptのメモリリークレスな中央管理型イベントマネージャモジュールのevtmgr.jsのバージョン0.05betaを公開します。
 

■evtmgr.js 0.05 beta 変更点

  • イベント登録時に必須だった登録オブジェクトのinstプロパティをオプションに。instプロパティ指定無しの場合はelemプロパティの参照先HTMLElementが自動格納される。
  • instプロパティが必須ではなくなった影響で各関数を微調整。
 

■evtmgr.js 0.05 beta のダウンロード

 使用は自己責任でお願いします。evtmgr.jsが原因で発生したいかなる損害に対しても作者itmstはその責任を負いません。
 
evtmgr.js 0.05 beta (2008/10/26 11:31) 動作確認 : Firefox 3.0.0 - 3.0.3/ Firefox 2.0.0.14 / Opera 9.50 - 9.61 / Safari 3.1.2 / IE 7.0 / IE 6.0 / IE 5.5 / Mozilla 1.8b / NN 9.0.0.5
 

■evtmgr.jsの導入方法の簡単な説明

 通常の外部jsファイルと同じようにSCRIPT要素のsrcでURL指定するだけです。ロードを実行したコンテキストのグローバルオブジェクトに「evtmgr」というプロパティが追加されるので、後は「evtmgr.methodName()」や「evtmgr.propertyName」という感じでevtmgr.jsの機能を利用できます。
<html>
<head>
<script type="text/javascript" src="evtmgr.js"></script>
<script>
//ここでevtmgr.add()などを使用する
</script>
</head>
<body></body>
</html>
 

■最も基本的なイベント登録コード

 instプロパティがオプションになったことでイベント登録コードがaddEventListener()使用時と近いものになりました。最も基本的なイベント登録のサンプルコードを紹介しておきます。以下のコードで「document要素でonclickイベントが発生したらonEvent関数を呼ぶ」という意味になります。
<html>
<script type="text/javascript" src="evtmgr.js"></script>
<script>
//イベント発生時に呼ばれる関数
function onEvent(){alert("クリック!");}

//evtmgr.add()メソッドを使ってイベント登録
evtmgr.add({elem:document,type:"click",func:onEvent});
</script>
</html>
これはaddEventListenerを使った以下のコードと「基本的には」同じです。
<html>
<script type="text/javascript" src="evtmgr.js"></script>
<script>
//イベント発生時に呼ばれる関数
function onEvent(){alert("クリック!");}

//addEventListener()メソッドを使ってイベント登録
document.addEventListener("click",onEvent,false);
</script>
</html>
このサンプルだけ見るとただ複雑になっただけのように思えるかもしれませんが、evtmgr.jsは「イベントタイプ」や「呼び出す関数」などをキーとして登録オブジェクト(イベント関連情報をひとまとめにしたオブジェクト)を検索し抽出する機能や、条件に一致するイベントの一括削除、ガーベッジコレクション機能などの柔軟で強力なイベント中央管理機能を提供します。子ウィンドウのイベントも中央で一元管理できます。詳細はevtmgr.js ドキュメントデモページ(手抜きです)を参照してください。
 

■0.05betaで使用可能なメソッド・プロパティ一覧

 詳細はevtmgr.js ドキュメントを参照してください。
 
メソッド
  • add イベント登録
  • remove イベント削除
  • find 登録オブジェクト検索
  • selectRemove 条件一致登録オブジェクト一括削除
  • removeAll 全イベント削除
  • getIdList IDリスト取得
  • selectById IDから登録オブジェクト参照
  • selectAll 全登録オブジェクトリスト
  • isGarbage ガーベッジ化登録オブジェクト判定
  • selectGarbage ガーベッジ化登録オブジェクトリスト
  • isOverlap 重複登録チェック
  • gc ガーベッジコレクション実行
  • gcAutoStart ガーベッジコレクション自動実行開始
  • gcAutoStop ガーベッジコレクション自動実行停止
  • exec イベント発生時関数実行
  • chkArg 登録オブジェクトプロパティチェック
  • isDuck 類似オブジェクト判定
  • uid ユニークID生成
プロパティ
  • browser 使用可能メソッドフラグ
  • list 登録オブジェクト格納用
  • overlap イベント重複登録許可/非許可フラグ
  • gcInterval ガーベッジコレクション自動実行間隔
  • gcAutoHandle ガーベッジコレクション自動実行状態
  • ongc ガーベッジコレクション実行時呼び出し関数

■従来通りinstプロパティも使える

 今まで通りinstプロパティを使ってfuncプロパティ指定の関数を呼び出すときにthisに設定されるObjectを明示的に指定することもできます。
<html>
<script type="text/javascript" src="evtmgr.js"></script>
<script>
var msg = "foo"
function showMsg(){
	alert(this.msg); //「bar」と表示される

}
var myObject = {msg:"bar"};
evtmgr.add({
	type:"click",
	elem:window,
	func:showMsg,
	inst:myObject //実行スコープをmyObjectに
});
</script>
</html>
このコードでwindowでclickイベントを捕捉するとwindow.msgの「foo」ではなくmyObject.msgの「bar」が表示されます。instプロパティの指定がなければwindow.msgの「foo」が表示されます。
 

■XULアプリでも全く同じように使用できそう

 Dropfox作ってる時に試してみたんですが、XULアプリ中でも何の問題もなく動作しそうです。
 

■ドキュメントとデモページ

ドキュメント
手抜きなデモページ
 
 
2008-10-26 14:47 | evtmgr.js | Comment(0) | Trackback(0)
The Manual of Dropfox : Firefox Extension
投稿日時 : 2008-10-24 20:55
更新日時 : 2008-11-29 06:23
Visit following URL to get the latest information.
http://dropfox.no-ip.net/en/
 
日本語ページはこちら
 
This document is the translation version from Japanese to English.
The original one is here.
 
 
Dropfox Logo
 
Dropfox Screen Shot EN Dropfox Screenshot JP
 
Dropfox is the Firefox extension which manages preferences of a profile shared across different environments by Dropbox, and allows you to apply the preferences peculiar to each environment to the shared profile. You can change only some preference values such as the path of a cache folder to new ones suitable for each environment.
 

Main Features

  • Allows you to have preferences files for each OS(Windows/Linux/Mac).
  • The format of the preferences file is basically same as prefs.js.
  • A value of preference can include environment variables like ${HOME}.
  • A value of preference can also include special folder variables defined by Mozilla like ${ProfD}.
  • Also allows you to have a preferences file stored in an external folder of a profile folder for each OS.
  • You can include variables into the path of an external preferences file which you specify.
  • You can write Javascript codes other than "user_pref()" in a preferences file.
  • A preferences file is loaded depending on the OS operating at the time of Firefox start, and executed.
  • Variables are converted at the time of execution.
 
 

Installation

Dropfox :: Firefox Add-ons
 
 
 
The following article is a copy of the man page.
 
 

Why do I need Dropfox?

When you share a Firefox profile by Dropbox, you may not want to share a cache folder. But it is not easy. Let's see the scenario that you share a profile between Windows and Linux.

If you edit prefs.js. or user.js on Windows to change a cache folder from the default path to the other one, the change is synchronized on Linux through Dropbox. When you start Firefox on Linux, the cache folder is forced to move to the default path because of the incompatibility of the path format between Windows and Linux. As a result, cache files of Linux side flow into the Windows side.

Of course, like this problem of cache folder, I think that there are many things which do not go well only by sharing merely preferences.

In brief, it is the problem that there is no structure which applies preferences peculiar to an environment(an OS, a PC or a user) to the shared profile.

Dropfox offers the structure.


Features

When you share a profile across different environments with Dropbox, Dropfox allows you to change only some preference values such as the path of a cache folder to new ones suitable for each environment.

  • Allows you to have preferences files for each OS(Windows/Linux/Mac).
  • The format of the preferences file is basically same as prefs.js.
  • A value of preference can include environment variables like ${HOME}.
  • A value of preference can also include special folder variables defined by Mozilla like ${ProfD}.
  • Also allows you to have a preferences file stored in an external folder of a profile folder for each OS.
  • You can include variables into the path of an external preferences file which you specify.
  • You can write Javascript codes other than "user_pref()" in a preferences file.
  • A preferences file is loaded depending on the OS operating at the time of Firefox start, and executed.
  • Variables are converted at the time of execution.



Format of Dropfox's preferences file

You can write Javascript codes in a preferences file in the same format as prefs.js and can write variables in the second argument of user_pref() function.
See the following code.

user_pref("foo.boo.bar", "${HOME}/FOOBAR");


Of course you don't have to use a variable by all means.

The feature greatly different from prefs.js or user.js is that you can write Javascript codes other than "user_pref()" in them.



Shared preferences file

The preferences files for each OSs are stored in a profile folder and are called "a shared preferences file" because they are shared with other machines by Dropbox. The shared preferences files are stored in the following path.

[YourProfileFolder]/dropfox.[OSName].js


"WINNT" "Linux" "Darwin" is substituted for [OSName].

External preferences file

Dropfox can execute the preferences files stored in an external folder of the profile folder. These files are called "an external preferences file". An external preferences file allows you to apply preferences peculiar to a machine for a shared profile. You can specify an external preferences file path which can include variables.

${USERPROFILE}\MyExternalPref.js


An external preferences file is loaded at the time of start of Firefox as well as a shared one, and is executed. Though the external preferences file format is the totally same as the shared one, note that you must save it in the UTF-8(without BOM) encoding.



Environment and Special folder variables

Dropfox allows you to include variables into preference values. You can use two kinds of variables in the same Unix-Like format like ${VariableName} integrally. The first is system environment variables such as ${HOME} or ${USERPROFILE} . They are defined by OS operating at the time. The second is special folder variables such as ${ProfD} or ${UChrm}. They are ones available in softwares using Mozilla technology. You can get more information about them from following URL.

File I/O - MDC
https://developer.mozilla.org/index.php?title=File_I%2F%2FO

When there is a variable of the same name in both, note that a special folder variable is used.


Test Execution

There are two buttons labeled "TEST" in option window. If you push the button for shared preferences file, you can test the codes currently inputted in the text box. And if you push the button for external one, you can test the codes of external preferences file.

Dropfox Test Execution Result

You can confirm beforehand whether the result of conversion of variable is what you intended. But you must note that conversion of variables does depend on an execution environment. I recommend that you test in an actual environment.



Execution Order

Dropfox allow most general users to use 4 preferences files in Firefox. They are "prefs.js" and "user.js" and "shared preferences file" and "external preferences file". Their execution order is below.

prefs.js -> user.js -> shared prefs -> external prefs


The preference of prefs.js is a base. And it is overwritten with the following other three preferences files in turn. You should write preferences more peculiar to a machine in the later files.



Metacharacter

Dropfox treat $ as a metacharacter in the second argument of "user_pref()" funcion. You can escape $ by writing $$. For example, when you want to treat "${HOME}" as a string not a variable, write as below

user_pref("foo.boo.bar", "$${HOME}");

You can confirm the result of escape in test execution beforehand.



Type of value converted from a variable

Though you can include variables into preference value as string such as "${HOME}", some preferences need a specific value type. In this case, you can specify the type of value with three integers of the third argument. 0 means String type, 1 means Number type, and 2 means Boolean type.

See the following codes.

user_pref("foo.bar.myString","${MYSTRING}",0); //String
user_pref("foo.bar.myNumber","${MYNUMBER}",1); //Number
user_pref("foo.bar.myBoolean","${MYBOOLEAN}",2); //Boolean

In the case of String type, you don't need to specify because String type is default.

Of course, when you specify the type as Number, the type of the value converted from variable must be a number. And when you specify the type as Boolean, the type of the value converted from variable must be "true" or "false".

You should confirm the result in test execution. If the new preference has been written with wrong type value, you must delete it manually. If the preference to which you are about to write a value with wrong type has already existed, an error only occurs.



Codes other than user_pref()

Dropfox is basically specialized to execute user_pref function, however it can also execute codes other than user_pref().

You can write regular Javascript codes such as a if sentence and also execute even XPCOM privilege codes. Dropfox's preferences file is programmable and more flexible than user.js .



Scope

At the actual execution, codes are executed in the scope of "dropfox" which is a Object in a XPCOM-Context. "user_pref" function is executed as "dropfox.user_pref()".

At the test execution in option window, codes are executed in the scope of "dropfox" which is a Object in a Chrome-Window-Context.

Note that codes are executed in the defferent scope between actual execution and test execution.


You can access the actual execution scope from the test execution scope through "gDropfox.scope" Object in convenience for the time being. These specifications are temporary.


When is Dropfox executed?

Dropfox is executed when "profile-after-change" event is fired on Firefox start. The execution report window shows after "sessionstore- windows-restored" event.







2008-10-24 20:55 | Dropfox English | Comment(0) | Trackback(0)
Firefox拡張『Dropfox』公開 - 共有プロファイルの設定を管理
投稿日時 : 2008-10-21 18:48
更新日時 : 2009-02-09 12:47
最新情報は以下のURLを参照してください。
http://itmst.blog71.fc2.com/blog-category-21.html
http://dropfox.no-ip.net/ja/

 
English page is here.
 
Dropfox Logo
 
Dropfox Screen Shot EN Dropfox Screenshot JP
 

Dropfoxとは

 DropfoxとはDropboxなどを利用した複数の異なる環境をまたがったプロファイル共有をサポートするFirefox拡張機能(アドオン)です。環境変数や通常のJavascriptコードなどが記述可能な言わば「拡張版user.js」がOS別に複数使用できるようになります。これにより、キャッシュフォルダの位置やダウンロードファイルの保存先、外部エディタのパスなど、一部の設定だけをその環境に適した値に変更できます。
 

■主な特徴

 「user.js と同じような設定ファイルをOSごとに個別に保持できる」というのがDropfoxが提供する最も基本的な機能です。

 それに加えて、設定値に環境変数が記述可能であったり、プロファイルフォルダ外部の任意の設定ファイルが使用可能であったりすることで、共有プロファイルを使いながらも一部の設定を環境に合わせて柔軟に変更することができます。

以下に主な特徴を列挙します。

  • Windows/Linux/Mac用に個別の設定ファイルが使用可能
  • 設定ファイルは基本的には prefs.js や user.js と同じ書式
  • 設定値に ${HOME} や ${USERPROFILE} のように環境変数が記述可能
  • 設定値に ${ProfD} のようにMozilla定義の特殊フォルダ変数が記述可能
  • プロファイルフォルダ外部の任意の設定ファイルもOSごとに指定可能
  • 外部設定ファイルを指定するパスにも変数が記述可能
  • 設定ファイルには if文 などのJavascriptコードも記述可能
  • 各設定ファイルはFirefox起動時にOSに応じてロードされ実行される
  • 変数は実行時に変換される
 

■インストール

 まだサンドボックス内でレビュー待ちの状態です。初めての拡張でレビューにどのぐらいの時間がかかるのかまったく分からないので一般公開されたら改めてアナウンスしたいと思います。
 
現在サンドボックス内にあるのでaddons.mozilla.orgのアカウントがないとインストールできません。が、アカウントの取得は簡単なのでぜひこの機会に。
追記(2008/12/21 12:30):サンドボックス内のアドオンはアップデートサービスが利用できないことが分かりました。以下の公式サイトからインストールした場合は自動アップデート機能が利用できます。
Dropfox公式サイト
 
 
以下はマニュアルのコピーです。
 

■Dropfoxの必要性

Dropboxでプロファイルを共有するときにキャッシュフォルダを除外したい場合などがあると思いますが、これは簡単にはできません。WindowsとLinuxでプロファイルを共有する場合を考えてみます。

 たとえばWindows上でprefs.jsまたはuser.jsを編集してキャッシュフォルダをデフォルトのパスから変更したとします。この設定情報はDropboxを 介してLinux上で同期されます。しかしLinuxのパスフォーマットはWindowsのものとは互換性がないため、Linux上でFirefoxを起 動するとデフォルトのキャッシュフォルダに強制的に戻されてしまいます。この結果Linux側のキャッシュファイルがWindows側に流れてくることに なります。

 もちろんこのOS間のパスフォーマットの違いによる問題だけに限らず、同一OS間や同一OSの複数ユーザ間での共有の場合であっても、完全なクローン環境でも構築しない限り「単純に設定を共有するだけ」では必ずどこかに不都合が生じてしまいます。

 要するにここで問題になっているのは、共有プロファイルに対してOSやマシンやユーザ固有の設定を適用する仕組みがないということです。

この仕組みを提供するのがDropfoxです。



■主な特徴

 「user.js と同じような設定ファイルをOSごとに個別に保持できる」というのがDropfoxが提供する最も基本的な機能です。

 それに加えて、設定値に環境変数が記述可能であったり、プロファイルフォルダ外部の任意の設定ファイルが使用可能であったりすることで、共有プロファイルを使いながらも一部の設定を環境に合わせて柔軟に変更することができます。

 以下に主な特徴を列挙します。

  • Windows/Linux/Mac用に個別の設定ファイルが使用可能
  • 設定ファイルは基本的には prefs.js や user.js と同じ書式
  • 設定値に ${HOME} や ${USERPROFILE} のように環境変数が記述可能
  • 設定値に ${ProfD} のようにMozilla定義の特殊フォルダ変数が記述可能
  • プロファイルフォルダ外部の任意の設定ファイルもOSごとに指定可能
  • 外部設定ファイルを指定するパスにも変数が記述可能
  • 設定ファイルには if文 などのJavascriptコードも記述可能
  • 各設定ファイルはFirefox起動時にOSに応じてロードされ実行される
  • 変数は実行時に変換される



■設定ファイルの書式

 基本的にはprefs.jsやuser.jsと同じ書式でJavascriptコードを書き、user_pref()メソッドの第2引数に変数を含めるという感じになります。たとえば次のようになります。

user_pref("foo.boo.bar", "${HOME}/fooBar");

もちろん変数を必ず使わなければいけないわけではありません。

 prefs.jsやuser.jsと大きく違う点としては、user_pref()以外のJavascriptコードも実行可能なことです。if文で条件分岐させることなども可能なので、プログラマブルで柔軟な設定が可能です(後述)。



■共有設定ファイル

 各OS用の設定ファイルはプロファイルフォルダ内に保存され、Dropboxなどによって他のマシンと共有されるので「共有設定ファイル」と呼んでいます。共有設定ファイルは以下のパスに保存されます。

<プロファイルフォルダ>/dropfox.<OS名>.js

OS名には「WINNT」「Linux」「Darwin」が入ります。



■外部設定ファイル

 プロファイルフォルダの外部に保存している設定ファイルを実行することもできます。この設定ファイルを「外部設定ファイル」と呼びます。外部設定ファイ ルは共有されないので共有プロファイルに対してマシン固有の設定を適用することができます。外部設定ファイルを使用するには設定ウィンドウでファイルパス を指定します。また、以下のようにファイルパスに変数を含めることができるので配置場所を各マシンで統一する必要はありません。

${USERPROFILE}\MyExternalPref.js

外部設定ファイルは共有設定ファイルと同じくFirefoxの起動時にロードされ実行されます。外部設定ファイルの書式は共有設定ファイルと全く同じです が、UTF-8(BOMなし)で保存するようにして下さい。



■環境変数と特殊フォルダ変数

 Dropfoxではシステム定義の環境変数とMozilla定義の特殊フォルダ変数を利用できます。システム定義の環境変数とはWindowsなら %USERPROFILE% や %WINDIR% などのことです。これに対してMozilla定義の特殊フォルダ変数とはFile I/O - MDCに記載されているような、FirefoxやThunderbirdなどのMozillaテクノロジーを使ったソフトウェアで利用可能な変数のことです。Dropfoxではこれらの変数を ${変数名} というUNIXライクな形式で統一的に扱うことができます。

 注意点は Mozilla定義特殊フォルダ変数 → システム定義環境変数 の順に変換が試みられるということです。両者に同名の変数が存在した場合はMozilla定義の特殊フォルダ変数が使用されることになります。



■テスト実行

 設定ウィンドウに「テスト」というボタンがあります。これを押すと共有設定ファイルの場合は現在のテキストボックスに入力されているコードをテストすることができます。外部設定ファイルの場合は実際に外部ファイルをロードして実行します。

Dropfox Test Execution Result

 テスト実行で変数の変換結果やエラー、設定の書き換えが発生するかどうかなどを確認することができます。注意しなくてはならないのは変数の変換はテスト を実行しているシステム環境に完全に依存するということです。現在テストを実行している環境で変数の変換がうまくいったからといって他の環境で同じ結果に なるとは限りません。基本的にテストは実際の環境で実行するようにしてください。



■各設定ファイルの実行順序

 Dropfoxを導入することで一般ユーザがFirefoxで利用できる設定ファイルが「prefs.js」「user.js」「共有設定ファイル」「外部設定ファイル」の4つになります。実行順序は

prefs.js → user.js → 共有設定ファイル → 外部設定ファイル

となります。prefs.jsの設定をベースに後に続くファイルがそれに上書きしていきます。後のファイルになるほどよりマシン固有の設定を書けばいいわけです。



■メタキャラクタ

 user_pref() 関数内では $ をメタキャラクタとして扱います。もし $ をエスケープしたい場合は $$ と2つ続けて記述します。例えば ${HOME} を変数ではなく、"${HOME}"という文字列自体として扱いたいときは $${HOME} と記述します。

user_pref("foo.boo.bar", "$${HOME}");

テスト実行して結果を確認するようにしてください。



■変数の展開後の値の型

 設定値に変数を含めるときは"${HOME}"のように文字列として変数を指定することにな ります。しかしその設定項目が整数値(Number型)や真偽値(Boolean型)でなければならない場合があると思います。こういった場合は user_pref関数の第3引数で変数展開後の値の型を「0(String型)」「1(Number型)」「2(Boolean型)」の3つの整数で指 定することができます。

user_pref("foo.bar.myString","${MYSTRING}",0); //String型
user_pref("foo.bar.myNumber","${MYNUMBER}",1); //Number型
user_pref("foo.bar.myBoolean","${MYBOOLEAN}",2); //Boolean型

デフォルトで文字列として扱うのでString型の場合は第三引数はなくても構いません。もちろん ${MYNUMBER}を展開した場合は数値、${MYBOOLEAN} を展開した場合は「true」か「false」になるように変数を定義していなければエラーになります。設定ウィンドウでテスト実行できるので前もって変 換結果を確認して下さい。



■user_pref()以外のコード

 Dropfoxは基本的にはuser_pref()関数の実行に特化した設計になっていますが、それ以外のJavascriptコードを設定ファイル内 に書いても構いません。if文などで分岐させることもできますし、XPCOMなどの特権コードも実行可能なので、従来のprefs.jsやuser.js よりもプログラマブルで柔軟な設定が可能になっています。

 極端な話、例えば少し改造が必要ですが、「Firefoxの右クリックメニューからSleipnirで開く」のようなコードを共有設定ファイルや外部設定ファイルに書けばちゃんと動作させることができます。

 要するにJavascriptの文法要件を満たしていれば基本的には何を書いても動作しますが、テスト実行時と実際の実行時とではスコープが異なるとい う点にだけ注意してください(後述)。



■実行時のスコープ

 設定ファイルのコードはXPCOMコンテキスト内の「dropfox」というObject型オブジェクトのスコープで実行されます。 user_pref()関数もdropfox.user_pref()として実行されています。設定ウィンドウでのテスト実行時はchromeウィンドウ コンテキスト内の「dropfox」というObject型オブジェクトのスコープで実行されます。user_pref()以外のコードを書くときはテスト 実行時のスコープと実際の実行時のスコープは違うということに注意してください。

 一応、実際の実行時のスコープになるXPCOMコンテキスト内のdropfoxオブジェクトにも「gDropfox.scope」としてアクセスできますが、今後仕様を変更する可能性もあります。



■実行のタイミング

 Dropfoxが実行されるタイミングはFirefox起動時の"profile-after-change"イベント発生時です。 user_pref()以外のコードを書く時はこれ以降のイベントに関与できます。処理結果のウィンドウ表示は"sessionstore- windows-restored"イベント発生時に実行されます。その他イベントに関してはObserver Notifications - MDCあたりを参照してください。

 
 
 
 
2008-10-21 18:48 | Dropfox | Comment(1) | Trackback(0)
一瞬にして無線LANのWEPを解読する方法が発見される
投稿日時 : 2008-10-14 23:59
 これは本当に大変なことになりました。無線LANの暗号化方式で一般的に広く使われているWEPを一瞬にして解読する方法を神戸大学教授の森井昌克(プロフィール)が発見し、コンピュータセキュリティシンポジウム 2008 (CSS 2008)で公開、しかも解読プログラムを近日中に公開する予定だとのこと。
 
一瞬にして無線LANのWEPを解読する方法がついに登場、まもなく解読プログラムを公開予定 - GIGAZINE
 
 驚くべきことに特殊な環境は一切必要なく、デモで使われたPCのスペックは通常の家庭用PC並。
OS:Windows XP SP2
CPU:Athlon 64 X2 4600+ 2.41GHz
メモリ:1GB
使用言語:C
 さらに、解読に必要なのは20MB程度の通信の盗聴で、解読に要する時間はわずか10秒。59%もの企業が無線LANの暗号化方式にWEPを採用している現状を考えると、解析プログラムが公開されたら恐ろしい事態になることが予想されます。
 
 もちろん一般ユーザにも影響は大きく、一番怖いのは自宅に設置している無線LAN対応機器が犯罪に利用される可能性があることです。もし誰かが自宅の無線LANを乗っ取ってネットで犯罪行為を行った場合、とりあえず捜査の対象になるのはアクセス元のIPが割り当てられているユーザになります。それでたとえアリバイその他でなんとか無罪を証明できたとしても多大な時間を浪費することになりそうです。
 技術に詳しくない知り合いが無線LANを使っている場合はチェックしてあげた方がよさそうです。
 
 そういえばうちのFONのプライベート側が諸々の事情でWEPだった・・・。
 
 
2008-10-14 23:59 | IT | Comment(2) | Trackback(0)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。