Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

CoreML Modelからパラメータを取得する v2

Posted on 12月 30, 2020 by Takaaki Naganoya

CoreML Modelのファイル(.mlmodelc)から入力パラメータおよび出力データの情報を取得するAppleScriptです。

テストに使ったのはMS Classifier(299×299ピクセルの画像を入力)で、入力画像をGundamのモビルスーツとして扱い、連邦軍機体かジオン軍機体かを判定するCoreML Modelです。

機械学習モデルのパラメータ/モデル解析を行うツール「Netron」にはWebアプリ版もあるので、JavaScriptやPythonで解析できてしまうのかもしれません(Netronのソースを読んでみたら、そういう感じのファイルだけ入っていて驚かされました)。

AppleScript名:CoreML Modelからパラメータを取得する v2.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/28
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.7" — 10.13 or later
use framework "Foundation"
use framework "CoreML"
use scripting additions

set aVer to system version of (system info) –Get OS Version

considering numeric strings
  if aVer < "10.15" then
    –macOS 10.14。10.13は未検証
    
set mlFile to POSIX path of (choose folder) –mlmodelcを指定。macOS 10.14のFinder上ではフォルダに見えてしまう
  else
    –macOS 10.15 or later
    
set mlFile to POSIX path of (choose file of type {"com.apple.coreml.mlmodelc"}) –mlmodelcを指定。macOS 10.15以降のFinder上ではファイルに見える
  end if
end considering

set mlURL to current application’s |NSURL|’s fileURLWithPath:mlFile
set aModel to current application’s MLModel’s modelWithContentsOfURL:mlURL |error|:(missing value)
if aModel = missing value then return –mlmodelファイルだとエラーになる

set aMLDesc to aModel’s modelDescription
set inputDesc to aMLDesc’s inputDescriptionsByName()

–Input Information
set kList to inputDesc’s allKeys() as list
–> {"image"}

set vList to inputDesc’s allValues() as list
–> {(MLFeatureDescription) image : Image (Color, 299 x 299)}

–Output Information
set outputDeck to aMLDesc’s outputDescriptionsByName()
set k2List to outputDeck’s allKeys() as list
–> {"classLabel", "classLabelProbs"}

set v2List to outputDeck’s allValues() as list
–> {(MLFeatureDescription) classLabel : String, (MLFeatureDescription) classLabelProbs : Dictionary (String → Double)}

set vResList to {}
repeat with v in v2List
  set the end of vResList to v’s |name|() as string
end repeat
return vResList
–> {"classLabel", "classLabelProbs"}

★Click Here to Open This Script 

Posted in Machine Learning | Tagged 10.14savvy 10.15savvy 11.0savvy MLFeatureDescription MLModel NSURL | Leave a comment

Pixelmator ProのSVG to PNG変換

Posted on 12月 28, 2020 by Takaaki Naganoya

Pixelmator ProでSVGのファイルをPNG形式で書き出すAppleScriptです。

この、ダイアログでファイルを選択して書き出しファイル名を入力させるタイプのAppleScriptをたくさん掲載していますが、もともとAppleScriptの一括処理的なプログラムで、いちいちダイアログを出して1つ1つのファイルを保存させるようなことはやりません。あくまで、サンプルScriptの動作を完結させるための仕様です。

実際には、指定フォルダ以下にあるSVGファイルをSpotlightで抽出して、まとめて書き出し先のフォルダにPNG形式で書き出すといった処理になるでしょう。

SVG方面では1024jpさんのGapplinがあり、こちらもAppleScript対応しており各種操作が行えるようになっているのですが、Sandbox対応度に問題があるためかファイル書き出し操作がAppleScriptから行えていないので、現状では大量のSVG書類の変換にはPhotoshopかPixelmator Proということになりそうです。

SVGを読み込んで他の画像形式に書き出すためのCocoa Frameworkを利用できるとよさそうですが、いまひとつうまく動くものを知りません。


▲SVG対応のアプリケーション。SVGを読めるもの、書けるもの、書き出せるもの、と対応度はさまざま

AppleScript名:PixelmatorのSVG to PNG変換
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/01
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.7" — Yosemite (10.13) or later
use framework "Foundation"
use scripting additions

set aFile to choose file of type {"public.svg-image"}
set outPath to choose file name with prompt "select output file name"

tell application "Pixelmator Pro"
  open aFile
  
  
tell front document
    export to outPath as PNG
    
close without saving
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:GaplinのSVG to PNG変換
set aFile to choose file of type {"public.svg-image"}
set outPath to choose file name with prompt "select output file name"

tell application "Gapplin"
  open aFile
  
  
tell front document
    export to outPath as PNG with options {class:export options, scale:1.0}
    
close without saving
  end tell
end tell

★Click Here to Open This Script 

Posted in file Image | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Pixelmator Pro | Leave a comment

FileMaker ProのObject FieldにNSImageを設定する

Posted on 12月 26, 2020 by Takaaki Naganoya

FileMaker Proデータベースのオブジェクトフィールド上に生成したNSImageを入れるAppleScriptです。FileMaker Pro v19.2.1.14+macOS 11.2betaで動作確認しています。とくに環境依存は行わないはずです。

FileMaker Proのオブジェクトフィールドは一種のBlobで、画像やPDF、機械学習モデル(mlmodel)、他のデータベース(.fmp12)を突っ込んだりできます。

ところが、AppleScriptでNSImageを作成し、その結果をFileMaker Proのオブジェクトフィールドにそのまま入れることはできません。エラーになります。

方法1:AppleScript側でNSImageをクリップボードに入れ、FileMaker Pro側でクリップボードの内容をフィールドに入れる

この方法は、FileMaker Pro側が最前面にある場合には問題なかったのですが、FileMaker Proが最前面にない場合には問題が発生する可能性があります。実際に試して成功したのですが、クリップボード経由でAppleScript側とFileMaker Script側がデータをやりとりすることになり、膨大なデータを処理した場合の信頼性に疑問がつきました。

方法2:AppleScript側でNSImageをクリップボードに入れ、クリップボードの内容を標準命令で画像に変換したのち、普通にオブジェクトフィールドに入れる

各種アプリケーションが認識する「画像データ」に明示的に変換するためには、ファイルに書き出すのが確実ですが、クリップボード経由で「画像」に変換するのが安全策です。

NSImageをJPEGデータに変換して、その結果をそのままオブジェクトフィールドに突っ込んでもエラーになりました。これが最有力な案だと思っていたので、うまく動かなかったのは残念でした。

そこで、安全策をとって(仕方なく)クリップボード経由でNSImageを画像に変換することになりました。このままでは方法1と大差ないように見えますが、実際にはAppleScriptでクリップボードにNSImageを入れて、AppleScriptでクリップボード内容を画像として評価して取得するという処理を行っています。

スピードや確実さを考慮すると、なるべくクリップボード経由の処理は行いたくないので、対策は考えておきたいところです。クリップボードや一時ファイルを経由させるよりも、極力メモリ上で対処したいところです。


▲ユーザーにAppleScriptの実行権限を与えておくとAppleScriptによる制御が有効になるFileMaker Pro


▲テキストフィールド「originalString」から文字情報を取り出して、オブジェクトフィールド「imageStore」にAppleScriptで生成した画像を突っ込む


▲実行前


▲実行後(Mac mini 2014で処理に初回で0.1秒ほど。2回目以降は1桁速くなる) AppleScript側で画像を作成してフィルタ処理をかけたりして、好き放題に合成してFileMaker DB上のフィールドに設定できる。バーコードやQRコードをAppleScript側で生成して設定したり、PDFをレンダリングした画像を設定できるのは便利

AppleScript名:NSImage to FM Object Field v2.scptd
— Created 2020-12-20 by Takaaki Naganoya
— 2020 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

property fmBundleID : ""

set fmBundleID to getBundleID() of me

–DB側から画像化するテキストを取得する
using terms from application "FileMaker Pro"
  tell application ID fmBundleID
    tell window 1
      tell current record
        set aText to field "originalString"
      end tell
    end tell
  end tell
end using terms from

set aWidth to 500.0 –幅
set aHeight to 200.0 –高さ

set fillColor to current application’s NSColor’s blackColor –塗り色
set drawColor to current application’s NSColor’s whiteColor –文字色

set {xPos, yPos} to {1, 5}

–新規画像を作成して背景を塗る
set aImage1 to makeImageWithFilledColor(aWidth, aHeight, fillColor) of me

–画像に文字を塗る
set aImage2 to drawStringsOnImage(aImage1, aText, "HiraKakuStd-W8", 36.0, drawColor, xPos, yPos) of me

(my restoreClipboard:{aImage2})
using terms from scripting additions
  set tmpImg to the clipboard as JPEG picture
end using terms from

–DBに画像を設定する
using terms from application "FileMaker Pro"
  tell application ID fmBundleID
    tell window 1
      tell current record
        set field "imageStore" to tmpImg
      end tell
    end tell
  end tell
end using terms from

–画像のうえに指定の文字を描画して画像を返す
on drawStringsOnImage(anImage, aText, aFontName, aPoint, drawColor, xPos, yPos)
  set aString to current application’s NSString’s stringWithString:aText
  
