ブラウザを HTML 開発環境にするツール

Firefox (Firefox2, Firefox3)の場合:
– Firebug
HTML/CSS/JavaScript の調査、編集を動的に行えるアドオン。
インストールすると「ツール(T) -> Firebug」メニューが追加されます。
 
– Web Developer 日本語版(本家: Web Developer)
最近は Firebug に水をあけられていますが Firefox 1 の時代からあるアドオン。
HTML/CSS の調査、CSS の編集ができます。
また、CSS, JavaScript や一部HTML要素の無効化、FORM の GET <-> POST 変換など痒いところに手が届く機能があります。一般ユーザ向けには Firebug よりこちらのほうがよさそうです。
 
– Live HTTP Headers
HTTP リクエストヘッダ、レスポンスヘッダの閲覧ができるようになるアドオン。
インストールすると「ツール(T) -> Live HTTP headers」メニューが追加されます。


Internet Explorer (IE6,IE7) の場合:
– Internet Explorer Developer Toolbar(Microsoft 公式)
インストールすると「表示(V) -> エクスプローラバー(E) -> IE Developer Toolbar 」を選択することで HTML/CSS の調査ができるようになります。
編集は Attribute: の項目からの各タグの属性(name=”” や id=””, style=””, onClick=”” など)の変更のみに限られているようです。
ちなみに、IE8 では開発ツールが標準搭載されていて Shift+F12 を押すと起動できるとのことです(参考)。
 
– ieHTTPHeaders
Live HTTP headers の IE 版。HTTP リクエストヘッダ、レスポンスヘッダの閲覧ができます。
インストールすると「表示(V) -> エクスプローラバー(E) -> ieHTTPHeaders 」メニューが追加されます。


参考:
http://labs.unoh.net/2008/08/introduction-of-css-coding-tools.html

CPAN の IO/Uncompress/RawInflate.pm でエラー

CPAN を更新しようとしたら次のようなエラーが出た。

# cpan
cpan> install CPAN
..中略..
can’t call method “value” on an undefined value at /usr/local/lib/perl5/5.8.8/IO/Uncompress/RawInflate.pm line 64.

どうも展開に失敗しているようで、パッケージのインストール、更新ができなくなってしまっていた。
調べたところ, perl 用の Raw-Zlib 圧縮ライブラリに問題があるようだったので

pkg_deinstall p5-Compress-Raw-Zlib bsdpan-Compress-Raw-Zlib

で削除し、その後通常通り cpan コマンドを走らせたところ無事動作しました(*)。
Ubuntu なら libcompress-raw-zlib-perl を削除すればいいとのこと。
 


(*)実際には

# pkg_deinstall p5-Compress-Raw-Zlib

だけでは途中でエラーになったため

pkg_deinstall bsdpan-Compress-Raw-Zlib bsdpan-Compress-Zlib bsdpan-IO-Compress-Zlib bsdpan-IO-Zlib

で関係ありそうな port をいったん全て削除しました。
参考:
– yclog: Can’t call method “value” on an undefined value at /usr/share/perl5/IO/Uncompress/RawInflate.pm line 64

ブラウザで見ているページを編集可能にする

javascript:document.body.contentEditable=’true’; document.designMode=’on’; void 0

をアドレスバーで実行すれば、ブラウザで開いているページの画像やテキストを自由に書き換えることができます(IE6, Firefox3 で確認)。
 
編集をやめたいときは↓の一行を実行します。

javascript:document.body.contentEditable=’false’; document.designMode=’off’; void 0

 
参考:
Cut and paste one line of code to make any website editable

Firefox 3 用アドオン/テーマ

本日 Firefox 3.0 公開、ということで、おいておきますね。
それぞれ公式サイトのものを改造した非公式版なので、正式版が対応するまでの間に合わせに自己責任でご利用ください。
 
All In One Gesture Version 0.1.8 for Firefox 3.0
 
