2011年12月 のアーカイブ

windows(ntfs)でpdumpfsすると次第に遅くなって最後にフォーマットするしかなくなる

2011年12月21日 水曜日

ntfsでしばらくpdumpfsを使ってみて分かったのですが、世代が増えてくるとバックアップの所要時間がだんだん延びてきます。5万ファイルくらいある”My Documents”を毎日pdumpfsしていたところ、当初30分程度だった一回のバックアップが、3ヶ月後くらいには3時間もかかるようになってしまいました。これはLinuxで一般的なファイルシステムを使っているときには感じなかったことです。まあこれは、放っておけばよい話ではあります。

問題は、バックアップしたデータを消すのにとんでもない時間がかかるのです。pdumpfsは、年\月\日のディレクトリを掘ってそこにバックアップを作成しますが、この不要な日付のバックアップを消そうにも、時間がかかって消せないのです。

Windows付属のRMDIR(RD)とか、Cygwinのrm -rとか、FastCopyの削除とか試したのですが、速度は改善できませんでした。バックアップの世代が増えてゆくと、削除の所要時間が増えるような気がします。あまりに時間がかかるので、何度もディスクをフォーマットし直しました。

バックアップを削除しない方針でいけば、ある程度は使えます。ただ、世代が増えるほどバックアップの所要時間が増えてゆくので、いつかは限界に達すると思われます。

上記のことはntfsで顕著で、Linuxでext3とかext2で使う場合だとか、Solarisでufs使う時にはまったく気づかなかったことです。

pdumpfsは、シンプルで、すごく優れたバックアップの方法です。Windows版バイナリも配られていており、ntfsだったらハードリンクも使えるので、Windowsで使えますが、以上のような欠点があります。

iPod nano (1st generation) 交換プログラムに応募した(が1ヶ月経っても返ってこない)

2011年12月20日 火曜日

集荷の際のドタバタは、

iPod nano (1st generation) 交換プログラムに応募した(が集荷に来ない)@馬坂コム

に書きました。しかし、今日で集荷から1ヶ月が経ったのですが、まったく音沙汰ありません。

Appleのページでステータスを見てみると、”December 6, 2011 Return”なのです。でも横に”Product replacement pending”とあって、よく意味がわかりません。

これまでの経過

11/14 申し込み。11/15集荷との表示。

11/15 集荷無し

11/20 ヤマトが突如集荷に来る

12/6 Apple リペアセンターにて受領した旨メールが届く

12/20 何も音沙汰無し

全体的に説明不足で、届く連絡もイマイチ意味が分かりません。

12/22 追記

6週間かかるらしいです。気づきませんで、失礼しました。待とうと思います。

1/9 届きました!しかも、最新の8GB iPod nano第6世代になってかえってきました。

iPod nano 1st generationが6th generationになって届いた@馬坂コム

zshの履歴をマージする

2011年12月19日 月曜日

複数のzshのコマンド履歴ファイルを1つのコマンド履歴ファイルへマージするperlスクリプト。

複数のホストを使っていると、それぞれのホストでzshのヒストリが溜まってきます。これらをマージして1つのファイルにまとめるスクリプトです。ソースは2ch(zsh入門パート2260)です。ここに書いてあったものにuniqする処理を加えただけです。

zshは、ターミナル間のコマンド履歴はファイルを介して自動的に共有できます。それなので、単一のホストを使用している場合はもちろん、ホームディレクトリをNFSでマウントしたような場合であっても、それぞれのホストで打った履歴は共有して記録することができます。そういう場合にはこれを使う必要はありません。このスクリプトは、まったく異なる環境で記録した複数のヒストリファイルをマージすることを想定しています。

このスクリプトは、setopt extended_historyオプションをセットしたzshで記録した履歴ファイル(「日付入り」の履歴ファイル)を期待して動作します。つまり、

:開始時間:所要時間;コマンド

の形式の履歴ファイルです。

USAGE: cat history-file1 history-file2 | histmerge > history-merged
#!/usr/bin/perl -w
use strict;
my @lines;
while (<>)
{
  while (/\\\Z/)
  {
    $_ .= <>;
  }
  push @lines, $_;
}
my %seen=();
print grep { not $seen{$_}++ } @lines;

動作例

$ sdiff .zsh-history.1 .zsh-history.2
: 1324302361:0;ls           : 1324302361:0;ls
: 1324302371:0;ls -la       : 1324302371:0;ls -la
: 1324302378:0;exit         : 1324302378:0;exit
                          > : 1324302690:0;for i in *; do\
                          > echo $i\
                          > done
                          > : 1324302697:0;exit

マージしてみた様子

$ cat .zsh-history.1 .zsh-history.2| ./merge
: 1324302361:0;ls
: 1324302371:0;ls -la
: 1324302378:0;exit
: 1324302690:0;for i in *; do\
echo $i\
done
: 1324302697:0;exit

JIS規格のPDFの仕組みを眺めてみた

2011年12月14日 水曜日

JIS規格は、日本工業標準調査会のWebページで閲覧できます。

ただし、PDFはローカルに保存できず、IEの画面から直接参照しないと見られません。さらに、印刷した場合に文字が読めなくなるような仕組みまで組み込まれています。この手の込んだ妨害工作がどのように実現されているか調べてみました。

1. ローカルに保存しずらくする仕組み

PDF内部にメニュー類を非表示にする設定が書き込まれていて、一見保存できないようになっています。

ただ、AdobeReader Xとかだと、カーソルを画面下方向に持ってくると保存ボタンが出てくるので、それを選ぶと普通に保存できます。あるいは、表示した状態で、F8キーを押すとメニューが現れるので、これで保存できます。

2. ローカルでの閲覧を妨害する仕組み

このPDFには、IEの中から直接開かないと画面を真っ白にするJavaScriptが埋め込まれています。

該当箇所を削除すれば良いのですが、Windows環境では、以下に書いてあった手順で上手くいきました。

JISの保存・閲覧方法(無料)

knifeでPDFを分割するときに、JavaScriptだとか、Annotsだとかが切り捨てられて、欲しい部分だけが残るしくみです。

3. 印刷を妨害する仕組み

Adobe Readerでは、閲覧はできるものの印刷するとうまくいかないという巧妙な仕掛けが施されていました。この仕組みは、スキャンした画像に重ねるテキストの属性を青の塗り潰しにすることで実現できるみたいです。この様子は、xpdfで見るとよく分かります。

これは、印刷するときに、「詳細設定」で、「画像として印刷」にチェックしとけば、きちんと印刷できます。

PDFからこの障害を取り除くには、BTからETの間にある埋め込みテキストで、”0 Tr”(塗りつぶし)などの指示を、”3 Tr”(透明)に置換すればokです。

4. qpdfのこと

unixなどのコマンドラインを使えば、qpdfと若干のperlを使って、都合の悪い部分をバッチ的に除去できます。qpdfは、pdf → pdfのフィルタです。

暗号化されたJIS PDFの復号は、オプション”--decrypt“です。

PDFを読みやすく(qdf形式)するには、オプション”-qdf”を付けます。qdf形式のPDFは、改行やコメントの入った読みやすいPDFで、もちろんAdobeReaderで読めます。

これをエディタで編集した後、qpdfに同梱されている”fix-qdf”で参照を直して、良ければ最後に、再度qpdfを通すと、コンパクトなpdfが出来上がります。