iCloud経由でキーボードショートカットマクロを同期する

iCloud経由でファイルを同期する方法としては、iClouDrive.app<http://www.zibity.com/icloudrive>やiClouDisk.app<https://www.macupdate.com/app/mac/46924/iclouddisk>などがありますが、じつはそんなユーティリティを使わなくても簡単に同期設定できるというのはここ<http://wp.me/p1Cs3W-4S>に書きました。

そして、

・iClouDrive.appを使って、ツールを同期する<http://wp.me/p1Cs3W-34>
・更に、iCloudを経由した環境の同期<http://wp.me/p1Cs3W-3a>

などで、複数のマシン間で環境を同期させようとしてきたのですが、Keyboard Maestro 6にしてからは、キーボードショートカットマクロまで同期することができるようになりました。
アプリケーション内の機能として、ネットワーク経由での同期機能があります。
同期するマクロ設定ファイルの保存先をiCloud経由で同期するように設定したフォルダを指定すればOKです(Dropbox経由という設定もできます)。

KM_networkSync

注意点は、アプリケーションやファイルを参照したりアクティベートするマクロは、それぞれのマシン間のパスが同一でないといけないということです。
OS Xではアプリケーションや書類のデフォルトの置き場所が予約されていますので、ハードディスクの名称とユーザアカウントを同じにしていれば、パスの一致はそう難しいことではありません。
設定してみると、キーボードショートカットマクロを同期するということが如何に便利か、思い知りました。
iKey2では、設定を変更する都度、もう1つのマシンへそれを反映するのが面倒で…。

■現時点での同期設定状況
iCloud以外のクラウドストレージで同期しているファイルはその他にもいくつかありますが、マクロやスクリプト、サービスなどでマシン間の操作性を同期してるのは、現在以下のようになっています。

SyncFolder

■iCloud経由のファイル同期のメリット
iCloud経由のファイル同期のメリットは、OS X で扱われているファイル形式については問題なく同期できるという点があげられます。
この点では、Dropboxも優秀で、殆どのファイル形式であれば問題なく同期してくれますが、その他のクラウドストレージでは、OS Xのアプリケーションバンドル(「.app」)や「.xxxxxx」という名前のバンドルパッケージ形式(「.dmg」や「.img」なども)はそのままクラウドへコピーしてくれないものが多い状況です。まあ、これが世間というものでしょう。

Adobe PDFとして保存—3(補足or蛇足?)

■iKey2でもマクロを作ってみる
Keyboard Maestro 6でプリントダイアログから「Save as Adobe PDF.app」を呼び出すマクロを紹介しましたが、これをiKey2でやってみると図のようになります。(ここではファイル保存ステップまでは表示できていません)

iKey

マウスのクリックとドラッグをシミュレーションするしかないようなのですが、ウィンドウのTop/Leftからの座標で追いかけますので、ポップアップメニューの座標を取るのが少々厄介です。
また、「Pause(Wait)」に関してもKeyboard Maestro 6の方がスマートで確実性が高いようです。
iKeyはYoupiKeyと呼ばれていた初期バージョンから使ってきましたので、現在の停滞状況が何か寂しい気がします。
Keyboard Maestro 6に切り替えてから、ホットキーを新しく設定することが楽しみになってきて、KeyQuencerの時代の登録数に並ぶくらいの数になってきました。現時点でマクロ数76です。

Adobe PDFとして保存—2

ホットキー(キーボードショートカット)ユーティリティというエントリ<http://wp.me/p1Cs3W-5l>で書きましたが、10.9 Mavericks環境でのキーボードショートカットユーティリティの選択で迷っていました。
OfficeドキュメントをAdobe PDFとして保存する際に、プリントダイアログから「Adobe PDF として保存」アプリケーションを呼び出す際に、毎回マウスをドラッグしてポップアップメニューから実行するのは面倒です。これをホットキーで実行できれば、さらにこのホットキーアクションをマクロに組み込めそうです。
そこで、なにを使うかという点で迷っていた訳です。
ここ<http://wp.me/p1Cs3W-5l>で挙げた候補の中から考えてみると、マウスシミュレーション機能とキーボードシミュレーション機能をもったものを拾い上げると、ikey2、Keyboard Maestro6、QuicKeys4の3つに絞られることになります。
調べてみると、QuicKeys4は2009年から更新がありません。iKey2も2011年の2.5.2以降更新が滞っています。現在、OSのアップデートに合わせてアクティブに更新が継続しているのはKeyboard Maestroだけだということに気がつきました。迷う必要はなかったのですね。