フォクすけテーマ 1.0 for Firefox 3.0
 ※タブだけテーマが適用されない不具合あり。

PostgreSQL テーブル LOCK MODE 関係図

テーブルロックモードの関係を把握しやすいように図で表してみました。
PostgreSQL LOCK MODE 関係図
() 内はそのロックを自動的に獲得するクエリです。
 
■ロックとトランザクション
SQL における排他制御の方法として、トランザクションとロックが挙げられます。
複数のクエリをトランザクションでひとつにまとめることで、(デフォルトのトランザクションレベル READ COMMITTED の場合)コミット済みの結果のみ参照されるようになり、トランザクション中の内容を外部からは見えなくなるため一見アトミック性が守られるように見えます。
 
しかし、複数の接続で同時に既存の同じレコードに対して参照と更新を分けて実行する場合などはトランザクションだけでは限界があるのも事実です。
 
たとえば以下のテーブルを考えてみましょう。

CREATE TABLE foo (
  id int NOT NULL, — 商品の識別番号
  price int NOT NULL — 値段
);
INSERT INTO foo (id, price) VALUES(1, 100); — id:1 は 100 円
INSERT INTO foo (id, price) VALUES(2, 500); — id:2 は 500 円

このテーブルに対して、以下の処理を行うものとします。

BEGIN;
SELECT id FROM foo WHERE price < 500; -- 500円未満の id:1 を得る
UPDATE foo SET price = price + 500 WHERE id = 1; — 500円未満だった id:1 を 500円増し
COMMIT;

READ COMMITED レベルで同時に同じのクエリが実行されると、id:1 が 1100 円になる可能性があります。
 
トランザクションのみでこれを防ぐには衝突する可能性のある全てのクエリのトランザクションレベルを最も厳密な SERIALIZABLE にする必要があります。

— 衝突回避版
BEGIN;
SET TRANSACTION SERIALIZABLE; — この接続のトランザクションレベルを SERIALIZABLE に。
SELECT id FROM foo WHERE price < 500; -- 500円未満の id:1 を得る
UPDATE foo SET price = price + 500 WHERE id = 1; — 500円未満だった id:1 を 500円増し
COMMIT;

ただし、 SERIALIZABLE 隔離レベルのトランザクションの実行中に他の接続で COMMIT された場合、直列性を守るためにエラーになり処理が続行できなくなります。このため、衝突した場合は ROLLBACK の後再処理を行う必要があるなど, 欠点もあります。トランザクションのみでは、参照を完全にブロックすることができないのが原因のひとつです。
 
そこで、読み込みも制御できるロックの出番というわけです。
 
■ロックの獲得方法
多くのクエリは暗黙にクエリ単位で行レベルロックを獲得しています。
ロックの種類と影響する範囲については図を参照してください。
 
複数のクエリでロックを獲得するには LOCK 構文を用います。
LOCK 構文で取得できるロックはテーブルに対するロックのみです。

BEGIN;
LOCK foo_table IN EXCLUSIVE MODE; — EXCLUSIVE ロック獲得。
SELECT * FROM foo_table;
UPDATE foo_table SET …
— その他何か色々なクエリ…
COMMIT;

たとえば EXCLUSIVE モードでロックを獲得すると、他の接続では SELECT, ANALYZE 文以外の全てのクエリ、および ACCESS_SHARE 以外の全てのロックを明示的に獲得しようとするとロック待ちになります。
※具体的には UPDATE, DELETE, INSERT 文および SELECT … FROM table FOR …, CREATE INDEX, ALTER TABLE, DROP TABLE, REINDEX, CLUSTER, VACUUM, VACUUM FULL 文の実行を防ぎます。
また、ACCESS EXCLUSIVE, EXCLUSIVE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, SHARE の明示ロック獲得を防ぎます。
 
■ロックの解放方法
ロックはトランザクションの終了時(COMMIT, ROLLBACK実行時)に自動で解放されます。
トランザクションの途中でロックだけを解放する方法はありません。
 
