Archive for the 'Otto's Antenna/Entangler' Category

2015/09/21 iOSデバイスからMac上のAppleScriptを実行するEntangler、前バージョンからのアップデート点

昨日、FAXの動作確認のためにきわめて少ない手数でAppleScriptのリモート実行を行うのに使ったEntangler。

前バージョンである「Otto’s Antenna」ではいくつか問題があったわけですが、それがバージョン2.0であるEntanglerではどうなっているでしょうか?

ent1.png

(1)日本語のファイル名のScriptを登録するとおかしくなるバグ

Otto’s Antennaでは、日本語のファイル名のAppleScriptを登録すると、「こんにちは」と「こんにちは~」の2つのファイルが登録されたように見え、「こんにちは~」のほうは実行できないゴーストでした。

実際に日本語のファイル名のAppleScriptを登録してみたところ、この前バージョンで発生していたバグは再発しませんでした。

(2)AppleScriptに引数を渡せない

Otto’s Antennaでは、Shell ScriptなどにArgumentsを渡せるのに、AppleScriptにはArgumentsを渡せない仕様になっていました。

Entanglerで実験してみたところ、iOSデバイス上のEntanglerでScriptボタンを長押しすると、Argumentsの入力ダイアログが表示されます。ダイアログにArgumentsを入力すると、たしかにAppleScript側でArgumentsを受信できました。

AppleScript名:ダイアログてすと
on run anArg
  display dialog (anArg as string)
end run

★Click Here to Open This Script 

昨日のFAX送信実験でいえば、送信先のFAX番号を引数に渡せるようにすることも可能です。

img_3135.PNG

dialog3.png

(3)Scriptが実行されるまでの時間が長い

Otto’s AntennaのときにはKeynoteのスライドをめくるような用途にはちょっと使えないぐらい応答に時間がかかっていました。iPhone上で操作してからMac上でAppleScriptが実行されるまで、だいたい10秒ぐらいかかっていました。

Entanglerでは、ずいぶん早くなりました。1〜2秒といったところでしょうか。Keynoteのスライドめくりには依然としてちょっと物足りないかもしれませんが、応答速度の向上は歓迎できます。

Otto’s Antennaのときにダメだと感じた点が、ずいぶん改善されています。まだEntanglerのすべての機能を試せていませんが、現時点でも満足できています。

2015/09/20 iPhoneから自宅/会社のMac上のAppleScriptを呼び出すEntangler

以前、Otto’s Antennaという名前で紹介したアプリケーションがバージョンアップして、「Entangler」という名前になっていました。

ちょうど、奥方様の実家のFAXの動作確認をする必要があったので、MacにFAXモデムをつないで、指定の電話番号にFAX出力するAppleScriptを書いて、iPhone上のEntanglerから呼び出してみました。

EntanglerというアプリケーションのMac版をMacにインストールし、iOS版をiPhoneにインストールして、iOS側からMac側の機能を呼び出すというのが、基本的な運用スタイルです(AppleWatch版もあるとは知りませんでした)。

前バージョンであるOtto’s Antennaよりもデザインがよくなって、iOSデバイスから操作してからの反応が速くなっていました。EntanglerはAppleScriptのほかにもAutomatorアクションやshell scriptなども実行できるそうです(AppleScriptしかテストしていないですけれども)。

Scriptを実行するMacはSleepせずに、ネットワーク(LAN/WiFi)に接続した状態にしておく必要があります。

print1.png
▲MacBook ProにUSRoboticsのUSB FAX Modem(OS X 10.10.5でも使える)をつなぎ、Sleepしないようにしてスタンバイ

print2.png
▲FAX送信元の電話番号に「ps-ax」と設定(最初に入っていた状態そのまま)

print3.png
▲Mac上のEntanglerにFAX送信するAppleScriptを登録

AppleScript名:print_a_fax
– Created 2015-09-20 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “AppKit”

property aPrinter : “USB Modem”
property targFaxNum : “03-XXXX-XXXX”

tell application “Safari”
  tell front document
    set aPrintSetting to {copies:1, starting page:1, ending page:9999, target printer:aPrinter, fax number:targFaxNum}
    