使い始めてみると、複数のシーケンスコントロールやメニューへのアクセス、ウィンドウコントロール、クリップボード操作など、機能も充実していてiKeyよりもレスポンスもいいです。

■プリントダイアログで「Save as Adobe PDF.app」を呼び出す
PowerPoint.appから呼び出す場合のマクロです。

2014-01-14 9.20.54

「Pause…」アクションが時間だけでなくウィンドウやアプリケーションウィンドウ、ダイアログなどの状況に合わせられる点が優秀です。「PDF」ボタンをクリックは図のように「Press Button」アクションでなくロケーションクリックでもOKでしょう。
「Save as Adobe PDF.app」を呼び出すところもマウスドラッグ指定でもOKでしょうが、ここは無骨に「↓」キーで確定しています。
このマクロではなんと言っても「Pause Until Condition Met」アクションが機能することが肝でしょう。
このマクロをシーケンスに組み込んで繰り返し実行する際には、「Pause…」アクションが時間指定でしか実行できなかった場合、PowerPoint.appやSave as Adobe PDF.appの反応時間の変動やファイルサイズによるウィンドウの展開などで誤動作が起きる率が跳ね上がります。

■ワークフローに組み込んでみる
Automatorを使って、Finder上でPowerPointドキュメントを選択した状態で実行するワークフローを作ってみました。

2014-01-14 9.37.11

Keyboard Maestroのいいところとして、AppleScriptからマクロ名でマクロを実行できる点が挙げられます。

連続で処理するドキュメントの数やマシンスピードなどによってスクリプト内の「delay」のタイミング調整が必要でしょうが、試してみたところエラーなく動作しました。

Keyboard Maestroは現行バージョンにおいても機能拡張がなされていて、未だ発展途上という楽しみなユーティリティです。

Adobe PDFとして保存—1

先日のエントリ<http://wp.me/p1Cs3W-7P>で、OfficeドキュメントをPDFファイルに変換するワークフローについて書きましたが、この際に使ったアクションでは、カラープロファイルや解像度を指定することができませんでした。
Adobe PDFへの書き出しという方法がとれればこれは解決する問題でしょう。
そこで、Automatorでアクションを探すと、「Adobe PDFとして保存」という名前のアクションが見つかったのですが、図のようにエラーが発生してアクションを適用できません。

1

調べてみると、OS X 10.6の頃からの症状のようで<http://helpx.adobe.com/jp/acrobat/kb/cpsid_88735.html>、“Mac OS X 10.6 上の Automator は 64 ビットアプリケーションのため、32 ビットバイナリの [Adobe PDF として保存] ワークフローは使用できません。”などといったことのようです。
現在、私の環境は10.9 Mavericksです。
このページの“解決方法”のようにAutomatorを32bitモードで起動することもできません。
(OS X 10.6上のAutomatorを32bitモードで起動してワークフローを作ってみましたが、10.9に持って来ると「.workflow」ファイルではやはりアクションの読み込みでエラーが発生します。アプリケーション形式で保存した場合は立ち上がるのですが、期待した処理をしないまま終了します)

2014-01-10 8.23.07アクションを諦めて、‘/Library/PDF Services/Save as Adobe PDF.app’をワークフローに組み込めないかと思ってやってみたのですが、これも「Adobe PDFとして保存」という名前のアクションと同じで、10.9環境ではワークフローに組み込むことができませんでした。
この‘/Library/PDF Services/Save as Adobe PDF.app’は、プリントダイアログ内の「PDF」ボタンからポップアップするメニューからアクセスする以外の使い方はできないようです。
つまり、プリントダイアログから呼び出すことで処理対象を引き渡せる訳で、それ以外の方法で‘Save as Adobe PDF.app’に対象を渡す手段がなさそうだということです。
この「PDF」ボタンからポップアップメニューを毎回マウスで選択するというのも難儀な話です。

2

■「Save as Adobe PDF」へアクセスする方法
このプリントダイアログを介して、「Save as Adobe PDF」へアクセスする方法としては、

  • AppleScriptでUI Elementsを介して「PDF」ボタンから「Save as Adobe PDF」へアクセスする
  • キーボードショートカットユーティリティを使って、「PDF」ボタンから「Save as Adobe PDF」へアクセスする

といったことが考えられますが、AppleScriptでUI Elementsをコントロールするというのは、メニューバーからメニューアイテムくらいはなんとかなりますが、ポップアップボタンのアイテムなどになると信頼できる経験が思い浮かびません。単発でのマクロとしては動作しても、連続して複数回運転するには、処理速度がランダムに変動してそのうちイベントを取りこぼすというのが簡単に想像できて、ここでは考えたくない手段です。
従って、キーボードショートカットユーティリティを使うことになりそうなのですが、さて、なにを選ぶといいのか、思案のしどころです。