set aDict to current application’s NSDictionary’s dictionaryWithObjects:{current application’s NSFont’s fontWithName:aFontName |size|:aPoint, drawColor} forKeys:{current application’s NSFontAttributeName, current application’s NSForegroundColorAttributeName}
  
  
–文字描画開始
  
anImage’s lockFocus()
  
aString’s drawAtPoint:(current application’s NSMakePoint(xPos, yPos)) withAttributes:aDict
  
anImage’s unlockFocus()
  
–文字描画ここまで
  
  
return anImage
end drawStringsOnImage

–指定サイズの画像を作成し、背景を指定色で塗る
on makeImageWithFilledColor(aWidth, aHeight, fillColor)
  –Imageの作成  
  
set anImage to current application’s NSImage’s alloc()’s initWithSize:(current application’s NSMakeSize(aWidth, aHeight))
  
  
–描画開始
  
anImage’s lockFocus()
  
  
set theRect to {{x:0, y:0}, {width:aWidth, height:aHeight}}
  
set theNSBezierPath to current application’s NSBezierPath’s bezierPath
  
theNSBezierPath’s appendBezierPathWithRect:theRect
  
  
fillColor’s |set|() –色設定
  
theNSBezierPath’s fill() –ぬりつぶし
  
  
anImage’s unlockFocus()
  
–描画ここまで
  
  
return anImage –画像を返す
end makeImageWithFilledColor

on getBundleID()
  –FileMaker Pro 18
  
set fmProID to "com.filemaker.client.pro12"
  
  
–FileMaker Pro 18 Advanced
  
set fmProADVID to "com.filemaker.client.advanced12"
  
  
using terms from application "FileMaker Pro"
    tell current application
      set aName to name
    end tell
  end using terms from
  
  
if aName contains "Advanced" then
    return fmProADVID
  else
    return fmProID
  end if
end getBundleID

–クリップボードに内容を設定する
on restoreClipboard:theArray
  — get pasteboard
  
set thePasteboard to current application’s NSPasteboard’s generalPasteboard()
  
  
— clear it, then write new contents
  
thePasteboard’s clearContents()
  
thePasteboard’s writeObjects:theArray
end restoreClipboard:

★Click Here to Open This Script 

Posted in Image | Tagged 10.14savvy 10.15savvy 11.0savvy FileMaker | Leave a comment

Safariで表示中のタブを順次切り替え

Posted on 12月 26, 2020 by Takaaki Naganoya

StreamDeckから呼び出すことを前提に作ってみました。StreamDeckの実機は友人に返却したものの、ソフトウェア版のStreamDeck(iOSデバイスで動く)が稼働するので、iPhone上のStreamDeckアプリでMacをコントロール可能です。

AppleScript名:rotate tabs.scpt
tell application "Safari"
  tell front window
    set tCount to count every tab
    
set curTab to index of current tab
    
    
if curTab = tCount then
      set targTab to 1
    else
      set targTab to curTab + 1
    end if
    
    
set current tab to tab targTab
  end tell
end tell

★Click Here to Open This Script 

こんなAppleScriptを書いて、StreamDeckの設定ソフトウェアで「開く」アクションにAppleScriptを登録。

実行時、初回だけ「Safariのコントロールを許可するか?」というセキュリティダイアログが出てきますが、許可すれば2回目以降で聞かれることはありません。

Posted in Peripheral | Tagged 10.14savvy 10.15savvy 11.0savvy Safari Streamdeck | Leave a comment

Pixelmator Pro v2.0.2/2.0.3のAppleScript用語辞書変更点

Posted on 12月 25, 2020 by Takaaki Naganoya

Pixelmator Pro v2.0.1から2.0.2のバージョンアップ時にAppleScript用語辞書が変更されました。

・select color rangeコマンドにmodeを追加

new selection : Create a new selection.
add selection : Add to the existing selection.
subtract selection : Subtract from the existing selection.
intersect selection : Intersect with the existing selection.

Pixelmator Pro v2.0.2から2.0.3へのバージョンアップ時にはとくに変更はありません。

Posted in Update | Tagged 10.14savvy 10.15savvy 11.0savvy Pixelmator Pro | Leave a comment

2020年に書いた価値あるAppleScript

Posted on 12月 21, 2020 by Takaaki Naganoya

2020年:macOS 11(自分はmacOS 10.14を使用)

毎年書いている記事であり、いろいろ準備していました。コロナ禍の影響もあり、踏んだり蹴ったりの1年といってよいでしょう。

→ 2019年に書いた価値あるAppleScript
→ ぴよまるソフトウェアが選ぶ、2018年に書いた「価値あるScript」

本Blogにおいては、1つの大きな方針転換を行なっています。自分は高性能な部品を適度に提供しておけば、AppleScriptの有用性は主張できると思っていたのですが、部品だと価値がわからない人がとても多いという結論に至りました。

つまり、おいしい野菜やお肉を提供していても、みんなが調理できないので「料理」として提供しないと理解されないということなんですね。なので、「料理」としてのMac App Storeアプリケーションを作って売ることに重点を移しました。フルコース料理を出してみたら意外とウケなかったので、その引き立て用の小皿料理を増やしているという状況です。

今年1年を通じて一番「会心の一撃」だったのは「Kamenoko」。最も多くの人にリーチしたのは「Uni Detector」でしょう。どちらもAppleScriptで開発して、Mac App Storeから提供しています。

そうしたアプリケーションを作る中で育てられた機能も多く、1年を通じて画期的なScriptが登場してきたと感じます。今年1年だけで相当の進歩が達成されています。

ではさっそく、振り返ってみましょう。

■2020/1

2020年1月は、「各月で2本」という選定基準を遵守できないほど画期的なScriptが多数出てきました。この月に登場したScriptは重要なものばかりです。

とくに、AppleScriptのランタイム環境の名称がAppleScript側から取得できるようになったことの意義は大きく、ランタイム環境ごとに挙動を変化させるといった処理が可能になりました。この情報はかなり前(それこそMac OS X 10.1ぐらいの時期)から調べていたものですが、別の用途のために作ったものが使えてしまい、実は5年前にはその方法を明らかにするScriptを書けていた(のに気づかなかった)ことに驚きを禁じえません。

eppcで他のMac上のアプリケーション操作

GUI Scriptingでコンテクストメニューのキャプチャを取得

1888年1月1日以前の日付が-1日になる問題の原因

AppleScriptを実行中のランタイムプログラム名を取得する

display drop dialog Script Library

RoundWindow v2

■2020/2

Kamenokoの部品として作った「common elements Lib」が登場しています。まだKamenokoにフィードバックできていませんが、個人的にこんな演算ができたことに驚いています。

Wikipedia経由で2つの単語の共通要素を計算するcommon elements Lib Script Library

画像の指定エリアを透明色塗りつぶし(矩形切り抜き)

■2020/3

このあたりもKamenokoの部品です。

正方形セルの表データで指定セルに隣接するセルブロックを検出

NSURLSessionでREST API呼び出しv4.4

■2020/4

AppleScriptで作ったSandboxアプリケーションでファイル保存の処理を行うときに必須の「ファイル保存ダイアログ」Script。アプリケーション内でREST APIを呼び出すための部品もキャッシュが有効になるなど高度な進化を遂げました。今年、JavaScriptのライブラリを呼び出して異次元の処理ができるようになったScript群の先鞭をつけたScriptも4月に登場しています。

ファイル保存ダイアログ(SavePanel)表示

NSURLSessionでREST API呼び出しv4.4.2a

アラートダイアログ上にWkWebViewでGoogle Chartsを表示 v2

■2020/5

このあたりも、Kamenokoのために作った部品ですね。

ダブルクリックとコンテクストメニュー表示をサポートするボタン

Kamenoko、Mac App Storeで販売開始

■2020/6

今年の一番のScriptが登場。WebView上でインタラクティブな表示を行い、選択表示ができる部品に昇華しています。この時点ではただ表示するだけでしたが、指定した内容を表示して、選択したアイテムを取得できるように使いこなせています。

アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)

アラートダイアログ上にd3-cloudを用いてワードクラウドを表示

■2020/7

このあたりも地味ですが、非常に良作です。macOSの新たに作られたUTI系のFrameworkで、実際に使いこなした記事が存在するのが本Blogのみという状況が長く続いていました。

macOS 11.0上のUTIのじっけん

画像の空白判定プログラムの検証

■2020/8

このScriptは、そもそもOS側にそうした機能が存在していないにもかかわらず、実際に機能を提供できてしまうというものです。

PDFにパスワードが設定されている場合には、そのパーミッション情報を取得する

■2020/9

本Scriptはいろいろ重要なものです。PhotoshopデータであるPSD形式の書類を作成できることはとても重要です。Mac App Storeにアプリケーションに、他のアプリケーション(Photoshop)の存在を前提としたものは提出できません。AppleScriptで作ったアプリケーションであったとしても、Photoshop形式のデータを自力でオープンできたり、自力で保存できる必要があります。

SFPSDWriterのじっけん v2

■2020/10

なぜかAppleScriptでゲームを作りました。

AppleScriptでリアルタイムキースキャンを行いCotEditor書類上にカーソル描画

Pixelmator Pro AppleScriptコンテストで優勝

■2020/11

これも、各種アプリケーションで利用するために作成したものです。

ステータスバーアイテムの点滅

