SoftwareDesign総集編購入/スクリプトを書いてもうちょっと便利に

久々のブログ投稿です。Loud Twitterに荒らされていた(自分で設定していたんだけど。。)エントリはすっきり削除して、ぼちぼちテーマを決めてエントリを書いていこうと思います。

さてさて、タイトル通り、SoftwareDesignの総集編を買いました! 過去の記事を検索できるのは大変便利で、とりあえずiPhoneにつっこんでGoodReaderで常駐先でも読んでいます。

Software Design 総集編 【2000~2009】(DVD付)

Software Design 総集編 【2000~2009】(DVD付)

ただ、ファイル名がこんな感じなのがイマイチ不便よね。

と言うわけで「元のファイル名_タイトル.pdf」の形に10年分まとめてリネームしてくれるようなスクリプトを書いてみました。sedで上手く抜けなかったので、何故かrubyでゴリ押してます。そしてたぶんMacOSX10.4以上でしか動きません。

#!/usr/bin/ruby -Ku

require 'find'

#
# PDFプロパティの「タイトル」を取得する。
#
def getPDFTitle( pdfFileName )
    # NOTICE: たぶん、MacOSX依存のコマンド
    result = `mdls -name kMDItemTitle #{pdfFileName}`
    if result !~ /.*null.*/ then
        title = result.scan(/".*"/)[0].gsub('"', '').gsub('/','')
    else
        title = ""
    end
    return title
end

#
# リネーム対象のファイルリストを取得する。
#
def getFileList( pathName )
    fileList = []
    Find.find( File.expand_path( pathName )){ |path| 
        # 拡張子.pdfのファイルをリストに格納
        fileList.push path if File::extname( path ) == ".pdf"
    }
    return fileList
end

if __FILE__ == $0 then
    targetDir = ARGV[0]
    if targetDir == nil then
        puts "Usage: ruby -Ku pdf_rename.rb target_dir"
        exit
    end

    fileList = getFileList( targetDir )
    fileList.each{ |path|
        begin
            toName = File::dirname( path ) + "/" + File::basename( path ).delete(".pdf") + "_" + getPDFTitle( path ) + ".pdf"
            File.rename( path, toName )
        rescue
            puts "ERROR: Rename failed " + path
        end
    }
end

動き

  • 引数に指定したディレクトリ以下のPDFファイルを再帰的に探査します。
  • 引っかかったPDFファイルを軒並み「元のファイル名_タイトル.pdf」の形に変換します。
  • 上手くいかなかったらそのファイルだけ諦めます。

 ※サブディレクトリも対象になるので注意して下さい。

使い方

上のスクリプトをpdf_rename.rbみたいな名前で保存して、以下のようにぽちっとなして下さい。

ruby -Ku pdf_rename.rb /PDFを保存しているディレクトリ名をフルパスで

するとこんな感じになります。


MacOSX依存の理由

mdlsというコマンドを利用してファイルのメタデータを取得しています。

いろいろ表示されるんですが、「-name プロパティ名」とオプションを指定すると、指定したプロパティだけ出力できます。

で、sedかなんかでダブルクォーテーションの中身を抜けばタイトルが取得できるという寸法です。

でも、何故かsedで上手くいかなかった

mdls -name kMDItemTitle Keynote09_UserGuide_J.pdf | sed -e 's/.*"\(.*\)".*/\1/'

こんな感じでタイトルだけ抜ける予定だったのですが、何故か処理が固まってしまい、ついカッとなってRubyで書いちゃいました。

echo 'kMDItemTitle = "hogehoge"' | sed -e 's/.*"\(.*\)".*/\1/'
# => hogehoge

って感じで上手く行くんですけどね。もしやタイトルの中にシングルクォーテーションとか入ってるとダメなのかしら。

mdls以外でメタデータを取得する方法は?

  • バイナリで頑張る。
  • ライブラリなんかを頑張って探す。

RubyのPDF系ライブラリは何だか面倒くさそうなので使う気になれませんでした。

総括

SoftwareDesign総集編はコストパフォーマンス最強すぎるので、買えば良いと思います!

DevLoveテスト祭りから帰宅

Developer Testing vs QA Testingという何でvsしてるのかよく分からないけど、面白い祭りでした。

開発者だからDeveloper Testingだけで良いなんて言う立場では当然なくて、あの場にいる皆が結局のところ、今の開発がどうすれば良くなるのかを真剣に考えているところが興味深かった。たしかに手法なんていうのはその言葉の通り手段でしかないからね。さすがにもう、手法の優劣を競うような中2病はいないということか。

正味のところ鈴木さんの話をもっと聞きたかった。なんと言うか、話の途中でいきなり話を切られたような気がして。固いテストの話って、いつでも聞けるようで、実は全然聞けないトピックじゃないですか。こういうのをもっと体系的に知りたい。

「テストケースを書くのはテスト設計ではなくて、実装。それを設計だなんて言ってるのは、とんでもなくヒヨっ子の技術者だ」

はい、耳が痛いです。。

MacOSXアップデート後にUSB周りがおかしくなる事象について

2chMac板を覗いてみたら、結構起こっている現象らしい。
特にUSB HDDを活用している人には厳しい現象のよう。

追加アップデート待ちかなぁ。元に戻すのはどうすれば良いのやら。。

結局Carbon Emacsを使っています

先日散々いろんなエディタをdisったあげく、Carbon Emacsをメイン使いしております><
Macだとデフォルトで描画にアンチエイアリスがかかる点がニクすぎます。

設定がメンドクサ過ぎる点も以下のサイトを参照させて頂き幸せになれました。
皆さんも幸せになってください><
blog.katsuma.tv

Macで使うテキストエディタ

いろいろと試してみてはいるものの、全くしっくりきていません。

Macで試したテキストディタ

  • CotEditor
  • JEditX
  • mi
  • TextMate(日本語がふつーに使えりゃいいのに。。)

仕事ではWindowsを使用しているので、メインでSakura Editorを使用しています。
あんまコーディングしないのと、矩形選択とマクロの使い勝手がかなりよろしいので重宝しています。

で、Mac版Sakura Editorなんてあれば良いものの、ないので代替となるエディタを3ヶ月経った今でも探し続けているのですが、なかなかないものですねえ。

Macで一番気に食わないのが、キーボードだけで矩形選択できないこと。Option + マウスでドラッグが基本動作です。これが最高に気に食わない。あと、なぜかキーボードマクロ機能がない。Apple Scriptを扱えるエディタは数あれど、何故かRecordableではない。。別にそんな高度なマクロ機能は使わないのだけど。帯に短し、たすきに長し、と言ったところ。

やっぱgvimいれるかー。emacsは導入かったるいしなぁ。