Pages

2009-12-09

Google Chrome for Mac β を試してみました

ついにGoogle Chrome for Mac betaが公開されたので、早速試してみました。以前からあった非公式ビルドを試した方も多いとおもうので、Chromeの特徴的な機能を紹介するのはやめておいて、今回のβ版で気になった点を2つ書いておきます。ちなみに今回のβ版はv4.0.249.30となっています。

拡張機能(エクステンション)非対応

SafariにはないChromeの特徴として拡張機能がありますが、現時点ではMac版はこれに対応していません。chrome://extensions/にアクセスすると「ギャラリーから探しますか?」と聞かれてChrome Extensions Galleryに飛ぶことができますが、そこで "Google Chrome Extensions are not supported on Mac yet. We are working to enable them soon." と言われてしまいます。将来的には利用できるようになりそうです。

Chrome Mac not support Extentions

表示が崩れる

SafariもChromeもレンダリングエンジンにWebKitを採用しているのでほとんど表示は同じになりますが、ChromeのWebKitはGoogleが独自に手を加えたものなので、微妙に違う結果になることがあります(Chromeの結果が崩れる)。

Safari & Chrome difference

これはTwitterのサイト上の一部のスクリーンショットで、上がSafari、下がChromeです。Chromeではこんな感じで表示が崩れる箇所が少なからず見られます。まあ実用上はあまり問題ありませんが。

まあ悪い点2つを挙げてしまいましたが、基本的にはいいブラウザです。Gmailがメチャメチャ早くなります。とりあえず試してみてはいかがでしょうか。Intel専用、Leopard以降のMacに対応しています。

2009-12-06

Save Panel Extender 2.0公開

しばらくアップデートしていませんでしたが、Save Panel Extender (SPE) 2.0を公開しました。今回のバージョンではシステム環境設定のパネルが追加されています。

SPE v2.0 Screenshot

この環境設定で設定できるのは、SPEを読み込むアプリケーションの制限。SPEはアプリケーションをハックして実現しているものなので、中には不具合が生じるアプリケーションもあります(OpenOffice.orgなどが既に確認済み)。そういうアプリケーションはSPEを読み込む対象から除外しておくことで不具合を回避することが出来ます。

当然、不具合回避だけが目的じゃなくて、「俺はテキストエディットでは絶対に追加オプションは使わないんだ!」的な場合にも役に立つ設定になっています。

2009-12-04

OpenMetaに関する日本語情報サイト

唐突ですが、日本語で書かれたOpenMeta情報サイトOpenMeta.netを公開しました。内容はまだまだ少なく、まだOpenMetaに初めて触れる人向けの情報が少しあるだけですが、将来的にはもっと内容を増やしていきたいと思っています(活用法とか開発者向け情報とか)。OpenMeta自体がまだまだ発展途上で利用者もあまり多くないみたいなので、これが少しでも何かの役に立てればいいかなと思います。

2009-10-28

キーボードランチャ Auftakt が便利

いとーけーのページで、Auftaktというキーボードランチャが公開されていました。シンプルさがウリのキーボードだけで操作できるランチャです。

OSXでキーボードランチャといえばQuicksilverが有名ですし、最近ではGoogle Quick Search Boxなんてのも人気を集めてます。私自身も昔はQuicksilverを使っていましたし、Macを買い替えてからは一時期QSBを使っていました。ただ、QSBはときどき動作が重くなるのが嫌で最近はアプリケーションの起動にSpotlightを使うようになっていました。

ただ、Spotlightもたまにもたついたり、アプリケーション以外の検索結果がトップヒットにくるとわざわざアプリケーションまでカーソルを移動させなきゃいけないのが面倒でした。

それに対して、Auftaktは指定したディレクトリ以下(アプリケーションがインストールされるディレクトリはデフォルトで設定されています)からアプリケーションだけを素早く探してくれるので非常に便利です。設定次第でiTunesを"itns"のようにタイプミスしてもちゃんと探してくれるなど、シンプルながら便利な機能も備わっています。

アプリケーションランチャに軽快さが足りないと思っていた人はぜひ試してみてはどうでしょうか。

2009-10-22

Save Panel Extenderがファイルの保存を感知している方法

先日公開したSave Panel Extenderの動作原理についてちょっと書きたいと思います。特にファイルの保存を検知するあたり。OMSavePanelのときもどこかで書いたかもしれませんが、だいたい同じです。

SPEでは、保存パネルの保存ボタンが押されるとそのイベントをアプリケーションより早く拾い上げて、ユーザが指定したファイル名を取得します。いわゆるMethod Swizzlingを用いてアクションの中に割って入っているわけです。