■2020/12

実際にいま作っているコンテスト用の作品に向けて書いたものです。

HTMLカラー値から明度を取得

Posted in news | 3 Comments

同じバージョン番号のまま大幅に機能が変更されたSystem Events

Posted on 12月 15, 2020 by Takaaki Naganoya

macOS 10.15はBetaの頃から出来が悪くて、とても「これは常用できない」としてメインマシンにはインストールせず、専用のマシンに入れて様子を見ていました。10.15については「こんなもんリリースすんな」という印象。10.13については、担当者の首が飛ばない理由が分からない出来でした。

そんなmacOS 10.15で、ご無体な変更がSystem Eventsに見られました。

10.13、10.14、10.15、11.0とSystem Eventsのバージョン番号は同じ「1.3.6」ですが、AppleScript用語辞書の内容が大幅に変更されています。

これまでにもAppleのエンジニアの失敗やバグにいろいろ酷い目に遭わされてきましたが、「内容に大幅に変更があってもバージョン番号を変えない」という新たな失敗が記録されることになりました。これは、斬新な手口ですね! 

今後も、バージョン番号を変更せずに機能の変更を行なってくることが予想されます。できれば、ちゃんとバージョン番号を変更することも覚えてほしいですよね。

■macOS 10.13→10.14

(1)Disk-Folder-File Suiteから、指定のOSA言語のScriptを実行する「do script」コマンドが削除されました。同機能は標準命令の中にも重複して存在しており、とくに影響はありません。

■macOS 10.14→10.15

(1)desktop picture settingsに「dynamic style」という属性値が新設されました。指定できる値は「auto」「dynamic」「light」「dark」「unknown」。

(2)Audio File Suiteが削除された
どこまで行っても実装が微妙だったAudio File Suiteが削除されました。32bitコードだったのでしょうか。

(3)Movie File Suiteが削除された
同じく、微妙な出来だったMovie File Suitesが削除されました。理由はAudio File Suiteと同じなのでしょう。

(3)QuickTime File Suiteが削除された
同上。

(4)key up/key downコマンドが強化された
文字コードでしか指定できなかったkey up/key downコマンドが強化され、integerでキーコードを指定する従来どおりの指定方法のほか、textでキーボードの文字を指定できるようになりました。

■macOS 10.15→11.1

(1)dock preferences objectに属性値が新設された
autohide menu bar:システムメニューバーの自動非表示機能のオン/オフ
double click behavior:ウィンドウのタイトルバーをダブルクリックしたときの挙動の切り替え
minimize into application:ウィンドウのタイトルバーをダブルクリックしたときにDock上のアプリケーションアイコンに向けて最小化?
show indicators:Dock上のアプリケーションアイコンに起動中のインジケータ表示を行う/行わない設定
show recents:最近使ったアプリケーションのグループを表示する設定

こうした調査は、AppleScript用語辞書ファイル(sdef)そのものや、それをHTMLに書き出したデータを比較することで検討しているわけですが、一回それを電子書籍のオマケにすることを検討したものの、他のScripterに「そういうものに興味はないか?」と聞いてみたところ、まったく関心を持っていないようでした。

ある意味、最重要書類というか「秘伝のタレ」に近い情報ではあったものの、コピペだけでコードを書いているレベルのScripterは、そういう「一次情報」(死活問題になる)に関心がないんだなーということが分かっただけでした。

■表 System Eventsの用語辞書の変遷(「最新事情がわかるAppleScript 10大最新技術」より引用してアップデート)

macOS Version 10.x 2 3 4 5 6 7 8 9 10 11 12 13 14 15 11.0
Standard Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
System Events Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Accounts Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Appearance Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
CD and DVD Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Desktop Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Dock Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Login Items Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Network Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Screen Saver Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Audio File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Security Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Disk-Folder-File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Folder Actions Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Movie File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Power Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Processes Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Property List Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
QuickTime File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
XML Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Type Definitions ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Scripting Definition Suite ■ ■ ■ ■ ■ ■ ■
Text Suite ■ ■ ■ ■ ■ ■ ■
Expose Preferences Suite ■ ■ ■ ■
Posted in news | Tagged 10.14savvy 10.15savvy 11.0savvy System Events | 1 Comment

Numbersで選択範囲に背景色を塗られているセル数をカウント

Posted on 12月 14, 2020 by Takaaki Naganoya

Numbersでオープン中の最前面の書類の現在のシート上の選択状態にある表の選択範囲から、背景色(background color)が塗られているセルを数えるAppleScriptです。

用途は、WebGL + three.jsで作られた3Dの回転選択メニューのデータ確認のためです。Numbers上で表示範囲の表を作って、その上で背景色を塗ることで「どの位置にデータを表示するか」を指定します。そのさいに、並べるセル数が表示用のJavaScriptと合っていないと面倒なので、本Scriptで色つきセルをかぞえています。

Numbers上で背景色(background color)が塗られているセルは16ビットで色の値が返ってきますし、塗られていないセルはmissing valueが返ってきます。

AppleScript名:Numbersで選択範囲に背景色を塗られているセル数をカウント
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/06
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Numbers"
  tell front document
    –現在表示中のシートを対象にする
    
tell active sheet
      –Tableを特定する
      
try
        set theTable to first table whose class of selection range is range
      on error
        display notification "Numbers: There is no selection"
        
return {}
      end try
      
      
tell theTable
        –選択範囲のデータを1D Listで取得する
        
set aRes to background color of cells of selection range
      end tell
      
      
      
–Count Background
      
set aCount to 0
      
repeat with i in aRes
        set j to contents of i
        
        
if j is not equal to missing value then
          set aCount to aCount + 1
        end if
      end repeat
      
      
return aCount
    end tell
  end tell
end tell

★Click Here to Open This Script 

同様に、着色セルの座標値(x座標, y座標)を返すものも作って使用しています。

AppleScript名:Numbersで選択中のセルのうち背景色を塗られているもののx,y座標を2D Listで返す
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/06
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Numbers"
  tell front document
    –現在表示中のシートを対象にする
    
tell active sheet
      –Tableを特定する
      
try
        set theTable to first table whose class of selection range is range
      on error
        display notification "Numbers: There is no selection"
        
return {}
      end try
      
      
tell theTable
        tell selection range
          set cellRes to background color of cells
          
set aWidth to count every column
          
set aHeight to count every row
        end tell
      end tell
      
      
–Check selected cell’s background color
      
set cellL to {}
      
set adrCount to 1
      
repeat with y from 1 to aHeight
        repeat with x from 1 to aWidth
          set aTmp to contents of (item adrCount of cellRes)
          
          
if aTmp is not equal to missing value then
            set the end of cellL to {x, y}
          end if
          
          
set adrCount to adrCount + 1
        end repeat
      end repeat
      
      
return cellL
      
–> {{1, 1}, {2, 1}, {3, 1}, {6, 1}, {8, 1}, {12, 1}, {15, 1}, {16, 1}, {20, 1}, {21, 1}, {24, 1}, {27, 1}, {28, 1}, {29, 1}, {1, 2}, {4, 2}, {6, 2}, {9, 2}, {11, 2}, {14, 2}, {17, 2}, {19, 2}, {23, 2}, {25, 2}, {27, 2}, {1, 3}, {2, 3}, {3, 3}, {6, 3}, {10, 3}, {14, 3}, {17, 3}, {19, 3}, {20, 3}, {23, 3}, {25, 3}, {27, 3}, {28, 3}, {29, 3}, {1, 4}, {6, 4}, {10, 4}, {14, 4}, {17, 4}, {21, 4}, {23, 4}, {25, 4}, {27, 4}, {1, 5}, {6, 5}, {10, 5}, {15, 5}, {16, 5}, {19, 5}, {20, 5}, {21, 5}, {24, 5}, {27, 5}, {1, 7}, {5, 7}, {8, 7}, {11, 7}, {12, 7}, {15, 7}, {17, 7}, {19, 7}, {20, 7}, {21, 7}, {23, 7}, {27, 7}, {1, 8}, {2, 8}, {4, 8}, {5, 8}, {7, 8}, {9, 8}, {11, 8}, {13, 8}, {15, 8}, {17, 8}, {20, 8}, {23, 8}, {27, 8}, {1, 9}, {3, 9}, {5, 9}, {7, 9}, {8, 9}, {9, 9}, {11, 9}, {12, 9}, {15, 9}, {17, 9}, {20, 9}, {23, 9}, {25, 9}, {27, 9}, {1, 10}, {5, 10}, {7, 10}, {9, 10}, {11, 10}, {13, 10}, {15, 10}, {17, 10}, {20, 10}, {23, 10}, {24, 10}, {26, 10}, {27, 10}, {1, 11}, {5, 11}, {7, 11}, {9, 11}, {11, 11}, {13, 11}, {16, 11}, {20, 11}, {23, 11}, {27, 11}}
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in Color list | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Numbers | Leave a comment

HTMLカラー値から明度を取得

Posted on 12月 8, 2020 by Takaaki Naganoya

HTMLカラー値からNSColorを作成し、Gray Scaleに変換したのちに明度情報を取得するAppleScriptです。

RGB値をHSV(HSB)に変換して明度情報を取得するバージョンも試してみたのですが、個人的にはこちらの処理の方がしっくりくる感じでした。

