2018年:macOS 10.14(自分は10.12を使用)
本Blogには基礎的で再利用性の高いAppleScriptを掲載しています。高度で見ただけで腰を抜かすような高度なものは掲載していません。逆にいえば、そういう「高度で奇抜なもの」も一般的で簡単なScriptの組み合わせで作られている、ということです。
2018年を振り返ると、Blogの再構築のために過去掲載の記事から新しめのものだけを再掲載。途中から新規作成分を掲載しています。
2018年2月
消滅したBlogの再構築をゼロから開始。Blog投稿用のAppleScriptを作成してローカルのAppleScriptをHTML化してXML-RPC経由でWordPressに主要なAppleScriptをアップロード。この「Finder上で選択しておいたScriptをHTML化してWordPressにアップロード」するというAppleScript(というか、その部品)を用意できていなければ、こんなに早期に復旧することはなかったでしょう。
2018年3月
・(GET)駅すぱあとAPIで駅コードから駅名称を取得
ヴァル研究所の「駅すぱあとAPI」が公開されているのを見つけ、実際に呼び出してみました。ただ、このAPIの呼び出しが必要な開発案件にまだ出くわしていないので、本気で使い込んではいません。REST APIは全般的に「仕様的に呼び出せるものは呼び出せる」「呼び出すことが目的ではなく、それをどのように活用するかが目標」です。Google翻訳だろうがDropboxだろうが、REST APIをAppleScriptから呼び出せるというのは「当然のこと」なので、あえてBlogに掲載する意義もそれほど感じませんが、、、、
・指定PDFの全ページからリンクアノテーションのURLを取得してURLを書きかえる
PDFのリンク書き換えScriptは、えほんシリーズ(Keynoteで作成)のPDFにScript Linkを埋め込むために試作したScript群の一部です。結局、Keynoteバージョン8.2か8.3あたりでKeynote書類にカスタムURLプロトコルのリンクを埋め込めるようになったため、自力で対応しなくても大丈夫になりましたけれども。
・AppleScriptの構文色分けカラーフォーマットをplistから読み込む
これは、Cocoaの機能を使わずに構文色分けフォーマットの判定を行っていた従来バージョンのルーチン(電子書籍のオマケ「Piyomaru Script Assistant」に使用)を、Cocoaの機能を用いて書き換えたものです。速度的なメリットはとくにありませんが、これを下敷きにしてさらに高度なものを作成するためにクリアしておきたい技術的な課題でありました。
のちに、このあたりの技術的な問題をクリアしたScriptを「AppleScript書類から指定の構文要素をピックアップ(Cocoa Property名称)して文字列化」として掲載しています。本来の作成目的はさらにこれを発展させたものです。
あまり派手ではありませんが、
・shebangっぽい行から実行プログラムを取得してスクリプト言語の拡張子を取得
というScriptも個人的には割と重要です。このScriptの作成目的は、FileMaker ProのDB内に格納したshell scriptなどを、shebangの情報をもとにファイル書き出しして実行するというものです。こういう目的を果たすScriptが存在していなかったためです(国内、海外ともに探しても見つからず)。
2018年4月
・NSObjectの各種メソッドのじっけん
これは、個人的にはかなり意義のあるものです。掲載している分はこの程度の数ですが、未掲載分が大量にあります。このあたりの機能を確認することで、大きな収穫がありました。Cocoaの機能を使い出して真っ先に調べたのが、NSArray、NSString、NSDictionaryなどのデータ処理に必要なクラスの情報。ついで、NSImageなど画像処理に必要なクラス。NSObjectについてはずいぶん後になってから調べました。
・自分を最前面に移動させてAbout表示
これは、特殊な実行環境からこの機能を実現するための方法が見つからなかったので、「見つけたことが重要」な内容です。Scriptそのものにはあまり重要性はありません。
・配列に入れた画像を類似度でソートする
こういう処理はぜひAppleScriptでクリアしておきたい内容です。Cocoaの機能に手を出しはじめたのも、REST APIの呼び出しや機械学習(強化学習)やこのあたりの処理ができるようになるだろう、と感じたためです。強化学習については11月ごろに実現しています。
・アニメーションGIFをフレームごとに画像に分解する
分解すること自体にはあまり意味はありませんが、アニメーションGIFを作成するObjective-Cのプログラムが見つからない今日このごろ。Photoshopを使えば作れなくはないのですが、Photoshopを使わないで画像処理することに意義があります(使わなければMac App Storeに出せるので)。
・TwitterへのTweet文字数チェック
Github上で発見した当時「こんないいものが存在しているのに、なんでMac版のTwitterクライアントにこの機能は搭載されていないんだろ?」と首をひねっていましたが、間もなくMac版のTwitterクライアントが廃止に。あのアプリケーションは方向性がブレブレで、機能不十分で、User Interfaceもさっぱりな最低の存在でした。Appleに買収されたがっているがゆえの「瀬戸際外交の一種」とも見られていましたが、Twitterはどこに向かっているのでしょう?
2018年5月
・atan2をFramework呼び出しで計算する
これは、1つの緯度/経度情報をもとに他の座標がどの方角に存在するかを計算するために必要なものです。
・Bash In Tokyoで音声認識コマンドプログラムをデモしてきました
とりあえず作ってデモしてみたところ、若干方向性が合っていないことを感じ取って、のちのTanzakuにつながることになります。とくに、ファイルのドラッグ&ドロップ処理系とターミナル的なコマンド処理系を同時に実装すると「違和感」しかない、ということに気づいた次第です。
・Blog Archiveの電子書籍を計画しています
ごく一部の読者の方々のご要望を受けて企画した本シリーズ。続刊はすでに(機械的に)作成してあるのですが、内容確認とコメント追記にものすごくパワーが必要なので、思ったよりも進んでいませんが、すすんではいます。
・数値演算ライブラリ「calcLibAS」v1.3(28倍速)
数値演算ライブラリについては、Sephes Math LibraryをObjective-Cなどでラッピングしたものが決定版になるかと思っていましたが、本ライブラリはまさに掘っ建て小屋。冗談で作ってみたら予想外に実用性が出てしまったものです。
2018年6月
さすがに、引越しの最中に何かまとまったプログラムは書けません。
2018年7月
Blogアーカイブ本 vol.1を販売開始
Blogアーカイブ本 vol.2を販売開始
半信半疑で出してみたBlogアーカイブ本のVol.1〜2。一部読者のみなさまからはご好評いただいております。
2018年8月
・CPUの温度、放熱ファンの回転数を取得する
MacBook Proでデモを行っている最中に、AppleScriptを走らせて遅くなる現象に直面することがままありました。よくよく調べてみたら、長大なAppleScriptを実行しているさいにCPUが過熱してサーマルスロットリングが発生しているケースが多いことが判明。これは、環境がかわって南国の東向きの部屋に移動したことがきっかけですが、ノートPC用の放熱台にくわえ放熱ファンを強制的に高回転させるソフトウェア「TG Pro」を併用することで解決しています。本ルーチンは顧客に納品するGUIアプリケーションの部品として利用し、バッチ処理時のCPU過熱警報の機能として組み込みました。けっこう重要な部品です。
・Blogアーカイブ本 vol.3を販売開始
・AppleScript書類から指定の構文要素をピックアップ(Cocoa Property名称)
余裕を見て調査していたAppleScript構文要素の判別機能のCocoa版がだいたい予定どおりのレベルに仕上がったのが、本ルーチンです。
2018年9月
・MOSAミーティングで新プロジェクト「Tanzaku」を発表
自然言語コマンドを実行する「Newt On」Project(2002)、日本語音声認識コマンダー「ことだま」(2003)、その他日本語を理解して実行する各種プログラム試作品の集大成ともいうべきプログラム「Tanzaku」(2018)〜Talking Command Droplet via filenameです。
・easyJParse v3
AppleScriptに備わっている「words of」による簡易形態素解析機能。なぜか途中の記号類をドロップするため、いまひとつ実用的ではありませんでしたが、本プログラムにより本来の有用性を確保したといえなくもありません。何回か手を出しては放り投げていたものですが、デモの間際に集中して作ったら完成しました。コマンド解釈用に作ったので、この程度でも十分でした。
・イベント「Think AppleScript」盛会のうちに終了
初回だったので予定どおり、想定どおり、AppleScriptの歴史的経緯やおおまかな話などを詳細にご紹介しつつ、現時点での業務系のScriptでCocoaの機能を用いつつAdobe Createvie Suitesアプリケーションを操作する内容をデモしていただきました。質疑応答の中から、「iOSのSiriショートカットでiOSからosascriptコマンドを経由してMac上のAppleScriptを呼び出せる」といった話まで広がったのは収穫でした(結局、Entanglerのほうが6億倍ぐらい便利なのでSiriショートカットは使わずじまいですが)。
2018年10月
・ファイル作成日、修正日を変更する
他の補助アプリケーションの手助けなしに、ファイルの各種属性を書き換えられるようになったわけで、まことにけっこうなことです。
・NSURLからBookmarkを作成するじっけん
この機能はなくて困っていたので、できるという話は朗報でした。
2018年11月
・WebView+ボタンを作成 v3(URLから読み込み)
従来のWebViewがDepricated扱いになり、WKWebViewを使わなくてはならなくなったわけですが、使いこなすのに予想外に資料が存在せず(使い方がイレギュラーなこともある?)、いろいろ苦労していました。このあたり、プログラミングではなく「調査」の成果なわけですが、できないことをできるようにするためには、こうした下調べが欠かせません。
・機械学習で学習したMSの画像を連邦・ジオン軍判定してフォルダ分け v2
強化学習によって作成したモデルをもとにバッチ処理を行うというのは、1つの目標として据えていたので、そのやり方がわかって、実際にひととおり動作するプログラムを作成できたのはなかなかナイスです。
・tccKitで指定Bundle IDのアプリケーションの「オートメーション」認証状況を取得
macOS 10.14で大幅に変わった環境ですが、それに対処するためのノウハウも蓄積しつつあります。その中で最大のものがこれです。CodeSignさえ行えれば、動作内容の変化を最低限に抑えられる(初回のみセキュリテイダイアログを表示)のではないかと。ただ、CodeSignを行うような開発ライセンスを持っていないユーザーがドロップレットを作成した際にダイアログが出ることに不満を持っているようです。ドロップレットではなく、スクリプトメニューから実行するようにすれば、macOS 10.14のセキュリテイ対策機能に合っているように思います。
・macOS 10.14 AppleScriptリリースノート
後日確認したところ、macOSリリースノートに統合されたので、個別のリリースノートとして追記されることはなくなった、と明記されていました。内容をバックアップしておく必要がありそうです。
2018年12月
・easyJParse v4
簡易日本語形態素解析プログラムのアップデート版です。固有名詞に対応するための仕組みも見えてきました。
2018年にBlogに掲載したプログラムでいえば、強化学習、簡易日本語形態素解析、WkWebView利用あたりがポイントでしょうか。