保存先のファイル名がわかったら、ファイルシステムイベントAPI (FSEvents) を使って監視体勢に入るわけですが、このFSEventsはディレクトリ単位での監視しかできないので、とりあえず親ディレクトリを監視登録します。

ディレクトリの内容が変更されるとFSEventsのデーモンがそれを検知して通知してくれるわけですが、この変更が対象ファイルの保存によるものなのかはわかりません。新規保存ならファイルが存在するかどうかで保存したかどうかがわかりますが、既存のファイルを置き換えて保存する場合にはそれではうまくいきません。そこで、SPEではファイルの更新日が新しくなったかどうかをチェックして、保存されたかどうかを判定し、そこからオプションの適用を行っています。

おそらくこういった作業をするにあたってはごく普通の手順だと思いますが、いくつか弱点があって、ファイルの更新日が古い日付のままだったり、FSEventsがディレクトリ内容の変更を検知しなかったりしたらオプションの適用は失敗してしまいます。そんなケースがあるのかは知りませんが。

2009-10-18

Save Panel Extender 公開

Save Panel Extenderというものを公開しました。保存パネルを拡張するSIMBLプラグインです。

SPE Screenshot

スクリーンショットを見てもらえればわかるかもしれませんが、立ち位置としてはOMSavePanelのSnow Leopard対応版といえば近いかもしれません。ただ、Save Panel ExtenderはOpenMetaタグの付与にとどまらず、その他の追加的なオプションにも対応していきたいと思っています。

とりあえず、今回のリリースではOpenMetaタグの他に、デフォルトアプリケーションの設定に対応しています。Snow Leopardになってクリエータコードが無視されるようになって不便極まりい思いをしていた人は、これで少し気楽になれるかもしれません。

OpenMetaについても、タグの消失問題に暫定的な対応がなされている現時点での最新仕様に対応しています。

2009-10-09

Snow LeopardにてOpenMetaメタデータが消える可能性

GoogleのOpenMetaグループに、Tagsなどで知られるGravity Appsの開発者の一人、MartinからSerious Problem with Extended Attributes on Snow Leopardと題されたメッセージが投稿されました。以下は勝手な要約です。

  • やべー、Snow Leopardでは拡張属性(OpenMetaで使われているファイルシステムの機構)がヤバいことになってるよ。
  • Leopardではアプリがファイルに書き込みするときはOSが拡張属性の内容を保護してくれたけど、Snow Leopardはダンマリ無視してきて、消えちゃうよ。
  • 拡張属性の保持はアプリ側で面倒みろってことね。でもわざわざ拡張属性に注意して内容を保持してくれるアプリなんてないよね。
  • Spotlightは以前のタグをインデックスしてくれてるから検索にはひっかかるけど、そのファイル自身にはタグがついていないかも。
  • OpenMetaのバックアップ機構(過去エントリ参照)のおかげで、消えても(OMバックアップ対応アプリを使っていれば)自動的に復旧できるけどね。まあ、ファイル名変えたり移動させちゃったらおしまいだけど。

原文にはもう少し細かな事例が載ってたりしますが、基本的にはこんな感じです。一通り問題が示されたあと、暫定的な解決策としてSpotlightコメントにも同じタグを書き込むのはどうよ?みたいな提案もありました。OpenMetaのウリの1つが「Spotlightコメントと違って簡単に消えない」だった(と思う)のですが、今回は逆の結果になってしまいました。どちらにせよOpenMetaを利用してファイル整理をしている方は十分に気をつけてください。

2009-10-05

ゆびがき 2.0公開

先日公開したマルチタッチトラックパッドによる手描きメモツール、ゆびがきをアップデートしました。ゆびがきのウェブサイトからダウンロードできます。

ゆびがき v2.0

前バージョンでは、描いたメモはその場でコピーして他のアプリケーションに貼付けて利用できましたが、v2.0では新たに「ライブラリ」機能を搭載しました。この機能を利用すると、描いたメモをゆびがき内に保存し、後から編集したりコピーしたりできるようになります。

あと、フルスクリーン周りを書き直しました。NSViewの- enterFullScreenMode:withOptions:はいろいろと不安定っぽいので。

2009-10-03

ゆびがき:マルチタッチで手書きメモ

個人的な必要性に迫られてアプリを1つ作りました。トラックパッドをキャンバスに見たて、指でなぞるとそれがそのまま画面上に線として描かれるアプリです。

「ゆびがき」の詳細

大学の授業が後期に入って、Evernoteを使ったノート取りに挑戦したんですが、そのときに困ったのが図形。授業中だからノートは素早く取らなきゃいけないけど、Macの図形作成アプリ(OmniGraffleとか)を使った図形作成って意外と時間がかかる。そこでこのゆびがきの出番。これなら素早く図形が描ける(当社比)。手書きだから当然きれいには描けないけど、スピードが重要な場面ではけっこう役立つはず。