# コメント部分のWhiteとBlackの記述が逆だったので修正しておきました

AppleScript名:HTMLカラー値から明度を取得 v1.1.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/07
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

property NSColor : a reference to current application’s NSColor
property NSString : a reference to current application’s NSString
property NSAttributedString : a reference to current application’s NSAttributedString
property NSUTF16StringEncoding : a reference to current application’s NSUTF16StringEncoding
property NSDeviceWhiteColorSpace : a reference to current application’s NSDeviceWhiteColorSpace

set aCol to "#412a23"
set wCol to calcBrightnessFromHTMLColorCodeStr(aCol) of me
–> 0.245871186256

set aCol to "#000000" –Black
set wCol to calcBrightnessFromHTMLColorCodeStr(aCol) of me
–> 0.0

set aCol to "#FFFFFF" –White
set wCol to calcBrightnessFromHTMLColorCodeStr(aCol) of me
–> 1.0

set aCol to "#EEA096"
set wCol to calcBrightnessFromHTMLColorCodeStr(aCol) of me
–> 0.759391903877

on calcBrightnessFromHTMLColorCodeStr(aStr as string)
  set {rVal, gVal, bVal} to rgbHex2nunList(aStr) of me
  
–NSColorを作成
  
set aCol to makeNSColorFromRGBAval(rVal, gVal, bVal, 255, 255) of me
  
— グレースケール化
  
set gCol to aCol’s colorUsingColorSpaceName:(NSDeviceWhiteColorSpace)
  
set wComp to gCol’s whiteComponent() –whiteComponentを取得することで擬似的に明度情報を取得  
  
return wComp
end calcBrightnessFromHTMLColorCodeStr

on makeNSColorFromRGBAval(redValue as integer, greenValue as integer, blueValue as integer, alphaValue as integer, aMaxVal as integer)
  set aRedCocoa to (redValue / aMaxVal) as real
  
set aGreenCocoa to (greenValue / aMaxVal) as real
  
set aBlueCocoa to (blueValue / aMaxVal) as real
  
set aAlphaCocoa to (alphaValue / aMaxVal) as real
  
set aColor to NSColor’s colorWithCalibratedRed:aRedCocoa green:aGreenCocoa blue:aBlueCocoa alpha:aAlphaCocoa
  
return aColor
end makeNSColorFromRGBAval

on decodeCharacterReference(aStr)
  set anNSString to NSString’s stringWithString:aStr
  
set theData to anNSString’s dataUsingEncoding:(NSUTF16StringEncoding)
  
set styledString to NSAttributedString’s alloc()’s initWithHTML:theData documentAttributes:(missing value)
  
set plainText to (styledString’s |string|()) as string
  
return plainText
end decodeCharacterReference

–HTMLコードのRGB 16進数コードを数値リストに変換
on rgbHex2nunList(aHexStr)
  –エラーチェック
  
if aHexStr does not start with "#" then return false
  
if length of aHexStr is not equal to 7 then return false
  
set bHex to text 2 thru -1 of aHexStr
  
  
set {rStr, gStr, bStr} to {text 1 thru 2 of bHex, text 3 thru 4 of bHex, text 5 thru 6 of bHex}
  
  
set bList to {}
  
repeat with i in {rStr, gStr, bStr}
    set j to contents of i
    
set the end of bList to aHexStrToNum(j) of me
  end repeat
  
  
return bList
end rgbHex2nunList

–16進数文字列を10進数数値に変換する
on aHexStrToNum(hexStr)
  set hStr to "0123456789ABCDEF"
  
  
set aNum to 0
  
set aLen to length of hexStr
  
  
repeat with i from aLen to 1 by -1
    
    
set aCon to contents of character i of hexStr
    
using terms from scripting additions
      set aVal to (offset of aCon in hStr) – 1
    end using terms from
    
set aNum to aNum + aVal * (16 ^ (aLen – i))
    
  end repeat
  
  
return aNum as integer
end aHexStrToNum

★Click Here to Open This Script 

Posted in Color | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy NSAttributedString NSColor NSDeviceWhiteColorSpace NSString NSUTF16StringEncoding | Leave a comment

Numbers選択セルの内容の&エンコーディング文字をプレーン化

Posted on 12月 7, 2020 by Takaaki Naganoya

Numbersのワークシート上で選択したセル中の文字に&エンコーディング文字が存在している場合に、その内容をプレーンテキスト化するAppleScriptです。

内容自体はよくあるものなので、説明が必要なものでもありません。Stream DeckにNumbers関連のScriptをいくつか用意して試していますが、なかなか便利です(かといって、Stream Deckの購入を決意するほどではないのですが)。ただ、実際にデータ整理が少ない手間で行えました。

Stream Deck Softwareの「システム」>「開く」のアクションにscpt形式のAppleScript書類を登録しておけば実行してくれるため、そのような利用方法を想定しています。

Numbers関連のさまざまな雑多な作業をAppleScriptで省力化し、それをStream Deckから呼び出すことで作業の負荷を減らせることを実感しています。それでもStream Deckの物理的な厚みがあるので何度もパチパチ叩いていると疲れやすいような気もします。

AppleScript名:選択セルの内容の&エンコーディング文字をプレーン化.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/12/06
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

decodeSelection() of me

–Numbersの選択範囲のデータを2D Listで返す
on decodeSelection()
  tell application "Numbers"
    tell front document
      –現在表示中のシートを対象にする
      
tell active sheet
        –Tableを特定する
        
try
          set theTable to first table whose class of selection range is range
        on error
          display notification "Numbers: There is no selection"
          
return {}
        end try
        
        
tell theTable
          –選択範囲のデータを1D Listで取得する
          
set aRes to value of cells of selection range
          
–選択範囲のセルのアドレスデータを1D Listで取得する
          
set cellList to cell of selection range
        end tell
        
        
–Percent Decode
        
set newList to {}
        
repeat with i in aRes
          set j to contents of i
          
set aRes to decodeCharacterReference(j as string) of me
          
set the end of newList to aRes
        end repeat
        
        
–Write Back to Numbers
        
repeat with i from 1 to (length of cellList)
          tell item i of cellList
            set value to item i of newList
          end tell
        end repeat
        
      end tell
    end tell
  end tell
end decodeSelection

