Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2009-10-01

[][]Cocoa-AppleScript Applicationを作ってみた

わたしあんまり詳しくはないんですけれど、Snow LeopardXcodeでは、CocoaベースのアプリケーションをAppleScriptで記述できるフレームワークが実装されたそうな。たぶん、AppleScript界では、Snow Leopardの目玉ってことになっています。AppleScript Objective-Cブリッジ(AppleScriptObjC)ともいいます。

f:id:seuzo:20090930135515p:image

で、先日そのチュートリアルビデオが公開されていました。

AppleScript: Application Development

で、この通りにやってみましたよ。AppleScript Studioとの一番の違いはproperty宣言してある変数と、GUIオブジェクトをGUIで連結できるってあたり。いままではオブジェクトに名前を付けて(コンテナの入れ子を意識しながら)名前参照していたんですが、Interface Builder上でドラッグ&ドロップ操作をすることで関連づけされます。インターフェイスに縛られなくなる感じがします。

f:id:seuzo:20090930135516p:image

なんだかとっても簡単な感じがします。もちろん、アプリケーションを作るんですから、いろいろとplistを書いたり属性を付加したりアイコンを作ったりといった作法は必要ですが... まあとりあえずテストとしてただビルドしただけのものを置いておきます。

f:id:seuzo:20090930234731p:image

temperture_conv.app.zip 直 こちら、配布物ではなくてあくまでサンプルです。10.6ペース(x86_64)で作ったので動かない環境も多々あると思います。

あと、コードもそのまんまですが書いておきます。

script temperture_convAppDelegate
	property input_field : missing value
	property unit_type_popup : missing value
	property fahrenheit_readout : missing value
	property celsius_readout : missing value
	property kelvin_readout : missing value
	
	on calculateTemps_(sender)
		-- Insert code here to do any housekeeping before your application quits 
		set unit_type to (unit_type_popup's titleOfSelectedItem()) as string
		set input_amount to input_field's floatValue()
		
		if unit_type is "華氏" then
			set temp_value to input_amount as degrees Fahrenheit
		else if unit_type is "摂氏" then
			set temp_value to input_amount as degrees Celsius
		else if unit_type is "ケルビン" then
			set temp_value to input_amount as degrees Kelvin
		end if
		
		tell fahrenheit_readout to setFloatValue_((temp_value as degrees Fahrenheit) as real)
		tell celsius_readout to setFloatValue_((temp_value as degrees Celsius) as real)
		tell kelvin_readout to setFloatValue_((temp_value as degrees Kelvin) as real)
		
	end calculateTemps_
	
end script

参照

Mac Dev Center: AppleScript Release Notes for Mac OS X v10.6: AppleScript Release Notes for Snow Leopard

AS Hole(AppleScriptの穴) By Piyomaru Software » AppleScript Objective-Cブリッジ(AppleScriptObjC)に関するリリースノート » Blog Archive

AS Hole(AppleScriptの穴) By Piyomaru Software » AppleScriptObjCはじめての一歩 » Blog Archive

AS Hole(AppleScriptの穴) By Piyomaru Software » AppleScriptObjCのドキュメント公開が開始される » Blog Archive

2009-09-25

[][][]Ruby1.8系とRuby1.9系を共存させてみる。

Snow Leopardも順調そうだし、いい気になってRuby1.9をインストールしてみました。

もちろん、まだまだ1.8系は主流なんでしょうけれど、少しずつ1.9系にも慣れつつ移行できたらいいと思い、両方のバージョンを共存させます。

Ruby公式サイトのダウンロードページで確認すると現在の最新の安定板はruby 1.9.1-p243のようです。ダウンロードして解凍するのは、こんな感じです。

$ cd ~/src
$ curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz
$ tar zxf ruby-1.9.1-p243.tar.gz 

あとはmakeしてインストールするだけですが、下記のようにprogram-suffixを指定すると「ruby19」とタイプすればこのバージョンが起動するようになります。「gem19」とすれば、このバージョン用のgemが動作します。インストール場所はホームディレクトリの中の「local」に指定しました。

$ cd ruby-1.9.1-p243
$ ./configure --prefix=/Users/[ユーザー名]/local --program-suffix=19
$ make
$ sudo make install

設定ファイル(~/.bash_profile とか)にパスを通しておくのを忘れずに。

PATH=$PATH:/Users/[ユーザー名]/local/bin

これでインストールは一応完了しました。いままでどおり「ruby」とタイプすれば1.8.7が呼ばれます。

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]

ちゃんと両方のバージョンが共存しています。

$ ruby19 -v
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-darwin10.0.0]

2009-09-24

[][][]開く(または保存)ダイアログで使えるショートカット

Snow Leopardでは、開く(または保存)ダイアログ内で不可視ファイルが(標準で)見られるようなった。

View invisible files in Snow Leopard open/save dialog boxes | The Graphic Mac: Apple | Adobe | Design

Command + Shift + .(dot)キーストロークで不可視ファイルが見えるようになる。同じキーストロークで不可視/可視とトグルする。

f:id:seuzo:20090923113010p:image

へー、と思いながら、試しに...

Command + Shift + HでHomeになったりして...と思ったらなったりした。*1

Command + Shift + AでApplicationsになったりした。

ということは、Command + Shift + DでDesktopなんじゃろ。

あ、あれだ、Finderの「移動」メニューにあるのが使えるんだ、たぶん。知らなかった!

f:id:seuzo:20090923113011p:image

