zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2010年12月01日(Wed)

[linux] GNU tar

GNU tar では -z とか -j とかつけなくても「tar xf archive.tar.gz」で gz や bz2 などを自動認識してくれるようになっています。(NEWS ファイルによると 1.15 から)

1.19 以降では --exclude-caches で CACHEDIR.TAG のあるディレクトリの中身を除外したり、 --exclude-vcs で CVS/ や .svn/ などを除外したりも出来るようになっています。

CACHEDIR.TAG の除外を rsync でもやりたいと思ったら、直接対応していなくて find と「rsync --exclude-from」の組み合わせになってしまって効率が悪くて困っているので、何か良い解決方法があれば教えてほしいです。


2010年12月02日(Thu)

[ruby] ruby -run -e httpd -- --port=3000 .

(この記事は Ruby Advent Calendar jp: 2010 : ATND の2日目です。前日は yhara さんでした。)

ruby には 1.8.0 のころから un.rb というライブラリが標準添付されていて、 「ruby -run -e cp -- -p foo bar」や「ruby -run -e help cp」のように使えるようになっています。 どんなコマンドが使えるのかは「ruby -run -e help」を参照してください。

何のためにこういうものがあるのかというと、 win32/Makefile.sub や mkmf.rb で生成される Makefile で OS に依存せずに MAKEDIRS などを使えるようにするため ([Ruby] un.rb) というのが由来で、「-run」で実行できるようにこんな名前になっているそうです。

その un.rb に ruby 1.9.2 から httpd が増えていて「ruby -run -e httpd -- --port=3000 .」のように実行すると http://localhost:3000/ でカレントディレクトリのファイルが見えるようになります。

今まででも http://yoosee.net/d/archives/2009/04/03/002.html の「ruby -r webrick -e 'WEBrick::HTTPServer.new({:DocumentRoot => "./", :Port=>8000}).start'」のように起動することはできましたが、これだけではシグナルハンドラが WEBrick のデフォルトのままになってしまい、 Ctrl+C などで終了できなくて不便でした。 un.rb の httpd ではそれも含めて設定してくれるため、非常に使いやすくなりました。

ただし Windows で ruby 1.9.2p0 を使っている場合は lib/un.rb (httpd): SIGQUIT and SIGHUP are not guaranteed to exist. のバグでひっかかって起動しないため、「Signal.trap("QUIT", shut)」と「Signal.trap("HUP", shut)」の行を削除するか、チケットのところからたどれるのと同じように「if Signal.list.has_key?」を付ける必要があります。 すでに修正がバックポートされているので、次にリリースされる 1.9.2pXX では Windows でも問題なく起動するはずです。

最後に httpd のヘルプを載せておきます。 「--help」は optparse による自動生成のメッセージのため、コマンドの部分が「-e」になっていたり、オプションの後の DocumentRoot がなかったりしてわかりにくいため、 help コマンドを使う方が良いようです。

% ruby-1.9.2 -run -e httpd -- --help
Usage: -e [options]
        --bind-address=ADDR
        --port=PORT
        --max-clients=NUM
        --temp-dir=DIR
        --do-not-reverse-lookup
        --request-timeout=SECOND
        --http-version=VERSION
    -v
% ruby-1.9.2 -run -e help httpd
Run WEBrick HTTP server.

  ruby -run -e httpd -- [OPTION] DocumentRoot

  --bind-address=ADDR         address to bind
  --port=NUM                  listening port number
  --max-clients=MAX           max number of simultaneous clients
  --temp-dir=DIR              temporary directory
  --do-not-reverse-lookup     disable reverse lookup
  --request-timeout=SECOND    request timeout in seconds
  --http-version=VERSION      HTTP version
  -v                          verbose


%

2010年12月03日(Fri)

gnupg の 2038 年問題?

gnupg の鍵の有効期限を 2038 年より後にしてみているが、 64ビット環境だとちゃんと表示されるのに 32 ビット環境だと ????-??-?? になってしまう。 Seahorse (Ubuntu lucid の 2.30.0-0ubuntu2 で確認) だともっとひどくて 1904 年扱いになってしまっていた。

amd64の環境:
% gpg --list-keys B4222F7A | head -n1
pub   4096R/B4222F7A 2010-06-27 [満了: 2040-08-10]
x86 の環境:
% gpg --list-keys B4222F7A | head -n1
pub   4096R/B4222F7A 2010-06-27 [満了: ????-??-??]

2010年12月14日(Tue)

[linux] マウントしていないCDのボリュームラベルを調べる

「file -sL /dev/cdrom」で取得できた。

/dev/cdrom から実際の光学ドライブのデバイス (sr0 とか) へのシンボリックリンクがあるので「-L」でシンボリックリンクをたどるようにして、「-s」で「block special」と出させずに実際のドライブの中身を読むようにしたらボリュームラベルも含めて読み出すことが出来た (/dev/sr0 の読み出し権限のあるユーザで)。

% file -sL /dev/cdrom
/dev/cdrom: # ISO 9660 CD-ROM filesystem data 'CDROM                          ' (bootable)
% eject
% file -sL /dev/cdrom
/dev/cdrom: writable, no read permission
%

それから「eject -t」でトレイを閉じることが出来ると言うことも知った (閉じる機構のあるドライブの場合)。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73