on parseByDelim(aData, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set dList to text items of aData
  
set AppleScript’s text item delimiters to curDelim
  
return dList
end parseByDelim

on decodeCharacterReference(aStr)
  set anNSString to current application’s NSString’s stringWithString:aStr
  
set theData to anNSString’s dataUsingEncoding:(current application’s NSUTF16StringEncoding)
  
set styledString to current application’s NSAttributedString’s alloc()’s initWithHTML:theData documentAttributes:(missing value)
  
set plainText to (styledString’s |string|()) as string
  
return plainText
end decodeCharacterReference

★Click Here to Open This Script 

Posted in Text | Tagged 10.14savvy 10.15savvy 11.0savvy Numbers | Leave a comment

Pixelmator Pro v2.0.1でAppleScript用語辞書に命令語追加

Posted on 12月 2, 2020 by Takaaki Naganoya

Pixelmator Proはバージョン1.8でAppleScriptに対応しましたが、その後のアップデートでも用語辞書に変更が加えられています。

v2.0では以前に作ったアイコンの各解像度画像の書き出しScriptがうまく動作していませんでしたが、v2.0.1ではうまく(エラーを出さずに)動作していることを確認しています。バグレポートしてから反映されるまでの時間が短くて、フットワークの軽さに感心しました。こういうところ、Piyomaru Softwareとは比べ物になりません。

■v1.8→v2.0


「elipse shape layer」(楕円レイヤー)に同義語(synonym)が追加定義されました。「circle shape layer」「oval shape layer」と入力して構文確認すると「elipse shape layer」として解釈されます。

■v2.0→v2.0.1


「select color range」コマンドが追加定義されました。写真のようなデータを相手に色域を指定して選択できるようです。このrangeで指定する値が、色差(ΔE)なのか、何か他の指標の数値なのかがいまひとつわかりません。

自分が作った色域指定のAppleScriptでは、文字色の選択のために作ったものなので、もう少し仕様が違います。

select color range v : Select all areas of a specified color. This command can be executed on the document (in which case every layer is sampled) or on a layer, in which case the selection is created based on the layer's content.
select color range document
color list of integer : The color of the areas that should be selected.
[range integer] : The range of the colors that should be selected. With a range of 1, only areas that are exactly of the specified color will be selected. As the range is increased, increasingly more similarly-colored areas will be selected.
[smooth edges boolean] : Whether the edges of the selection should be smoothed.

rangeはrangeとしか書かれていないですね。100を指定するとキャンバス全体が選択されてしまうので、数値範囲は事実上1〜99ということになると思います(AppleScript用語辞書に有効範囲ぐらいは書いておいてほしいなー)。

rangeの値をどう指定するかで、どのぐらいの範囲の「色」を選択できるかが変わってくるので、自分もテストデータの選択色範囲を見ながら値を調整したので、いま指定しているrangeの値が正しいという保証はありません。

もともと、対話的に値を模索するような値なので、画像で使われている色数の分布などの情報をあらかじめ取得して分析しておき、その中でどの程度の色をピックアップするのか知っておく必要があるでしょう。そこまで徹底的に分析してからでないと、このselect color rangeコマンドをバッチ処理的な世界観の中で有効利用することは難しいと思います。

このコマンドを実装するぐらいなら、画像をOCR処理してテキストを取り出して、指定のキーワードが入っているエリアをぼかし処理するといった「OCRフィルタリング」の機能の方がいいかも。画面キャプチャ画像で特定の文字が入っている部分をぼかし処理するパターンがとても多いので、これは自分でも組んでおきたい処理ではあります(OCR次第。OS標準搭載機能だけでなんとかできるとよさそう)。

AppleScript名:選択中のレイヤーから赤っぽい色を選択.scpt
tell application "Pixelmator Pro"
  tell front document
    tell current layer
      select color range color {65535, 0, 0} range 90
    end tell
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:選択中のレイヤーから緑色っぽい色を選択.scpt
tell application "Pixelmator Pro"
  tell front document
    tell current layer
      select color range color {0, 65535, 0} range 90
    end tell
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:選択中のレイヤーから青っぽい色を選択.scpt
tell application "Pixelmator Pro"
  tell front document
    tell current layer
      select color range color {0, 0, 65535} range 80
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in Color | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Pixelmator Pro | Leave a comment

Keynote 10.3.8がリリース、AppleScriptバグ修正なし

Posted on 12月 2, 2020 by Takaaki Naganoya

Keynote v10.3.8がリリースされました。対象OSはmacOS 10.15以降です。exportコマンドでCodec指定のEnum「h.264」はそのままで、AppleScriptの言語処理系では構文確認も実行もできないままです。「h.264」→「h264」に修正してほしいんですけどー。

Posted in Bug | Tagged 10.15savvy 11.0savvy Keynote | Leave a comment

歴史的大ニュース:Amazon AWSがMacインスタンスのサポートを開始

Posted on 12月 1, 2020 by Takaaki Naganoya

久しぶりに震えました。Amazon AWS(EC2)がMacのインスタンスをサポートしました(Amazon EC2 Mac instances)。

New – Use Amazon EC2 Mac Instances to Build & Test macOS, iOS, ipadOS, tvOS, and watchOS Apps

Amazon EC2 Mac InstancesDevelop, build, test, and sign Apple apps on Amazon EC2

このMacインスタンスは、通常のAWSとは異なりMac1台をまるまる占有するタイプのようです。ハードウェアはMac mini(Core i7 3.2GHz)でメモリ32GB。10Gbit Ethernet搭載モデルとのこと。

Amazon EC2 Mac InstancesがサポートするOSはmacOS 10.14と10.15、2021年にはM1 Mac miniの投入を検討しているのだとか。こちらはmacOS 11.x以降での運用になることでしょう。

利用者はTerminal上でSSHで接続するか、VNC Remote Desktop経由で接続することになるとのこと。XcodeでiOSなどのアプリケーションをビルドするための需要を見込んでいるようです。

「仮想マシンの1インスタンス時間貸し」というAWSのサービスイメージと大きく異なり、1台まるごと貸し出しサービスです。仮想化技術を用いて大量のインスタンスを同時実行する方向では、ライセンスの問題を解決できないことは明らかでしたが、逆に「こういう方法があったのか」というコロンブスの卵的な解決策ではあります。クラウドというよりは、時間貸しのコロケーションサービスともいえます。

最近のmacOSでは滅多にありませんが(のぞく、macOS 10.13と10.15)、OSごとまるごとクラッシュして再起動が必要になるとか、リセットが必要になるケースもないことはないでしょう。また、セキュリティ設定をユーザーが好き勝手にいじくれるかどうかも見所です(SIP解除して運用できるのかどうか、これは切実な問題です)。

Amazon EC2 Mac Instancesのサービス提供リージョンは、US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) とのことで、Tokyoは現段階ではありません。今後増えていくような書き方はされていますが、正直わかりません。

EC2というと、あらかじめディスクイメージを用意しておいて、インスタンスの起動をディスクイメージで実行、サービス運用と終了の必要な期間がきわめて短くて済むことを売りにしている印象があるものの、このAmazon EC2 Mac Instancesで運用するとどーなるのか。

利用料金をまだ確認できていないので、コロケーションサービス(初期費用が必要)に比べてどうなのかとか、実機まるごと買ったほうが安いんじゃないかとか、疑問はいろいろあるわけですが、REST APIのインタフェースだけ作ってしまえばクラウド上でAppleScriptによってサービスを作って提供できるわけで、ずいぶん悩ましい存在です。

AppleScript on the cloud的なサービスもできるし、仲間内で冗談でしか出てこなかった「Adobe Creative Grid」(時間貸しで大量のマシンによりAdobeアプリケーションのデータを高速かつ並列に処理する)みたいなサービスも作れてしまう(Adobe Createve Cloud税が高いのでむやみに実験はできないんですけれども)わけで、ずいぶん楽しい感じになってきました。

OS X 10.10で通常のAppleScriptからCocoaの機能が利用できるようになり、Cloud系のサービスを利用できるようになりました。機械学習系の機能も利用できています。

AppleScriptで大規模データとか超大量のデータ処理を行うさいの物理的な制約がなくなってきたわけで、数万人のユーザーへの一括メール送信とかいう無茶な処理も、外部のCloud(SendGrridなど)の機能を活用してできるようになりました(そこまで大量の送信は実際にはやっていないので、理論上最大値ということで)。

一方で、AppleScriptを使ってWebサービスそのものを作って運用するという方向には、ほとんど手が伸びていなかった状態です。外部でそのような需要が発生するか否かについては不明ですが、自分で作って自分で運営するサービスでは、柔軟に規模の拡大・縮小が行えることは重要です。

そうしたときに、外部とのI/FをRemote AppleEventで行うわけにはいかないでしょうし(AWSのデータセンターでポート3031へのリクエストが通るんだろか?)、一般的なREST APIでリクエストを受け付けてJSONで返すみたいな構造にする必要はあるでしょう。

あとは、並列処理技術。これまで、「Mac App Store向けのアプリケーションでは仕様上実装しづらい」ことから、それほど活躍の場がなかったAppleScriptによる並列処理技術ですが、外部からのリクエストを処理する場合には、とても必要になってくることでしょう。

やはり、実際にさわってみないとなんとも言えないですね。

Amazon EC2 Mac Instancesについて言及している記事一覧

Amazon Web Services ブログ 新登場 – Amazon EC2 Mac インスタンスを使用した macOS、iOS、ipadOS、tvOS、watchOS アプリの構築とテスト
もともとの記事の日本語版。サービス開始に向けた担当者の思いはわかるものの、費用とかmacOS環境でどのあたりがカスタマイズされているのか(ソフトウェア的に)とか、実際に使うとどの程度の差があるのかといった情報はない。Macユーザーに対して「Amazonは敵じゃないんだよー」と訴えている以上の情報はない

Amazon EC2 Mac Instance を早速使ってみました
EC2の使い方がわかる記事。これを読まないと接続までの手順がわかりづらいものの、これを読んだからといってMac Instanceの実情がわかるというほどの情報量はない

macOSがクラウドで利用可能に――、AWSがMac Miniベースの「Amazon EC2 Mac Instances」を一般提供開始

文章書きのプロがいい感じにまとめている。「よくわからない人」向けにまとめた記事

AWSにMacインスタンスが追加。6コアCore i7搭載Mac miniをクラウドで利用可能に

ニュースリリースまとめただけ。書くのに30分もかけていない速報記事(たぶん)

AWSがMac miniのクラウド化を発表、Apple Silicon Mac miniの導入は2021年初頭か

サービス料金面では一番詳細な記事。Amazon EC2 Mac Instancesは秒単位で課金されるが、最低利用ラインが「24時間」になっているため、24時間を過ぎたら秒単位で課金計算されるということが明記されている

Posted in Network news | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Uni Detector v1.2.1がMac App StoreのUtility部門で28位

Posted on 11月 28, 2020 by Takaaki Naganoya

Uni Detector v1.2.1がMac App StoreのUtility部門で28位(瞬間最大風速)になりました。トータルでは、163位です。

# ニホン(Japanese Version)のMac App Storeだけでしょうか?

Mac App Storeのランキングはひんぱんに再計算されるため、見ている間に順位が37位になりました。儚い。

ランキングの上の方を見ると、Brotherさん(企業)のスキャンユーティリティが2位にいます。無料ソフトなのに、けっこういろいろ言われていてドキドキします。有償にしてもよさそうな雰囲気ではあるのですが、そのあたりの動向は見ものです。

macOS 10.15内蔵のZipライブラリがこれまでと異なり7-zip(分割アーカイブ対応)を使ったことでおかしな挙動を示すようになり、アーカイバに対しての需要が強いことを感じさせます。

あとは、ランキング上位でも「なにこれ?」というものもあったりで、(子供の作ったような電卓アプリには驚きました)なかなか驚かされます。

Posted in PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Uni Detector | 2 Comments

Uni Detector v1.2.1をリリース

Posted on 11月 27, 2020 by Takaaki Naganoya

ケアレスミスで、「Scroll BarをWindowの枠外に配置してしまった」Uni Detector v1.2のリテイク版、v1.2.1をリリースしました。


▲MacBook Air 11インチを基準に、このマシンで最低限の操作が行えることを想定したUser Interface