print with properties aPrintSetting without print dialog
  end tell
end tell

★Click Here to Open This Script 

print4.jpg
▲iPhone上のEntanglerを起動して、「print_a_fax」Scriptを実行

img_3127_resized.png
▲FAX受信中(「ps-ax」と通知が出ている)

63db476c-a6a1-4a82-8650-c79152570edd_resized.png
▲FAX受信中…

ptint0.png
▲Scriptの実行が終了すると、Macの通知センターに通知が表示される

bb1fb10f-5f86-43ed-bd72-fed8ec168e61_resized.png
▲確認のためにFAXで印刷したYahoo!のトップページ。印刷が途切れているのは、本来A4用紙が必要なところに無理やり別のサイズ(たぶんB5)の紙を突っ込んだため

2014/02/02 iOSデバイスからMac上のScriptを実行するOtto’s Remote & Otto’s Antenna

Otto’s Remote & Antennaは、iOSデバイス上のOtto’s Remoteアプリケーション(100円)から、Mac上のOtto’s Antenna(記事執筆時点では200円→無料)に指令を送って、Mac上のAutomatorアクション、Shell Script、AppleScriptをMac上で実行させるソリューションです。

Otto’s RemoteはiPhoneでもiPadでも実行できるUniversalアプリですが、このアプリの性格を考えれば絶対にiPhoneで使うべきです。

AppleScript使いにとって本ソフトは、用途がありすぎてとても書き切れないほどの可能性があるので、かなりていねいにチェックしたいところです。

本Blogの性格上、Automatorとshell scriptは完全にスルーして、AppleScriptにのみフォーカスしてレビューします。

レビュー時のバージョン:
 Otto’s Antenna: ver 1.3
 Otto’s Remote: ver 1.3.2

 → Otto’s AntennaのWeb

インストールとセットアップ

最初に、iOSデバイス(iOS 6.1以降)にOtto’s Remoteを、Mac(OS X 10.8以降)にOtto’s Antennaをインストールする必要があります。また、iOSデバイスとMacの両方とも同一のApple IDを使っている必要があります。これは、Otto’s Remote/AntennaがiCloudの通知システムを利用しているためです。

同一のApple IDを使っていれば、複数のMac上のAppleScriptの実行をiPhone側から行うことも可能です。

Mac側のScriptフォルダ(~/Library/Application Scripts/com.amolloy.ottoantenna/)に入れておいたAppleScriptが、iOSデバイス側のOtto’s Remoteの画面上に表示されます。これを選択して実行することになります。

otto0.png

セットアップで悩んだり、ハマったりすることはとくにありませんでした。

さあ実行だ!

iOS上のOtto’s Remote上のScript名を(例:say Hello)タップすると、

「Are you sure you wish to perform say Hello?」

と聞かれます。選択肢は、

Yes, this time.
Yes, every time.
Yes, for all actions.
No, thank you

の4つ。

毎回実行するとか、他のアクション(script)実行時に必ず実行するとかいうのは、とっても危険な香りがする(解除方法が提供されていない)ので、正直なところ最初の「Yes, this time」と最後の「No, thank you」以外の選択肢は使わないはずです。

まずは、小手調べということで……英語のファイル名のAppleScriptをMac側のScriptフォルダに入れてiPhone側から実行。iPhoneがWiFi環境にいても、LTEのネットワーク側にいても、だいたい10秒前後でMacに指令が届いて実行されました。

実行対象のMacがスリープ状態(たとえば、MacBook Airをクローズした状態)だと、指定のAppleScriptは実行されません。「システム環境設定」のPower Napをオンにした状態でも、Scriptは実行されませんでした。これは、Otto’s Antenna側がPower Nap実行のためのサービスを実装していないことが考えられます。

【重要】Otto’s Antennaを運用させる際には、Macの電源は入れたままにしておく必要があります。

日本語にちゃんと対応しているかな?