参考:
–トランザクションの隔離(PostgreSQL 8.3.1 マニュアル)
–LOCK 構文(同上)
–トランザクションと隔離レベルとロック(ファイヤープロジェクト)

複数ファイルの中身を一括置換するには

複数のファイルをまとめて置き換えたいときは sed を使うと便利です。
 
たとえばこのようにすると指定したディレクトリの中のすべての .html ファイルの内容を 2007年 から 2008 年に書き換えることができます。

for i in `find /var/www/html -type f -iregex ‘.*\.html’`; do
  mv $i $i.bak
  sed -e ‘s/2007年/2008年/g’ $i.bak > $i
done

影響があったファイルの一覧を得るには次のようにします

for i in `find /var/www/html -type f -iregex ‘.*\.html’`; do
  diff -q $i.bak $i
done

影響があったファイルの内容を比較する場合も diff を使います。

for i in `find /var/www/html -type f -iregex ‘.*\.html’`; do
  echo $i
  diff $i.bak $i
done

問題に気づいて元に戻したいときは *.bak を移動させれば元に戻ります。

for i in `find /var/www/html -type f -iregex ‘.*\.html’`; do
  mv $i.bak $i
done

変更が問題なければ .bak ファイルを削除して置換完了です。

for i in `find /var/www/html -type f -iregex ‘.*\.html’`; do
  rm $i.bak
done

参考:
sed の使い方

右クリック→新規作成からテキストファイルが消えた

XP の話。
検索してみると同じ症状の方が結構いたので解決方法のメモを残しておきます。
 
原因A: レジストリの HKEY_CLASSES_ROOT\.txt の ShellNew キーの内容が正しくない、もしくは不足している

HKEY_CLASSES_ROOT\.txt\ShellNew というキーがあり、NullFile という空の文字列値があるか?

ない場合は作成する。
 
原因B: レジストリの HKEY_CLASSES_ROOT\.txt の(既定)の値が正しくない
HKEY_CLASSES_ROOT\.txt の既定の値は txtfile です。
これ以外の値に書き換わっている場合(txt_auto_fileになっている、などの場合)は txtfile に変更することで解決する場合があります。
 
原因C: レジストリの HKEY_CLASSES_ROOT\.txt の PerceivedType キーの内容が正しくない、もしくは不足している

HKEY_CLASSES_ROOT\.txt\PerceivedType というキーがあり、text という文字列が設定されているか?

ない場合は作成する。
 