ちなみに、ファイルの頭文字をタイプすると即座にその付近のファイルが選択できる(こちらはずっとずっと前から)。すごく便利で頻繁に使うショートカットだ。ただし、ファイル名が日本語だとこの技は使えない。日本語ファイル名を使っている人はこんなところでもちょっとづつ損をしていると思う。

*1:こちらはSnow Leopardじゃなくても、ちょっと前から使えていたかもしれない

2009-09-18

[][][][][]Snow Leopardでosascriptを使うと、「Adobe Unit Types.osax」がload errorになる。

一番最初に気がついたのはターミナル上でfcdを使った時でした。なんかヘンなエラーが出るなあ...と。

osascriptを使った簡単なテスト:

$ osascript -e 'tell application "Finder" to display dialog "hello"'

これを実行すると、とりあえず動くようですが... こんなエラーが出ます。

2009-09-18 00:20:01.867 osascript[4664:903] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found. Did find:

/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper

osascript: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers.

どうやら「Adobe Unit Types.osax」がロードエラーになっている模様。ちょっとググってみたら、Adobe Forums > Adobe Photoshop > Photoshop Macintoshにこんなポストがありました。

Adobe Forums: OS X 10.6, CS4, osascript and Adobe...

(エラー内容を見ると)おそらくスレ主はapplescript.rbが発行するosascriptで気がついたようです。あー、そっち系もか。。。

osascriptはx86_64で動こうとするので、32bitプラグインをロードしないってことらしいです。で、示された回避策は (追記:2009-10-02T12:03:56+0900)この問題は修正されました。下記リンクを参照してください。

$ arch -i386 osascript script.scpt

で強制的に-i386で動かせ、と。これはAdobeはどうせ直してくれないんだろうからさ」という意味ですね。みなさんAdobe慣れしています。

いちいちタイプするのが面倒なので、~/.bash_profileに下記のようにエイリアスを設定します。

alias osascript='arch -i386 osascript'

で、すぐに反映させたいせっかちさんはこのコマンド:

$ source ~/.bash_profile 

たしかにこれで、エラーは出なくなりました。しばらくこれで、様子を見てみましょう。きっとすぐにAdobeが直してくれるはずですから!


Adobe Unit Types.osaxは修正されました!

(追記:2009-10-02T12:03:56+0900)通り素顔さんのコメントにあります通り、このプラグインは新しいものがリリースされて、問題は修正されました。下記リンクからダウンロードできます。

Error about unit type conversion occurs when you run an AppleScript in Photoshop (Mac OS X 10.6)

2009-09-15

[][]Snow Leopardの「テキストの置換」とは...

Snow Leopardには「テキストの置換」という機能が追加された。すわ、置換マクロ!? と色めいてしまったが、まったく違う。今は反省している。

「システム環境設定」-「言語とテキスト」-「テキスト」というタブを開くと...

f:id:seuzo:20090914154610p:image

これ、オートコレクトですよね。「テキストの置換」と言えなくもないだろうけれど、ちょっと混乱する。で、試してみたのでメモ。

おおまかな流れとしては...

  1. 「システム環境設定」-「言語とテキスト」-「テキスト」で置換語句を登録する
  2. (テキストエディットやSafariなどの)対応アプリケーションで使う(すべてのテキストアプリケーションで使えるわけじゃない)
  3. 環境設定(テキストエディット)で機能をオンにするか、文字入力中にコンテキストメニューから指定する

といった感じ。

1)登録

「システム環境設定」-「言語とテキスト」-「テキスト」を開き、左下の「+」ボタンをクリックする。

f:id:seuzo:20090914182638p:image

「置換前」と「置換後」フィールドにそれぞれの入力する。

f:id:seuzo:20090914182639p:image

2)設定

テキストエディットでは、環境設定で「テキストの置換」常にオンにできる。

f:id:seuzo:20090914182640p:image

ドキュメントを開いた状態でコンテキストメニューから「編集メニュー」の「自動置換」にチェックを入れると、そのドキュメントの設定となる。

f:id:seuzo:20090914182641p:image

3)使用

ためしに「市川せいぞー」と入力してみる。ここではまだオートコレクトはキックされない。

f:id:seuzo:20090914182642p:image

続けて「、」を入力すると、オートコレクトが動作して「せいぞー」→「せうぞー」となる。

f:id:seuzo:20090914182643p:image

ただし、「せいぞーちゃん、」と入力しても、変換はされない。

f:id:seuzo:20090914182644p:image

「せいぞー様」と入力すると、変換される。

f:id:seuzo:20090915000327p:image

要するにあれだ、単語の区切りを文字種でやっているのだ。「言語とテキスト」-「単語区切り」-「日本語」というのは、こういう区切りだった。形態素解析なんかを仄かに期待していたんだが。こういう品質での製品出荷に慣れてしまってもう落胆もしないな^^*1


確かに便利なんだけど、アレを思い出す

まあ、たしかに「©」みたいな文字を入力するにはいいかもしれない。分数や、絵文字フォント、間違いやすい綴りを登録しておけば楽かもしんない。

それに、スペルチェックやオートコレクトなんていう機能は、汎用的な用途があるのだからそれぞれのアプリケーションが持っている必要はないって発想もある。どこかで聞いたような発想だけど... そしてそのアーキテクチャはもうないけれど... その時も音頭を取っていたのはAppleだったけれど….

*1:InDesignのオートコレクトもそうだし、これがガイジンさんの限界だなあ。と思うのでした。