バージョン1.2以降のUni DetectorのAppleScript用語辞書には、「check arch」のコマンドしか用意していませんが、Sandboxのセキュリティを乗り越えつつ必要な機能(ユーザーによる任意の指定フォルダ以下のアプリケーションのチェック)を実現することが目的です。

本来のScriptableなアプリケーションの意義を考えると、アプリケーションのチェック結果をリストで取得するべきですが、さすがに無償配布アプリケーションでそれはやりすぎなので、実装を控えています。

AppleScript名:アプリケーションのプロパティを取得.scpt
tell application "Uni Detector"
  properties
end tell
–> {frontmost:false, class:application, name:"Uni Detector", version:"1.2.1"}

★Click Here to Open This Script 

AppleScript名:指定アプリケーションをUni Detectorでチェック.scpt
use AppleScript version "2.7" –macOS 10.13 or later
use scripting additions
use framework "Foundation"

set anApp to choose file of type {"com.apple.application-bundle"} with prompt "Select target one App"

with timeout of 3600 seconds
  tell application "Uni Detector"
    set aRes to check arch anApp
  end tell
end timeout

★Click Here to Open This Script 

AppleScript名:指定フォルダ以下にあるアプリケーションすべてをUni Detectorでチェック.scpt
use AppleScript version "2.7" –macOS 10.13 or later
use scripting additions
use framework "Foundation"

set anApp to choose folder with prompt "Select target Folder"
set appList to getFileListWithSpotLight("kMDItemContentTypeTree", "*com.apple.application*", anApp) of me

with timeout of 3600 seconds
  tell application "Uni Detector"
    set aRes to check arch appList
  end tell
end timeout

on getFileListWithSpotLight(aMetaDataItem, aParam, startDir)
  
  
set sDirText to quoted form of POSIX path of startDir
  
set shellText to "mdfind ’" & aMetaDataItem & " == " & aParam & "’ -onlyin " & sDirText
  
try
    set aRes to do shell script shellText
  on error
    return {}
  end try
  
set pList to paragraphs of aRes
  
set aList to {}
  
repeat with i in pList
    set aPath to POSIX file i
    
set aPath to aPath as alias
    
set the end of aList to aPath
  end repeat
  
return aList
end getFileListWithSpotLight

★Click Here to Open This Script 

Posted in Bug PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Uni Detector | Leave a comment

Uni Detector v1.2をMac App Storeに提出

Posted on 11月 26, 2020 by Takaaki Naganoya

Universal Binary Checker「Uni Detector」のバージョン1.2をMac App Storeの審査に提出しました。

目下、Universal Binary対応アプリの提出騒乱状態なので、審査側がパンクしないようにイージーモードの審査が続いており、平時では通らないようなバグがそのまま残っていたv1.1.1でした(これは自分のせいです)。

Uni Detector v1.2はまだUniversal Binaryではありません。1つには、macOS 11.0上でUniversal Binary化できることは確認ずみで、いつでも対応可能であること。その割に、ビルド環境をmacOS 10.14.6から移行するのには(Mac App Store向けビルド環境の移行)手間がかかること。あと、どうせAppleScriptで書いたアプリケーションなので、Universal Binary化してもスピードアップの恩恵が限定的である(ことが予想される)ためです。

Uni Detector v1.2はScriptableになりました。外部からAppleScriptでコントロール可能です。AppleScript用語辞書には、本Blog同様ワンクリックですぐに利用可能なScriptサンプルを掲載しています。

ただし、実装した「check arch」コマンドはユーザーのホームディレクトリ以下に置いたアプリケーションやネットワークサーバー上のアプリケーションなどをチェックしたいという需要に応えるための必要最低限のものであり、チェックした結果のデータをlistやrecordで返すものではありません。

さすがに、他のソリューションに組み込んだり連携可能なデータを返す機能については、発展機能を持つ有償版で対処したいところです。フリー版の機能はこの程度にしておきたいところ。

AppleScriptで作ったGUIアプリケーションにAppleScript用語辞書をつけて外部のAppleScriptから呼び出すというのは、ひどく本末転倒といいますか、豆から作った豆腐を崩してふたたび固めて作る日本料理の「ひろうす」のような感じといいますか、妙な感じがします(普通にGUIつけないでフル機能をAppleScriptだけで書けるのに、変に遠回りなやりかたです)。

あとは、小さい画面の環境でも「Mac CPU Architecture Trend」の図が見えるように、ポップアップで別途表示できるようにしました。

この表示を行うために、既存のViewの内容をPDFとして取得してPDFViewで表示しています。

些細なスペルミスを修正したり、Fileメニュー以下のコマンドが一切動作していないというバグを修正したり、CM表示機能を強化したりと細かい点の修正を行っています。

Mac App Storeに提出したアプリケーションをAppleScript対応にしたのは今回が初めてです。Store未提出のアプリケーションではScriptableにしたことはありますし、AppleScript LibrariesにAppleScript用語辞書をつけて配布したことはありますが、GUIアプリにAppleScript用語辞書をつけて配布したのははじめてのことです。

次は、本アプリケーションをUniversal Binary化するぐらいでしょうか。それで、ひとまず「しなくてはならないこと」は一段落だと思います。一部のマシンでSpotlight DBが壊れたままで運用しているものがあるらしく、それを強制的にプログラムから再生成する機能でも呼び出せたほうがよいかと思っていますが、はたして、、、、

Posted in PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy Uni Detector | Leave a comment

Elgato Stream DeckをAppleScriptでフル活用

Posted on 11月 25, 2020 by Takaaki Naganoya


▲Stream Deck本を発売しました! 新刊「elgato STREAM DECK 徹底活用Mac+STREAM DECKで時短+作業効率化!!」

友人から実機を借りて、Stream DeckからAppleScriptを実行する方法について一通り確認しました。この場をお借りして、Sutohさんにお礼を申し上げます。

また、初期公開時の記事に対してコメントいただいたTechnocraft様に感謝申し上げます。このお二方の尽力なしには評価できなかったことでしょう。

本記事はフィードバックを取り入れ、初回掲載時からは大幅に書き換えてあります。


▲Stream Deckの「システム」>「開く」アクションに登録して、macOSのGUIアプリケーションのメニュー操作を簡単に行うツール「Piyo Menu Clicker」ベータ版の配布を開始しました

Stream Deckとは?

Elgatoが製造・販売している、キートップ画面つきの小型サブキーボードです。Mac本体とはUSB端子で接続します。キートップの内容をカラー液晶ディスプレイで表示しており、キータッチ時の実行内容やキートップ表示内容の差し替えがソフトウェアにより柔軟に行えるようになっています。

メカニカルキーで、キーストロークはありますが、キーボードというよりもゲームコントローラのような操作感です。ゲームに使えるかと言われれば、不可能ではないものの快適とも言い難い感じです。キーストロークが深めなので、連打が不可能とは言いませんが、格子状のキー配置がゲーム向きというよりも業務系コントローラ的な印象を受けます(ゲーム用にハードな利用をしたときの耐久性は未知数)。ゲームコントローラには専用のデバイスやフットスイッチを使った方がよいでしょう。そんなにお安くはありません。

また、キー自体がテンキーのような格子状に配置されており、本体にずいぶん厚みもあるため、これで高速に文章を打つのは(キー数も足りないですし)無理だと思います。専用の日本語入力プログラムを用意すれば、15キー程度でもメールの返信ぐらいは不可能ではなさそうです(そういう野望は別途持っています。評価期間中には完成しないぐらいの壮大な野望が、、、、)。

はるかかなた昔(2000年代前半)、すべてのキートップの内容をカスタマイズできるよう、各キートップに有機EL(OLED)を搭載した「Optimus Maximus」が発表され、長い年月を経たのちに19万円(当時)という価格で発売されたことを覚えている人もいるでしょう。Optimus Maximusのコンセプト自体は広く支持されたものの、実現方法に無理があったために、ひじょうに高価で巨大なものとなってしまいました(そして、スマートフォンやタブレットの登場により魅力と需要は減ってしまいました)。

Stream DeckはOptimus Maximusの基本コンセプトを踏襲しつつ、その欠点(複雑すぎるハードウェア)を見直し、現実的な価格に収めたものと見ることができます。同機では1枚ものの液晶画面の上に透明なキートップのハードウェアキーボードを並べることで同様の操作系を実現しています。

また、フルキーボードではなく、LCDボタン6個、15個、32個といった限定されたキー数の製品をラインナップし、業務現場における簡単ワンキー操作ソリューションといった市場をねらっているようです。「ライブコンテンツ作成コントローラ」といった少し不思議な名前がついていますが、それは映像中継の現場などで使って便利なようにソフトウェアの標準機能が整備されているためで、本来そのように用途が限定されるものではありません。

そのような現場では、照明が暗く、キーボードが発光すること自体に意義があります。また、スマートな操作系を少ない設置の手間で実現でき、有線接続で確実に動作する本製品は競合に対しての牽制を行う「見栄アイテム」として有効でしょう(意外と重要)。自動車の運転席にコンピュータのインタフェースを設置するとしたら、ベストな形態かもしれません。車載コンピュータインタフェースとしては、おすすめできそうです(自分、運転しないので具体的な使用例を紹介できませんけれども)。