原因D: レジストリの HKEY_CLASSES_ROOT\Directory 以下が Windows Update で書き換わった
( http://pub.ne.jp/pchitorigoto/?entry_id=1145705 より。)

HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\New\

の(既定)の値が

{D969A300-E7FF-11d0-A93B-00A0C90F2719}

以外になっていると新規作成が正しく動作しない現象が発生するようです。
 
どうしても解決しない場合:
Windows XP なら、こちらのサイトから、「TXT File Association Fix」をダウンロードして実行するとレジストリキーを修復できます。
ただし、.txt ファイル関係の設定をリセットするためテキストファイルへの関連付け等が外れてしまいます。
参考:
New command missing in Windows Explorer(Microsoft サポートオンライン:英語)
Windowss XP File Association Fixes

tips – PuTTY でコマンドライン – サーバごとに接続設定を変える

PuTTY は SSH と互換のコマンドライン引数を持っているため、以下のようにしてコマンドラインからユーザ foo, ドメイン example.com でログインできます。

putty foo@example.com

環境変数 PATH に putty.exe (または puttyjp.exe)へのパスを通しておけば、Windows の「ファイル名を指定して実行(Windowsキー + Rキー)」で実行できるためかなり便利です。

GUIでのログインと同様、サーバごとに秘密鍵や文字コードの設定−保存(ストア)されたセッション−を切り替えてログインしたい場合は、

putty -load “セッション名”

とすると指定した設定(セッション)をコマンドラインから読み込んでログインすることができます。セッション名を user@hostname の書式で設定しておけば

putty -load foo@example.com

のように通常のログインに -load を加えるだけでよいので管理、利用が容易になります。

参考:
PuTTY でデフォルト設定を変更する(過去記事)
ssh -R の応用例(過去記事)
ssh を任意のポート、プロトコルの proxy にする(過去記事)

tips – 色々なプロトコルをネットワークドライブに使う

最近は便利な世の中になったもので、色々なストレージサービスが増えてきましたね。
エクスプローラの「ネットワークドライブの割り当て」機能を使うとネットワークごしのドライブでも “Z:\foo.txt” など仮想のドライブとして認識できるため、ファイルの編集、作成、削除など、ほとんどのアプリケーションでの操作がまるでローカルHDDのように扱えるようになります。そこで、色々なネットワークストレージをネットワークドライブ化できるソフトウェア/方法についてまとめてみました。
 


– Gmail をネットワークドライブ化
Gmail Drive shell extension
エクスプローラのシェル拡張として動作するようです。
日本語での解説は「臨機応変? – Gmailをネットワークドライブとして使ってみる」が参考になります。


– FTP をネットワークドライブ化
Novell NetDrive というフリーソフトを使うと FTP, WebDAV プロトコルが使えるサーバをネットワークドライブにできます。ライセンスを他社に譲渡し、WebDriveという有償の製品になったため、開発元の novell.com からはダウンロードできなくなっていますが、サーチエンジンで検索すると見つかります。一応うちにも置いておきます。
 
ミラー:netdrive.exe をダウンロード
 
なお、Windows Vista の場合は NetDrive が非対応のため WebDrive を使う必要があります。
ネットワークドライブではなく “ftp://username:password@hostname/path”の形式ならばエクスプローラ標準でフォルダのように仮想的に扱うことができますが、当然ですが、こちらはFTP対応していないアプリケーションからはアクセスできません。


– WebDAV をネットワークドライブ化
前述の NetDrive, WebDrive が WebDAV に対応しています。
また、Windows Vista の場合は標準で対応しているようです。


– Amazon S3(Simple Storage Service) をネットワークドライブ化
Amazon S3 は Amazon が提供する 1GB あたり 15セントで使えるネットワークストレージサービス。容量制限はありません。
 
Jungle Diskというシェアウェアでネットワークドライブ化できます。
また、前述の WebDrive も Amazon S3 に対応しているようです。


– SFTP,SCP, Frontpage server をネットワークドライブ化
前述の WebDrive がこれらに対応しています。


– Xdrive をネットワークドライブ化
AOL が提供している Xdrive というフリーのストレージサービス。
1アカウントあたり 5GB のストレージを無料で利用できます。
Downloads から Xdrive Desktop をダウンロードすればネットワークドライブ化できそう。


– Windows Live SkyDrive をネットワークドライブ化
Microsoft が提供する Windows Live SkyDrive というフリーのストレージサービス。
hotmail のアカウントごとに 5GB のストレージが無料で利用できます。
今のところは無理そう。

パーティション暗号化(gbde, geli)

http://hsdiary.blogspot.com/2007/03/comparison-of-gbde-and-geli.html

FreeBSD では FreeBSD 5 から使える gbde (GEOM bde)と、FreeBSD 6 から追加された geli (GEOM eli) の二つの暗号化されたファイルシステムが提供されていますが、geli のほうが圧倒的にパフォーマンスが上らしい。

geli を利用できるようにするには、/boot/loader.conf に以下の行を追加するのが簡単です。

geom_eli_load=”YES” # gbde の場合は geom_bde_load=”YES”

一時的なものでいいのであればもちろん

root# kldload geom_eli

でロードできます。

参考:
–geli(8)
–mdconfig の使い方色々
GEOM_ELI を PGPDisk や TrueCrypt のように使う方法。