FireGestures でジェスチャーをキャンセルする
2008/05/06 | ラベル: Firefox, Tips | 0 コメント |設定画面に項目がなく、デフォルトで無効になっているのでメモ。
about:config を開き、
extensions.firegestures.gesture_timeout
を 3000 とかに設定する。単位はミリ秒。
設定画面に項目がなく、デフォルトで無効になっているのでメモ。
about:config を開き、
extensions.firegestures.gesture_timeout
を 3000 とかに設定する。単位はミリ秒。
Firefox 3 にしたら、Gmail のフィルタ設定のキーワード欄を複数行にする Stylish のスタイル定義が効かなくなっていた。
このスタイル定義は
-moz-binding: url(http://persistent.info/files/gmail-filter.xml#filter);
のように外部サイトを参照するようになっており、Firefox 3 のセキュリティ強化によりエラーとなってしまう。考えてみれば、外部サイトに置かれたファイルに定義された書き換えルールを使っているっていうのはかなり危険である。ファイルを置き換えられても気付かないだろうし。。。
自分は新バージョンの Gmail に対応するため、XBL ファイルをローカルに置き、
-moz-binding: url(resource:///chrome/gmail-expand-filter.xml#filter);
としているが、これもエラーとなった。
新バージョンの Gmail でこのフィルタを使うにはこちらを参照。
続・Gmail のフィルタ設定のキーワード欄を複数行にする
解決方法は、XBL ファイルを Stylish のクロムフォルダに置くこと。
パスは <Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content
せっかくなので、手順をまとめておく。目的は Firefox 3 & 新バージョンの Gmail で使えることだけど、たぶん Firefox 2 以前、旧バージョンの Gmail でも動くと思う。
<Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content を開き、次の内容を gmail-expand-filter.xml として保存。
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="filter" styleexplicitcontent="true">
<implementation>
<constructor>
var textarea = document.createElement("textarea");
textarea.name = this.name;
textarea.id = this.id;
textarea.value = this.value;
textarea.style.width = "100%";
textarea.style.fontFamily = "monospace";
textarea.style.fontSize = "14px";
textarea.rows = 15;
this.parentNode.replaceChild(textarea, this);
</constructor>
</implementation>
</binding>
</bindings>
Stylish に新しいスタイルを作成し、次のコードを入力する。
@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain("mail.google.com") {
input[name="cf1_has"],
input.MtafId[tabindex="54"],
input.MtafId[tabindex="5"] {
display: none;
-moz-binding: url(chrome://stylish/content/gmail-expand-filter.xml#filter);
}
}
PAM を使った自作アプリ(C/C++)で、ユーザの認証を Active Directory で行う方法を紹介。
C/C++アプリのコーディングでは、Active Directory を意識する必要はなく、単に PAM に問い合わせるだけ。認証方法に依存しちゃったら PAM を使う意味ないしね。ここでは PAM ライブラリを用いたコーディングについては触れません。
アプリのプラットフォームは Linux 。今回は、ユーザの認証だけができればよく、Linuxシステム上にアカウントは存在しなくてよい。というより作りたくない。
手順はたかはしもとのぶ氏の Linux の認証を Active Directory で行なう方法 の通りでOK。また、Windows ActiveDirectory を利用した Linux ログイン認証環境構築時のメモ は Windows と Linux の認証の統合の方法についてよくまとまっている。
これだけ。
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = des-cbc-md5
default_tgs_enctypes = des-cbc-md5
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
TEST.LOCAL = {
kdc = dc1.test.local:88
admin_server = kerberos.example.com:749
default_domain = test.local
}
[domain_realm]
.test.local = TEST.LOCAL
test.local = TEST.LOCAL
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Active Directory 側で、Administrator のパスワードを一度も変更していない場合、kinit に失敗するので注意。
ここで Active Directory で認証できるか簡易なテストをする。Active Directory 上に存在するユーザと同名のユーザを Linux 上にも作る。パスワードは未設定でよい。/etc/pam.d/system-auth の先頭エントリに次の1行を加える。
auth sufficient /lib/security/$ISA/pam_krb5.so
そのユーザで Linux にログインしてみる。成功すると、/var/log/messages に次のようなログが記録される。
Mar 5 16:39:02 localhost sshd: pam_krb5[22867]: authentication succeeds for 'test01' (test01@TEST.LOCAL)
テストが成功したら、/etc/pam.d/system-auth を元に戻し、Linux 上のユーザは削除しておく。
#%PAM-1.0
auth required /lib/security/pam_krb5.so no_user_check
認証のみでユーザが(ローカル)システムに存在するかチェックしなくてよいので、no_user_check オプションをつけること。
あとは C/C++ アプリで認証ができるか確認する。
krb5.conf から引用。HP-UXのだけど、Linuxでも多分同じ。
[realms] ATHENA.MIT.EDU = { kdc = KERBEROS.MIT.EDU kdc = KERBEROS-1.MIT.EDU:750 kdc = KERBEROS-2.MIT.EDU:88 admin_server = KERBEROS.MIT.EDU default_domain = MIT.EDU v4_instance_convert = { mit = mit.edu lithium = lithium.lcs.mit.edu } }
WMIを使ってディスク容量を取得するサンプルはたくさんあるけど、ドライブレターのない論理ボリュームの容量を取得するものがない。また、Win32_LogicalDisk クラスでも取得できない。
いろいろ調べて試した結果、Win32_Volume クラスで取得できることが分かった。以下は「C:\Users\xxx」にマウントしたボリュームの総容量と空き容量を取得する例。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Volume Where Caption = 'C:\\Users\\xxx'")
For Each objItem In colItems
WScript.Echo "Name: " & objItem.Name
WScript.Echo "Capacity: " & objItem.Capacity
WScript.Echo "Free Space: " & objItem.FreeSpace
WScript.Echo
Next
ExecQuery メソッドでは LIKE も使えるので、
Select * from Win32_Volume Where Caption LIKE 'C:\\%'
という書き方もできる。
Windows Vista には Windows デスクトップ サーチ の機能が統合されていて、様々なファイルの検索が可能になっている。デフォルトでは Users フォルダとオフラインフォルダがインデックス登録され、検索可能になっている。
だけど、なぜか自分のドキュメントフォルダに保存したPDFファイルがインデックスに登録されない。Administratorのドキュメントはちゃんと登録されている。インデックス対象の選択画面を開くと、なぜか自分のデータフォルダだけ表示されないではないか。。。どうやら、ジャンクションフォルダはインデックスの対象外っぽい。そういう仕様なんだろう。
自分はデータ領域をシステムドライブと分けたいという性分なので、Documents and Settings フォルダを移動せずに別のドライブにマウントする方法 の手順で自分のデータ領域(C:\Users\xxx)を別ボリュームに分けた。dirコマンドで見てみると、C:\Users\xxx はジャンクションになっている。
試しにデータ領域にしているボリュームにドライブレターを付けると(Uドライブとした)、インデックス対象の選択画面にはそのボリュームが見えるようになる。マウントポイントである C:\Users\xxxはやっぱり見えない。インデックス対象としてUドライブを選択してインデックスを再構築すると、ファイルがインデックス登録されるようになった。しかーし、UドライブとC:\Users\xxxと、2重で登録されてしまう。ださい。。。Uドライブをインデックス対象から外したり、Uドライブのドライブレターを外すと、やっぱりインデックス登録されない。
Vista では正式にシンボリックリンクに対応したということなので、ボリュームのマウントをやめて、C:\Users\xxx を Uドライブへのシンボリックリンクにしてみた。すると、Uドライブをインデックスの対象から外した状態でも、C:\Users\xxx以下のファイルがインデックスに登録されるようになった。でも、今度はインデックス対象を選択する画面で自分のデータフォルダだけでなくUsersフォルダ全部が見えなくなってしまった。。。orz
一応インデックス登録されるようになったし、ファイルの読み書きやアプリの利用など通常利用に問題はなさそうなので、しばらくこれで使ってみるか。。。
ちなみに、Vista でシンボリックリンクを作成するには mklink コマンドを使う。
データ領域をシステムドライブと別にしたいという人は結構いるんじゃないかと思う。自分もDocuments and Settingsフォルダの場所を変更する を参考にしてDドライブに移している。Documents and Settings フォルダ(名前長いよ。。。)は Vista では Users フォルダに名前が変更されている。うん、短くていいね:-)
しかし上記の手順で Documents and Settings フォルダを別ドライブにすると、不具合が出るアプリもある。自分は Windows Media Player がエラーで使えなくなった。DRM関連の設定がレジストリにバイナリ値として「C:\Documents and Settings\...」と設定されていたためだ。念のためレジストリはチェックしていたのだけど、バイナリ値は検索に引っかからなかった。
他にも、Google Earth は Documents and Settings が Cドライブにあるものとして作られているのか、使うたびに Cドライブに Documents and Settings フォルダが作成されてしまっていた。
※今では解消している模様。
さて、これらの問題も変更前のパス( C:\Documents and Settings )でもアクセスできれば解消できると思われる。パスは変更せず、実際のデータは別のドライブに保存される。
これで OK、なはず。自分は試してないので、誰かやってみてください。(ぉぃ...)
一応、Vista で似た手順を踏んで C:\Users\test を別ボリュームにすることはできた。C:\Users フォルダ全体じゃないっす。ただちょっと弊害が残った。詳細別エントリで。。。↓
独自の Windows Vista サイドバー ガジェットを作成する より引用。
JavaScript をかじったことがある方なら、"eval is evil" という言葉を耳にしたことがあるでしょう。ご存じない方は、まず Web で調べてから続きをお読みください。 eval を使用すべきでない理由をおわかりいただけたところで、ここではこの規則に修正を加えて、JavaScript のテキストを HTML 内の属性に配置すべきではないという規則と、setInterval や setTimeout に文字列を渡すべきではないという規則を付け加えたいと思います。JavaScript のテキストを配置してはいけない属性には、body onload 属性も含まれます。この属性は eval ステートメントと同じように内部で解釈されるからです。 "body onload がだめならどうやってコードを実行するんだ" とおっしゃる方もいるでしょう。そのような方には、window オブジェクトの onload イベントに関数をアタッチする習慣を付けることをお勧めします。次のコードは、onload イベントと onunload イベントへのアタッチの方法を示しています。
function pageLoad() { window.detachEvent(“onload”, pageLoad); window.attachEvent(“onunload”, pageUnload); //page initalization here } function pageUnload() { window.detachEvent(“onload”, pageUnload); //gadget is closing, clean up } window.attachEvent(“onload”, pageLoad);
正直「evalステートメントと同じように内部で解釈されるからです」というのもよく分からなかったけど、上記のように書くほうが良いお作法ってことですかね。アタッチする方法だと複数の関数をつけることもできる。上記コードはちゃんと後片付けもしている。なるほど。
Firefox や Opera では addEventListener、removeEventListener を使う。
if (window.addEventListener)
window.addEventListener("load", pageLoad, false);
else if (window.attachEvent)
window.attachEvent("onload", pageLoad);
else
window.onload = pageLoad;
"雷鳥 太郎" <taro@example.com> ↓ taro@example.com同様の拡張で AddressCleaner という拡張があるが、Auto Address Cleaner はメール作成中は表示名は消さず、送信時に表示名を取り除くようになっている。
| AddressCleaner | Auto Address Cleaner |
|
|
JSPをWebサーバに配置後、プリコンパイルする方法のメモ。
http://path/to/file.jsp?jsp_precompile http://path/to/file.jsp?jsp_precompile=true http://path/to/file.jsp?foo=bar&jsp_precompile=true Ant のことはよく分からないし、そのまま使えるサンプルが見つからなかった。Lambda Probe は Tomcat の管理/管理ツールとのことで良さげ。Tomcat 4.x には未対応。
ローテクながら、1つめの方法をとることに。
JSPファイルを find で列挙して sed で URL 加工、wget でアクセス。
Blogger にログインした状態でアクセスしたときだけ処理を実行する方法を、Google Analytics の自己アクセス除外設定に応用する。
Google Analytics で自己アクセスを除外する設定は Google Analytics のレポートから内部トラフィックを除外する方法 でできたのだが、ひとつ困ったことがある。
このサイトは Blogger を利用しているのだが、自分だけがアクセスできるページを作成できない。Google Analytics で自己アクセスを除外する設定をかいつまむと、こうだ。
除外用 Cookie を他人が受け取っては意味がないので、自分だけがアクセスできるページが必要ということなのだが、Blogger では公開か下書きかの2通りしかなく、隠しページのようなものを作成することはできない。
ダミーの記事やウィジェットを作成し、公開→アクセス→すぐに削除とすれば Cookie を設定できるが、手順が面倒だし Webアプリ作ったりしてると Cookie を削除することも結構あるのでますます面倒である。
そこで、Blogger にログインした状態でアクセスしたときだけ処理を実行する方法を応用する。これを使えば、Cookie を削除したり別の PC を使った場合でも、Blogger にログインしてアクセスしさえすれば、除外用 Cooke を設定することができる。
ダミーの span 要素とその display 属性をチェックするコードを前の記事のように埋め込む。処理の部分に、除外用 Cookie を発行するコードを書くだけだ。
<script type='text/javascript'>
function hoge() {
var element = document.getElementById('hoge'), value;
if ( window.getComputedStyle ) // Firefox, Opera
value = window.getComputedStyle(element, null).display;
if ( element.currentStyle ) // IE
value = element.currentStyle.display;
if ( value != 'none' )
pageTracker._setVar('test_value'); // 除外用 Cookie の設定
}
</script>
最後に、ページが表示されたら上記のコードを実行するよう、body要素を変更する。
<body onload='javascript:hoge();'>
これで、logger にログインしているときにアクセスすると除外用 Cookie が設定されるようになる。まー正直、ここまでやんなくてもと自分でも思うが。
ただ Blogger にログインしているかどうかで処理を変えたいというのは需要がありそうな気もする。Blogger Developers Network を探したが、ログイン中だけコードを出力するようなタグや機能はなさそうだった。
Blogger にログインした状態でアクセスしたときだけ表示する方法の応用。
クイックエディットアイコンは以下の span 要素の内側にある。
<span class='widget-item-control'>
<span class='item-control blog-admin'></span>
</span>
ログイン中だと内側の span 要素の display 属性が inline になり、ログインしていないときは none になっている。この状態をチェックすることで、ログインした状態でアクセスしたときだけ処理を実行することができる。
上記の要素には ID がないので、固有の ID をつけたものをテンプレートに直接埋め込んでおく。
<span class='widget-item-control'>
<span class='item-control blog-admin' id='hoge'></span>
</span>
次に、id='hoge' な要素の display 属性をチェックして、属性が none でないときに処理を実行するような JavaScript を書く。
<script type='text/javascript'>
function hoge() {
var element = document.getElementById('hoge'), value;
if ( window.getComputedStyle ) // Firefox, Opera
value = window.getComputedStyle(element, null).display;
if ( element.currentStyle ) // IE
value = element.currentStyle.display;
if ( value != 'none' ) {
// ここに実行したいコードを書く
}
}
</script>
getComputedStyle, currentStyle は、現在その要素に設定されているスタイルを取得するもの。
これで、ログイン中のときのみ、何らかの処理を実行させることができる。これを使って、Google Analytics で自己アクセスを除外するための Cookie を設定する方法を改良する。
詳細は次回。
Blogger にログインした状態で自分のブログを見ると、各ウィジェットの右下にクイックエディットのアイコンが表示される。(テンプレートによっては表示されない場合もある)
ログインしていない状態ではクイックエディットのアイコンは表示されないが、HTML コード自体は出力されていて、display: none で見えなくなっているだけである。
クイックエディットアイコンは、次のような span 要素の内側にある。
<span class='widget-item-control'>
<span class='item-control blog-admin'>
今 Blogger にログイン中です。
</span>
</span>
上記のようなコードを記述すれば、ログインした状態のときのみメッセージ等を表示させることができる。
Google Analytics ではフィルタ機能を使うことで内部アクセスを除外することができる。アクセス元を特定する方法としては3つの手段を提供している。
企業や固定IP、ドメインを持つ場合は1または2で簡単に設定できる。そうではない場合は、ちょっと工夫がいる。
ネット環境が DSL だったり、FTTH 接続でも固定 IP じゃない場合は、自分の IP アドレスが変化するので IP 指定で除外しにくい。プロバイダによっては変化する IP アドレス範囲の特定が難しい場合もある。ドメイン名もしかり。
変化する IP アドレスの範囲が分かっていて、ご近所さん(そのIPアドレス範囲のユーザ)からのトラフィックも除外してしまって OK ならば、2の方法を使うことができる。
きっちり自分のトラフィックのみ除外したい!という人は、3のカスタムフィルタを選び、Cookie を設定することになる。ヘルプセンターに FAQ として設定方法が載っているが、フィルタパターンに何を入力すれば良いか説明がない。
Google ヘルプセンター: レポートから内部トラフィックを除外するにはどうすればよいですか。
結論は、test_value と入力すれば良い。
ヘルプでは以下のコードを埋め込むよう説明されているが、赤字の部分と同じ文字列を入力すればオッケー。
<body onLoad="javascript pageTracker._setVar('test_value');">
シングルユーザモードのときは、パスワードを求められないものと思っていたが、debianを使ってみてそうではないことを知った。sulogin と init (, inittab) がキーワード。
RHEL の sulogin の ManPage の説明。
sulogin は、シングルユーザモードの時、ユーザがシステムにアクセス可能となる前に、 /etc/init によって起動される。この機能は、init が適切に変更されているシステムか、あるいは /etc/inittab にシングルユーザ login のエントリがあるシステムでのみ利用できる。
... snip ...
このコマンドが利用できるようにするには、init が /bin/sh ではなく sulogin を呼ぶようになっているか、または inittab 中にシングルユーザ ログインに対する設定がされている必要がある。例えば、
co:s:respawn:/etc/sulogin /dev/console
という行を書いておけば、シングルユーザモードでは sulogin コマンドが実行される。
/etc/inittab の書式は id:runlevels:action:process なので、上記によれば /etc/sulogin が起動するプロセスになる。RHEL では /etc/sulogin はなく、/sbin/sulogin なので、正しくは以下。
co:s:respawn:/sbin/sulogin /dev/console ・・・・・(1)
しかーし。上記ではうまく動かず。今度は init の ManPage を見てみる。ブートの項ではこう書かれている。
ランレベルを S または s にすると、システムはシングルユーザモードに入る。この場合は /etc/inittab ファイルを必要としない。シングルユーザモードでは、/dev/console で /sbin/sulogin が起動される。
さらに、ブートフラグの項ではこう書かれている。
ブートモニタ (例えば LILO) から init に様々なフラグを渡すことが可能である。 init は以下のようなフラグを受け付ける:
-s, S, single
シングルユーザモードでブートする。このモードでは /etc/inittab を
参照する。またシングルユーザモードのシェルが起動される前に
ブートアップ rc スクリプトが実行される。
まとめると、
となりそうだが、実際は常に /etc/inittab が参照されてるっぽい。本題の、「RHELでシングルユーザモードのログインにパスワードを求める」には、/etc/inittab にこう記述する。
~:S:wait:/sbin/sulogin ・・・・・(2)
(1) ではだめで、(2) とすると期待した動きになる。
debian の場合、/etc/inittab に以下を記述するらしい(未確認)。
~~:S:wait:/sbin/sulogin
はてなの方に Blogger の場合のサンプルが載っているけど、情報が古いようで現在の Blogger では使えない。以下のようにするとおっけー。
<a expr:href='"http://b.hatena.ne.jp/entry/" + data:post.url'> <img alt='このエントリーを含むはてなブックマークを表示' expr:src='"http://b.hatena.ne.jp/entry/image/" + data:post.url' title='このエントリーを含むはてなブックマークを表示'/> </a>
各エントリにソーシャルブックマークへの追加ボタンをつける方法。
ソーシャルブックマークへの追加ボタンは AddClips で簡単に作成できる。Bloggerなら作成したコードを貼り付けるだけでOKらしいけど、そのまま貼り付けてもうまくいかなかったのでメモ。
AddClipsUrl = '<data:post.url/>';
AddClipsTitle = '<data:post.title/>';
URLとタイトルのところは上記のようにしたらうまくいった。他の部分も、シングルクォートは ' と文字実体参照で記述する。(コピペして保存すれば勝手に変換されたと思う)
あとはボタンの表示位置が微妙に上にずれていて見た目が良くないので、span要素でくくって位置調整。
.post-bookmark a img {
vertical-align: bottom;
}
Microsoft OfficeそっくりのオンラインOfficeアプリ。
Think Free Office
これもDeki wikiが利用している。 Think Freeをホストしているサーバにキャッシュとかで中身保存されていないのかちょっと心配。
Lucene(ルシーン)は Javaで書かれた全文検索のライブラリ。DekiWiki が利用している。
DekiWiki、もうちょっと軽快ならいいんだけどなー。
Lucene のサンプルコードなどは 関口宏司のLuceneブログ が充実している。Lucene本の著者さんですね。
fml 3.0 (かなり古いが。。。)だと 7. SECURITY & FILTERING にてメール受信の最大サイズを設定できる。任意の値ではなく、あらかじめ決められた値の中から選択する形。
IEでは無視されるが、NetscapeやFirefoxでは同一の証明機関から発行された証明書で同一のシリアル番号があった場合、無効になるらしい。ちゃんとした認証機関から発行してもらっている分には問題ないが、自己認証局でオレオレ証明書を作ってる場合はミスする可能性もあるかも。