DropBoxやiCloudなどのクラウドストレージに暗号化されたイメージファイルを置いてみる

以前、タイトル通りの内容で自前サーバの方にトピックスを書いたのですが<http://amstudio.sytes.net/users/amstudio/weblog/c3390/DropboxSugarSync.html>、その後、スパースバンドル・ディスクイメージ形式について認識が変わったので再整理しながらここに改めて記しておきます。

■クラウドストレージにスパースバンドル・ディスクイメージ形式のファイルを置く
クラウドストレージ上に素のままのファイルを置くことは剣呑だという感覚は確かにあります。しかし、何らかのツールを使って暗号化したファイルを置くとなると、ファイル単位で復号化→アクセスという手順が必要で、簡便な方法とはいい難くなります。
ファイル単位よりはディレクトリ単位の方がアクセスは簡易になるでしょう。
そこで、パスワード保護されたディスクイメージファイルをクラウドに置くという発想で手順を書いたのが上記のものでした。
これを書いた時点では、FileVaultとそれが利用するスパースバンドル・ディスクイメージ形式のファイルへの信頼は、私の中では地に落ちていましたので、スパースバンドル・ディスクイメージ形式ではなくスパース・ディスクイメージ形式を選択していたのですが、その後、別な理由(FileVaultではなく)でスパースバンドル・ディスクイメージ形式を継続的に使ってみたところ、トラブルもなく半年くらい経過したので、スパースバンドル・ディスクイメージ形式のファイルへの評価を改めることにしました。
(OS X 10.6くらいのスパースバンドル形式の初期の頃のバグに当たってしまっていたようです)
また、クラウドストレージに置いたディスクイメージのサイズが大きくなると、中身を変更するたびに発生する同期アクセスが無視できなくなってきたため、単一ファイルのディスクイメージから、バンドルパッケージ形式のファイルへ変更した方が、変更/更新がセグメント単位となるので同期処理が短時間で済みそうだという計算です。

■スパースバンドル・ディスクイメージ形式
スパースバンドル・ディスクイメージは図のように、ディスクユーティリティ.appを使ってツールバーの「新規イメージ」アイコンをクリックすれば作成できます。

1

ここで、キーチェーンへ保存しないことが肝要です。

スパース・ディスクイメージ形式が1ファイルのイメージファイルであるのに対して、スパースバンドル・ディスクイメージ形式はバンドルパッケージとなっていて、図のように、パッケージを開くと「bands」フォルダの中にデータがセグメントで保存されるようになっています。

2

これで、スパースバンドル・ディスクイメージファイルをバックアップの対象として指定した場合、Finder上の外観はファイル扱いと同じですが、バックアップツールからはディレクトリとして扱われる(はず)なので、小さな変更や追加については、対応するセグメントファイル単位での同期処理となり、同期処理が高速化されるはずです。

今回の例で4GBのサイズを指定して作ったイメージファイルですが、初期値では38.6MB程度のサイズとなっています。スパース・ディスクは、指定したサイズを上限として、その中にコピーされたファイルに合わせて順次サイズが大きくなって行くのが特徴です(一旦大きくなったものは、中身が削除されても自動的にコンパクト化されることはありません)。

■スパース・ディスクのメンテナンス
スパース・ディスクは単一ファイル形式でもバンドルファイル形式でも、中身の容量に合わせてサイズをコンパクト化することができます。
今回の例では、指定サイズいっぱいまで使っていた状態から、中身を削除して実質1GBくらいまでに整理したとしても、一旦大きくなったサイズは自動的に縮小はしてくれません。
実質サイズに合わせてスパース・ディスクのサイズを調節する方法は、

$ hdiutil compact image

で行います。
ついでに、スパース・ディスクイメージ形式からスパースバンドル・ディスクイメージ形式へファイル形式を変更したい場合は、

$ hdiutil convert -encryption xxxx.sparseimage -format UDSB -o xxxx

とやれば、自動的にファイル名「xxxx.sparsebundle」で変換されます。

1桁数字を全角に、2桁以上を半角にする−InDesignとmiでやってみる

タイトル通りなのですが、その時使うフォントがプロポーショナルで、全角数字と半角数字のデザインが歪だったりするとなんだかなあなのですが、この要求は結構な率であるのです。
ワードプロセッサ専用機が全盛の頃、モノスペースフォントで、全角、半角、2倍角などとやっていた頃の名残なのでしょうか?
それにしても、なんだかなあ、なのですが、要求されれば仕方のないことです。
そこで、タイトル通り検索してみたところ、InDesignではこんなところが。
<http://72.way-nifty.com/blog/2011/06/indesignjavascr.html>
公開、有難うございます。