2009-09-05

Snow Leopardで利用可能になったAppleScriptObjC

あまり注目されてませんが、Snow LeopardではAppleScript周辺の事情もそれなりに大きく変わっています。まず、AppleScript Studioが正式に非推奨となりました。10.2 Jaguarの頃に「AppleScriptでCocoaアプリが作れる!」と鳴り物入りで登場したAppleScript Studioですが、実際に使ってみると非常に使い辛かったり、できることが限られて、結局はObjective-Cで実装しAppleScriptからはcall methodするといった感じでAppleScriptだけで完結できないことが多々ありました。PantherやTigerの頃になるとほとんど機能追加もされなくなり、いずれ消えるだろうとはあちこちで言われてましたが、今回のアップデートでその幕を閉じることになりました。ちなみに、Interface BuilderからもAppleScript Studioに関する設定画面などは消えていますが、一応隠し機能として残っていてターミナルに次の内容を入力することで復活できます。

defaults write com.apple.InterfaceBuilder3 IBEnableAppleScriptStudioSupport -bool YES

で、終わりを迎えたAppleScript Studioの代わりに新しく登場したのがAppleScriptObjC。名前からも想像できるように、AppleScriptとObjective-Cを結ぶブリッジで、RubyCocoaやPyObjCのAppleScript版みたいなもの。こいつはAppleScript Studioのようにあらかじめ容易された範囲の中でしか使えないものとは違って、Cocoa/Objective-Cでできることは全部できちゃうスグレモノ。これで、AppleScriptはわかるけどObjective-Cはわからない、って人でもやっとマトモにアプリケーションが作れるようになったわけです。

そして、これによるAppleScriptの文法的な新たな拡張は一切無し。既存の文法や構造を上手く使ってるので、今までAppleScriptを書いてた人はきっととっつきやすいはず(もちろん、スクリプトオブジェクトとかを普段からバリバリ使ってるようなAppleScripterは少ないかもしれませんが…)。Appleも「AppleScript Studioやってる人は早めにAppleScriptObjCに移行すべし」とアナウンスしていますし、AppleScripterな人は試してみてはどうでしょうか。

2009-08-31

OMWizard 1.3 Snow Leopard対応版

Snow LeopardにしたらOMWizardが起動しなくなったので、その対応版です。ちょっと細かい挙動も修正しましたが、新機能は特にありません。Download. Snow Leopard専用です。それ以前のシステムでは動きません。v1.2を使用してください。

OMWizard 1.3

OMWizardは、Macの中に散らばっているファイルやフォルダをOpenMetaのタグを使って簡単に探し出すためのアプリです。最初はタグのリネームアプリだったのに、いつのまにか検索用になってました。もちろんリネームもできます。

今回Snow Leopardで起動できなくなったのは、QuickLookの仕様が変わったから。プライベートAPIを使った弊害です。

Snow Leopardで利用可能になったAssociated Object

Leopardで大幅に手を加えられたObjective-Cのランタイムですが、Snow Leopardでもちょこっとだけランタイムに手が加えられました。それがAssociated Objectです。こいつはあるオブジェクトに対してキー付きで任意のオブジェクトをひも付けすることができるもので、ランタイム関数を使うことで簡単に扱えます。コードはこんな感じ。

id obj = ...;   // 任意のオブジェクト
NSString *key = @"key";    // キー

objc_setAssociatedObject(obj, key, @"value", OBJC_ASSOCIATION_RETAIN);

objc_getAssociatedObject(obj, key);   // → @"value" が取り出せる

objc_setAssociatedObject()で、オブジェクトに他のオブジェクトをひも付ける。2つ目の引数に取り出すときのキーを設定するんだけど、これはvoid *なので別にNSStringじゃなきゃいけないとかいうわけではありません。4つ目の引数はオブジェクトの扱い方。ここではOBJC_ASSOCIATION_RETAINを渡しているので、ひも付けたオブジェクトはretainされる(はず)。

取り出すときはobjc_getAssociatedObject()を使う。元のオブジェクトとキーを渡すことでひも付けたオブジェクトを得られます。ちなみにobjc_removeAssociatedObjects()なんてのもあって、オブジェクトのひも付けを解除できます。

で、どういう時にこのAssociate Objectが役立つかというと、カテゴリで既存のクラスを拡張する時。カテゴリではメソッドを追加できるけどインスタンス変数は追加できない、でも値を保持したいってときにこのAssociated Objectが役に立つはず。多分。今のところAppleのドキュメントにはどこにもこれに関する記述はありませんが、Square Signals : Your New Friends: Obj-C Associated Objectsのように参考になるエントリがいくつかあります。

