Archive for the 'news' Category

2017/11/11 Metadata Lib 2.0

Shane StanleyによるSpotlight検索用のAppleScript Libraies「Metadata Lib」の新バージョン2.0が公開されました。

Metadata Libは登場頻度も高く、実際に便利であるため、万人におすすめできるライブラリです。「おすすめできないライブラリってあるのかよ?」という話もありますが、癖が強くて読みにくくて特定の言語環境(英語とか)でしか検証が行われていないライブラリは避けています。

Metadata Lib v1.0はmacOS 10.9以降を対象としていましたが、v2.0はmacOS 10.10以降を対象としています。正直、10.10はバグが多くて避けたいので、10.10以降と考えてもよいでしょう(macOS 10.10嫌い。でも、バグだらけで直る見通しすら立っていないmacOS 10.13が一番嫌い)。

Metadata Lib 1.0から2.0への変更点は、AppleScript用語辞書(sdef)が添付され、英語っぽい記法で呼び出せるようになった点です。バージョン1.0の「いわゆるサブルーチンの塊を呼び出している感」から、英文っぽいこなれた表記ができるようにテイストが変わりました。

いっぽうで、Metadata Lib v1.0を対象に書いたAppleScriptも、v2.0でそのまま使えます。

mdfind2.png

また、用例(Sample Searches.scpt)が添付されるようになったのも大きな違いです。

mdfind_resized.png

本ライブラリは実際に内容(ソース)を読むこともできるようになっており、用語辞書の用語を使って呼び出した場合とバージョン1.0的な普通のハンドラの両方が用意されていることが読み取れます。

AppleScript LibrariesはAppleScriptによってAppleScriptの予約語を拡張して機能を追加できるという、OSAXをAppleScript自身で書けるような存在で、ちょっとやりすぎな特徴として「自分自身のAppleScript用語辞書の用語を用いてライブラリを記述できる」というものがあります。

ただ、ライブラリ自身の用語辞書を用いてライブラリの内容を書くとメンテナンスがやりにくくなるので避けるべきです。

今回のMetadata Libのように「用語を使ったハンドラ」と「通常のサブルーチン的なハンドラ」の両方を用意して、基本的には通常のサブルーチンを呼び出すような記法で書いてあり、よいお手本となる内容です。

use AppleScript version “2.4″ – 10.10 or later
use framework “Foundation”
use mdLib : script “Metadata Lib” version “2.0.0″

–添付のAppleScript用語辞書を利用した英文っぽいハンドラ
on perform search predicate string predString in folders filesAliasesURLsOrPosixPaths : missing value just in fileAliasURLOrPosixPath : missing value in scopes listOfScopes : missing value search arguments argList : {} attributes to include attList : missing value converting dates datesFlag : false names only namesFlag : false
  –  
end perform search

–普通のサブルーチンっぽい(Objective-Cっぽい記法の)ハンドラ
on searchFolders:filesAliasesURLsOrPosixPaths searchString:predString searchArgs:argList
  
end searchFolders:searchString:searchArgs:

★Click Here to Open This Script 

ささっとMetadata Libの中を読んでみて驚いたのが、「using terms from scripting additions」という記述。これは見たことがありません(using termis from application “Finder” といったようにアプリケーション名を指定するものはありました)。

using terms from scripting additions
  tell (current date) to set {theASDate, year, day, its month, day, its hours, its minutes, its seconds} to {it, theYear, 1, theMonth, theDay, theHour, theMinute, theSeconds}
end using terms from

★Click Here to Open This Script 

2017/10/17 Double PDFアップデート作業中

Mac App Store上で発売中の「Double PDF」が、AppleがmacOS 10.13上で作成してくれやがった非常識なバグの影響を受けてmacOS 10.13のGM以降で正常に動作していないことが判明(初期のmacOS 10.13betaで動作確認していた時は動いていたのに ーー;)。

AppleがOSに作成したバグに対処するために、小規模なアップデートを行います。macOS 10.13.1のbetaが出ていますが、この段階で直っていないので、10.13.2か10.13.3以降まで直らないはず(つまり、macOS 10.13.xのこのあたりの問題は今年中は直らない=今年中はメイン環境の移行は行わない)。

さっさとAppleがバグを修正してくれれば、こちらで作業をする必要は何もないわけですが、、、

いちいち余計な処理を行うと処理速度が低下するわけで、実に腹立たしいところです。

NSRect関連:
NSMakeRect、NSZeroRect、NSRectをパラメータにするAPIの呼び出し箇所。