次に、Mac側のScriptフォルダに「こんにちは」と日本語のファイル名を付けたAppleScriptを置き、iOSデバイス側でブラウズすると……「こんにちは」および「こんにちは〜」と存在しないファイルが見えてしまいます(やっぱり日本語ではテストしてないだろうな〜)。

otto1.png

img_2298.PNG

「こんにちは」Scriptは実行できましたが、「こんにちは~」Scriptはそもそも存在しないので、実行できません。

この問題は、どうやらMac側のOtto’s Antennaの問題らしく、Mac上でステータスバーのメニューから「こんにちは〜」を選択して「Delete」を実行すると、Mac側のメニューにも出なくなりますし、iOS側にも表示されなくなります。

日本語の「絵文字」(Japanese Mobile Emoji Characters)には対応しており、MacのFinder上で絵文字を入力してファイル名に絵文字を入れると、Mac上のOtto’s Antennaのメニュー上にも表示されますし、iOS上のOtto’s Remote上にも表示されます。

otto4.png

img_2299.PNG

日本語ファイル名にかぎらず、名称変更したり元のScriptが見つからなくなると、メニュー上では赤く表示されたままメニューに残ります(赤く表示するぐらいなら、メニュー上から削除したほうが)。

本気でためしてみよう!

階層構造実験

まずは、Mac側のScriptフォルダにフォルダを作成して、Otto’s Antennaがフォルダの階層構造を認識するかどうかという実験。

ためしてみると、きちんとOtto’s Antennaがフォルダ内に格納したScriptを検出しました。これについては合格点です。

AppleScriptファイル形式実験

次に、どのような形式のAppleScriptを認識・実行してくれるかどうかの実験です。目下、OS X 10.9環境の「AppleScriptエディタ」では、

 通常AppleScript:拡張子「.scpt」
 通常AppleScriptテキスト:拡張子「.applescript」
 通常AppleScriptスクリプトバンドル:拡張子「.scptd」
 AppleScriptアプレット:拡張子「.app」
 AppleScriptObjCアプレット:拡張子「.app」

を作成可能です。Otto’s Antennaが、これらのうちどこまでを「AppleScript」として扱うのかを確認しておく必要があります。

 通常AppleScript:拡張子「.scpt」→実行可
 通常AppleScriptテキスト:拡張子「.applescript」→実行可
 通常AppleScriptスクリプトバンドル:拡張子「.scptd」→実行可
 AppleScriptアプレット:拡張子「.app」→Otto’s Antennaに認識されず
 AppleScriptObjCアプレット:拡張子「.app」→Otto’s Antennaに認識されず

できることとできないことを、明確にしておくことは重要です。

位置情報をトリガーにしてAppleScript実行!

現行バージョンでは、iOSデバイス上で位置情報(Geo Location)を取得して、そこに到着するか出発するかを実行トリガとして使用できます。

バッテリーが少なくなってきたら実行とか、iOSデバイスの温度センサーが設定温度よりも低い/高い場合には実行とか、メールで呪いのメッセージが送られてきたら実行とかいう機能はありません。iOSデバイスを振ると実行とか、音声認識で実行とかはできてもいいような気もします。

実行トリガを設定できるのはよいのですが……実行時の結果をiOS上のOtto’s Remote側に返せないので、そのあたりが気になります。

また、Otto’s RemoteをiOS上でバックグラウンドに回した状態でこれを実行してくれるでしょうか?

そこで、これらを試すべく2本のAppleScriptを書き、Mac上のOtto’s Antennaに登録して実験してみました。

otto10.png

スクリプト名:メモに外出時刻を書く
–タイムスタンプからユニークなタイトルを作成
set aTitle to “てすと” & (do shell script “date +%Y%m%d%H%M%S”)
set aBody to “ぴよまるさんが、家を出ました。
Piyomaru left home.”

makeNewNoteOnNotes(aTitle, aBody, “iCloud”) of me

on makeNewNoteOnNotes(aTitle, aBody, anAccountName)
  set noteHTMLText to

"

& (aBody as Unicode text) & “”
  
  
tell application “Notes”
    –activate
    
tell account anAccountName
      make new note at folder “Notes” with properties {name:aTitle, body:noteHTMLText}
    end tell
  end tell
end makeNewNoteOnNotes

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:メモに帰宅時刻を書く
–タイムスタンプからユニークなタイトルを作成
set aTitle to “てすと” & (do shell script “date +%Y%m%d%H%M%S”)
set aBody to “ぴよまるさんが、家に帰りました。
Piyomaru return to home.”

makeNewNoteOnNotes(aTitle, aBody, “iCloud”) of me

on makeNewNoteOnNotes(aTitle, aBody, anAccountName)
  set noteHTMLText to

"

& (aBody as Unicode text) & “”
  
  
tell application “Notes”
    –activate
    
tell account anAccountName
      make new note at folder “Notes” with properties {name:aTitle, body:noteHTMLText}
    end tell
  end tell
end makeNewNoteOnNotes

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

登録したGPS位置情報から離れる(departing)/到着する(arriving)とAppleScriptの実行リクエストを行う「Geo Trigger」をそれぞれ登録。

img_2302.PNG

iPhoneの画面をオフにした状態でカバンに入れて自転車で移動。

5Kmほど離れた目的地に到着して、カバンからiPhoneを出して確認すると、通知センターに、

「Fired: メモに外出時刻を書く on MBPretina」

と表示がありました。成功です。画面表示時ではなく、はるかに前に実行されたことが確認できました。

img_2300.PNG

メモを見ると、「てすと20140202141308」のエントリが作成されており、

「ぴよまるさんが、家を出ました。
Piyomaru left home.」

と記入されていました。

帰宅時に実行されるScriptも無事動作していました。

ただ、出かける際にほぼフル充電だったバッテリーは4時間後の帰宅時には45%まで減っており、iPhone上でOtto’s Remoteを(GPS情報をトリガにするリクエストを登録して)実行させたまま1日運用するのはちょっと心もとないですね。真剣に位置情報をトリガにしたScriptを運用するのであれば、外部バッテリーの併用は欠かせないことでしょう。

Otto’s Antenna&Otto’s Remoteに必要不可欠な機能

まず、AppleScript(だけ)にパラメータを渡せないのはダメです。ダメを通り越してありえないです。早急に対応していただく必要があると思います。Otto’s Antennaが日本語の不必要なファイルをリストアップしてしまう問題も解消されるべきです。

あと、Automator Action/Shell Script/AppleScript全般に、実行結果を返せないのと、実行されたかどうかの確認ができないのもダメです。

ただし、緊急避難的にこれらの問題を解決する方法は存在しています。メモやリマインダー経由でiOSデバイスとMac間の情報のやりとりを行うというものです(もちろん、メールやメッセージ(iChat)で行ってもかまいません)。Otto’s Antenna&Remoteに多くを期待しないとそういう対応も行えます…………が、ここは少しOtto’s Antenna+Remoteでなんとかしていただきたいところです。

あとは、AppleScript側で受信できる追加パラメータとして、iOSデバイス側の実行タイムスタンプと位置情報(緯度、経度情報)が欲しいところです。

結論:こいつは使える!

本当に使えるのか半信半疑でしたが、たしかにこれは使えます。もっと注目されるべきアプリといえるでしょう。

iPhoneからMac上のAppleScriptの実行をキックできると、いろいろな処理が考えられます。

簡単なところでは、出力に時間のかかる(=出力枚数が多いので、給紙が必要+他の印刷物の状況を見る必要がある)書類の印刷を共用のカラーレーザープリンターで行う際に、プリンターの前まで行って、iPhoneから自分のデスクのMacのプリントアウトのAppleScriptを実行するとかいうのは、実際に実用性のある用途だと思います。

Mac側とiPhone側でCloudを介してデータを共用しているタイプのアプリケーションは、両者のI/O用に使えます。DropBoxなどでファイルをMacからiPhoneに渡すという処理も簡単ですし、Evernote経由でI/Oを行ってもよいと思います。

処理結果をMailやTwitter、WordPress経由で返すのも当然アリですが……データ転送量にしたがって課金されるタイプのサービスは避けたいところです。