■InDesignでは
上のページから引用すると、

GREP検索置換で…
2桁以上数字では「\d+,*\.*\d+」を検索し、結果を「全角英数字→半角英数字」に
1桁の数字では「(?<!\d|\.)\d(?!\d|,|\.)」を検索し、結果を「半角英数字→全角英数字」に
置換します

となっています。
スクリプトを見ても、InDesignの正規表現検索結果に対して文字種変換をする仕様のようです。
この仕様だと、2桁以上の数字を検索し文字種変換する際に「全角.と全角,」も半角にされてしまうところが、私が要求されている仕様上は困るところです。節、項、目の見出し小見出しで「全角の.」が指定されているので、「.,」の全角/半角処理は別個にやりたいのです。

そこで、数字だけ一旦すべて全角にして、半角の「.,」で桁表記された2桁以上の数字列だけ半角にするという方法をAppleScriptで考えてみました。
InDesignのスクリプトは久しぶりだったので、次のドキュメントを参考にしました。

InDesign_ScriptingGuide_AS_JP.pdf
<http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingGuide_AS_JP.pdf>

tell application "Adobe InDesign CC"
	activate
	set SelectedStrngs to the selection
	if SelectedStrngs is not {} then
		set {find text preferences, change text preferences, find grep preferences, change grep preferences} to {nothing, nothing, nothing, nothing}
		set width sensitive of find change grep option 1 to false
		--
		set find what of find grep preference 1 to "\\d+"
		set FoundChar to find grep SelectedStrngs
		set find character type of find transliterate preference 1 to half width roman symbols
		set change character type of change transliterate preference 1 to full width roman symbols
		repeat with i in FoundChar
			if (OpenType features of i) = {} then
				change transliterate i
			end if
		end repeat
		--
		set width sensitive of find change grep option 1 to true

		set find what of find grep preference 1 to "[0-9,\\.]{2,}"
		set FoundChar to find grep SelectedStrngs
		set find character type of find transliterate preference 1 to full width roman symbols
		set change character type of change transliterate preference 1 to half width roman symbols
		repeat with i in FoundChar
			change transliterate i
		end repeat
		display notification "終わりました。" with title "完了" subtitle ""
	else
		display notification "文字列を選択してから実行しましょう。" with title "注意!" subtitle ""
	end if
end tell

やはりJavaScriptよりも処理は遅いようですが、要求仕様は満たしています。

■mi.appでは
InDesignで使った方法では、文字種変換の部分をInDesignの機能に負っています。
文字種変換の部分をAppleScriptで全てやってしまえば、どのエディタなどでも使えることになりますが、その前に、mi.appではどうでしょうか?
mi.appでは組み込みの文字種変換が使えそうです。
そこで、mi.appのツールを使ってやってみることにしました。

<<<REPLACE-TEXT-ALL
1
1
<<<REPLACE-TEXT-ALL
2
2
<<<REPLACE-TEXT-ALL
3
3
<<<REPLACE-TEXT-ALL
4
4
<<<REPLACE-TEXT-ALL
5
5
<<<REPLACE-TEXT-ALL
6
6
<<<REPLACE-TEXT-ALL
7
7
<<<REPLACE-TEXT-ALL
8
8
<<<REPLACE-TEXT-ALL
9
9
<<<REPLACE-TEXT-ALL
0
0
<<<TRANSLITERATE-REGEXP-SELECTED(全角英数(A-z,0-9)→半角英数(A-z,0-9))
[0-9,\.]{2,}

‘TRANSLITERATE-REGEXP-SELECTED’が肝ですね。

本来は、

<<<TRANSLITERATE-REGEXP-SELECTED(半角英数(A-z,0-9)→全角英数(A-z,0-9))
\d+
<<<TRANSLITERATE-REGEXP-SELECTED(全角英数(A-z,0-9)→半角英数(A-z,0-9))
[0-9,\.]{2,}

で動作するはずなのですが、現時点でのmi.app version 3.0b4では、‘TRANSLITERATE-REGEXP-SELECTED’が繰り返されると動作が止まるというか1回目の処理で終わってしまうようですので、無骨に1文字ずつ変換しています。

この次は、AppleScript内で文字種変換をやって、文字種変換機能を持たないエディタでも使えるバージョンを考えてみたいと思うのですが、正規表現での検索結果に文字種変換をかけなければいけないので、もう少し考えないと光明が射してこないかなというところです。