アクションはStream Deckの複数のキーボードに対して別々の内容で設定することができ、Stream DeckのすべてのキーにAppleScriptを呼び出すアクションを(別々のScriptを呼び出すものを)登録しておくこともできます。各Profileは最前面のアプリケーションごとに自動変更させられるために「物理キーボード版のScript Menu」のような運用ができます。

アプリケーション起動アクションを割り振っておくと、「物理ボタンのあるアプリケーションランチャー」として利用でき、この使い方もけっこう便利です(外では使えないけど)。

機能固定のStream Deckと最前面のアプリケーションごとに機能を自動変更させるStream Deckの2台を並べておくと便利そうな気がします。

AppleScriptを呼び出してこそ魅力を引き出せるStream Deck

Stream Deckで呼び出せる機能は、Elgatoが用意しているソフトウェア上で、デフォルトのアクションを選択してStream Deck上の各キーに指定することで使えるようになります。このソフトウェアキーボード設定(Profile)は複数持つことができ、macOSのメニュー上から随時切り替えられます(このProfileの切り替え自体をStream Deckのキーから行う「Switch Profile」アクションもあります)。キー数が少ないとProfileをこまめに切り替える必要があるわけで、15キーモデルが実用最低レベルでしょう(6キーモデルは何のために?)。

純粋に文字入力キーとして割り当てることも可能ですが、複数の動作をワンキーで行ってくれることが望ましいところです。

複数のアクションを連続して実行する「Multi Action」アクションが存在するものの、やはりまとまった処理についてはAppleScriptで記述して実行できたほうが便利に思います。

AppleScriptをこのようなソリューションに利用する意義は、条件を考慮して処理を変更できることでしょうか。

ネットワーク上にいるマシンがSleepしているか稼働しているかをチェックして、稼働していたらYouTubeの再生を別マシンに引き継がせるといった処理は、AppleScriptならではのものです。

時間や日付から処理を変える(休日は実行しないなど)こともできてしまうわけです(曜日によっては定休日のため「出前注文アクション」を実行しないなど)。

標準装備のAppleScript実行アクション。「System > Open」

Elgatoが標準で用意しているStream Deckソフトウェアに、指定のAppleScriptを実行するアクションはとくに用意されているように見えません。

見えませんが、さんざん確認してみたところ、アクションのうち「System > Open」でAppleScript書類のうち「.scpt」形式(非バンドルAppleScript書類)と「.applescript」形式(テキスト形式のAppleScript)については関連づけたアプリケーション(デフォルトではスクリプトエディタ)ではなく、osascriptコマンドを使って実行されます。

アクション名:Open(標準装備)
ランタイム名:osascript
指定可能要素:アイコン画像、Title、AppleScript File
Script File Format:.scpt / .applescript
インターネット接続:不可
ダイアログ系の命令実行:可
"facetime-audio" URL event発行:OK
GUI Scripting利用許可:OK

唯一、「.scptd」形式のAppleScript書類のみ、関連づけたアプリケーション(デフォルトではスクリプトエディタ)でオープンされ、実行されることはありません(自分が普段使っているAppleScriptって.scptd形式ばっかりなんでひっかかりました)。


▲AppleScript書類の形式が「.scpt」と「.applescript」の場合は実行、「.scptd」の場合にはエディタでオープンされる「System > Open」アクション

この「System > Open」アクションで実行されるAppleScriptでは、Cocoaの機能やGUI Scriptingを呼び出せますし、GUI Scriptingの認証も取得できます(2回目以降の実行で認証ダイアログが表示されることはありません)。display dialogやdisplay notification、choose from listなどのダイアログ系のUIの表示も問題ありません。

オープンソースのAppleScript実行アクション。scptd形式が実行できる「RunAppleScript」

このStream Deckソフトウェアデフォルトの「System > Open」アクションとは別に、Github上でオープンソースの「streamdeck-applescript」プロジェクトが配布されており、これを簡単に導入できました。

streamdeck-applescript-masterフォルダ中の「Release」フォルダに、「com.mushoo.RunAppleScript.streamDeckPlugin」が入っているので(ビルド不要)、これをダブルクリックすると、streamdeck-applescriptプラグインがSTREAM DECK管理ソフトウェアに読み込まれます。

バンドル形式のScriptおよびフラットなscptファイル、あるいは単なるテキストで書かれたAppleScript(inline script)を指定できます。

アクション名:RunAppleScript(Githubからダウンロード)
ランタイム名:RunApplescript
指定可能要素:アイコン画像、Title、Script File / AppleScript(Inline)
Script File Format:scpt / scptd / text (Inline)
インターネット接続:不可
ダイアログ系の命令実行:不可
"facetime-audio" URL event発行:OK
GUI Scripting利用許可:OK

Elgatoが自社Webから提供しているStream Deckソフトウェア自体は、Sandbox化されているわけではないようですが、いろいろ(長大な)AppleScriptを突っ込んで実行してみたところ、一定の制限が存在していることがわかりました。

すぐに気がつく点は、display dialog、display alert、display notification、choose from listなどのダイアログ表示系のコマンドが効かないということ。Standard scripting additionsの利用が禁止されているのではなく、「LSUIElement=true」の設定による影響を受けているように見えます。この点、標準装備のOpenアクションのほうが気楽に使える感じです。

Stream Deckアプリケーションはアプリケーション形式のドライバ/設定ソフトウェアであり、Dockにアイコンを表示しない状態で動作します。そのため、ダイアログ系の通知を行えない状態であると推測されます。とはいえ、Cocoaの機能を呼び出してAlert Dialogを表示させるとあっさり表示するという「裏技」があります。

Stream Deckから「streamdeck-applescript」アクション経由で呼び出したAppleScriptでは、インターネットへのアクセスが許可されておらず、これが最大の制約項目でしょう(Openアクションも同様)。

Stream Deckアプリケーション自体はSandbox化されていないため、「streamdeck-applescript」自体の制約に見えます。同アクションの開発者がAppleScriptから直接インターネット接続してWeb APIを呼び出すような処理を考慮していなかったためにこのようになっているのか、あるいはStream Deckソフトウェア自体の制限であるかは不明ですが、現状ではそうした(よくある)処理が行えません。

確認してみたところ、Stream DeckソフトウェアのInfo.plistに「Allow Arbitrary Loads=true」のエントリがないために、プラグインおよびそこから呼び出されるAppleScriptではネットワークへのアクセスが行えないようです。これを配慮不足と受け止めるか、セキュリティ上の面倒ごとに巻き込まれたくないものと受け止めるか、そこまで考えていないものと取るかは個人の受け止め方次第でしょう。

Stream Deckの各ボタンにRunAppleScriptアクションを割り振って、Stream Deckのボタンを乱打すると、アクション呼び出しがバッファリングして実行されるため、(挙動としては正しいものの)やや扱いに困る印象を受けました。

つまり、コンピュータに関して知識の少ないユーザーがStream Deck上のキーを押して、すぐに反応がない状態だとキーを連打する可能性があり、連打された内容はバッファリングされ、キャンセルが効きません。

このあたり、呼び出すScriptですぐに何らかの視覚的なフィードバックをしつつ処理に入るなどのケアを行う必要性を感じました。コンピュータに関する知識の少ないユーザーに使わせるには注意が必要でしょう。AppleScriptを割り当てて実行させる場合でも、「ちょっとかじった」ぐらいのScripterでは、十分な配慮を行えないため、Stream Deckの「streamdeck-applescript」アクション経由で動くAppleScriptを書くのにはけっこうなスキルが必要とされるように感じられました。

活用例

facetime-audioで所定の相手に通話を行うAppleScriptを、相手の顔写真入りで登録すると、まるで内線電話感覚でオーディオ通話をかけられて便利でした。

実際に作ってはいませんが、Web経由で出前の注文を行うScript(そんなに難しくないもの)を書いておいて実行すると、「パエリア注文、1時間後に」といった運用ができて便利です。定休日には注文を実施せず、配達時間もシステムクロックから拾ってきた値をもとに指定できるため、とても実用的なものとなるでしょう。

よく行う、LAN上のファイルサーバーのマウントや特定のフォルダのオープンを行わせるのも便利でした。TimeMachineドライブのアンマウントなども便利でしょう。

フローティングパレット上からAppleScriptを実行できる、macOS標準搭載の「Switch Control」も便利ですが、それらのScriptをStream Deckに登録すれば、画面上の場所を占有されることなく同様にAppleScriptを(最前面のアプリケーションごとにProfile表示を切り替えて)実行できるので、道具としてコンピュータを便利に使いこなすという方向で、キートップの表示内容を変更できるハードウェアキーのソリューションは実用的であり、さまざまな作業の苦痛を緩和してくれるものであると感じます。

総合評価

こうしたAppleScriptを自分はいつもScript Menuから実行していますが、アイコンつきの物理ボタンから呼び出せるのは本当に便利です。

Stream Deck標準搭載アクションでは、メールの未読本数の表示などStream Deck上のボタン表示に対してカスタム内容をフィードバック表示させることが可能です。一方で、RunAppleScriptアクションでその機能は利用できないため、不満がないわけではありません。Scriptからネットワーク接続できないのも、REST APIやCDN上のJavaScript Libraryを呼び出しまくっている今日のAppleScriptの利用レベルからすると、世界観が狭すぎて不満が残ります。

