Pages

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を編集しなければなりませんが。

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