Snow Leopardで利用可能になったブロック構文

Snow Leopardでは、C/C++/Objective-Cでブロック構文が使えるようになりました。今のところGrand Central Dispatchとともに語られることが多いようですが、GCD専用とかいうわけでは全然なくて、汎用的な無名関数とかラムダみたいな感じで簡単に使えます。こんな感じ。

void (^block)(id);

block = ^(id obj) {
    NSLog(@"%@", obj);
};

block(self);

これと同時にCocoaも拡張されていて、NSStringの- enumerateLinesUsingBlock:といったように、ブロックを引数として取るようなメソッドがいくつか追加されています。メソッドだけでなく新しいクラスも登場していて、NSBlockOperationのようにブロックを用いてNSInvocationOperationと同じようなことができるクラスも追加されています。

2009-08-29

Snow LeopardのNSTextViewでテキストの自動置換を有効にする方法

各所で話題になってるSnow Leopardですが、その中でちょっと嬉しいけど地味な新機能としてテキストの自動置換機能があります。正式名称はなんていうのか知りませんが、システム環境設定→言語とテキスト→テキストで設定できるアレです。テキストエディットとかでは使えるんですが、サードパーティのアプリはそれぞれが対応する必要があります。

対応と言っても大掛かりな実装は必要なく、テキストの自動置換機能を有効にしたいNSTextViewに対して- setAutomaticTextReplacementEnabled:YESを送ってやるだけです。これはSnow Leopardで新たに登場したもので、その名の通り自動置換を行うかどうかをセットするためのものです。ちなみにInterface Builderから"Text Replacement"にチェックをいれても変更できます。おお、簡単。

Snow Leopardでは他にもテキスト周りの新機能(スペルの自動修正とか)があり、それに関するメソッドがNSTextViewに追加されています。追加されたメソッドの一覧がADCで見られます。

2009-06-13

QSBでTwitter検索してみようじゃん

いつの間にか正式版が出てた我らがQSB (Google Quick Search Box) ですが、TechCrunchでQSBはTwitter検索ができないなんて言われちゃったから、できるようにしてみようじゃありませんか。幸いQSBはプラグイン機構を備えてるので結構簡単に実現できた。いつのまにかSDKも出てるし。

というわけでできたのがこのTwitter検索プラグイン。twitter検索のAPIを使ってるからちょっと重いけど、公式の検索APIは精度がお話しにならないのでこっちにしました。

Twitter Search on  QSBダウンロード / ソース

インストール方法は、ダウンロードしたzipの中身のTwitterSearch.hgsを~/Library/Application Support/Google/Quick Search Box/PlugInsに置いてQSBを再起動して環境設定からオンにするだけ。QSBのバージョンによっては起動時にプラグインを有効にするかどうかを問うダイアログが出てくるけど、そのまま有効にしちゃってください。

2009-05-27

書籍版「Dynamic Objective-C」

つい最近までマイコミジャーナルで連載されていたダイナミックObjective-Cの書籍版、Dynamic Objective-C の(HMDT本恒例?の)プレゼントキャンペーンが始まったみたいです。当選率が上がるようなのでちょこっと紹介させていただきます。

Webでの連載はCocoa初心者向けの入門記事みたいなのではなくて、Objective-Cを使ってる人がそのディープな領域にのめり込んでしまうような、そんな魅力を伝えてくれるもの。Objective-Cのランタイムの話だとか、実装はどうなってるかみたいな深い(そしてマニアックな)話題を提供してくれて、かなり読み応えがありました。中盤以降はGoFのデザインパターンをObjective-Cではどのようにして実装できるかかも解説されてます。

書籍版はWeb版と内容はほとんど同じらしいけど、やっぱり読みやすさは紙媒体が一番だと思うから欲しい。というわけで当たるといいなー…

2009-05-24

ホットキーを排他的に処理する

Macでホットキーを処理しようとするとたまに困るのがバッティング。基本的に、RegisterEventHotKey()を使って登録されたホットキーが複数のアプリケーション間で重複したときはその全てのアプリケーションにイベントが送られることになってる。AとBとCの3つのアプリケーションがそれぞれF2にホットキーを割り当ててたとすると、F2キーを押したときにその3つのアプリケーションでそれぞれ処理が行われるといった具合。

ところが欲張りなあなたはホットキーイベントを他のアプリに渡したくない、独り占めしたいと思うかもしれない。そんなあなたに贈るのがkEventHotKeyExclusive。Leopardで追加されたオプションで、これをRegisterEventHotKey()のの第5引数として渡せばホットキーイベントを独り占めできる。

ちなみにCarbon EventsのドキュメントはTigerの時のものだからこれに関する記述はありません。もうLeopardリリースから1年半経つのに…