活用は行えるものの、Stream Deck自体が価格相応かと言われると「見栄用途」に使わないかぎり疑問が残ります。

そんな向きには、iOS用のElgato Stream Deck Mobileアプリが用意されており、とりあえずiPhoneやiPadにインストールしてこれらのデバイスをStream Deckに見立て、Macの操作を試すことができます(よくできている、、、)。

ちなみに、iOSデバイスとMacの間の接続は無線で行われ(WiFi?)Stream Deck実機のように有線接続する必要はありません。1月あたり350円(無料で1か月のお試しあり)なので手軽に試せるでしょう。また、iOSデバイスとStream Deck実機は同時使用できるため、iOSデバイスを臨時の追加Stream Deckとして運用することも可能です。

Stream Deckのドライバはアプリケーションとして動作するため、Intel版ではありますがM1 Mac上でも問題なく動作することでしょう。

冒頭に「友人から借りた」と書いてあるとおり、本製品には自分に購入させるだけの何かがあるわけではありません。身の回りのさまざまな用途に活用できるものの、たいていは代替手段が存在します。

一方で、リアルなハードウェアキーによる操作が欠かせない用途も存在することでしょう。多忙な現場、つねにオーディオチャットを内線電話のように利用している現場、あまりコンピュータに詳しくないユーザーに対して定型作業を行わせるような用途には、ハードウェアキーによる操作はわかりやすく、導入しやすいことでしょう。

再来週あたり友人に返却する必要があるのですが、少し「惜しい」と思える程度の魅力はあります。使うかどうかはその人次第でしょう。

(注:本記事の転載やまとめを禁じます)

Posted in How To | Tagged 10.14savvy 10.15savvy 11.0savvy Streamdeck | 13 Comments

個人的に嫉妬をおぼえるほどナイスアイデアのソフトウェア

Posted on 11月 20, 2020 by Takaaki Naganoya

「やられた!」と、感じるソフトウェアに出会うことはたまにあります。なんで自分では思いつかなかったんだろう、くやしい、これは自分が作るべきだったソフトウェアだ。でも技術力と発想力で勝てていない。素直に賞賛するしかない。

そういう目で見てしまうソフトウェアが何本かあります。それが、ものすごいヒットを叩き出してセールスをあげた、というわけでもないんですが、それでも羨ましいという気持ちはあります。

# この項目、あとから追記するかもしれません。

UI Action

PFiddlesoftの旧称「Prefab UI Action」といったか……GUI版のFolder Actionみたいなソフトなんですが、所定のアプリケーションのメニューなどのGUI部品を監視・実行するAppleScriptを設定できるツールです。つまり、各アプリケーションのGUI操作を横取りして、AppleScriptを実行させるというものです。

同様のことができないかと考えていたので、「やられた!」と、叫んでしまいました。

ただ、これができたらできたで、セキュリティ的にとても問題になりそう(知らないうちにアプリケーションの挙動が変えられてしまう)なのと、どのマシンにも同じソフトウェアとScriptをインストールしておけるわけでもないので、運用性がいまひとつだと感じました。

これは過去最大の「一本とられた!」と感じる嫉妬のスマッシュヒットでした。完敗です。

Siri

2000年代前半にはAppleScriptで同様のプログラムを実現していたので、とても「やられた!」と感じましたが、けっこうみんな同じようなことを考えていろいろ作っていたので、出し抜かれても仕方ないといえば仕方ないですね。予想どおりサーバー側で音声認識を行うなど、しかるべき努力をまっとうに行ったシステムという印象です。

さらに、自分たちで試作したソフトウェアでは住所録データやスケジュールデータが充実していないと、ほとんど意味がないし使っていても面白くないことがわかっていました。それがまさか、SNSなどの発達により個人データがネットを通じて住所録にたまっていく環境が出来上がっていくなど、普及の前提条件がクリアされていたことには気づきませんでした。外部環境が変わりつつあることを敏感にキャッチできていなかったというべきでしょうか。

ただ、実際に使ってみると「日常的にこれといって便利な用途がない」とも感じます。とんがっていないマイルドな味付けなので、(自分には)ささらない感じです(激辛希望)。

Retrobatch

Flying Meat SoftwareのRetrobatch。画像処理専門に特化したAutomatorという感じです。

Automatorのダメダメさ加減に業を煮やして作ろうと思ったのか、自分ならもっとすごいものが作れるぜ! と、思ったのかAutomatorを反面教師としたアプリケーションはいくつも存在します。

Cocoa APIの仕様を眺めていると、だいたいこういう感じのものが作れることはわかります。でも、それを実際に形にするのはまったく別の話。個人的にものすごく羨ましく妬ましいソフトウェアです。

とくに、CoreMLのパワーを利用して「なんとなくこんな感じの処理」をバッチ中に組み込めるというのが、うらやましすぎるポイントですね。それ、自分もいろいろ研究している部分なので。この方面の処理は、実際に作ってみると思い通りに動かないし、実現できたからといって評価されるわけでもないという微妙な位置付けと難易度なので、ついついそんなに真剣に考えないものなんですが、きちんと動いて役立つレベルに仕上げて売っているのはすごいと思います。尊敬します。

手元にあるアプリケーションのうち、CoreMLのモデルをアプリケーション内に格納してあるのは、Pixelmator ProとこのRetrobatchだけでした。

Posted in How To | Leave a comment

Uni Detectorのアイコンを変更!

Posted on 11月 16, 2020 by Takaaki Naganoya

Uni Detectorのアイコンを変更します。ウニ(Sea Urchin)のアイコンには個人的に思い入れも深く、この現行のアイコンも随分前に奥方様と一緒に行った寿司屋でデジカメで撮影したものです(8年ぐらい昔?)。

つまり、「どうせPowerPCからIntelに移行したんだし、10年ぐらいたったら再びCPUの移行はあるだろう」と読んで、ものすごく時間をかけてアイコン候補の写真を撮影するような、凝ったことをしていたわけです。

ただ、いろいろダウンロード状況を分析するに、U.S.のユーザーが全然食いつかない(大統領選が終わっても変化なし)。不思議なぐらい食いつかない。無料のアプリケーションという「撒き餌」にまったく食いつかない。食い気が感じられない。

なぜだろう? と、首をひねっていたのですが、われわれには美味しい食材にしか見えない海鮮丼の写真が、海外のユーザーにはグロい写真で嫌がらせをしているようにしか見えないのでは? という仮説に至りました。

その仮説をもとにSNS上で意見を募ってみたところ、

  「Dock上に置きたくないデザイン」
  「ハイコンテクストすぎてApp Store向けアプリには不向き」
  「そういうのは趣味でやれ」

という散々な結果に。

タイミングをねらって、必要な道具をピンポイントでリリース。ユーザーへの知名度の向上と、各種ソフトウェアの宣伝を意図した戦略的なソフトウェアが、アイコンというきわめて重要度の低い構成要素のために本来の役割を果たしていないものと判断。ここに、苦渋の決断をもってアイコンを無難なものに変更することといたしました。


▲新旧アイコン。右側が新しいアイコン(Appleにリジェクトされなければ)

Posted in news PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Uni Detector v1.1をMac App Storeで配布開始

Posted on 11月 14, 2020 by Takaaki Naganoya

Universal Binary判定ツール「Uni Detector」のv1.1をMac App Storeで配布開始しました。対象OSは、macOS 10.13以降です。ただし、macOS 10.13だと(ツールバーボタンのクリックからは)グラフ表示が行えない(メニューからはできる)ので、10.14と言いたいところです。


▲初代「うにばーさる」。久しぶりに引っ張り出してきたら動作して驚き。そして、Finder経由でファイル情報を取得しているので現行環境だと目が回るほど遅い(64bit化されたCocoa Finderでファイル処理を行うと劇遅)

v1.1では、主にmacOS 11.0, Big SurおよびApple Siliconへの言及を追加しました。

新規追加機能は、

・アプリケーションのフィルタリング機能:書類形式(ファイル拡張子)、カスタムURLプロトコルでフィルタ表示できます。HEIFをサポートしているアプリケーションの一覧を表示する、という絞り込み(フィルタ)表示や、URLプロトコル「http://」をサポートしているアプリケーションの一覧を表示することが可能です。

・選択中のアプリケーション情報表示機能:書類タイプ、ローカライズ言語一覧、サポートURLスキーム一覧表示

・各アプリケーションの情報表示機能:ターゲットプラットフォーム名表示(Apple Silicon Mac上にiOSアプリケーションをインストールした場合の識別用に)

・Scriptableなアプリケーション判定機能を強化:「えせScriptable」なアプリケーションの一覧データを保持し、AppleのiBooks Authorなどの「えせScriptable」なアプリケーションをAppleScript対応アプリケーションから除外する機能です。データリストを固定で保持して、「えせScriptable」なアプリケーションの除外を行っています

Posted in PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Post navigation

  • Older posts
  • Newer posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • macOS 15でも変化したText to Speech環境
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • Keynoteで2階層のスライドのタイトルをまとめてテキスト化
  • Script Debuggerの開発と販売が2025年に終了

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (132) CotEditor (66) Finder (51) iTunes (19) Keynote (117) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (55) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC