Smarty + overLIB で簡単にポップアップ

overLIB は簡単に見栄えのいいポップアップ表示を行うためのフリーの JavaScript ライブラリです。overLIB は PHP/Smarty なしでも勿論動作します。
overLIB 単体を利用する場合は次のようにします(公式マニュアルより抜粋)。

<!– 必須の初期化処理(ひとつのページにつき一度だけ必要) –>
<div id=”overDiv” style=”position:absolute; visibility:hidden; z-index:1000;”></div>
<script language=”JavaScript” src=”overlib.js”><!– overLIB (c) Erik Bosrup –></script>
<!– マウスオーバー時に ポップアップを表示する –>
 <a href=”javascript:void(0);” onmouseover=”return overlib(‘This is an ordinary
  popup.’);” onmouseout=”return nd();”>here</a>

Smarty のテンプレートでは popup_initpopup というカスタム関数を使えば、さらに簡単に overLIB を利用する事が可能です(Smarty の公式マニュアルより)。

{* popup_initは popup を使う前に、<BODY>から</BODY>の間で一度だけ呼び出す必要があります(訳注: この文章は原文とは異なります 😉 *}
{popup_init src=”/javascripts/overlib.js”}

{* マウスオーバー時にポップアップウィンドウを表示するリンクを作成する *}
<a href=”mypage.html” {popup text=”This link takes you to my page!”}>mypage</a>

{* popup の text ではリンク等の HTML 文も利用可能です *}
<a href=”mypage.html” {popup sticky=true caption=”mypage contents”
text=”<UL><LI>links<LI>pages<LI>images</UL>” snapx=10 snapy=10}>mypage</a>

参考:
overLIB 公式
Smarty 公式
Smarty 2.6.6 日本語マニュアル

Selenium – HTMLベースの HttpUnit

http://www.openqa.org/selenium/index.html
 
HTMLでテストケースを書いて、ブラウザで実行できる Web 用の xUnit 系テストツール。実装は JavaScript です。
同僚経由で知りましたが、かなりいいです。
 
追記: これを Firefox の拡張で行えるようにした Selenium IDE というものもあります。
ブラウザでの動作を記録してそこからテストを生成してくれるというものです。
テストの生成から実行まで全て短時間で GUI でできるというのが素晴らしいです。作成したテストはもちろん本家 Selenium でも使えます。これから何度もお世話になりそう。
なお、この拡張は日本で作られた Selenium Recorderがベースになっています。
 
参考:
webアプリケーションテストツール seleniumがヤバすぎる(2nd life)
SeleniumIntegration
– [Web アプリケーションテストツール Selenium のテスト記述から開放してくれる Firefox 拡張 Selenium IDE|http://cl.pocari.org/2006-02-15-3.html]]

MD5 クラッキング

とりあえず何でもハッシュにしておけば安全、は間違いです。
CRC32 等、ハッシュアルゴリズムとソースデータの性質によっては衝突する可能性が高くなりますし、ハッシュにすると、ハッシュ自体が表現できる範囲を超えた数を検査すると必ず重複します(CRC32 なら 32ビット, MD5 なら128ビット)。
また、いくら不可逆とはいえ、元のデータが簡単に類推できるものなら総当たりで調べる事が可能(*1)です。
たとえば単純に現在時刻のタイムスタンプ(や精度が十分に高くない乱数)からのハッシュ、ユーザのインプットなど、外部に判明している値からのハッシュ、アルファベット1文字や単純な繰り返しからのハッシュは推測されやすく安全とはいえません。
さらに、類推ができなくても元データの表現している範囲が狭いのであれば衝突の確率も高くなります。また、MD5 には元データさえわかれば、全く同じハッシュを持ちつつ、元のデータを改ざんできる脆弱性がある事も判明(*2)しています。
 
とはいえ、以上の性質を理解した上で、一時的な値として利用する分にはハッシュというのは価値の高いものだと
 
 *1:
XMD5.org
Project MD5 RainbowCrack
  メモリ消費を犠牲に処理速度を向上する技法を使ったMD5 の総当たりチェックプログラム. Windows 版もあります。
  8 文字までの半角英数字文字列であれば数分で解読できるとのこと。
  少し前までオンラインでも試せましたが、現在はオンライン版は公開終了しているようです。
 
 *2: 非公開なデータ(一部、あるいは全て)が十分に長くなるようにし、かつハッシュ値の有効期間も限定するなど、制限を設ける等回避方法もあります。あるいは(今のところ)安全な SHA-256 を使うのも方法です。
SHA-0、MD5、 MD4にコリジョン発見、reduced SHA-1も(/.j)
MD4/MD5 コリジョンの実証コードが公開(/.j)
RFC4270 インターネットプロトコルにおける暗号技術的ハッシュ関数についての攻撃

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

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