2009-05-17

AppleScriptもいいけどAutomatorもね

最近、Automatorを使う機会が増えたのでちょこっと。

AutomatorもAppleScriptもOSXにおける定型作業を自動化するためのものですが、AppleScriptは割と使われているのにAutomatorはあまり使われていないような気がします。おそらく、理由としては昔からある技術で書籍や情報が多い、柔軟なスクリプティングが可能だからといったところでしょうか。

特に日本ではAutomatorに関する情報はあまり見かけません。かつてOS9時代にAppleScriptの書籍が多く出版されたのとは対照的です。また、アクションを組み合わせてワークフローを構築するというAutomatorの特徴が逆に「単純作業しかできない」というイメージに繋がるのかもしれません。

…と書くとAutomatorの良い所がないように見えますが、そうでもありません。AppleScriptより良い部分もたくさんあります。

マウスによる操作

Automatorは基本的にアクションをドラッグ&ドロップしてワークフローを構築します。これの利点はなんと言っても作業効率。スクリプトをキーボードから入力する必要のあるAppleScriptより断然早く目的のものが出来上がります。文法がやや特殊でそれぞれの文が長くなりがちなAppleScriptは慣れるまでが大変でしょう。

細かい知識が必要ない

Automatorのワークフローは、ほとんど何も考えなくても直感的に組むことができます。ある程度意識しなければいけないことといえば、入力と出力の型でしょうか。アクションの出力が「ファイル/フォルダ」だったら、次のアクションの入力もそれに合わせるといった具合です。それでも、file、alias、POSIX file、Finderのitem…とファイルの表現だけでもたくさん存在するAppleScriptよりずっと簡単です。

作業の記録

Automatorでは、ユーザが実際に行った操作を記録してワークフローにすることができます。AppleScriptでも同じようなことができますが、Recordableなアプリケーションに限られていて、最近では忘れられている感があります。AutomatorではアプリケーションがRecordableであるかどうかに関係なく記録できます。

アプリケーションを起動しなくても良い

例えばAppleScriptで画像ファイルの形式を変換しようとすると、まずスクリプトから画像アプリケーションを起動してそこにメッセージを送るのが一般的です。この時の起動時間は意外とイライラの素になります。しかしAutomatorではアクションそれ自体がそのような作業を行ってくれるので外部アプリケーションの起動は必要ありません(もちろん例外はあるでしょうし、OSAXを使えばまた話は変わりますが)。

コンテクストメニューから呼び出せる

AppleScriptによるスクリプトもAutomatorワークフローもともにスクリプトメニューに登録していつでも好きなときに実行することができますが、Automatorワークフローはそれに加えてFinderのコンテクストメニューから呼び出せる「プラグイン」として使用することもできます。

まあ、ループはできるけど条件分岐はできなかったりとかでまだまだ未熟な部分はありますけど、Automatorの中からAppleScriptを呼び出したりもできますし、それぞれの長所を活かした使い方をするのが1番でしょう。

2009-05-09

OMSavePanel 1.1

このプラグインはMac OS X 10.5上でのみ動作します。Mac OS X 10.6を使用している場合は、Save Panel Extenderを使用してください。

This plugin only works on Mac OS X 10.5. If you are using Mac OS X 10.6, use Save Panel Extender.

公開してから一度もアップデートしてなかったOMSavePanelをほんの少し手直し。v1.1 Download.

OMSavePanelは基本的に全てのアプリケーションに読み込まれるけど、場合によっては邪魔になることも(××のアプリを使うときは絶対にタグ付けなんてしない!とか)。そんな人のために、OMSavePanelによる拡張パネルを表示しないアプリケーションを設定できるようにしました。但し設定UIは無しで、plistを編集しなければなりませんが。

あと、些細なことだけど、拡張パネルを閉じられるようにした。閉じられないとウザい、ってケースもたまにありますから。ちなみに拡張パネルを自分で閉じた場合、メタデータを設定しないようにします。

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を名乗るならドキュメントぐらい用意してくれてもいいのに…。

2009-02-05

OMにおける最近使ったタグ

Tagitでタグを付けたり検索したりすると、パネルのクラウドっぽい感じのところにそのタグが追加されます。このタグはcom.openmeta.shared.plistっていうplistファイルに記録されてるってのはもう既に色々なところで耳にされた方も多いと思います。このデータはなにもTagit専用のものではなくて、他のOM対応アプリからも利用されます。QSBOpenMetaやOMSavePanelのタグ補完もこれを使ってますし、OMWizardのタグ一覧もこの内容をそのまま表示しています。

ところが、このcom.openmeta.shared.plistには最近使ったタグが200件までしか記録されません。「最近」だから件数に制限があるのは当たり前で、普段はそれで不便なことはありません。

