端末での作業を記録/再生する

script コマンドは標準ではいってますが、必ずしも視認しやすいわけではないのであんまり使ってなかったりします。
 
そこで ttyrec (port: misc/ttyrec) というものを導入してみました。時系列まで記録され、実際に作業してるかのように再生できるあたりが面白いです。利用の仕方は script (や通常のシェル)と同じように

ttyrec output.tty

とすれば記録を開始します(入出力を記録して転送するだけのシェルで現在のシェルへの動作をラップする)。
終了するときは

exit

でOKです。
再生するときは

ttyplay output.tty

再生のみでファイル操作は行わないのですが、知らないと焦りそうです。
ちなみに

ttyplay -p output.tty

とすれば
tail -f の動作のような、リアルタイム再生も可能です。
拡張範囲が広くてなかなか面白いし便利ですね。
 
参考:
– 横着プログラミング第 4 回: ttyrec 端末を録画再生するツール

HTTPS でクライアント認証に証明書を使う

電子申請や決済サイトでの管理など、各所で利用されてきているので導入してみました。
以下は自分が承認した証明書のみを受け付ける時の設定手順です。

1. CA 構築のための鍵のペアを生成する
2. Apache の設定で、クライアント証明書が承認を要求して CA を参照するように設定する
2. クライアント用の鍵のペアを生成する
3. クライアント用の鍵から証明書を作成する
4. 証明書を .p12 形式に変換する
5. 4 で作った証明書をクライアントのブラウザにインポートしてもらう

という手順を踏めば見られるようになります。証明書がないと閲覧不可になります。
参考:
– SSL 入門
– OpenSSL を使った CA の構築

AVI, MPEG, QuickTime, WMV などのムービーを FLV やフラッシュに変換する

Linux, BSD:
FFmpeg
Windows:
Riva FLV Encoder
いずれもフリー。後者は拡張子を自分で操作することで swf に変換できるとのことです。
 
検索用キーワード: wmv2flv,mpeg2flv,mpg2flv,avi2flv, wmv2swf,mpv2swf,mpeg2swf,avi2swf
 
Riva FLV Player という flv を再生できるフリーソフトもあるようです。
 
参考:
– Riva FLV Encoder と HugFlash
 解説サイト。

メモ – rsync のススメ

同期に使う rsync, なかなかいいですよ。
scp 使いの方は、ほぼ同じ感覚で利用できます。
adhoc に開発環境とテスト環境を同期させるのにも使えたりします(CVS などで管理していない場合とか)。
 

scp -pr from[ from2[ from3 …] ] to

に対して

rsync -a –rsh=ssh from[ from2[ from3 …] ] to

のように使えます。差分コピーを行っているのか, 2回目以降は scp よりはるかに高速です。
さらにオプション次第で同期の動作を制御できます。–rsh=ssh は RSYNC_RSH で事前に設定することで省略できます。

例:
rsync -a –rsh=ssh ~/public_html user@sync.example.org:

とすれば sync.example.com サーバの user アカウントの ~/public_html をローカルの ~/public_html に同期します。
 
参考:
man rsync

CUI で SSL 証明書と秘密鍵の中身を表示する

OpenSSL プログラムを利用することで表示が可能です。
– server.crt という証明書の情報を表示する。

openssl x509 -noout -text -in server.crt

– server.key という RSA 方式秘密鍵の情報を表示する。

openssl rsa -noout -text -in server.key

 
参考:
– トラブルシューティング – サーバが起動したように見えるが、セキュアサイトにアクセスできない(Linux JF)

tips – 汎用インクルード用ファイルでの include, require では dirname(__FILE__) を使う

他所様のコードを見ていると、

require ‘../include/conf.php’;

などというように(./ や ../ を含む)相対パス指定しているのを見掛けるのですが、これには落とし穴があります。
たとえば上のコードが書いてあるファイルが script/foo.php だとします。
別のディレクトリから foo.php を include したいと思い、
public_html/main.php で

> require ‘../script/foo.php’;

とすると、

Fatal error:main(../include/conf.php)[function.main]: failed to open sream: No such file or directory at …

のようなエラーが出て正常に動作しない、という結果になります。
 
これは PHP では

PHP5 で PEAR の内部で Non-Static method エラーが出る

PHP5 で set_error_handler() を利用していると、PEAR のライブラリの各所(PEAR::isError, DB::connect など)で E_STRICT(=2048) が発生します。
set_error_handler の呼び出しを次のように変更すると回避可能です。

変更前:
    set_error_handler(‘handler’);
変更後:
 define(‘PHP5’, version_compare( phpversion(), “5.0.0”, “>=” ));
 if(PHP5){
     $old_error_handler = set_error_handler(‘handler’, E_ALL);
 }else{
     $old_error_handler = set_error_handler(‘handler’);
 }

バージョンに応じて第二引数を与えているのがミソです。もちろん、PHP5だけに対応するのであれば、単純に既存のものに第二引数を与えればいいだけです。
 
PHP5 (5.0.5 で確認)では static メソッドの認識が微妙ですね。
 
参考:
– #1491(Make code work on both PHP4 and PHP5) (LiveSupport – Trac)

Smarty で JavaScript や CSS を使うと構文エラーになる対策

{literal} 〜 [/literal}

で挟むとその間にあるものは、Smarty の構文解析を行いません。
互換性を考えないのであれば公式マニュアルにあるように left_delimiter と right_delimiter を {, } から、<!–{, }–> に変更するというのもスマートです。ただしその場合、タグの属性の一部を変数にいれる使い方をすると、ソースはプレーンな HTML ではなくなりますが..。

<option value=1 {checked}>

 
参考:
– Smarty の構文解析を回避する(Smarty 2.6.3 マニュアル)