Pages

2009-03-08

OpenMetaのバックアップ

TagitなどのIronic製OpenMetaツールはOMメタデータのバックアップ機構を備えています。OMSavePanelとかもIronicのライブラリを使っているのでこれに対応してるんですが、ちょっと自分で実装する機会があったのでどんな仕様になっているか簡単に調べてみました。

まず、バックアップの実体はプロパティリスト。次の3つのキーをもつ辞書。

omDict
ファイルに付けられたOMメタデータ(com.apple.metadata:kOMか単にkOMで始まるのも)の辞書
bu_path
バックアップするファイルのパス文字列
bu_alias
バックアップするファイルのaliasのデータ

で、これを保存するんだけど、バックアップは全部~/Library/Application Support/OpenMeta/backups以下に保存されることになっている。だけどここに直接保存されるんじゃなくて、バックアップする時点の年と月をパスに追加する。例えば2009年3が月だったら/Library/Application Support/OpenMeta/backups/2009/3みたいな感じ。

そしてファイル名も少し面倒。

  1. ファイル名を40文字以内に切り詰める。元のファイル名が40文字を超える場合は最初と最後の20文字を抜き出してくっつける。
  2. ファイルの親ディレクトリのパスのELF Hashを得る。

で、(切り詰めたファイル名)__(親ディレクトリのハッシュ).ombackが保存するファイル名。ここにさっきの辞書を保存してやればバックアップは完了。ちなみにこのバックアップパスはkBackupStampOMって名前で対象ファイルのxattrにセットされるからいつでも取り出せます。

2009-02-22

OMWizard 1.2


OMWizard 1.2 Screenshot
Originally uploaded by s.take

久々にOMWizardをアップデートしました。バグフィックスが中心でしたが、ちょっとした仕様変更と新機能も。


前バージョンではタグ履歴に基づいてウインドウ上部のタグブラウザを表示していましたが、このバージョンでは起動時にタグ付きファイルをSpotlightで全て探し出し、見つかったタグを一覧にするようになりました。これで履歴に残ってないタグも探し出せます。


また、ファイルの検索範囲をウインドウ上部のパスバーで指定するのは前バージョンと同じですが、このバージョンでは"Choose Directory..."ボタンがなくなったのでパスバーをダブルクリックすることで指定してやる必要があります。指定後は右側の更新ボタンをクリックすることで再検索できます。


また、目立つものではありませんが、タグブラウザ内の任意のセル(このスクリーンショットだと icon > twitter のところ)をドラッグし、Finderにドロップするとそのタグを持つファイルを集めてくれるスマートフォルダが作られます。頻繁にアクセスするタグがあって、いちいちOMWを使うのが面倒なときに有用かも。


Download OMWizard 1.2


2009-02-18

Spotlightで特定の属性を持つファイルを検索する

例えば、OMタグを持つファイルやフォルダを集めたいときは“kOMUserTags属性を持つ”みたいな感じの式を書けばいいんだけど、これがなかなか書けなかった。

結局、kOMUserTags == '*'って書いてMDQueryやNSMetadataQueryに渡せばいいみたい。最初はkOMUserTags != ''って書いて上手く行かなかったんだけど、考えてみれば当然ですね。

2009-02-10

ニコ動からDLした動画に自動でタグ付け:MetaCompN

iphloxの情報整理ノートのphloxさんが、ニコニコ動画からダウンロードした動画ファイルに自動でOpenMetaタグを付けてくれるAppleScriptドロップレットを公開しています。ニコニコ動画上で付けられているタグをそのままローカルのファイルにもOMタグとして付与するようで、AppleScriptからSafariとomtool(最近openmetaという紛らわしい名前に変わりましたが、名前を変えれば使えます)を操作することで実現しているようです

というわけでさっそく試してみました。テストに使ったのは【帰ってきた】 椎野茂さんの毒舌実況4回の表。ニコニコ動画の動画をダウンロードするツールは色々あるようですが、私はNNDDというAIRアプリケーションを使っています。NNDDでダウンロードしたflvファイルはファイル名の後ろに動画IDなどがくっついているので、それらを削って動画タイトルだけのファイル名にします。

で、そのファイルをMetaCompNにドロップ。するとタグの取得作業が行われるのでしばらく待つと作業完了。チェックしてみたら、ちゃんとタグが付いてくれています。

MetaCompN Screenshot

生のflvファイルじゃなくてm4vなどに変換したファイルでもファイル名さえ合っていれば使えるようです。なかなか面白いのでぜひ試してみてはどうでしょうか。

2009-02-06

QSBプラグインの作り方

Google Quick Search Boxプラグインの作り方。意外とまとまった情報があまりなかったので個人的メモを兼ねて。QSBのプロジェクトページからQSB本体のソースコードが手に入る。

まず、プラグイン(拡張子.hgsのCocoaバンドル)の中心となるのはHGSExtensionのサブクラス。ただしHGSExtensionをそのままサブクラス化するのではなく、すでに種類別にいくつか用意されているHGSExtensionのサブクラスをさらにサブクラス化して実装する。例えば、QSBでは選択したアイテムに対してアクションを実行することができるけど、このアクションを追加したいときはHGSActionっていうHGSExtensionのサブクラスをさらに拡張すればいい(QSBOpenMetaもローカルファイルに対するアクションだから、HGSExtension > HGSAction > QSBOpenMetaのようになっている)。サブクラスで実装しなければならない諸々のメソッド等はソースコードにコメントがあるし、デフォルトで組み込まれてるプラグインのコードがわかりやすいから参考になる。ちなみにアクション(HGSActionを継承)の場合、最低限-performActionWithInfo:-doesActionApplyTo:の2つを実装すれば大丈夫。前者は実際にアクションを実行するメソッドで、後者はユーザの選択したアイテムがアクションの処理できるものかどうかを判定するもの。

サブクラスを実装したら、Info.plistを編集。HGSExtensionsってキーのArrayを追加して、そこに実装したHGSExtensionサブクラスの数だけDictionaryを追加していく。下はアクションを実装したときにDIctionaryで設定する内容。

HGSActionDirectObjectTypes
アクションが対象とするオブジェクトの種類。QSBOpenMetaの場合はローカルファイル限定だから、fileとした。
HGSExtensionClass
アクションを実装したHGSActionのサブクラス名
HGSExtensionIdentifier
そのアクションの識別子。バンドルの識別子ではない。プラグイン内で複数のHGSExtensionを実装した場合はそれぞれに違う識別子を与える。
HGSExtensionPoint
拡張の種類。アクションの場合はHGSExtensionPoint
HGSExtensionUserVisibleName
実際に表示される名前。"Add OpenMeta Tag"みたいなの。

ざっとこんな感じで、別段難しいような所はないはず。ドキュメントが用意されてないので、もしかしたら間違ってるところがあるかもしれない。Developer Previewを名乗るならドキュメントぐらい用意してくれてもいいのに…。