ところが、OMWizardの場合は話は別です。タグ検索フィールドを廃止したので、OMWでファイルを検索するにはリストからタグを選ぶしかありませんが、タグリストには200件しか表示されないのでそれより古いタグは検索することができません(表示されないのはリストの最左カラムで、それより右のカラムでは古いタグも表示されます)。

これを解決しようとしたら、やっぱり何らかの方法で全てのタグを集めなきゃ行けないんだけど、毎回それはそれで大変。どうしたらいいものか…

2009-02-04

保存パネル拡張 for OpenMeta:OMSavePanel


omsavepanel
Originally uploaded by s.take

先日のポストでメタデータは保存パネルで入力するのが良いって書いた。で、DFXが対応予定だから期待するって書いたけど、OMのために$35も払うのもバカバカしい。ということでヤケになって保存パネルでOMメタデータを入力できるようにするSIMBLプラグインを作ってみた。


スクリーンショットの通り、OMSavePanelをインストールすると保存パネルの下にタグと星レーティングを入力するエリアが現れるので、ここに入力するとOMのメタデータとして保存される。


SIMBLなのでCocoaアプリでしか使えない上、全てのアプリで上手く動くとも限らない。一応、Safari、Mail、プレビュー、テキストディット、CotEditorではうまく動いた。

DOWNLOAD


このプラグインはMac OS X 10.5上でのみ動作します。Mac OS X 10.6を使用している場合は、Save Panel Extenderを使用してください。

This plugin only works on Mac OS X 10.5. If you are using Mac OS X 10.6, use Save Panel Extender.

2009-02-03

ファイルにメタデータを与えるとき

例えば愛用のテキストエディタで何か書いて、後にそれが必要となるので保存しておく。このとき、後でそのファイルを探しやすいように色々な情報を与える。ファイル名がその代表。後で見つけるときのためにわかりやすい名前をつけておく。もちろんファイル名だけじゃなくて、その他のメタデータ(OpenMetaもそうじゃない各アプリ独自のも)も付けるときがある。もちろん、見つけるためだけじゃなく、見つけた後に「これなんだっけ?」という時のヘルプにもなる。

ファイルを保存するとき、保存ダイアログでファイル名を入力する。このとき、Office等の一部アプリはそのアプリ固有のメタデータも一緒に入力できるようになっている。そうすることでファイルにメタデータが埋め込まれて、次回から利用できる。

ところがOpenMetaの場合は、一度保存したファイルに対して専用アプリ(Tagitとか。QSBOpenMetaもだけど)を使って後からメタデータを与えなきゃいけない。これは非常に面倒でナンセンス。もちろんOpenMetaに対応したアプリなら保存時に専用のインターフェイスを提供するかもしれないけど、どんな書類でもOKというOpenMetaのウリ(の1つ)が半分ウソみたいなものになってしまう。

何が言いたいかって言うと、OpenMetaの普及にはAppleが保存ダイアログで専用のインターフェイスを提供するのが一番。だけど現実的じゃないので、サードパーティに期待しなきゃいけない。幸い、Default Folder XがOpenMetaに対応する予定らしいので、これでOpenMetaが少し便利になるかもしれません。

でも本気でOpenMetaを普及させたいなら最終的にはAppleの協力が必要だと思うけどね。

2009-02-02

OMWizard 1.1


omwizard11ss
Originally uploaded by s.take

OMWizardですが、ちょこっといじってみました。検索フィールを廃してタグのリストからブラウジングするような形に。ついでに検索範囲も設定できるように(スクリーンショット上部のホームディレクトリを表示してる部分がそれです)。ついでにタグ絞り込みフィールドも付けたかったんだけど、これは先送り。


今回はタグを付けられたファイルを探し出すことに重点を置いてみた。前バージョンのようにタグをわざわざタイプしなくてもリストから選べるようにしたことで、(ものすごく個人的に)操作性がアップ。ただし、タグを選択するごとに再検索をかけているので環境によっては重いかも。で、探しだしたファイルはもちろんダブルクリックで開ける。これでこのOMWizardとQSBOpenMetaでタグに関する操作は一通りできるようになったと思う。多分。


Download OMWizard 1.1. ずいぶんと操作性が変わった(ちょっと変態的な挙動も)ので、古いバージョンも残しておきます:Older Verion (1.0.1)


2009-01-30

Cocoa用OpenMetaクラスの疑問

先日CocoaアプリケーションからOpenMetaによるメタデータを操作するで書いたように、CocoaアプリケーションからOpenMetaによるメタデータを操作するにはGoogle Code上で公開されているOpenMetaクラスを利用するのが簡単です。しかしこれ、使っていくうちに色々と首を傾げたくなる部分が出てきます。

1. メソッド名がCocoaの命名規則に則っていない

まず最初に気になるのがこれ。例えばファイルに付けられたタグを得るには+ [OpenMeta getUserTags:url:]というクラスメソッドを使いますが、これはメソッドの返り値としてタグを配列を得ることができます。普通Cocoaでは求めているオブジェクトが返り値から得られるとき、メソッド名にgetは付けません。getを付けたときは普通引数に目的のものをコピーすることを意味します。もちろん、DOM APIのように外部で標準のAPIが定められている場合はこれに当てはまらないこともありますが、Cocoa内で完結するものはたいていこの規則に従います。しかしOpenMetaはなぜかこれを無視しています…

2. メソッド名が意味不明

OpenMetaアプリケーションはたいてい最近使ったタグを簡単に扱えるようになっています(OMWizardやQSBOpenMetaも自動補完という形で対応しています。OMWizardのほうは少し不具合がありますが…)。このリストは全OpenMetaアプリケーションで共有されていて、アプリケーションからこれを更新するには+ [OpenMeta updatePrefsNewTags:newTags:というメソッドを使います。…私は最初にこのメソッドを見たときわけがわかりませんでした。newTagsという名前が2回でてきてどっちがどっちだかさっぱりでした。幸い、仮引数名がoldTagsnewTagsだったのでわかりましたが、これはちょっとおかしいんじゃないかな…

3. ライセンスが不明

そして3つ目の問題。Google Codeのプロジェクトページにはしっかりと"Apache License 2.0"と書かれているのに、OpenMeta.mでは一番上の目立つところに"MIT license"と書かれています。まあ確かに両者は似た性質を持っていますが、それでも同一ではありません。

…とまあいろいろと挙げちゃいましたが、これはOpenMetaそのものの問題ではなくそのためにIronicが用意したライブラリの問題です(OpenMetaそのものの問題についてもIronicのフォーラムで議論されているようですが… それについては今後書くかもしれないです)。多くのデベロッパに採用してほしいなら、この辺はちょっと修正してもらいたいところです。

Quick Search BoxからOpenMetaタグを編集できるプラグイン:QSBOpenMeta

Macの手書き説明書さんにOMWizardを取り上げていただきました。確かにOMWizardは既にタグを付けてあるファイルを扱うのには便利なんですが、タグがなにもついていないまっさらなファイルは扱えません。あらかじめTagitなどでタグを付けておく必要があります。Tagitもいいアプリなんですけど、わざわざ画面の端までドラッグしていくのは面倒だったりします。

そこで(?)、Google Quick Search Boxから簡単にOpenMetaタグを付与・編集できるプラグインQSBOpenMetaを作ってみました。QSBOpenMetaをインストールすると、QSBでファイルを選んだ時に出てくるコマンドのリストに"Add OpenMeta Tags"というのが現れるようになります。Addって書いてあるけどDeleteだってできます。

download(Updated! v1.0.3: fixed some bugs... DON'T USE OLDER VERSION!)

QSBのバージョンアップにより、使えなくなりました。今後のアップデートで対応予定です。

2009-01-28

Adobe CSでOpenMetaタグが消えてしまう問題

IronicのフォーラムにProblem with Tagit (or OpenMeta?) losing tagsというトピックが。Adobe PhotoshopやIllustratorのCS3やCS4でファイルを上書き保存すると、そのファイルに設定されてたOpenMetaメタデータが消えてしまうというもの。

原因は簡単で、ファイルを保存する際に一度テンポラリファイルに書き出してから元のファイルに置き換えるという作業を行っているから。OpenMetaはファイルそのものにはメタデータを埋め込まず、ファイルシステムに拡張属性という形で記録しておくものだから、今回のケースだと元ファイルと保存後のファイルは別物ということになってせっかく付与したメタデータが消えてしまうというわけです。

このテンポラリファイルに一度書き出す方法はCocoaアプリケーションでもよく使われますが(ファイル保存系メソッドのatomically:YESにすれば)、おそらくCocoa API内(もしくはそれ以下)で同じファイルとして扱われるような処理をしているんでしょう。この辺はあまり詳しくないので微妙ですが…

とりあえず、Creative SuitユーザでOpenMetaをバリバリ活用!って方は注意してみてください。

2009-01-26

OMWizard 1.0.1とmulti-words-tag

hogeさんがIronicのフォーラムでOMWizardを紹介してくれました。さっそくバグがあったようで、修正したOMWizard 1.0.1を公開します。

問題があったのは複数語(multi-words)からなるタグの扱い。一語タグしか使ってなかったんで気づきませんでしたけど、Tagitでfoo_barのように入力したタグは実際にはfoo barのようにアンダースコアではなくスペースで区切られて記録される。で、Spotlightで検索するときもtag:"foo bar"のように検索。これに気づいていなかったので、OMWizardでは上手く検索できませんでした。Thanks! > Jono

2009-01-25

CocoaアプリケーションからOpenMetaによるメタデータを操作する

OpenMetaプロジェクトで公開されているOpenMetaクラスを使うのが簡単。ライセンスはApache License 2.0。

今のところ全部クラスメソッド。ファイルを指定するにはNSURLを使う。

タグの追加
[OpenMeta addUserTags:tags url:url];
タグの削除
[OpenMeta clearUserTags:tags url:url];

こんな感じで簡単。第一引数のtagsはNSStringを要素に持つNSArray。タグ以外の他のメタデータについても専用のメソッドが用意されているし、NSDictionaryを使って一括して扱うこともできる。

OpenMetaをちょっと扱ってみるツールOMWizard


OMWizard
Originally uploaded by s.take

OpenMetaをちょっとテストしてみるような感じでOMWizardなるツールを作ってみました。Wizardといっても別に凄い機能はなくて、指定されたタグでファイル検索し、検索結果からタグのリネームができる程度。OMWizardをダウンロード。


この程度ならGoogle Code上で公開されているOpenMeta.[hm]を使ってすぐに書けちゃう。この辺の手軽さは普及の後押しになると思う。


2009-01-24

OpenMetaで定義されているメタデータ語彙

OpenMetaで定義されているメタデータの語彙はGoogle Code上のスキーマで見ることができます。

  • kOMUserTags
  • kOMStarRating
  • kOMHidden
  • kOMLatitude
  • kOMLongitude
  • kOMAltitude
  • kOMAddress
  • kOMCity
  • kOMStateProv
  • kOMPostalCode
  • kOMCountry
  • kOMBookmarks
  • kOMApproved
  • kOMWorkflow
  • kOMProjects
  • kOMAuthors
  • kOMEmailAddresses
  • kOMItemDueDate
  • kOMInformation
  • kOMDirector
  • kOMProducer
  • kOMGenre
  • kOMPerformers

タグやレーティングといった基本的なメタデータはもちろん、経度緯度のような地理情報、住所、作曲者や演奏者などの音楽関係のメタデータがあるみたいです。今後どうなるかが楽しみです。

2009-01-23

OpenMetaって何ぞや?

最近何かと話題のOpenMeta。私もMacの手書き説明書経由で知りました。なんでもxattr(ファイルシステムの拡張属性)を使ったタギングの共通規格のようです。 Ironic Softwareって会社が頑張ってるみたい。

Google Codeにプロジェクトがホスティングされているので、早速アクセス。簡単な概要が記されたPDFがダウンロードできます。ざっと読んでみた。

  • 各ベンダがバラバラに実装したらタグの便利さが損なわれる。だから統一しよう。
  • 非公開APIは使ってない。xattrだから簡単にアクセス。
  • もちろんSpotlightで検索できる。
  • Ironic Softwareからは、対応アプリとしてTagger、Deep、またコマンドラインツールとしてomtoolをリリース。YepやLeapももうすぐOpenMetaに対応するよ。
  • プライベートなメタデータを追加するのも簡単だし、みんなで統一したければOpenMeta規格に追加できるかも。

PDFの後ろのほうには他の似たようなもの(SpotlightやAdobeのXMPなど)とどう違うのかが説いてあったりします。英語ですが4ページと短いので興味のある方は読んでみてはいかがでしょうか。

2009-01-11

Firefox率が高いサイト=おっさん臭いサイト?

Firefox率が高いサイト=おっさん臭いサイトより。

だって、10代はわざわざFirefoxなんてインストールしないし、小学生や幼稚園児はFirefoxを知らない。 30代、40代の主婦、というか女性一般はFirefoxなんてインストールしないし、高齢者もインストールしない。

じゃあ、残ったのは誰って、ほとんどがおじさん。

これは違うんじゃないだろうか。10代ってのがどの層を指してるのかにもよりますが、少なくとも私の大学の知り合いはFirefoxユーザは多いですね。あとSFCのせいかMacユーザもわりと多いのでSafariを使っている人も結構見かけます。そしてこれくらいの学生層が今の日本のWWW利用者層の中心なんじゃないでしょうかねえ。mixiみたいなSNSにしろ、個人ブログにしろ、おっさんより学生のほうが多く利用しているように思えます。もちろん、「10代」ってのが「ポケモン攻略!」みたいな児童を指してるんならまた話は変わってきますが。20代男性について全く書かれていないので、多分そういう学生層を最初から考えてないのかもしれません。

私?Firefox使っていませんよ。