PDFKit関連:
10.13で変更が加わった箇所の動作確認が必要(ーー;;

2017/08/09 AppleScript Release Notesが更新される(macOS 10.13 High Sierra)

AppleのWebをチェックしてみたら、macOS 10.13のAppleScript 2.7の変更点についても新たに追加されていたことを見つけました(昨日見たときには10.12への言及のみでした)。

macOS Version AppleScript JXA
10.10 2.4 1.0
10.11 2.5 1.1
10.12 2.5 1.1
10.13 2.7 1.1

10.13 Changes

macOS High Sierraでは、セキュリティに関する若干の改良や修正が行われた、とのこと。

・AppleScriptObjCで、method family deductionのための完全なルールを使用するようになった。このため、 +[NSCharacterSet newlineCharacterSet]のようなメソッドをクラッシュせずに呼べるようになった。

macOS 10.12上で問題になっている点といえば、AppleScriptドロップレットにファイルをドラッグ&ドロップしたときに、ファイルの拡張属性「com.apple.quarantine」の影響を受けて、ユーザーに安全確認を問い合わせていないファイルについてはドロップレット側でも処理しない、という問題。

また、これに付随してドロップレットにドラッグ&ドロップしたファイルの処理が複数回Openハンドラを呼び出されて実行される、ということが一番問題になっていました。

→ com.apple.quarantineがドロップレットに与える影響

同じ処理をmacOS 10.13 Public Betaで行なってみると、

 (1)ドロップレットにドロップしたファイルが複数回のopenハンドラ呼び出しに分割されて処理される状況は変わっていない

 (2)あきらかにヤバそうなファイル(未署名のアプリケーション。xattrコマンドで調べるとcom.apple.quarantine属性がついている)をドロップすると、(実行するわけでもないのに)起動したときと同じ警告ダイアログが出て処理が停止する

 (3)(2)のヤバいファイルをドロップした直後(いったん終了して)もう一度、安全なファイルをドロップしてもDock上でバウンドを繰り返す(起動中アニメーション)ものの、起動しないケースがある

といった様子です。

macOS 10.13 Public Betaでは、

・sayコマンドで日本語の特定の文字列(もげる、捥げる)を日本語音声で読み上げると一部の文字が抜ける(iOSでも同様)

のバグは未修正です。

2017/08/08 AppleScript Release Notesが更新される(macOS 10.12)

macOS 10.13のAppleScript 2.7のRelease Notesが掲載されていないかAppleのWebをチェックしてみたら、macOS 10.12上の変更点についての言及が新たに追加されていたことを見つけました。

macOS Version AppleScript JXA
10.10 2.4 1.0
10.11 2.5 1.1
10.12 2.5 1.1
10.13 2.7 1.1

10.12 Changes

macOS Sierraでは、パフォーマンスとセキュリティに関する改良や修正が行われた、とのこと。

・choose applicationコマンドの実行がScript EditorのAppleScript構文要素色分け設定をデフォルト設定状態に戻す、というバグを修正

2017/07/19 CotEditor開発者の1024jpさんをTMUG例会にお呼びします

毎月第2土曜日、目黒で例会を行なっている「東京Macintosh Users Group」(以下、TMUG)の8月度の例会(8/12)にCotEditor開発者の1024jpさんをお呼びして、CotEditorについてお話しを聞く機会をご用意しました。

日時:8月12日(土)14:00〜17:00(14時開場、14:30開始)
場所:目黒区民センター内中小企業センター2階会議室
定員:48名

一般の方でも、TMUGホームページの登録フォームからお申し込みいただければ無料で参加していただけます。途中、ロボットよけのために、

 合い言葉:ローマ字の小文字で「川」と入れてください

とありますが、ここは「kawa」と入力してください。

CotEditorはオープンソースで開発が行われており、かつメインの開発者が入れ替わって続いてきたという珍しいプロジェクトでもあります。

2017/07/17 SQLiteをAppleScriptから呼び出すのに便利なSQLite Libが公開される

SQLiteをAppleScriptから呼び出しやすくする「SQLite Lib」AppleScript LibrariesをShane Stanleyが公開しました。

元になっているのは、FMDBフレームワーク。Objective-CによるSQLiteのラッパーです。このFMDBにAppleScriptとの値の受け渡しに便利な(主に、受け取ったあとのデータのParse処理)メソッドを追加した「FMDBAS」フレームワークというものがShane Stanleyによって開発されました。

そこからさらに進化して、FMDBASフレームワークをラッピングした「SQLite Lib」になりました。

Scripterの間では「do shell script」コマンド経由でSQLiteを呼び出す処理が、全世界的に使われていますが、do shell scriptによるSQLite呼び出しだと、テキストとして返ってくる処理結果をparseしてあげる必要があり、そこからさらにフィールドごとにAppleScriptのデータタイプに合わせてcastしてあげたりすると、かなりの手間になります。

このあたりをObjective-Cで記述してスピードアップさせ、AppleScript Libraries化することで(AppleScriptObjCを覚えることなく)SQLiteを用いたプログラムを書けるというのが本ライブラリの真骨頂です。

もちろん、Cocoaを呼び出すAppleScriptObjCを書くことができれば、高速かつ大量のデータを処理することができ、その大量のデータをSQLite DBに格納したり呼び出したりすることで、搭載メモリー(RAM)を大幅に超えるサイズのデータをスピーディーに扱えます。

Shane Stanleyによれば、do shell scriptでSQLiteを呼び出して処理するよりも、50〜100倍程度高速、とのこと。

sqlitelib_graph_resized.png

ただし、ファーストリリースのためいくつかまだこなれていない点もあります。

意外と基礎的なメソッドはガラ空き状態で、任意のSQLiteのDBファイルにいくつテーブルが存在するとか、テーブル中のスキーマ定義の状態がどーなっているかを調べるといった、基礎的かつ必要と思われる機能は用意されていません。

Terminal上からSQLiteのコマンドを叩きつつ調べることになります。このあたり、Script Editor上だけで対話的に調べられたらそのほうがよさそうな感じもします。

次に、既存のSQL文をSQLite Lib向けに書き換えるあたりでつまづきやすいです。既存のSQLを書き換えることを考えるよりも、新規に別のものを作るようなときに利用することを考えたほうがよいでしょう。実際、日本語Word.netのシソーラス辞書のSQLite DBをキーワード検索するSQL文を、SQLite Lib向けに書き換えるのは自分にはできませんでした(do shell scriptコマンドのまま使用中)。

→ 休みの日に1日、いろいろ試してみたらできました

既存のSQLをどのように書き換えるのか、そのあたりでもう少し資料が必要に思えます。

2017/07/14 macOS 10.13=AppleScript 2.7

一般公開されたmac OS 10.13 Public Betaを見るかぎり、AppleScriptの処理系がバージョンアップされてバージョン2.7になっています。

macOS Version AppleScript JXA
10.10 2.4 1.0
10.11 2.5 1.1
10.12 2.5 1.1
10.13 2.7 1.1

 「おいおい、バージョン2.6はどこに行ったんだ?」(10.12ではバージョン2.5)

というところですが、詳細は不明です。それとなく「リリースノート出す気あんの?」と聞いてみたらその意向はあるようです。このあたりは、オフィシャルで公開情報が出てくるまで待つしかありません。

macOS 10.12ではmacOS自体のセキュリティ系の機能とAppleScriptバージョン2.5の処理系の整合性が取れていなかった(とくに、droplet処理時)ので、このあたりの整合性を取り戻すのが(Apple的な)急務ということになるでしょう。

また、新規に導入されたファイルシステム「APFS」「戦場の絆」プレイヤー的にはAPFSDSと見間違える)の影響もあるので、そのあたりの「穴埋め」も行っていることでしょう(ファイルシステム上に存在しない情報を取得する命令については、ヌル文字列を返してくる)。

macOS 10.12まではファイル情報を取得するinfo for命令でfile creatorとfile typeの情報を取得できていました(廃止されたとか言われていたのに)が、macOS 10.13+APFSではそもそもそんな管理項目が存在しないので、何も返ってこなくなります。

このあたり、ファイルの種別判定部分はmacOS 10.13+AppleScript 2.7+APFSでは書き換えが必要になるはずです。事実、Piyomaru Script Assistantでそういうパーツが出てきています。

APFSの仕様ではタイムスタンプがナノ秒単位になっていますが、Finder経由でタイムスタンプを取得すると結果はAppleScriptのdate型。FinderやSystem Events経由では秒以下の情報を取得できないことを確認しています。Cocoa経由で取得するにしても、どのように扱うことになるのか興味のあるところです。

Cocoaの呼び出し関連では、Blocks構文を要求するAPIをバージョン2.5までのAppleScriptでは呼べていないので、これがものすごくフラストレーション源になっています。あと、ASOCを書いていて腹が立つのは、

  「精度指定の数値をパラメータに要求するようなAPIが呼べない」

ことです。このあたり、なんとかならないものなのか。あと、AppleScript自体の数値(number)型の有効桁数が少なすぎて変数に入れられないEnumとかあるので、number型の有効桁数を拡張するとか、倍精度(有効桁数の多い)の数値型を新設するとかしてほしいところです。

また、Swiftで書かれたFrameworkの呼び出しが、自分はできていないので(ProjectにBridgingHeaderを追加すれば呼べるといった声もありますが)、このあたりなんとかならないものかと思っています。

sayコマンドで日本語音声を指定して特定の文字列を読ませても正しく読み上げが行われないバグは直っていません。バグレポートを書いてテスト用のコードまでAppleに提出していますが、「もげる」「捥げる」という文字を読ませると不完全な結果しか返ってきません。iOS上でも同様です。ASのsayコマンドではなくCocoaのレベルで問題が出ているようですが、これが音声データそのものに問題があるとしたら、音声データのライセンス提供元との調整になるはず。

ほかには、Script Menuから呼び出すAppleScriptに対して制限がきつすぎる(書類のオープン/クローズなどを行うと処理を止められる)点についてバグレポートしていますが、このあたりはScript Editorのアップデートが行われていないため不明です。

スクリプトメニューからのAppleScript実行処理自体は/usr/bin/osascriptコマンドで行なっているので/usr/bin/osascript次第?

2017/07/04 Mac App Storeでアプリケーション「Double PDF」を販売開始

Mac App StoreでMac用アプリケーション「Double PDF」(1,080円)の販売を開始しました。すべてAppleScriptで書いたアプリケーションです。

dpdf1.png

文字主体のPDF(電子ブックなど)やKeynoteなどのオフィス系アプリケーションで作成したPDFの差分チェック用ツールです。2つのPDFを同時にめくってチェックを行うのが基本的な機能で、差分を検出するために便利な機能が備わっています。

さて、なぜこのようなアプリケーションを作ったかという経緯についてご説明を。

同じデータ(Pages書類とかMarkdown書類とか)からPDFを作成するといっても、OSやアプリケーションのバージョンが変わると微妙に生成されるPDFは変わってきます(本当)。文字詰め、行間スペース、レイアウト順など、こまかいところは実に頻繁に変わります。

また、元データ自体に修正することがあるので、きちんと反映されているのか、修正点がよそに反映しないかどうかもPDF出力して、オリジナルと比較して確認したいところです。

こういう用途で真っ先に試してみるのは、Adobe Acrobat。PDFバージョン比較機能があるので試してみたところ、500ページぐらいのPDF本に対しては「微細な変化を検出しすぎる」こともあって、実務ではとても使えませんでした。とくに、不可視データの変化を検出しまくるので、Adobe Acrobatをこの用途に使うのはほぼ無理という判断に。

そこで、前のバージョンのOSで生成した本と現在のOS上で生成した本で変化が生じていないかをチェックするAppleScriptを書き、GUIまで作ってひととおり機能評価。SSDのマシンで動かした感じでは(MacBook Pro、MacBook Air)かなりいい印象でした。

dpdf0.png
▲開発最初期バージョンの画面。ここから周囲のみなさまのダメ出しによりいろいろ試行錯誤を

PDFを画像として評価して差分をチェックするのはGPUImage.frameworkで行なっています。GPUの強力な機能がAppleScriptからでも手軽に呼び出せています。

PDF本文テキストの差分を表示するのは、外部アプリケーション「BBEdit」「TextWrangler」。Mac App Storeに提出する際のチェックで引っかかって外しましたが、初期版ではFileMergeやVimdiffなどを操作してテキストの差分を表示する機能もありました(削ってしまいましたが)。

2text_diff_by_external_app_j_resized.png
▲外部アプリケーション(BBEdit)による文字差分のブラウズ

2text_diff_by_external_app_2_resized.png
▲途中のバージョンにあった、Vimdiffによる文字差分のブラウズ(廃止)

Adobe Acrobatよりも軽快に動作し、差分チェックを「ソートした本文文字」(PDF出力時にレイアウト順がよく変わるので)、「本文文字そのまま」「プレビュー画像としてチェック」などの方式をとりまぜてさまざまなケースに対応できるようにしてみました。

よろしくお買い求めください!(告知が続いたのはたまたま、、、)

2017/06/29 Keynote Control 2冊同時刊行

Piyomaru Softwareによる電子書籍、AppleScriptえほんシリーズの続刊を2冊同時に販売開始しました(お試し版もご用意しました)。

いきなり難しくならない「ホップ」「ステップ」「ジャンプ」の3段階難易度設定。
difficulty_resized.png

どこからどこまでが1行かを明示的に示す行番号表示などで、わかりやすく説明しています。

linenumbers.png

「Keynote Control 1」(47ページ)と「Keynote Control 2」(45ページ)です。BOOTH.pmにて委託販売しており、BOOTH上での価格は両方とも1,000円です。

同時に、既刊の「iTunes Control」についてもBOOTH上での販売価格を1,000円に改定しています。

ぜひお買い求めください。

keynote_control1_cover_resized.png

keynote_control2_cover_resized.png

2017/05/19 FileMaker Pro 16でセキュリティ機能が追加される

先日、FileMaker Proの最新バージョンv16が発表され、FileMakerからお試し版がダウンロードできるようになりました。

手元のデータベースを試してみたところ、メニューから(AppleScriptを呼び出している)FileMaker Scriptを実行したら実行権限エラーに。

display dialog程度のコマンドが書いてあるAppleScriptでは実行権限エラーにはなりません。正確に書けば、

「FileMaker Proを操作するAppleScriptがFileMakerスクリプトステップ中に書かれていた場合には実行権限エラーになる」

という状態です。ただし、これは仕様にもとづく動作であり、バグではありません。

FileMaker Pro 16では、アクセス権セットの「拡張アクセス権」で、詳細なシステムへのアクセス機能の許可/禁止が行えるようになったようです。

FileMaker Script中でAppleScriptを実行していると、「Apple EventおよびActive-XによるFileMaker操作の実行を許可」の項目にひっかかってAppleScriptの実行が遮断されるとのこと。

FileMaker Script中におけるAppleScriptの実行を許可するためには、この、

  「Apple EventおよびActive-XによるFileMaker操作の実行を許可」

にチェックを入れておく必要があります。

私が気づいていなかっただけで、より以前のFileMaker Proで追加されていた機能である可能性もあります。

2017/04/01 4/9(日)秋葉原で開催される「技術書典」への準備すすむ

4/9(日)に秋葉原「AKIBA SQUARE」で開催される技術書系同人誌即売会「技術書典2」への参加のために、準備をすすめています。

ぴよまるソフトウェア(え-11)ブースの目印は、こののぼりになる予定です。

のぼりは、書斎に飾ってあります。

img_0283_mini.png

2017/03/28 Keynote/Pages/Numbersがアップデート

Keynote/Pages/Numbersがアップデートし、それぞれKeynote 7.1、Pages 6.1、Numbers 4.1になりました(要macOS 10.12)。

■Keynote 7.1.0
–AppleScript用語辞書の変更点
・current slideがread only属性ではなくなった
・image formatで指定できる値が変更された
small / medium / large –> 60p / 540p / 720p / 1080p / 2160p / native size
・movie formatで指定できる値が変更された
small / medium / large –> 360p / 540p / 720p / 1080p / 2160p / native size
–機能上の変更点
・PDF書き出しをmacOS 10.12.4上で行えるようになった(権限エラーが出なくなった)

■Pages 6.1.0
–AppleScript用語辞書の変更点
・exportコマンドで指定できるフォーマットとして「formatted text」が追加された(RTF?)
–機能上の変更点
・PDF書き出しをmacOS 10.12.4上で行えるようになった(権限エラーが出なくなった)

2017/03/11 macOS 10.12のsayコマンドにバグ

Appleのディスカッションフォーラムで報告された内容によると、macOS 10.12上のsayコマンドで「特定の文字の組み合わせで文字を無視する」とのこと。

これは、気づいたユーザーをほめるべきなのか、こんな状態でOSをリリースするAppleを非難すべきなのか、その両方なのか。macOS 10.12ではAppleScript処理系のバージョンは(macOS 10.11から引き続き)2.5のまま変更はないので、OS側のテキスト解析系のサービスのバグなんでしょう。

日本語の文字列の範囲でも他に何かありそうな雰囲気がしますし、他の言語でも何か問題がありそうです。

AppleScript名:音声読み上げバグ(10.12)
say げる” using “Otoya” –> “げる”–* Bug *
say “もげる” using “Otoya” –> “もげ”–* Bug *
say “もゲル” using “Otoya” –> “もげる”
say “モゲル” using “Otoya” –> “もげる”

★Click Here to Open This Script 

AppleScript名:音声読み上げバグ確認(10.12)
set aStr to “あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやいゆえよわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ”
set aList to characters of aStr

repeat with i in aList
  set sayText to i & “げる”
  
say sayText using “Otoya”
end repeat

★Click Here to Open This Script 

2017/02/25 技術書典2で新刊書籍「iTunes Control」を頒布します

ぴよまるソフトウェアは、4月9日に秋葉原アキバ・スクウェアで開催される「技術書典2」(え-11)に出展。新刊電子書籍を販売します。

tbf2.png

新刊のタイトルは「iTunes Control」。iTunes+AppleScriptにおける「Hello World」体験を提供する本で、誰にでもわかり、誰にでもその実態を経験できるというもの。難易度も急に上がったりしません(Hop, Step, Jumpの3段階)。

book2.png

book3.png

book4.png

edama2さんに1か月前ぐらいに見せたら「前作からかわりすぎ!!!」と驚かれたので、「頭どうかしちゃったの?」「別人か?!」とかいうショックをやわらげるためにここに表紙その他を掲載しておきます(^ー^;;。

ブースではQRコードで書籍の販売を行い、販売したQRコードをスマホで読み取って販売元にメール送信すると、クラウドストレージにアップロードされた書籍のURLがメールで返送されてきます。

そして、この販売システム自体がAppleScriptで作ってあり、Mac上で稼働しているのです。

2017/02/23 Myriad Tables v1.0.7がリリースされる

Shane StanleyによるAppleScript Libraries「Myriad Tables Lib」のバージョン1.0.7がリリースされました。AppleScriptから手軽に「表」インタフェースを利用可能にするものです。

table3.png

同ライブラリをサイトからダウンロードし、~/Libraries/Script Librariesフォルダに入れるとAppleScriptから使えるようになります(このフォルダが存在しない場合には作成)。

tables01.png

tables02.png

同ライブラリにはAppleScript用語辞書が用意されており、Script Editorに直接ドラッグ&ドロップではなく、いったんScript Editorの「ライブラリ」ウィンドウに登録し、リスト上の「Myriad Tables Lib」を選択した状態で「用語説明を開く」をクリックすると、用語辞書の内容を確認できます。

tables003.png

tables004_resized.png

一般的に、Excel書類やCSVなどで支給されたデータに対して、どの行のデータを処理するかをセルの選択範囲で明示的にScriptに対して指示することはよくあります。ただ、実行環境にMicrosoft Excelがすべてインストールされているわけでもありません。

Myriad Tables Libがあれば、CSVデータ中の処理範囲を選択したり、簡易的なデータ入力・確認用のGUIをAppleScriptから利用できます。

Myriad Tables Lib 1.0.7の新機能として紹介されているものを、同ライブラリ添付のサンプルコードから紹介してみましょう。

新機能:セルのダブルクリックを「OK」ボタンのクリックと等価とみなす「double click means OK」オプション

table1.png

AppleScript名:double click means OK
use AppleScript version “2.4″ – Yosemite (10.10) or later
use framework “Foundation”
use scripting additions
use script “Myriad Tables Lib” version “1.0.7″

– This table shows how to use the ’double click means OK’ parameter
display table with data {“One”, “Two”, “Three”, “Four”, “Five”} with title “Simple table” with prompt “You can double-click an entry rather than selecting and pressing OK” with double click means OK and empty selection allowed

–> {rows selected:{5}, values selected:{”Five”}, values returned:{”One”, “Two”, “Three”, “Four”, “Five”}, button number:1, timed out:false, final position:{978.0, 254.0, 246.0, 278.0}}

★Click Here to Open This Script 

新機能:ダイアログの表示座標を指定する「initial position」オプション

table2.png

AppleScript名:initial position
use AppleScript version “2.4″ – Yosemite (10.10) or later
use framework “Foundation”
use scripting additions
use script “Myriad Tables Lib” version “1.0.7″

– This table shows the use of the ’initial position’ parameter to set the dialog’s position
set theTable to make new table with data {{1.0, 1, 1.11, 1}, {-2.0, 2, 2.2, 2}, {3.11, -3, 3.11, 3}, {4.0, 4, -4.41, 4}, {5.0, 5, 5.55, -5}} column headings {“Reals”, “Integers”, “Reals”, “Integers”} with prompt “This table appears at the top-left of the screen” with double click means OK and empty selection allowed
modify table theTable initial position {0, 0} with alternate backgrounds
display table theTable

★Click Here to Open This Script 

initial positionでは画面上の表示座標だけでなく、サイズ{表示位置(X), 表示位置(Y), 表示幅(X),表示高さ(Y)}の指定も可能です。

AppleScript名:initial position_2
use AppleScript version “2.4″ – Yosemite (10.10) or later
use framework “Foundation”
use scripting additions
use script “Myriad Tables Lib” version “1.0.7″

– This table shows the use of the ’initial position’ parameter to set the dialog’s size and position
set theTable to make new table with data {{1.0, 1, 1.11, 1}, {-2.0, 2, 2.2, 2}, {3.11, -3, 3.11, 3}, {4.0, 4, -4.41, 4}, {5.0, 5, 5.55, -5}} column headings {“Reals”, “Integers”, “Reals”, “Integers”} with prompt “This table’s size and position have been set in the script” with double click means OK and empty selection allowed
modify table theTable initial position {100, 10, 400, 400} with alternate backgrounds
display table theTable

★Click Here to Open This Script 

新機能:ダイアログの前回表示位置&サイズを取得する「final position」

AppleScript名:final position
use AppleScript version “2.4″ – Yosemite (10.10) or later
use framework “Foundation”
use scripting additions
use script “Myriad Tables Lib” version “1.0.7″

– This table shows how to retrieve the final position and size of the dialog
set theTable to make new table with data {{1.0, 1, 1.11, 1}, {-2.0, 2, 2.2, 2}, {3.11, -3, 3.11, 3}, {4.0, 4, -4.41, 4}, {5.0, 5, 5.55, -5}} column headings {“Reals”, “Integers”, “Reals”, “Integers”} with prompt “Move and resize this dialog before clicking OK” with double click means OK and empty selection allowed
modify table theTable with alternate backgrounds
set theResult to display table theTable
set theBounds to final position of theResult

– This table is positioned using the results from the previous one
set theTable to make new table with data {{1.0, 1, 1.11, 1}, {-2.0, 2, 2.2, 2}, {3.11, -3, 3.11, 3}, {4.0, 4, -4.41, 4}, {5.0, 5, 5.55, -5}} column headings {“Reals”, “Integers”, “Reals”, “Integers”} with prompt “This table’s size and position should match those used last time” with double click means OK and empty selection allowed
modify table theTable initial position theBounds with alternate backgrounds
display table theTable

★Click Here to Open This Script 

2017/02/18 com.apple.quarantineがドロップレットに与える影響

macOS, Sierraになって、AppleScript Dropletの挙動が変わり、「Dropletにファイルをドラッグ&ドロップしてもドロップしたすべてのファイルが処理されるわけではない」という状況が確認されています。

そもそもの始まりは、DropletにDropしたファイルが本来1つのリストとして処理されるはずだが、複数のリストに分割されて処理されるというものでした。実行してみると、たしかにそのとおりで、デスクトップ上に転がっているファイルを処理してみても、Dropした個数が10個で、openハンドラに引き渡されるファイルは1つのlistに格納されて処理されることを期待するところですが、そうなっていませんでした。

この、「Dropされたファイルが1回で処理されずに複数のファイルオープンイベントとして処理される」問題の検証を行ってみたところ、さらに不思議な挙動が見えてきました。

一番確認しやすいのは、「ダウンロード」フォルダ中のファイルをDropletにDrag & Dropして個数をかぞえてみた場合です。

Dropしたファイルの数と、Dropletの中でカウントした受信ファイルの総数が合わないケースが確認されました。

本件についてAppleScript Users-ML上でいろいろ情報交換したところ、

(1)Dropletの処理に影響を与えているのは、ファイルの拡張属性(Xattr)の「com.apple.quarantine」という属性らしい

(2)OSのレベルでの挙動の変更により、「com.apple.quarantine」属性を持つファイル、つまり安全性が確認されていない(OS側から「ダウンロードされたファイルですが、オープンしてもよいですか?」という確認ダイアログでユーザーに承認されていない)ものについては、オープンされないようになっている模様

(3)AppleScriptのDropletだけでなく、一般的なmacOSアプリケーションでも同じ状況

なので、AppleScriptの処理系のバグということではない様子(macOS 10.11上とバージョン変わってないし)。とはいえ、その状況がユーザーにフィードバックされないため、「ドロップレットの挙動がおかしくなった」という風にしか見えないところ。

com.apple.quarantine属性を持つファイル(ダウンロードされたりメールに添付されて送られてきたりしたもの)を処理しないというのは仕方のないところかもしれませんが、確認したり状況を明示的に解除するためのインタフェースが用意されていないのは問題に見えます。

いくつか同属性を解除する方法は見つけていますが、本来セキュリティ維持のための仕組みであり、ユーザー側で対応を試みてもOS側で迂回されたりガードされる可能性もあります。

→ ASOCベースのDropletにおいて回避方法がわかってきました

個人的には、Dropletが好きではないのであんまりDropletを作らない(仕事でもDroplet処理は極力避けている)ことにしているため、問題に気づかなかったものです。

2017/02/14 Bare Bones SoftwareがTextWranglerを廃止してBBEditに一本化

Mac系の老舗ソフトウェア開発会社Bare Bones Softwareのフリー版テキストエディタ「TextWrangler」が廃止になり、BBEditに一本化されることが2017年初頭に発表になっていました。

bbsoftware_resized.png

たまたま用事があって、Bare Bones Softwareに連絡をとったら「TextWranglerが廃止になった」ことを知りました。すぐにWebサイト上からダウンロードできなくなるわけではないとは思いますが、時間の問題でしょう。

ちなみに、BBEditは同社のWebサイトからお試し版がダウンロードできて、30日間無料で試用が可能です。30日をすぎたあとは、TextWrangler相当の永遠お試し版として使い続けられる様子です。

bbeditandtw_resized.png

たしかに、TextWranglerはBBEditの「お試し版」的な位置付けで開発され、広く愛用されたソフトウェアではありました。しかし昨今では、逆にTextWranglerの知名度が上がりすぎてBBEditへの移行を促す販促製品としてはふさわしくない存在になっていたことも事実であります。

自分の常用しているテキストエディタは、mi、TextWranglerの2本。どちらかといえば、TextWranglerの方が多いかなといったところ。

BBEditについては、「重そう」とか「HTMLコンテンツ作成系の不要な機能がいっぱいついていてメニューがごたごたしている」といった印象を持っていたのですが、(久しぶりに)実際に動かしてみると、それほど違いがあるわけでもないようです(メニューが少し多いかな、ぐらい?)。

AppleScript用語辞書について、TextWranglerをそれほど重箱の隅までつつきまくったわけではなかったのですが、比較してみたら(ささいな違いをのぞくと)31か所違っていました。BBEditの方が多機能です。

asdictdiff_resized.png

ただ、TextWrangler用のAppleScriptはほぼそのままBBEdit用に転用できるので、何も考えないレベルで使いまわしが可能でしょう。

2017/02/07 Apple Mailing Listsが復旧

US Appleがホスティングしている開発系(&営業系、ユーザー系、政府官公庁系、学校系)メーリングリスト(以下、ML)が、どうやら本日復旧したようです。

週明け(昨日)に復旧していなかったので「まだ復旧しないんだけど?(怒)」とDeveloper Connectionsに電話。その翌日に復旧と相成った次第です(疲れた)。MLのサーバーは会社規模のサーバー管理部署とも違っていそうだし、Developer Supportも当事者ではなさそうだし、いまひとつどこの誰が担当しているのか分かりにくい存在です。

トラブル原因や経過についてはとくに説明もなく、あっけなく復旧。ただ、自分がしつこく口うるさく小突き回したから復旧した、とも思えません。

# 情報収集してみたところ(というよりも、当人から直接教えてもらったんですが)、MLの某メンバーが直接US Appleの社員に電話して、その社員からSysopに復旧依頼を出してもらったもよう

そもそも、MLに問題があったときの連絡先メールアドレスが、その当のMLサーバー上のアドレスに設定してある、という運用はマヌケではないのか? MLサーバーの管理担当者の連絡先は、他のメールサーバー上に設定しておくべきではないのか? といったことは考えないんでしょうか?

postmaster_is_burning.png

(AppleScript系以外の)他のML参加者は、「MLが停まっていた」という事態はあまり認識していなかったようで、「なんで流れてこなかったんだろうねぇ」ぐらいの呑気な状況(ーー;;

全ML参加制覇(ほとんど読んで分析するだけ)&全MLからのAppleScriptによる情報抽出ロボット運用を行なっている唯一の存在であることが、はからずしも明らかになってしまいました(^ー^;

# 過去アーカイブがまだ復旧していないもよう(汗)

2017/02/01 続・US Appleの各種MLが先週末からダウン

US Appleが主催している開発系(&営業系、ユーザー系、政府官公庁系、学校系)メーリングリスト(以下、ML)が先週末(2017/1/28)からダウンしています。

ml_lastupdate.png

postmasterにメールしたものの、メールが受信されている様子がなく、仕方なくCEO直メールを行なったというのが前回までのあらすじです。

で、現地が深夜にもかかわらずメールの返事が(CEO直轄チームの誰か)から来て、「いい方向」に(勝手に)受け止めてしまったのですが、文面を読み直すと、

Mailing Listについて知らないApple社内の人間が、

『まーた、メールの調子がよくないとかしょーもない内容のメールを送ってきたよ。どうせメーラーの設定がわかんないとかそういうレベルだろ。いるいる、こういうの。こいつ、Apple Careのサポートにまわしといて〜』

的な扱い方をした(優雅な文面で)という状況。全力でスルーされた模様です。

Apple社内でMLサーバーを管理している(放置している)部署がいまひとつわからないので、Developper Support経由で、

「こういう問題が起きて困っている。あなたの部署の案件ではないかもしれないが、社外からでは適切なエスカレーションの窓口がどこなのかわからない。調べてもらえないか?」

と、電話してお願いしました。極東の島国の1零細デベロッパー(自分)が騒いでいるぐらいなので、他の国の連中も騒いでいると思うのですが、不思議とそれが表面化しません。

# 案外、すべてのMLに入っていてAppleScriptのプログラムで高度なメールの仕分けをしているような変な人種しか、この異常事態に気づかないのかもしれません。あ、自分のことか、、、

すぐに折り返しでUS Appleのデベロッパーサポート(日本語を話せる人)から電話が来て、

 ・この件については社内で認識していなかった(まあそうでしょう)
 ・もういちど、postmaster宛にメールを投げて様子を見てくれ
 ・すぐには対応できない可能性が高い。申し訳ない

という趣旨の説明をされました(本当に申し訳ない、という感じで)。自分も「まあ、そうなりますよねー」という返事しか出てきません。Tim Cookにメールした、といったら大ウケしていました(汗)。

Apple社内は超縦割り構造で、他部署が管轄している情報にアクセスできないし、部署を飛び越えて何かのアクションを行いにくい状態になっていることは知っています。

もし、今回のMLサーバーの問題が、外部からのクラッキングへの結果として発生した可能性があれば、問題追及のためにさらなる調査が必要でしょう(数年に一度、勝手に落ちてるんでその可能性は低そうなんですけれど)。

ただ、この社内構造は「Steve Jobsという部署間の垣根や階層を取り払って活動できるスーパーバイザー」がいる時のものであり、彼亡きあともこの構造を維持することに意味があるのかどうか、自分自身は懐疑的な立場です。

2017/01/31 US Appleの各種MLが先週末からダウン

US Appleが主催している開発系(&営業系、ユーザー系&政府官公庁系+学校系)メーリングリスト(以下、ML)が、先週末からダウンしておりました。

同サイトに記載のあるpostmasterのアドレスあてに確認のメールを出すも応答がなく、Webサーバー(http://lists.apple.com)は反応するもののMLサーバーかメールサーバーが単独で落ちているような雰囲気。

AppleのMLサーバー運用は社内的にほぼ放置状態のようで、数年に一度クラッシュしては復旧を繰り返してきました。10年ぐらい前にいちどハードウェアごとクラッシュしてサーバーごと入れ替えたことを記憶しています。

AppleScript Users MLは1999年ごろからのログが残っており、18年ぐらい続いている計算になります(それ以前のものはメール送信側のシステム日付の設定ミスだかなんだかでその日付になっていますが実際には異なるようです)。

そんなMLサーバーの復旧について、postmasterにメールで確認しても返答がないので、CEO宛てに直接「なんとかしてー」とメール。

本人が読むことはなくても、CEO直轄部隊が手分けをしてメールの処理をしていることは周知の事実です。さきほど、メールの返事が来ると同時に遅配通知メールが届き、復旧に向けて動き出したことが感じられます(ただし、そこからが大変)。

外部からの攻撃を受けてダウンしていたような場合にはどーなのか。その後の展開が待たれるところです。

Apple系の開発者コミュニティには、大きく分けるとWeb上の開発者専用フォーラム(Developper契約者のみ利用可)と、誰でも入れるMLがあります(政府系や官公庁系、学校系のMLからは追い出されました)。自分は入れるMLにはすべて入っており、その数108ほど。それぞれのMLのログを手元でAppleScriptロボットによって自動で整理・分類しています。

数年前に「Apple社員はフォーラムに投稿しろ」といった社内通達があったためか(憶測)、メーリングリスト側にApple社員が投稿する量は大幅に減っています(といっても、フォーラム側に投稿しているようにも見えない)。

ただし、AppleScript系についてはApple社員とはほぼ関係のない独自の情報生態系が維持されており、社員が出てこなくてもほぼ関係ありません。

フォーラム自体ものぞいていますが使い勝手がいまひとつで、継続的に情報を蓄積していくことを考えるとMLに分があるように感じています(個人的な意見です)。

そんなわけで、メーリングリストがコケていると本当に困るのです。無事再稼働できるよう、祈るばかりです。

2017/01/30 Cocoa勉強会松戸で発表した内容を公開

2017/1/28に松戸で行われた「Cocoa勉強会松戸」でPiyomaru Softwareが発表した内容をSlide Shareで公開しました。

→ SlideShare Link

「”アイデアを練る”ソフトウェアとは?」と題し、アイデアを考えるプロセスそのものを分析。アイデア作成過程で行うさまざまな作業に、既存のソフトウェアがどのように役立ち、どのように役に立っていないのか、、、、また、新たに登場してきた技術によってどのように補完していけるのかを発表しました。

Cocoa勉強会「松戸」と聞くと、東京界隈(23区近辺)からはずいぶんと遠い印象を受けますが・・・ウチの最寄駅である西武池袋線「中村橋」駅からだと、中村橋→池袋→日暮里→松戸 でトータル45分(最短で、だいたい50分から1時間)。実はそれほど遠くありません。

Cocoa勉強会「池袋」「松戸」、「MOSA自習室(池袋)」など、Cocoa開発者向けのイベントがだいたい1週間に一度あるので、いろいろと刺激&勉強になります。

Cocoa APIへの理解や情報交換を目的とした集まりなので、発表もObjective-C、Swift、AppleScriptなどプログラミング言語のバラエティーに富んでいます。

2016/12/06 表インタフェースのダイアログを表示するライブラリ「Myriad Tables Lib」

Shane StanleyのAppleScript Librariesの最新版「Myriad Tables Lib」バージョン1.0.6が公開されました。こちらからダウンロードできるようになっています。

作ろうとすると割と手間がかかる表インタフェースがこうして手軽に呼び出せると、便利なケースが多いのではないでしょうか?

本バージョンのアップデート項目に「Japanese localization」という項目があり、どのあたりか分からなかったのですが、ボタンのタイトルが「Cancel」→「キャンセル」になっているあたりとか、表示用フォントのあたりなんでしょうか。

* Ability to show cells containing more than one line;
→ 複数行のテキストを含むセルを表示する機能(改行で区切ってある必要がある。セル幅で自動折り返しをしたりはしない)

* Ability to hide the Cancel button;
→ 「キャンセル」ボタンを隠す機能

* Improved handling of threading issues with accessory views;
→ アクセサリビューまわりのスレッドの取り扱いを向上させた(アクセサリビューのクリックイベントを受信できる)

* Ability to specify monospaced digits (10.11 and later only);
→ macOS 10.11以降で、等幅文字で数値の見た目をそろえる機能を追加

* Ability to have negative numbers appear in red;
→ マイナスの数値を赤で表示する機能を追加

* Ability to have column(s) appear in bold;
→ 指定カラムをボールド(太字)で表示する機能を追加

* Japanese localization.
→ 日本語環境に合わせたローカライズ

添付のサンプルScriptの実行例は以下のような感じです(処理内容抜粋)。

mtable1.png

mtable2_resized.png

mtable3.png

mtable4.png

mtable5.png

mtable6.png

2016/12/05 MOSA Tech MeetingレポートがMOSAのサイトに掲載されました

10月19日に渋谷で行われたMOSA Tech MeetingのレポートがMOSAのWebサイトに掲載され、ぴよまるソフトウェアがデモを行った様子をレポートしていただきました。

この日はiPhone 5のバッテリーが落ちまくってしまい、駅から10分程度の場所にある会場に1時間ぐらいかかって迷いながら走ってたどり着き、汗ダラダラのボロボロの状態でした(これで懲りてiPhone 5→iPhone 7に切り替え)。

あの日、土地勘のない夜の渋谷の街を駆け回って、諦めずに会場にたどり着いた自分を褒めてあげたい(^ー^;

発表に使ったスライドはこちらです

2016/11/27 書籍のフィードバック会レポート

img_1677.jpg

11/26に書籍「AppleScript最新リファレンス」「最新事情がわかるAppleScript 10大最新技術」のフィードバック会を池袋にて開催いたしました。参加者は全員で6人。本に載っている内容から、そうでないものまで話が尽きず、2時間という時間があっという間に過ぎてしまいました。

以下、当日やりとりされた内容を簡単にまとめてみました。

・アプリケーションのオブジェクト構造を理解しにくい(Adobe系アプリケーション)
→ Script Debuggerを使ってアプリケーションのオブジェクトを追う方法が便利なので、おすすめ。まずは、試用版をダウンロードするべき
http://latenightsw.com/

→ Script Debuggerの使い方を実際にレクチャーしてほしい
→ Latenight Softwareのサイト上に紹介ムービーがある
http://latenightsw.com/tutorials/

・アプリケーションの用語辞書の読み方、用語辞書を読んでScriptを書くにはどうしたらいいか?
→ AppleScript最新リファレンスの「Finder用語辞書攻略ガイド」「ノウハウ集〜未知のアプリケーションを操作する」に書いておいた。まずは、こちらを読んでほしい
→ 自分は、ネット上でサンプルを検索(英語で)、ML上の過去ログ、メーカーのサイト(Adobeなど)を調べる、アプリケーションに添付されているサンプルScriptを調べる、ときて、それでもなければ自分で調べながら書く

・TouchBarにAppleScriptから表示できないか?
→ display alert命令でダイアログ表示すると、TouchBar上にボタンが表示される。ただし、display dialog命令ではTouchBarにボタンは表示されない。OS上の特定のAPIを経由した時だけダイアログへのボタン表示がTouchBarに反映されるようだ
→ Githubに上がっている「TouchBar Server」で表示エミュレーションを非TouchBar搭載機でも行える
touchbar1.png

・サブルーチンの作り方について。大きなサブルーチンを作るか、小さいサブルーチンをつなげて作るのか?
→ なるべく小さいルーチンを作って、小さいルーチンの組み合わせで大きな機能を作っている。こういう作り方のほうが柔軟性が生まれるし、仕様変更などにも強い。ただし、仕様自体が複雑な場合にはそうもいかないケースもある

・AppleScriptによる並列処理ついて
→ 使い所、向き、不向きがあって難しい。とくに、処理のボトルネックが発生してスピードアップする場合としない場合がある(しないケースの方が多い)
→ ファイルI/Oや、CPUの温度上昇にともなう速度低下なども問題。試行錯誤が必要。何でも高速化できるわけでもない。ただ、クラウド系の処理は有望だと思っている

・AppleScript Librariesはバンドル形式のファイルでなくてもよいのでは?
AppleScript Librariesのファイル自体は「バンドル」形式のファイルでなくてもよいのでは? という指摘がありました。
→ 読み込んだり使ったりすること自体は無理ではないかもしれないが、Bundle IDやVersionを指定しての識別ができないのは危ない感じがする
→ Libraryの中に実行ファイルやFrameworkを入れて呼び出すことがよくあるので、個人的にはバンドル形式のメリットを多く享受している

・AppleScript関連の各種シェルコマンドの読み方がわからない問題
参加者から「コマンドの読み方がわからない」という指摘がありました。筆者が使っている読み方をその場で披露。たしかに、一般的な標準命令の読み方はコマンド一覧(「AppleScript最新リファレンス」の「文法編」)には書いておきましたが、シェルコマンド(「AppleScript最新リファレンス」の「ノウハウ編」の「ターミナルからAppleScriptを呼び出す」)にコマンドの読み方は書いていませんでした。
→ osascript(おさすくりぷと)、osacompile(おさこんぱいる)、osadecompile(おさでこんぱいる)、osalang(おさらんぐ) といったところ

その他、まだ発表していない内容について紹介を行ったり、参加者が作っているScriptの問題点について話し合ったりと、密度の高い時間があっという間に過ぎてしまいました(その後、喫茶店に移動して2時間以上話し込んでしまいました ^ー^;)。

本の内容にかぎらず、このような場を定期的に設けてもよいのではないかというところでした。

2016/11/08 macOS Sierraで実行できなくなった処理

macOS Sierra(10.12)になって、実行できなくなった、実行しても指定値を無視される処理が出てきました。

具体的にいうと、System Events.appでセキュリティをゆるく設定するための処理を受け付けなくなりました。

sys_event_dict.jpg

スリープからの復帰(wake)時にパスワードを要求しない、という設定を行っても無視されるようになりました。

AppleScript名:Sierraで実行できなくなった処理1
–http://piyocast.com/as/archives/4308
–macOS Sierraで実行できなくなった命令
tell application “System Events”
  tell security preferences
    set require password to wake to false
    
set aRes to (require password to wake)
    
–> true
  end tell
end tell

★Click Here to Open This Script 

システム環境設定の「セキュリティとプライバシー」で、設定内容を変更するさいにパスワードを要求するかどうかの設定で、true(要求する)と指定してもfalse(要求しない)という結果が返ってきます。かならずパスワードは要求させる、という意図はわかるのですが、こちらは返ってきている値が間違っています(かならずtrueでないとおかしい)。

AppleScript名:Sierraで実行できなくなった処理2
–http://piyocast.com/as/archives/4308
–macOS Sierraで実行できなくなった命令
tell application “System Events”
  tell security preferences
    set require password to unlock to true
    
set aRes to (require password to unlock)
    
–> false
  end tell
end tell

★Click Here to Open This Script 

2016/11/08 SierraのMail.app v10.2でSignatureにバグ

macOS Sierra(10.12)搭載のMail.app v10.2でsignatureの署名の名前(name)も署名本文テキスト(content)にもアクセスできないというバグがあることが判明しました。properties ofでアクセスしてこれらの属性値をまとめて取得しようとしても、おかしな結果が返ってきてしまいます。

AppleScript名:SierraのMail.app v10.2でSignatureにバグ
–http://piyocast.com/as/archives/4307
tell application “Mail”
  set aList to name of every signature
  
–> {missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value}
  
  
set bList to content of every signature
  
–> {missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value}
  
  
set cList to properties of every signature
  
–> {{class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}, {class:item}}
end tell

★Click Here to Open This Script 

2016/11/01 AppleScript本フィードバック会を11/26に池袋にて開催!

この夏に刊行した「AppleScript最新リファレンス」「AppleScript 10大最新技術」の2冊の電子書籍について、「ここがわからない」「もう少しかみくだいて説明してほしい」という点を筆者本人が直接ご説明する「AppleScript本フィードバック会」を11/26に池袋にて開催することといたしました。

# すでに、Edama2さんとfixさんは発起人ということで申し込みずみです

日時:2016年11月26日 18:30〜20:30
場所:〒171-0022 東京都豊島区南池袋1-16-20(ぬかりやビル2階)マイ・スペース MS&BB 池袋西武横店 1号室
募集人数:先着7名(いまのところ。増えたら会議室の変更なども検討します)

参加資格は、AppleScriptを実際に使っている方、興味を持っている方で、筆者の書籍を実際に購入した、あるいは購入しようと考えている方です。事前に内容を読んであることが望ましいです。

ふるってご参加ください。

→ お申し込みはこちら(connpassサイト)

2016/10/19 SierraのScript Menuにバグ〜凝ったAppleScriptが実行途中で停まる

macOS Sierraで日々いろいろ試していますが、その中で1つ大きなバグを見つけてしまいました。

scriptmenu1.jpg

Script Menuから実行したAppleScriptが途中で停止してしまうというものです(Appleに報告&検証&認定ずみ)。

かなり凝った(Cocoaの機能を呼び出しまくりな)AppleScriptをScript Menuから実行させてみたところ、途中で停止。スクリプトエディタ上でも、ASObjC Explorer 4上でも問題なく実行できているのに、です。

しかし、テスト前から「このレベルだとうまく動くかどうかわからんな〜」という予感はありました。macOS Sierraが機能よりもセキュリティを重視している印象があったため、「疑わしきは罰しまくり」な内部処理を行っていると感じていたからです。

停まったScriptの処理内容:

(1)Skimでオープン中のPDFのファイルコメント(Finder上で確認できるコメント)を取得して、コメント欄にURLが書いてあるか確認

(2)Skim上のPDFのページ数を確認して、いったんPDFをクローズ

(3)WebサーバーにアクセスしてWeb4コママンガの最新エピソードで、PDFのページ数を超える(=新規更新された)エピソードが存在するかを確認

(4)新規エピソードが存在していたら、1つずつ画像をダウンロードしてPDFに追記

(5)SkimでPDFを再オープンし、更新されたコンテンツの最初のページを表示

というものです(Webマンガを読むためだけに書いたもの)。Skim上のPDFをクローズしたまま実行が停止してしまいました。

問題が起きたと思われる箇所:

・最初にオープンしていた書類の再オープン???

・アプリケーションを指定しないでCocoaの機能を用いてのインターネットアクセス???

・httpsではなくhttpによる通信をしているから???

事前にApple側で想定していた範囲を超えるScriptを走らせたため、何らかのセキュリティ機構が働いたものと推測。これが、macOS Sierra, 10.12.1で修正されるかどうかは不明です。まー、10.12.3ぐらいに直れば御の字、常識的には10.12.5ぐらいまで行ってしまいそうな予感はあります(その頃には10.13のBetaが、、、、)。

ちなみに、ちょっとしたAppleScript(メールの仕分けを行う。何もopen/closeしない)であればScript Menuから問題なく実行できています。Finder上で選択中のファイルをPhotoshopでリサイズするScriptも大丈夫です。ファイルのopen/closeを行ったり、ネットワークへのアクセスを行ったりすると問題が出そうです。

2016/10/10 ASObjC Explorer 4が発展的解消を遂げる

yyyeyoyycyaye-2016-10-10-203135_resized.png

2016年9月25日付けで、Shane Stanleyが「asobjcEx」メーリングリストに投稿したところによると、ASObjCに特化した開発ツール「ASObjC Explorer 4」をディスコンにするとのこと。ASObjC Explorer 4の最新バージョン「4.1.17」はmacOS Sierraに対応しており、今日明日ですぐに困るようなことはないと思われます。

Script DebuggerのLate Night Software(Mark Alldritt)とShane Stanleyが協業することになり、その結果としてScript Debugger 6にCocoa Loggingなどの機能が導入されました。反面、ASObjC Explorer 4の今後が非常に微妙なものになってしまいました。

scripteditors.png
▲2015年2月にAppleScript関連ツールの状況をまとめた図

結局、ASObjC Explorer 4の終息(ディスコン)ということを選択したものと思われます。あえて日本語的な表現をするなら「発展的解消」ということになるでしょうか。

Shaneの開発力がよりメジャーな製品の開発現場で生かされるわけで、それについてはよかったと思います。

ただ問題は、Script Debugger 6がASObjC Explorer 4よりも使いやすいかというと、まだそういうレベルに達していないように感じる(Front-end processでの強制実行などなど)ことです。

asedito3_resized.png

Script Debugger 6にこの「最前面で実行する(Run in foreground)」の機能がなく、AppleScript互換のOSA言語を自前で実装しているという特殊な構造ゆえに、実装も難しいという状況と聞いています。これを解消するための解決策が「ASObjC Explorer 4をなくす」ということであれば、ちょっと残念です。

runinforeground1_resized.png
▲Apple純正スクリプトエディタの「フォアグラウンドで実行」機能(Controlキーを押すとメニューに出てくる)

runsinforeground2.jpg
▲ASObjC Explorer 4の「Run in foreground」機能

ASObjC Explorer 4自体にも問題がないことはなかった(エディタとして見ると、スタイル付きテキストのコピー&ペーストで、スペースに意図しない不可視キャラクタが挿入されるなど問題があった)のですが、個人的にはしばらくASObjC Explorer 4を使いたいところです。

2016/09/28 Script Assistant Ver. 1.0の送付を開始

script_assistant.jpg

ちょっとしたマニュアル(全17ページ)を作りつつ、Script Assistant Ver. 1.0を、電子書籍の購入者の特典希望の方々にお送りしました。

とはいえ、これってオマケなので(汗) ……もっと詳細なマニュアルを作成して、単体で(スクリプトつき書籍として)販売したらいいんじゃないか的な野望(ずいぶんちいさい野望だな、、、)はあります。

技術書典でご購入いただいた方々からの、書籍のアップデート版へのご希望が届いていないため、後日再度お知らせをお送りするつもりです(スパムメールとかに埋もれているのではないかと心配)。