2008年6月14日

iPodでRFCを読むためのシェルスクリプト

標準ドキュメントを読み進めないといけないので、iPodの「ノート」で持ち運べるようにしてみました。これで通勤電車の中でも読み進めることができます。文字が小さいのが欠点ですが、そこは若さでカバーするという方向性で。 iPhoneを購入すればネットワーク越しにドキュメントを読めるようになりますが、生憎と私はauユーザーです。そもそも、地下鉄通勤だと電波が使えないので、ローカルに保存した方が何かと都合が良いのです。パケット代もかかりませんしネットワークによる遅延もありません。 というわけで、iMacにiPodをつないでシェルスクリプトを実行するとRFCドキュメントをiPodに転送できるようにしました。 iPodのノート機能では一つのテキストファイルは4KBまでしか表示されないので、適当なファイルサイズに分割する必要があります。バイト長をいちいち計算しても構わないのですが、RFCの文書では改頁記号(バックスラッシュ+F)を使ってくれているので、これで頁毎にファイルに保存することにします。 MicrosoftのWordが普及した現在だとテキストファイルは見栄えがしませんが、こうして様々な機器に簡単に転送できますので、定型のフォーマットを決めておくことは大事だと思いました。 ######################################## 使い方 「rfc2ipod.sh」の「IPODNAME」を変更すればMacだと利用できると思います。Windowsの場合はそもそもシェルスクリプトが使えないのでcygwinとかが必要ですが、「IPOD」の部分を変更すれば多分大丈夫だと思います。
  1. 「split-by-page.awk」と「rfc2ipod.sh」を適当なディレクトリに保存します。
  2. 「rfc2ipod.sh」に実行権限を付加します。
  3. iPodを接続します。
  4. コマンドを実行します。
デスクトップにショートカットアイコンを作成すると簡単に実行できそうですが、引数を与える方法が分かりません...AppleScriptとかだと簡単にできるのかもしれませんが、これはいつか気が向いたときにでも。 HTTP-1.1に関するRFCを取得する方法は次のようになります。
$ chmod +x rfc2ipod.sh
$ ./rfc2ipod.sh 2616
読み終わったら掃除します。
$ ./rfc2ipod.sh clean
######################################## split-by-page.awk
{
    split(FILENAME, filename, ".")
    if($0=="\f" || !output)
        output = sprintf("%s-%03d.txt", filename[1], ++page);
    else
        print $0 >> output;
    close(output)
}
rfc2ipod.sh
#!/bin/sh

##
# @file   rfc2ipod.sh
# @author Kitazaki, Shigeru
# @see    http://developer.apple.com/ipod/iPodNotesFeatureGuideCB.pdf
# @brief  Retrieve RFC document via HTTP,
#         and split document into page by page.
#         This is useful to save in iPod, which is
#         restricted 4KB for one text file.

END_POINT=http://www.ietf.org/rfc

SPLITTER=split-by-page.awk

IPODNAME=KSHIGERU
IPOD=/Volumes/$IPODNAME

if [ -n "$1" ];
then
    case $1 in
        [0-9]*)
            if [ -d $IPOD ];
            then
                doc=rfc$1.txt
                wget -O $doc $END_POINT/$doc
                awk -f $SPLITTER $doc
                mv  rfc$1-* $IPOD/Notes
            else
                echo No iPod device in \'$IPOD\'.
            fi
            ;;
        clean)
            rm -f rfc*.txt
            if [ -d $IPOD ];
            then
                rm -f $IPOD/Notes/rfc*.txt
            fi
            ;;
        *)
            echo Enter valid number.
            ;;
    esac
else
    echo Usage:
    echo '\t' $0 RFC-number
    echo '\t' $0 clean
fi
コメントを投稿