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

投稿者: Takaaki Naganoya

指定画像をbase64エンコード文字列に変換→デコード

Posted on 7月 29, 2023 by Takaaki Naganoya

指定画像をbase64でエンコードしたのちに、デコードして画像に戻すAppleScriptです。

base64文字列からのデコードだけをテストしたかったのですが、テストのために本来は不要な画像のエンコード部分を付け足しています。

macOS 13.5上で動作確認していますが、OSのバージョンやAppleScriptのバージョンに依存はしないことでしょう。

AppleScript名:指定画像をbase64エンコード文字列に変換→デコード.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/07/29
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—
property NSData : a reference to current application’s NSData
property NSString : a reference to current application’s NSString
property NSImage : a reference to current application’s NSImage
property NSPNGFileType : a reference to current application’s NSPNGFileType
property NSBitmapImageRep : a reference to current application’s NSBitmapImageRep
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property NSDataBase64EncodingEndLineWithLineFeed : a reference to current application’s NSDataBase64EncodingEndLineWithLineFeed

use AppleScript version "2.8" — macOS 12 or later
use framework "Foundation"
use scripting additions

set aFile to choose file of type {"public.image"}
set aStr to base64StringFromImageFile(aFile) of me
–> "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAKuWlDQ1BJQ0MgU……"

set aImage to decodeImageFromBase64String(aStr) of me
–> (NSImage)

–Base64 Decode
on decodeImageFromBase64String(aString)
  set restoreData to NSData’s alloc()’s initWithBase64EncodedString:aString options:0
  
set restoreImage to NSImage’s alloc()’s initWithData:restoreData
  
return restoreImage
end decodeImageFromBase64String

–Base64 Encode
on base64StringFromImageFile(aFile)
  set aPOSIX to POSIX path of aFile
  
set anImage to NSImage’s alloc()’s initWithContentsOfFile:aPOSIX
  
set imageRep to NSBitmapImageRep’s alloc()’s initWithData:(anImage’s TIFFRepresentation())
  
set aPNGdat to imageRep’s representationUsingType:(NSPNGFileType) |properties|:(missing value)
  
set base64Str to aPNGdat’s base64EncodedDataWithOptions:(NSDataBase64EncodingEndLineWithLineFeed)
  
set bStr to (NSString’s alloc()’s initWithData:base64Str encoding:(NSUTF8StringEncoding))
  
return bStr as string –or return NSString (delete as string) for speedy processing
end base64StringFromImageFile

★Click Here to Open This Script 

Posted in Image Text | Tagged 12.0savvy 13.0savvy | Leave a comment

PowerPointで最前面の書類をPDF書き出し

Posted on 7月 29, 2023 by Takaaki Naganoya

よくある、Microsoft PowerPointで、オープン中の最前面の書類を指定のパスにPDFで書き出すAppleScriptです。M1 Mac mini+macOS 13.5上で動作するMicrosoft PowerPointバージョン16.75で確認しています。

スクリプトエディタ上で動かしてみましたが、デスクトップ上にファイルを書き込もうとしたときに、初回のみPowerPointがデスクトップフォルダにアクセスしてよいか、OSが確認ダイアログを表示してきました。こういう動作はScriptからのコントロール時には困ります。自動処理を行う前にクリアしておきたい(あらかじめダイアログ表示+認証を済ませておきたい)ところです。


▲PowerPointから書き出したPDF

Microsoft PowerPointのAppleScript用語辞書を確認してみたところ、「export」コマンドが存在しません。情報をいろいろ調べてみたところ「save as PDF」で指定パスにPDFを保存するようです。

さらに、こうした場合にsaveコマンドで指定するファイルパスは、fileオブジェクトで指し示しますが、PowerPointでは少々事情が異なるようでした。fileを指定すると、書き出されません。HFS形式のパスをテキストで指定する必要がありました。どうもこのあたり、ところどころバグめいた実装が散見されます。

Excelへの画像貼り込みScriptのように、POSIX pathでPDF書き出し先を指定してみましたが、こちらはPOSIX pathで指定しても書き出せませんでした。

AppleScript名:最前面の書類をPDF書き出し.scpt
set theOutputPath to ((path to desktop folder) as string) & (do shell script "uuidgen") & ".pdf"

tell application "Microsoft PowerPoint"
  tell active presentation
    save in theOutputPath as save as PDF
    
–保存先のファイルパスを文字列で指定する必要がある
    
–fileオブジェクトで指定すると書き出されない(バグのような挙動)
  end tell
end tell

★Click Here to Open This Script 

Posted in file File path PDF | Tagged 13.0savvy PowerPoint | Leave a comment

出るか?「AppleScript最新リファレンス」のバージョン2.8対応版

Posted on 6月 15, 2023 by Takaaki Naganoya

Piyomaru Softwareの電子書籍も、いまでは80冊ほど出していますが、最初のきっかけは「AppleScript最新リファレンス」という名前の薄い本(500ページぐらい)でした。


▲計画段階の「AppleScript最新リファレンス」。ここから、実際に書けない記事をふるい落とすという「妥協」が…….

その後、何回かアップデート計画が浮上しては、あまりの分量の多さの前に挫折。ゼロから書くよりも、アップデートする作業の方が実は大変です。

「AppleScript最新リファレンス」はいわば何でもありの「大辞典」に相当するものです。「これでは更新し切れないねー」とあきらめて、小さなテーマごとに最新情報を集めて各種電子書籍を書くという「小辞典」「中辞典」方式を展開。

項目数の少ない「小辞典」「中辞典」で情報のリストアップと更新を行い、その結果を「大辞典」に反映させるというやりかたです。

ここに来て、ようやく更新できるんじゃないか?(仮説)という雰囲気になってきたため、更新をすすめています。まえがきとあとがきを書き、その他のコンセプトに関わるページを書いてみて「いけそうかも」という手応えを得ています(挫折する可能性はあるかも)。

「AppleScript最新リファレンス」はMacDownとPages(扉ページや凝ったレイアウトが必要なページだけ)を用いて作成したのですが、記述環境としてのMacDownがあまりにも使えないので、MarkdownのページはPagesで作り直しています。

最新版のmacOSが動くマシンが手元にM1 Mac miniの1台しかないので、これにBeta版のmacOS 14などを入れてしまった日にはスクリーンショットが撮れません。正確に言えば、スクリーンショットを撮っても使えません(禁止事項)。

なので、外付けSSDへのベータ版のmacOSのインストールは必須なのですが、macOS 13の際に「リリース後には、外付けSSDからの複数バージョンのOSのインストールや起動を禁止する」というジャイアン風味たっぷりなAppleの対応。さらに、β版のmacOSよりもRelease版のmacOSの方がバグだらけで(OS X 10.13、10.15にひきつづき3回目)、macOS 14についてもβプログラムの存在意義について疑問視しています。

とにかく、macOS 14についてはβ版をガン無視して「AppleScript最新リファレンス」のアップデートを行うべき、という判断です。

Claris FileMaker Pro 2023と、Microsoft Officeの最新版については、AppleScript記述方法に関する記事は掲載したいところです(Developer Program入ってるし、Office 365の契約しているし)。Adobe Creative Cloudについては契約していないので、このあたりの話は書けません。

AppleScriptコマンドリファレンスについては、各種書籍用にアップデートしながらメンテナンスしているので、これは最新版を掲載できることでしょう。エラーコード表も然りです。

全体的に、Script Sampleを掲載しまくるような本ではなく、それぞれの項目について「最新環境ではどうなっているのか」という情報を提供する書籍になることでしょう。

そして、挫折しなければv2.8対応版を出せることでしょう。

→ AppleScript最新リファレンス v2.8対応(日本語版)
→ AppleScript The Latest Reference for v2.8 (1) (English Version)

Posted in Books news | Tagged 13.0savvy | 1 Comment

Pixelmator Proで2つの書類のレイヤー表示状態をシンクロ

Posted on 6月 6, 2023 by Takaaki Naganoya

Pixelmator Pro上でオープン中の2つの書類のレイヤー表示状態をシンクロさせるAppleScriptです。

ちょうど、「ゆっくりAppleScript解説」の続刊を作成中で、レイヤー別に部品が分かれている書類(すべてのレイヤー名は同じ)の表情を「同じ状態」にするのが面倒です。

正直なところ、表情名を入力すると該当するレイヤーを表示状態にしてほしいぐらいです。

そこまで行かないにせよ、1つの書類に対して行ったレイヤー表示操作を、もう一度別の書類に対して行わなくてはならないのは大変です(2つの書類を統合して、キャラクター別の差異をレイヤーで吸収するという手もありますが、、、)。

そこで、2つの書類をオープンしておき、最前面の書類のレイヤー表示状態(=表情の操作)を他方の書類に反映させるAppleScriptを書いてみました。

Pixelmator Proバージョン3.3.6に対してレイヤーの取得を指令してみましたが、なかなか大変です。再帰処理で一番上から末端まで、表示状態になっているレイヤーだけを抽出できるかと考えていたのですが、そうもいきません。

再帰処理がダメなので、もうレイヤー名を決め打ちで指定するようにして(つまり、この用途以外には使えないものと割り切って)、各レイヤーグループ内を走査するように記述しました。

AppleScript名:同一名、同一構造の2つの書類のレイヤー表示状況をシンクロ.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/06/06
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

tell application "Pixelmator Pro"
  set allD to {}
  
  
set dList to name of every document
  
–> {"ゆっくり素材れいむ.pxd", "ゆっくり素材まりさ.pxd"}
  
  
tell front document
    set d1Name to name of it
    
if d1Name contains "れいむ" then
      set d2Name to retAnItemByCond(dList, "れいむ") of me
    else
      set d2Name to retAnItemByCond(dList, "まりさ") of me
    end if
    
    
tell layer "root"
      tell layer "顔"
        set dList to every layer
        
repeat with i in dList
          set j to contents of i
          
tell j
            set ddList to (name of every layer whose visible is true)
            
if ddList is not equal to {} then
              set aCon to contents of first item of ddList
              
set the end of allD to {"root", "顔", name of j, aCon}
            end if
          end tell
        end repeat
      end tell
    end tell
  end tell
  
  
tell document d2Name
    repeat with i in allD
      copy i to {L1, L2, L3, L4}
      
tell layer L3 of layer L2 of layer L1
        set tmpL to name of every layer
        
repeat with ii in tmpL
          set jj to contents of ii
          
tell layer jj
            if jj = L4 then
              set visible to true
            else
              set visible to false
            end if
          end tell
        end repeat
      end tell
    end repeat
  end tell
end tell

on retAnItemByCond(aList, aParam)
  repeat with i in aList
    set j to contents of i
    
    
if j does not contain aParam then
      return j
    end if
  end repeat
end retAnItemByCond

★Click Here to Open This Script 

Posted in Image | Tagged 11.0savvy 12.0savvy 13.0savvy Pixelmator Pro | Leave a comment

macOS 14, Sonoma

Posted on 6月 6, 2023 by Takaaki Naganoya

WWDC23でmacOS 14, Sonomaが発表されたとのことで、WWDCのビデオを見たかぎりではさほどmacOS 13から変わっていないように見えます。

とにかく、Beta段階では安定して動いていたものが、Release時に崩壊してしばらくまともに動かず、1年のうちでまともに安定して使える時期が短いとかいう冗談は勘弁してほしいところです。

日本語入力IMがメモリをバカ喰いして固まるとか、メールをScriptから操作すると表示用プロセスが2つずつ生成されて解放されなくてメモリが埋まってほぼ動かなくなるとか、Finder上の基礎的な操作が効かないとか、macOS 13は悪い冗談のオンパレード。

BetaよりもReleaseのほうが低品質というのでは、Beta Programの位置付けがよくわかりません。

Posted in news | Tagged 14.0savvy | Leave a comment

Claris FileMaker 2023がリリースされる

Posted on 5月 23, 2023 by Takaaki Naganoya

日本国内においても、Claris FileMaker 2023および前バージョンのClaris FileMaker v19.xからのアップデータがリリースされました。「2023」と銘打っているからには、翌年には「2024」が出てくることが期待されるわけで……販売戦略的なものがいろいろ変更されることがうかがわれます。

商標その他で記述すべき名称は変わっていますが、macOS上でのプロセス名としては「FileMaker Pro」であることに変更はありません。Clarisの(技術サポート系の)Web上の表記は「FileMaker Pro 20.1」となっているようです。

なお、macOS上でのバンドルIDは「com.filemaker.client.pro12」のままで変更されていません。

アプリケーションのアイコンは変更されています。

まだ確認中ではありますが、AppleScript用語辞書も前バージョンから変更なく、書籍のアップデートもとくに行わなくてもよさそうな雰囲気であります(アイコンと画面スナップショットの都合で差し替えるか別の本にする必要があるかもしれません)。

「Claris FileMaker 2023」が製品シリーズを包括する名称で、macOS上で動作するクライアントソフトウェアについては「Claris FileMaker Pro 2023」であると認識しています。

Claris FileMaker Pro 2023がサポートするOSは、macOS 12と13。Windows 10(22H2、64bitのみ)、Windows 11(22H2、64bitのみ)。

FileMaker GoはiOS 16/iPadOS 16が動作するデバイスが稼働対象です。

Posted in news | Tagged 12.0savvy 13.0savvy FileMaker Pro | Leave a comment

指定のアプリケーションの実行アーキテクチャを変更

Posted on 5月 3, 2023 by Takaaki Naganoya

指定のアプリケーションの実行アーキテクチャを変更するAppleScriptです。

–> Download setArchLib.scptd

Apple Silicon Mac上でアプリケーションをRosetta 2によってIntel 64バイナリのARMエミュレーション動作を行うかどうかは、Finder上の「Rosettaを利用して開く」のチェックボックスによって制御されています。

これを、外側(FinderのGUI)から操作するか、内側(何らかのOS内のサービスやメタデータ)から操作するかによって、その「やりかた」は大きく異なります。

自分は、できることなら極力GUI Scriptingを使いたくない派なので、「そういえばASからこのあたりの設定をいじくった記憶がない」と思いつつ、「内側から操作する方法はないものか」と考えていました。

さっそくGithub上でいろいろ調査してみたところ、LaunchServiceのプライベートAPIに「_LSSetArchitecturePreferenceForApplicationURL」というものがあって、これを呼ぶことで処理を実現できそうだということが判明。

処理内容は、アゴが外れそうなほど簡単なので、AppleScript(AppleScriptObjC)でも普通に書けそうな勢いでしたが、アンダースコアで始まるAPIはAppleScriptにBridgeしにくく、もともとのプロジェクトのもの(UNIXのコマンドラインから呼び出す「SetArchPrefForURL」プロジェクト)をビルドしたバイナリをScriptバンドル内に入れて、呼び出すようにしてみました。

Cocoa Frameworkのプロジェクトを作成して、AppleScriptから普通にPOSIX pathとCPUアーキテクチャを渡せば結果をbooleanで返してくるようなスタイルに書き換えようとして、途中で頓挫してしまいました。そんなに気合いを入れる内容でもないので、こんなものでいいんでしょう。

AppleScript名:setArchLib.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/05/03
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

set appPath to choose file of type {"com.apple.application-bundle"}
–set archStr to "x86_64"
set archStr to "arm64"

set archRes to setArchForApp(appPath, archStr as string) of me

on setArchForApp(appPath, archStr as string)
  if archStr is not in {"x86_64", "arm64"} then error "Invalid architecture"
  
  
set exePath to POSIX path of (path to resource "SetArchPrefForURL")
  
set sRes to do shell script (quoted form of exePath) & " " & (quoted form of POSIX path of appPath) & " " & archStr
  
return (sRes = "") as boolean
end setArchForApp

★Click Here to Open This Script 

Posted in file System | Tagged 11.0savvy 12.0savvy 13.0savvy | Leave a comment

画像をExcelのワークシート上に配置

Posted on 4月 4, 2023 by Takaaki Naganoya

Microsoft 365のExcel v16.71、Windows版とmacOS版のソースコードが共通化されたというふれ込みではあるものの、実はけっこうフォーム部分が違うし、VBのマクロエディタで日本語が記入できないとか、互換性のない関数(Mac上で動作しないENCODEURL、Switch,IFS、FILTERXML、WEBSERVICEなどの関数)の存在など、いろいろ勘弁してほしい出来です。

しばらくはNumbersだけで用が済んでいたのですが、ここのところWindows版のExcelの講座なども行っていたので、併せてmacOS版のExcelについても追加調査。細かい点のチェックを行っていました。

そんなExcelでアドインのオンラインストアからQRコード作成用アドインを探してみたところ、フリーなものは存在していないようです。

Cocoaの機能を利用すれば、割とすぐにできてしまう程度のQRコード。わざわざアドインの力を利用する必要などなかったのです。AppleScriptでQRコードを生成して、Excelのワークシートに差し込めばよいだけです。

ところが、ひさしぶりにExcelのScriptを引っ張り出してきて、昔書いた「Excelに指定の画像を配置する」Scriptを実行してみたところ、エラーで動きません。

ワークシート上にshapeを作成できるのに、そのshapeに指定パスの画像を割り当てる処理でエラーになります。

そんな時、「出来の悪いプログラマは、POSIX pathで誤魔化して実装する」という経験則が思い出されました。

目を閉じると、AppleのKeynoteで一時期行われていた、画像配置コマンドにPOSIX pathを要求していたアレな実装であるとか(あれはひどかった)、いまだにアレであり続けているAdobe Acrobat DistillerのdistillコマンドがPOSIX pathを要求する件であるとか(file pathって書いてあるのに、aliasじゃなくてPOSIX pathを要求するという地雷仕様)、枚挙にいとまがありません。

そんなわけで、普通に書いても通らなかったのでパスをPOSIX pathで与えてみたところ、見事(?)配置されました。

AppleScript名:画像をワークシート上に配置.scpt
set anImagePath to choose file
set anImagePOSIX to POSIX path of anImagePath

tell application "Microsoft Excel"
  set cwb to workbook 1
  
tell cwb
    tell worksheet 1
      set aPicShape to make new shape at the beginning
      
set width of aPicShape to 312
      
set height of aPicShape to 312
      
user picture of aPicShape picture file anImagePOSIX
    end tell
  end tell
end tell

★Click Here to Open This Script 

Posted in Bug file File path | Tagged 11.0savvy 12.0savvy 13.0savvy Excel | Leave a comment

Keynote,Pages,Numbers v13.0がリリースされる

Posted on 4月 2, 2023 by Takaaki Naganoya

Keynote, Pages, Numbersのバージョン13.0がリリースされました。AppleScript用語辞書的な変更点はありません。

Keynote v11からずっと、新規書類を保存するとエラーになる。Full Disk Accessの権限をKeynoteに与えていてもエラーになる、という重大な問題が解消されないままである、という認識でおりました。状況はKeynote v13.0でも変わりません。

これは、Apple側が問題として認識していないのではないか? という仮説を立て、いろいろ試してみました。

まずは、v12から継続している状況についての説明。Keynoteで新規書類を保存する際に「as Keynote」という、明らかに「指定してくださいね」というオプションがAppleScript用語辞書の中にあるので、指定したくなるところですが

AppleScript名:Keynoteで書類を新規保存(A).scpt
set newFile to ((path to desktop) as string) & "newDoc1111.key"

tell application "Keynote"
  set newDoc to make new document
  
save document 1 in file newFile as Keynote
end tell

★Click Here to Open This Script 

これを指定するとエラーになります。これが、Keynote v12.0から続いており、1年以上継続している状況です。以前のバージョンで通っていた記述がエラーを出すようになった、というものです。

ふとここで、「as Keynote」というオプション指定をはずしてみると…….

AppleScript名:Keynoteで書類を新規保存(A).scpt
set newFile to ((path to desktop) as string) & "newDoc1111.key"

tell application "Keynote"
  set newDoc to make new document
  
save document 1 in file newFile
end tell

★Click Here to Open This Script 

エラーが出なくなりました!!!(^ー^;;;; ファイル保存もできました。

なんなんでしょう、これは、、、、

Posted in Bug news | Tagged 12.0savvy 13.0savvy Keynote Numbers Pages | 1 Comment

Xcode 14.2でAppleScript App Templateを復活させる

Posted on 3月 21, 2023 by Takaaki Naganoya

AppleScript+Xcodeでアプリケーション開発を行う方法についてわかりやすくまとめた電子書籍「AppleScript+XcodeでつくるMacアプリ Xcode 14対応」を刊行しました(PDF 448ページ+付録、サンプルXcode Project Zipアーカイブ)。

この書籍の中では、テンプレートがXcode 14.2に存在していないので、書籍添付のプロジェクトをコピーして使ってください、という説明を行っています。

と、そんな本をまとめたところ、edama2さんから「なんか、前バージョンのXcodeからテンプレートをコピーして来れるみたいだよ」という話が!

早速、調べてみました。edama2さんから教えていただいた記事のとおりにはいかなかったので、Xcodeのバージョンによっては細部が変わっているようです。

自分は、Apple Developer Connectionに契約しているので、古いバージョンのXcodeもダウンロードできます。古いといっても古すぎるのはどうかと思いますので、ここではXcode 13.2をダウンロードしてきました。アーカイブ展開してさっそく、Xcode 13.2のバンドルパッケージ内にアクセスします。

Xcode 13.2.appをFinder上で選択して、マウスの右ボタンクリックでコンテクストメニューを表示させ、「パッケージの内容を表示」を実行。

/Contents/Developper/Library/Xcode/Templates/Project Templates/macOS/Other

の中に「AppleScript App.xctemplate」が存在していました。

この「AppleScript App.xctemplate」をXcode 14.2(記事執筆時最新)が認識するテンプレートのフォルダにコピーすれば使えるでしょう。

~/Library/Developer/Xcode/Templates

の中にコピーすると、Xcodeが14.2が認識してくれました。

Xcode 14.2を起動し、File>New Project

「AppleScript App」を選択すると、問題なく新規プロジェクトが作成できます。

テンプレートをZip圧縮して、ダウンロードできるようにしておきます。

Download Templates.zip

Posted in How To news | Tagged 13.0savvy Xcode | Leave a comment

geoCodingLibで逆住所ジオコーディング

Posted on 3月 16, 2023 by Takaaki Naganoya

逆住所ジオコーディング(住所→緯度経度)/逆住所ジオコーディング(緯度経度→住所)のための、よくありがちなObjective-CのコードをCocoa Framework化した「geoCodingLib」を呼び出して、逆住所ジオコーディングを行うAppleScriptです。

Cocoa Frameworkを呼び出すため、実行にはScript Debuggerあるいは同ソフトから書き出した拡張アプレット環境が必要です。Apple純正のスクリプトエディタでは実行できません。

–> geoCodingLib.framework(Universal Binary)

AppleScript名:geoCodingLibで逆住所ジオコーディング.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/03/16
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

set aLat to 35.7356786
set aLong to 139.6516811
set aLoc to current application’s CLLocation’s alloc()’s initWithLatitude:(aLat) longitude:(aLong)
set aRes to my getAddressOf:aLoc
–> 東京都練馬区豊玉北6丁目12-1

–緯度経度→住所
on getAddressOf:aLocation
  set aGeo to current application’s geocodingLib’s alloc()’s init()
  
aGeo’s getAddress:aLocation
  
  
delay 1.0E-4
  
  
repeat 1000 times
    delay 1.0E-4
    
set aRes to aGeo’s placeAddress()
    
if aRes is not equal to missing value then exit repeat
  end repeat
  
  
if aRes is equal to missing value then return false
  
return aRes as string
end getAddressOf:

★Click Here to Open This Script 

Posted in geolocation | Tagged 13.0savvy CoreLocation | 1 Comment

geoCodingLibで住所ジオコーディング

Posted on 3月 16, 2023 by Takaaki Naganoya

住所ジオコーディング(住所→緯度経度)/逆住所ジオコーディング(緯度経度→住所)のための、よくありがちなObjective-CのコードをCocoa Framework化した「geoCodingLib」を呼び出して、住所ジオコーディングを行うAppleScriptです。

Cocoa Frameworkを呼び出すため、実行にはScript Debuggerあるいは同ソフトから書き出した拡張アプレット環境が必要です。Apple純正のスクリプトエディタでは実行できません。

–> geoCodingLib.framework(Universal Binary)

AppleScript名:geoCodingLibで住所ジオコーディング.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/03/16
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

set aRes to my getGeoInfo:"東京都練馬区豊玉北6丁目12-1"
if aRes = false then return
return aRes –> {35.7356786, 139.6516811}

–住所→緯度経度
on getGeoInfo:addressText
  set aGeo to current application’s geocodingLib’s alloc()’s init()
  
aGeo’s getLatLong:addressText
  
  
delay 1.0E-3
  
  
repeat 1000 times
    delay 1.0E-3
    
set aRes to aGeo’s placemarksArray()
    
if aRes is not equal to missing value then exit repeat
  end repeat
  
  
if aRes is equal to missing value then return false
  
  
set aaRes to first item of aRes
  
set theDescription to aaRes’s |description|()
  
set theName to aaRes’s |name|() –> "河辺町x丁目XX-X"
  
set theCountry to aaRes’s country() –> "日本"
  
set thePostal to aaRes’s postalCode() –> "198-00XX"
  
set theAdminarea to aaRes’s administrativeArea() –> "東京都"
  
set theSubAdmin to aaRes’s subAdministrativeArea() –> (null)
  
set theLocality to aaRes’s locality() –> "青梅市"
  
set theSubLocality to aaRes’s subLocality() –> "河辺町"
  
set theThoroughfare to aaRes’s thoroughfare() –>"河辺町x丁目"
  
set theSubThoroughfare to aaRes’s subThoroughfare() –>"XX-X"
  
set theTZ to aaRes’s timeZone() –> "Asia/Tokyo (JST) offset 32400"
  
set theRegion to aaRes’s region() –> CLCircularRegion (identifier:’<+35.xxxxx,+139.xxxxx> radius 70.64’, center:<+35.xxxxx,+139.xxxxx0>, radius:70.64m)
  
set theRegCenter to theRegion’s |center|()
  
set aLat to theRegCenter’s latitude
  
set aLng to theRegCenter’s longitude
  
  
return {aLat, aLng}
end getGeoInfo:

★Click Here to Open This Script 

Posted in geolocation | Tagged 13.0savvy CoreLocation | 1 Comment

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

Posted on 3月 7, 2023 by Takaaki Naganoya

アラートダイアログ上にWkWebViewを作成して、さまざまなグラフや3Dアニメーションを表示してきた「箱庭ダイアログ」の1つの到達点、「periodictable」(元素周期表)選択UIの表示デモAppleScriptです。

このデモ、macOS 10.14あたりまでは動いていたのですが、その後のmacOSのアップデートにより、表示されなくなっておりました。

いろいろ調べたところ、macOSの開発者もiOSの開発者も揃いも揃って「表示できない」と言っているのを見て、逆に何か解決策がありそうな気がしてきました。

ローカルに保存しておいた1枚ものの表示用HTML(2020/05に作成したもの)は、当時のSafariで表示できており、WkWebViewでも表示できていました。

現在、この1枚もののHTMLはSafariでもWkWebViewでも表示できないようになっています。
その一方で、three.jsのWebサイトに掲載されているperiodictableのサンプルは現行のSafariで表示でき、操作も行えます。

当初は、これを「SafariとWkWebViewの差」だと思って、WkWebViewをカスタマイズしまくらないとSafariと同等の表示が行えないのではないか? と考えていました。ただ、探しても探しても答えが見つからず、この方向で情報収集を行っても「無駄」に思えてきました。

そこでにわかに浮上してきたのが、「periodictable」や「three.js」自体がアップデートされている説、です。

WebKit(WkWebView)側のアップデート、およびCDN上のJavaScriptのライブラリのアップデートの相互作用によって表示できなくなったのではないかと、調査の方向を変えてみました。

当時のサンプルHTMLと現在のサンプルHTMLのdiffをとって、読み込むCDN上のライブラリを変更したり、追加することで現行OS上のWkWebView上でも動作するようになりました。

つまり、文字列として与えているHTMLの部分のみ変更しただけで、AppleScript部分とかWkWebViewまわりは一切手をつけていません。わかってしまえば、「なーんだ」という内容ですが、これにはなかなか対応できませんでした。

あとは、クリックした項目のURLイベントをAppleScript側で受信できればなおよいのですが、、、アプリケーションとして独立したものに変更して、AppleScript用語辞書を介して「display periodictable」みたいなコマンドでAppleScript側と値をやりとりするのがよいのかもしれません。

AppleScript名:アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)v3.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/06/13
–  Modified on: 2023/03/07
—
–  Copyright © 2020-2023 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.7"
use framework "Foundation"
use framework "AppKit"
use framework "WebKit"
use scripting additions

property |NSURL| : a reference to current application’s |NSURL|
property NSAlert : a reference to current application’s NSAlert
property NSString : a reference to current application’s NSString
property NSButton : a reference to current application’s NSButton
property WKWebView : a reference to current application’s WKWebView
property WKUserScript : a reference to current application’s WKUserScript
property NSURLRequest : a reference to current application’s NSURLRequest
property NSRunningApplication : a reference to current application’s NSRunningApplication
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property WKUserContentController : a reference to current application’s WKUserContentController
property WKWebViewConfiguration : a reference to current application’s WKWebViewConfiguration
property WKUserScriptInjectionTimeAtDocumentEnd : a reference to current application’s WKUserScriptInjectionTimeAtDocumentEnd

property returnCode : 0

–https://www.cresco.co.jp/blog/entry/7427/
— By sgi-chang @ UX Design Center
set myStr to "<!DOCTYPE html>
<html>

<head>
<title>three.js css3d – cresco xmas inspired by periodic table</title>
<meta charset=\"utf-8\">
<meta name=\"viewport\" content=\"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0\">
<link type=\"text/css\" rel=\"stylesheet\" href=\"https://threejs.org/examples/main.css\">
<style>
a {
color: #8ff;
}

#menu {
position: absolute;
bottom: 20px;
width: 100%;
text-align: center;
}

.element {
width: 120px;
height: 160px;
box-shadow: 0px 0px 12px rgba(0, 255, 255, 0.5);
border: 1px solid rgba(127, 255, 255, 0.25);
font-family: Helvetica, sans-serif;
text-align: center;
line-height: normal;
cursor: default;
}

.element:hover {
box-shadow: 0px 0px 12px rgba(0, 255, 255, 0.75);
border: 1px solid rgba(127, 255, 255, 0.75);
}

.element .number {
position: absolute;
top: 20px;
right: 20px;
font-size: 12px;
color: rgba(127, 255, 255, 0.75);
}

.element .symbol {
position: absolute;
top: 40px;
left: 0px;
right: 0px;
font-size: 60px;
font-weight: bold;
color: rgba(255, 255, 255, 0.75);
text-shadow: 0 0 10px rgba(0, 255, 255, 0.95);
}

.element .details {
position: absolute;
bottom: 15px;
left: 0px;
right: 0px;
font-size: 12px;
color: rgba(127, 255, 255, 0.75);
}

button {
color: rgba(127, 255, 255, 0.75);
background: transparent;
outline: 1px solid rgba(127, 255, 255, 0.75);
border: 0px;
padding: 5px 10px;
cursor: pointer;
}

button:hover {
background-color: rgba(0, 255, 255, 0.5);
}

button:active {
color: #000000;
background-color: rgba(0, 255, 255, 0.75);
}
</style>
</head>

<body>
<script src=\"https://threejs.org/examples/jsm/libs/tween.module.min.js\"></script>
<script src=\"https://threejs.org/examples/jsm/controls/TrackballControls.js\"></script>
<script src=\"https://threejs.org/examples/jsm/renderers/CSS3DRenderer.js\"></script>

<div id=\"info\"><a href=\"http://piyocast.com/as\" target=\"_blank\">AppleScript 3D UI Demonstration</a> By Piyomaru Software</div>
<div id=\"container\"></div>
<div id=\"menu\">
<button id=\"table\">TABLE</button>
<button id=\"sphere\">SPHERE</button>
<button id=\"helix\">HELIX</button>
<button id=\"grid\">GRID</button>
</div>

    <!– Import maps polyfill –>
    <!– Remove this when import maps will be widely supported –>
    <script async src=\"https://unpkg.com/es-module-shims@1.5.8/dist/es-module-shims.js\"></script>

    <script type=\"importmap\">
      {
        \"imports\": {
          \"three\": \"https://unpkg.com/three@0.142.0/build/three.module.js\",
          \"OrbitControls\": \"https://unpkg.com/three@0.142.0/examples/jsm/controls/OrbitControls.js\"
        }
      }
    </script>
    
<script type=\"module\">
import * as THREE from ’https://threejs.org/build/three.module.js’;
import { TWEEN } from ’https://threejs.org/examples/jsm/libs/tween.module.min.js’;
import { TrackballControls } from ’https://threejs.org/examples/jsm/controls/TrackballControls.js’;
import { CSS3DRenderer, CSS3DObject } from ’https://threejs.org/examples/jsm/renderers/CSS3DRenderer.js’;
    
var table = [
\"1\", \"Hydrogen\", \"1.00794\", 1, 1,
\"2\", \"Helium\", \"4.002602\", 1, 2,
\"3\", \"Lithium\", \"6.941\", 1, 3,
\"4\", \"Beryllium\", \"9.012182\", 1, 4,
\"5\", \"Boron\", \"10.811\", 1, 5,
\"6\", \"Carbon\", \"12.0107\", 2, 1,
\"7\", \"Nitrogen\", \"14.0067\", 2, 3,
\"8\", \"Oxygen\", \"15.9994\", 3, 1,
\"9\", \"Fluorine\", \"18.9984032\", 3, 3,
\"101\", \"Saturday\", \"July\", 4, 2,
\"I\", \"Moscovium\", \"(290)\", 6, 1,
\"I\", \"Livermorium\", \"(293)\", 6, 2,
\"I\", \"Tennessine\", \"(294)\", 6, 3,
\"I\", \"Titanium\", \"47.867\", 6, 4,
\"I\", \"Vanadium\", \"50.9415\", 6, 5,
\"Y\", \"Chromium\", \"51.9961\", 8, 1,
\"Y\", \"Manganese\", \"54.938045\", 9, 2,
\"Y\", \"Iron\", \"55.845\", 10, 3,
\"Y\", \"Cobalt\", \"58.933195\", 10, 4,
\"Y\", \"Nickel\", \"58.6934\", 10, 5,
\"Y\", \"Copper\", \"63.546\", 11, 2,
\"Y\", \"Zinc\", \"65.38\", 12, 1,
\"O\", \"Gallium\", \"69.723\", 14, 1,
\"O\", \"Copernicium\", \"(285)\", 14, 2,
\"O\", \"Nihonium\", \"(286)\", 14, 3,
\"O\", \"Oganesson\", \"(294)\", 14, 4,
\"O\", \"Neon\", \"20.1797\", 14, 5,
\"O\", \"Sodium\", \"22.98976…\", 15, 1,
\"O\", \"Magnesium\", \"24.305\", 15, 5,
\"O\", \"Aluminium\", \"26.9815386\", 16, 1,
\"O\", \"Silicon\", \"28.0855\", 16, 5,
\"O\", \"Phosphorus\", \"30.973762\", 17, 1,
\"O\", \"Sulfur\", \"32.065\", 17, 2,
\"O\", \"Chlorine\", \"35.453\", 17, 3,
\"O\", \"Argon\", \"39.948\", 17, 4,
\"O\", \"Potassium\", \"39.948\", 17, 5,
\"M\", \"Calcium\", \"40.078\", 1, 7,
\"M\", \"Scandium\", \"44.955912\", 1, 8,
\"M\", \"Roentgenium\", \"(280)\", 1, 9,
\"M\", \"Germanium\", \"72.63\", 1, 10,
\"M\", \"Lead\", \"207.2\", 1, 11,      
\"M\", \"Arsenic\", \"74.9216\", 2, 8,
\"M\", \"Selenium\", \"78.96\", 3, 9,
\"M\", \"Bromine\", \"79.904\", 3, 10,
\"M\", \"Krypton\", \"83.798\", 4, 8,
\"M\", \"Rubidium\", \"85.4678\", 5, 7,
\"M\", \"Strontium\", \"87.62\", 5, 8,
\"M\", \"Yttrium\", \"88.90585\", 5, 9,
\"M\", \"Zirconium\", \"91.224\", 5, 10,
\"M\", \"Niobium\", \"92.90628\", 5, 11,
\"A\", \"Molybdenum\", \"95.96\", 7,8,
\"A\", \"Technetium\", \"(98)\", 7, 9,
\"A\", \"Ruthenium\", \"101.07\", 7, 10,
\"A\", \"Rhodium\", \"102.9055\",7, 11,
\"A\", \"Palladium\", \"106.42\", 8, 7,
\"A\", \"Silver\", \"107.8682\", 8,9,
\"A\", \"Cadmium\", \"112.411\", 9, 7,
\"A\", \"Indium\", \"114.818\", 9, 9,
\"A\", \"Tin\", \"118.71\", 10, 8,
\"A\", \"Antimony\", \"121.76\", 10, 9,
\"A\", \"Gadolinium\", \"157.25\", 10, 10,
\"A\", \"Terbium\", \"158.92535\", 10, 11,
\"R\", \"Dysprosium\", \"162.5\", 12, 7,
\"R\", \"Holmium\", \"164.93032\", 12, 8,
\"R\", \"Erbium\", \"167.259\", 12, 9,
\"R\", \"Thulium\", \"168.93421\", 12, 10,
\"R\", \"Ytterbium\", \"173.054\", 12, 11,
\"R\", \"Lutetium\", \"174.9668\", 13, 7,
\"R\", \"Hafnium\", \"178.49\", 13, 9,
\"R\", \"Samarium\", \"150.36\", 14, 7,
\"R\", \"Europium\", \"151.964\", 14, 9,
\"R\", \"Tantalum\", \"180.94788\", 15, 8,
\"R\", \"Tungsten\", \"183.84\", 15, 10,
\"R\", \"Rhenium\", \"186.207\", 15, 11,
\"U\", \"Osmium\", \"190.23\", 17, 7,
\"U\", \"Iridium\", \"192.217\", 17,8,
\"U\", \"Platinum\", \"195.084\", 17, 9,
\"U\", \"Gold\", \"196.966569\", 17, 10,
\"U\", \"Mercury\", \"200.59\", 18, 11,
\"U\", \"Thallium\", \"204.3833\", 19, 11,
\"U\", \"Bismuth\", \"208.9804\", 20, 7,
\"U\", \"Polonium\", \"(209)\", 20, 8,
\"U\", \"Astatine\", \"(210)\", 20, 9,
\"U\", \"Francium\", \"(223)\", 20, 10,
\"U\", \"Radium\", \"(226)\", 22, 9,
\"U\", \"Actinium\", \"(227)\", 22, 10,
\"U\", \"Thorium\", \"232.03806\", 22, 11,
\"A\", \"Protactinium\", \"231.0588\", 22, 7,
\"A\", \"Uranium\", \"238.02891\", 23, 9,
\"A\", \"Neptunium\", \"(237)\", 23, 8,
\"A\", \"Plutonium\", \"(244)\", 23, 9,
\"A\", \"Americium\", \"(243)\", 23, 10,
\"A\", \"Curium\", \"(247)\", 23, 11,
\"S\", \"Berkelium\", \"(247)\", 24, 7,
\"S\", \"Californium\", \"(251)\", 24, 8,
\"S\", \"Einstenium\", \"(252)\", 24, 9,
\"S\", \"Fermium\", \"(257)\", 24, 11,
\"S\", \"Mendelevium\", \"(258)\", 25, 7,
\"S\", \"Nobelium\", \"(259)\", 25, 9,
\"S\", \"Lawrencium\", \"(262)\", 25, 11,
\"S\", \"Rutherfordium\", \"(267)\", 26, 7,
\"S\", \"Dubnium\", \"(268)\", 26, 9,
\"S\", \"Seaborgium\", \"(271)\", 26, 10,
\"S\", \"Bohrium\", \"(272)\", 26, 11,
\"A\", \"Hassium\", \"(270)\", 27, 8,
\"B\", \"Meitnerium\", \"(276)\", 27, 9,
\"C\", \"Darmstadium\", \"(281)\", 27, 8,
\"D\", \"Tellurium\", \"127.6\", 27, 9,
\"E\", \"Iodine\", \"126.90447\", 27, 10,
\"F\", \"Xenon\", \"131.293\", 28, 9,
\"G\", \"Caesium\", \"132.9054\", 28, 10,
\"H\", \"Barium\", \"132.9054\", 28, 11,
\"I\", \"Lanthanum\", \"138.90547\", 29, 8,
\"J\", \"Cerium\", \"140.116\", 29, 9,
\"K\", \"Praseodymium\", \"140.90765\", 29, 10,
\"L\", \"Neodymium\", \"144.242\", 29, 8,
\"M\", \"Promethium\", \"(145)\", 29, 9,
  \"PS\", \"Piyomaru Software\", \"(PiyoPiyo)\", 29, 10,  
  \"AS\", \"AppleScript\", \"(osalang)\", 29, 11,  
];

var camera, scene, renderer;
var controls;
var objects = [];
var targets = { table: [], sphere: [], helix: [], grid: [] };
init();
animate();
    
function init() {
camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.z = 3000;
scene = new THREE.Scene();
      
// table
for (var i = 0; i < table.length; i += 5) {
      
var element = document.createElement(’div’);
element.className = ’element’;

     //element.style.backgroundColor = ’rgba(128,0,64,’ + ( Math.random() * 0.5 + 0.25 ) + ’)’;
    //element.style.backgroundColor = ’rgba(64,0,128,’ + ( Math.random() * 0.5 + 0.25 ) + ’)’;
//element.style.backgroundColor = ’rgba(0,0,0,’ + ( Math.random() * 0.5 + 0.25 ) + ’)’;
element.style.backgroundColor = ’rgba(0,127,127,’ + ( Math.random() * 0.5 + 0.25 ) + ’)’;
//element.style.backgroundColor = ’rgba(18,77,174,’ + (Math.random() * 0.5 + 0.25) + ’)’;

var number = document.createElement(’div’);
number.className = ’number’;
number.textContent = (i / 5) + 1;
element.appendChild(number);
var symbol = document.createElement(’div’);
symbol.className = ’symbol’;
symbol.textContent = table[i];
element.appendChild(symbol);
var details = document.createElement(’div’);
details.className = ’details’;
details.innerHTML = table[i + 1] + ’<br>’ + table[i + 2];
element.appendChild(details);
var object = new CSS3DObject(element);
object.position.x = Math.random() * 4000 – 2000;
object.position.y = Math.random() * 4000 – 2000;
object.position.z = Math.random() * 4000 – 2000;
scene.add(object);
objects.push(object);
//
var object = new THREE.Object3D();
object.position.x = (table[i + 3] * 140) – 1330;
object.position.y = – (table[i + 4] * 180) + 990;
targets.table.push(object);
}
      
// sphere
var vector = new THREE.Vector3();
for (var i = 0, l = objects.length; i < l; i++) {
var phi = Math.acos(- 1 + (2 * i) / l);
var theta = Math.sqrt(l * Math.PI) * phi;
var object = new THREE.Object3D();
object.position.setFromSphericalCoords(800, phi, theta);
vector.copy(object.position).multiplyScalar(2);
object.lookAt(vector);
targets.sphere.push(object);
}
      
// helix
var vector = new THREE.Vector3();
for (var i = 0, l = objects.length; i < l; i++) {
var theta = i * 0.175 + Math.PI;
var y = – (i * 8) + 450;
var object = new THREE.Object3D();
object.position.setFromCylindricalCoords(900, theta, y);
vector.x = object.position.x * 2;
vector.y = object.position.y;
vector.z = object.position.z * 2;
object.lookAt(vector);
targets.helix.push(object);
}
      
// grid
for (var i = 0; i < objects.length; i++) {
var object = new THREE.Object3D();
object.position.x = ((i % 5) * 400) – 800;
object.position.y = (- (Math.floor(i / 5) % 5) * 400) + 800;
object.position.z = (Math.floor(i / 25)) * 1000 – 2000;
targets.grid.push(object);
}
      
//
renderer = new CSS3DRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById(’container’).appendChild(renderer.domElement);
      
//
controls = new TrackballControls(camera, renderer.domElement);
controls.minDistance = 500;
controls.maxDistance = 6000;
controls.addEventListener(’change’, render);
      
var button = document.getElementById(’table’);
button.addEventListener(’click’, function () {
transform(targets.table, 2000);
}, false);
      
var button = document.getElementById(’sphere’);
button.addEventListener(’click’, function () {
transform(targets.sphere, 2000);
}, false);
      
var button = document.getElementById(’helix’);
button.addEventListener(’click’, function () {
transform(targets.helix, 2000);
}, false);
      
var button = document.getElementById(’grid’);
button.addEventListener(’click’, function () {
transform(targets.grid, 2000);
}, false);
      
transform(targets.table, 2000);
//
window.addEventListener(’resize’, onWindowResize, false);
}
    
function transform(targets, duration) {
TWEEN.removeAll();
for (var i = 0; i < objects.length; i++) {
var object = objects[i];
var target = targets[i];
new TWEEN.Tween(object.position)
.to({ x: target.position.x, y: target.position.y, z: target.position.z }, Math.random() * duration + duration)
.easing(TWEEN.Easing.Exponential.InOut)
.start();
new TWEEN.Tween(object.rotation)
.to({ x: target.rotation.x, y: target.rotation.y, z: target.rotation.z }, Math.random() * duration + duration)
.easing(TWEEN.Easing.Exponential.InOut)
.start();
}
new TWEEN.Tween(this)
.to({}, duration * 2)
.onUpdate(render)
.start();
}
    
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
render();
}
    
function animate() {
requestAnimationFrame(animate);
TWEEN.update();
controls.update();
}
    
function render() {
renderer.render(scene, camera);
}
</script>
</body>

</html>"

set paramObj to {myMessage:"WebGL & three.js Test", mySubMessage:"This is a WebGL UI using three.js", htmlStr:myStr}
–my browseStrWebContents:paramObj–for debug
my performSelectorOnMainThread:"browseStrWebContents:" withObject:(paramObj) waitUntilDone:true

on browseStrWebContents:paramObj
  set aMainMes to myMessage of paramObj
  
set aSubMes to mySubMessage of paramObj
  
set htmlString to (htmlStr of paramObj)
  
  
set aWidth to 1600
  
set aHeight to 900
  
  
–WebViewをつくる
  
set aConf to WKWebViewConfiguration’s alloc()’s init()
  
  
–指定HTML内のJavaScriptをFetch
  
set jsSource to pickUpFromToStr(htmlString, "<script src", "</script>") of me
  
  
set userScript to WKUserScript’s alloc()’s initWithSource:jsSource injectionTime:(WKUserScriptInjectionTimeAtDocumentEnd) forMainFrameOnly:true
  
set userContentController to WKUserContentController’s alloc()’s init()
  
userContentController’s addUserScript:(userScript)
  
aConf’s setUserContentController:userContentController
  
  
set aWebView to WKWebView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight)) configuration:aConf
  
aWebView’s setNavigationDelegate:me
  
aWebView’s setUIDelegate:me
  
aWebView’s setTranslatesAutoresizingMaskIntoConstraints:true
  
using terms from scripting additions
    set bURL to |NSURL|’s fileURLWithPath:(POSIX path of (path to me))
  end using terms from
  
aWebView’s loadHTMLString:htmlString baseURL:(bURL)
  
  
— set up alert  
  
set theAlert to NSAlert’s alloc()’s init()
  
tell theAlert
    its setMessageText:aMainMes
    
its setInformativeText:aSubMes
    
its addButtonWithTitle:"OK"
    
–its addButtonWithTitle:"Cancel"
    
its setAccessoryView:aWebView
    
    
set myWindow to its |window|
  end tell
  
  
— show alert in modal loop
  
NSRunningApplication’s currentApplication()’s activateWithOptions:0
  
my performSelectorOnMainThread:"doModal:" withObject:(theAlert) waitUntilDone:true
  
  
–Stop Web View Action
  
set bURL to |NSURL|’s URLWithString:"about:blank"
  
set bReq to NSURLRequest’s requestWithURL:bURL
  
aWebView’s loadRequest:bReq
  
  
if (my returnCode as number) = 1001 then error number -128
end browseStrWebContents:

on doModal:aParam
  set (my returnCode) to (aParam’s runModal()) as number
end doModal:

on viewDidLoad:aNotification
  return true
end viewDidLoad:

on fetchJSSourceString(aURL)
  set jsURL to |NSURL|’s URLWithString:aURL
  
set jsSourceString to NSString’s stringWithContentsOfURL:jsURL encoding:(NSUTF8StringEncoding) |error|:(missing value)
  
return jsSourceString
end fetchJSSourceString

on pickUpFromToStr(aStr as string, s1Str as string, s2Str as string)
  set a1Offset to offset of s1Str in aStr
  
if a1Offset = 0 then return false
  
set bStr to text (a1Offset + (length of s1Str)) thru -1 of aStr
  
set a2Offset to offset of s2Str in bStr
  
if a2Offset = 0 then return false
  
set cStr to text 1 thru (a2Offset – (length of s2Str)) of bStr
  
return cStr as string
end pickUpFromToStr

–リストを任意のデリミタ付きでテキストに
on retArrowText(aList, aDelim)
  set aText to ""
  
set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set aText to aList as text
  
set AppleScript’s text item delimiters to curDelim
  
return aText
end retArrowText

on array2DToJSONArray(aList)
  set anArray to current application’s NSMutableArray’s arrayWithArray:aList
  
set jsonData to current application’s NSJSONSerialization’s dataWithJSONObject:anArray options:(0 as integer) |error|:(missing value) –0 is
  
set resString to current application’s NSString’s alloc()’s initWithData:jsonData encoding:(current application’s NSUTF8StringEncoding)
  
return resString
end array2DToJSONArray

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

★Click Here to Open This Script 

Posted in 3D dialog JavaScript | Tagged 12.0savvy 13.0savvy WKWebView | 1 Comment

ChatGPTでchatに対する応答文を取得

Posted on 3月 6, 2023 by Takaaki Naganoya

OpenAIが提供しているREST APIを呼び出して、チャットに対する応答を生成するAppleScriptです。実行のためにはOpenAIのWebサイトにサインアップして、実行のためのAPI Keyを取得してください。

ChatGPTなどのサービスを提供しているOpenAIにサインアップして、各種サービスをAppleScriptから利用できます。Freeアカウントでは1分あたりに発行できるクエリー数の上限が低めに設定されていますが、実験を行う程度であれば十分なレベルでしょう。

https://platform.openai.com/docs/introduction

「chat」は、いわゆるChatGPTでよく知られている処理で、チャットに応答するものです。この呼び出し方に対して、さらにroleとして「system」「user」「assistant」などの役割を指定することで、チャットらしいやりとりを生成するようです(Chat completion)。

AppleScript名:Chat.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/03/05
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

property NSString : a reference to current application’s NSString
property NSCountedSet : a reference to current application’s NSCountedSet
property NSJSONSerialization : a reference to current application’s NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding

set myText to "こんにちは"

set barerKey to "xx-XXXXXXXxXxxxxXxxXXxXXXXxxxXXxxxxXXxxxXXxXXxxXXxx"

set aText to "curl https://api.openai.com/v1/chat/completions -H ’Content-Type: application/json’ -H ’Authorization: Bearer " & barerKey & "’ -d ’{\"model\": \"gpt-3.5-turbo\",\"messages\": [{\"role\": \"user\", \"content\": \"" & myText & "\"}]}’"
set sRes to do shell script aText

set jsonString to NSString’s stringWithString:sRes
set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding)
set aRes to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
set chatRes to (aRes’s valueForKeyPath:"choices.message.content") as list
–>{"こんにちは!こんにちはと言うと、こんにちはと返してくださる方が多いですね。私はAIアシスタントなので、いつでもお話し相手になれます。何かお話を聞かせてください。"}
–> {"、こんにちは! 私はAIアシスタントです。何かお手伝いできることはありますか?"}
–> {"こんにちは!私はAIアシスタントです。何かお手伝いできますか?"}
–> {"、私はAIアシスタントです。何かお手伝いできることはありますか?"}
–> {"こんにちは!こんにちはは、日本語で「こんにちは」と書き、挨拶の一つです。相手と会話をする際に使われる一般的な挨拶の言葉で、おはようございます、こんにちは、こんばんはなどがあります。どうぞよろしくお願いします!"}

★Click Here to Open This Script 

Posted in JSON Natural Language Processing Network REST API | Tagged 12.0savvy 13.0savvy ChatGPT | Leave a comment

ChatGPTで質問に対する回答を生成(Compilations)

Posted on 2月 26, 2023 by Takaaki Naganoya

OpenAIが提供しているREST APIを呼び出して、質問に対する回答を生成するAppleScriptです。実行のためにはOpenAIのWebサイトにサインアップして、実行のためのAPI Keyを取得してください。

ChatGPTなどのサービスを提供しているOpenAIにサインアップして、各種サービスをAppleScriptから利用できます。Freeアカウントでは1分あたりに発行できるクエリー数の上限が低めに設定されていますが、実験を行う程度であれば十分なレベルでしょう。

https://platform.openai.com/docs/introduction

「質問に対する回答を生成」は、いわゆるChatGPTでよく知られている処理で、対話的に質問文に回答するものです。回答内容が正しいかどうかはちょっとアレですが、自然言語処理もこのレベルまで来たのかと感心させられます。

対話っぽい動作(前回の問い合わせを踏まえた上で回答する)を考えて「user」パラメータを付けて呼び出していますが(ここも自分のユーザーアカウントに書き換えてください)、いまひとつWebブラウザ上で問い合わせを行ったときのような「つながり」を感じられないので、何かまだ指定する必要があるのかもしれません。

AppleScript名:Compilations(質問に対する回答を生成).scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/02/24
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

property NSString : a reference to current application’s NSString
property NSCountedSet : a reference to current application’s NSCountedSet
property NSJSONSerialization : a reference to current application’s NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding

set myText to "バンダイナムコのアーケードゲーム「戦場の絆1」の初代プロデューサーの名前は、小山順一朗さんです。"

set barerKey to "xx-XXXXXXXxXxxxxXxxXXxXXXXxxxXXxxxxXXxxxXXxXXxxXXxx"

set sRes to (do shell script "curl https://api.openai.com/v1/completions -H ’Content-Type: application/json’ -H ’Authorization: Bearer " & barerKey & "’ -d ’{\"model\": \"text-davinci-003\", \"prompt\": \"" & myText & "\", \"max_tokens\": 200, \"temperature\": 0, \"user\": \"maro_ml@piyocast.com\"}’")

set jsonString to NSString’s stringWithString:sRes
set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding)
set aRes to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
set modelRes to aRes as {anything, record}

–>{|id|:"cmpl-6nMNGJzTFei6eMbn1rnMgMN9ML4qi", object:"text_completion", created:1.677222098E+9, model:"text-davinci-003", choices:{{|index|:0, finish_reason:"stop", logprobs:missing value, |text|:"小山順一朗さんは、バンダイナムコのゲームプロデューサーとして、「戦場の絆1」をはじめとした数々のアーケードゲームをプロデュースしてきました。また、「戦場の絆1」のプロデューサーとして、「戦場の絆2」「戦場の絆3」「戦場の絆4」などのシリーズをプロデュースしています。"}}, usage:{total_tokens:224, completion_tokens:163, prompt_tokens:61}}

★Click Here to Open This Script 

Posted in Natural Language Processing REST API Text | Tagged 12.0savvy 13.0savvy ChatGPT | Leave a comment

ChatGPTで文章の感情検出(Moderations)

Posted on 2月 26, 2023 by Takaaki Naganoya

OpenAIが提供しているREST APIを呼び出して、指定文章の感情検出を行うAppleScriptです。実行のためにはOpenAIのWebサイトにサインアップして、実行のためのAPI Keyを取得してください。

ChatGPTなどのサービスを提供しているOpenAIにサインアップして、各種サービスをAppleScriptから利用できます。Freeアカウントでは1分あたりに発行できるクエリー数の上限が低めに設定されていますが、実験を行う程度であれば十分なレベルでしょう。

https://platform.openai.com/docs/introduction

「文章の感情検出」は、ユーザーサポートなどの現場においてユーザーからの投稿が質問などのものなのか、あるいは感情的な文章なのかといった「当たり」をつけるために用いられているといった印象があります。

ただ、「I want to kill him.」という例文に対して「hate」が検出されないなど、ややその評価内容には疑問の余地が残されているようです。

AppleScript名:Moderations(感情検出).scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/02/24
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

property NSString : a reference to current application’s NSString
property NSCountedSet : a reference to current application’s NSCountedSet
property NSJSONSerialization : a reference to current application’s NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding

set aSentence to "I want to kill him."

set barerKey to "xx-XXXXXXXxXxxxxXxxXXxXXXXxxxXXxxxxXXxxxXXxXXxxXXxx"
set sRes to (do shell script "curl https://api.openai.com/v1/moderations -H ’Content-Type: application/json’ -H ’Authorization: Bearer " & barerKey & "’ -d ’{\"input\": \"" & aSentence & "\" }’")

set jsonString to NSString’s stringWithString:sRes
set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding)
set aRes to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)

set mRes to aRes as {anything, record}
–> {|id|:"modr-6o8PPeHjWYIH5z5Qi79etbe8JaWY8", model:"text-moderation-004", results:{{flagged:true, category_scores:{sexual:3.26660915561661E-6, |sexual/minors|:2.58405265185502E-7, |hate/threatening|:2.28086973947939E-5, hate:0.007466733921, |self-harm|:1.23088886994083E-6, violence:0.794520378113, |violence/graphic|:4.90069034242424E-8}, categories:{sexual:false, |sexual/minors|:false, |hate/threatening|:false, hate:false, |self-harm|:false, violence:true, |violence/graphic|:false}}}}

★Click Here to Open This Script 

Posted in Natural Language Processing REST API Text | Tagged 12.0savvy 13.0savvy ChatGPT | Leave a comment

ChatGPTで文章のベクトル化(Embedding)

Posted on 2月 26, 2023 by Takaaki Naganoya

OpenAIが提供しているREST APIを呼び出して、指定文章のベクトル化を行うAppleScriptです。実行のためにはOpenAIのWebサイトにサインアップして、実行のためのAPI Keyを取得してください。

ChatGPTなどのサービスを提供しているOpenAIにサインアップして、各種サービスをAppleScriptから利用できます。Freeアカウントでは1分あたりに発行できるクエリー数の上限が低めに設定されていますが、実験を行う程度であれば十分なレベルでしょう。

https://platform.openai.com/docs/introduction

「文章のベクトル化」は、大量の候補文を用意しておいてベクトル化し、新たにユーザーが与えた文章との「類似度」を計算するためのものです。

AppleScript名:Embedding(文章のベクトル化).scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/02/24
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

property NSString : a reference to current application’s NSString
property NSCountedSet : a reference to current application’s NSCountedSet
property NSJSONSerialization : a reference to current application’s NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding

set myText to "今日はいい天気です。"

set barerKey to "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
set sRes to (do shell script "curl https://api.openai.com/v1/embeddings -H ’Content-Type: application/json’ -H ’Authorization: Bearer " & barerKey & "’ -d ’{\"input\": \"" & myText & "\", \"model\":\"text-embedding-ada-002\"}’")

set jsonString to NSString’s stringWithString:sRes
set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding)
set aRes to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
set modelRes to aRes as {anything, record}
–> {object:"list", |data|:{{|index|:0, object:"embedding", embedding:{0.0024673557, 0.0037366515, -0.005702117, -0.025023261, 0.010659494, -0.0024349757, 0.0038791234, -0.031266123, 0.005248797, -0.023909388, -0.0052941293, 0.008710219, -0.0028316306, -0.019039437, -0.013780926, -0.009519719, 0.01660446, -0.020762052, 0.019881317, -0.025748573, 0.037897546, 0.025981707, -0.006569901, -0.01387159, -0.023209982, 0.0051743235, 0.014182438, -0.018974677, 0.031032987, -0.026655212, 0.029919116, -0.00975933, -0.007019983, 0.022381052, 0.010186747, -0.032120954, -0.023054557, 0.01536107, -0.0049476633, 0.005919063, 0.01542583, -0.019363238, 0.015335166, -0.0029741025, -0.02567086, 0.008626031, -0.008295755, 0.0018116607, -0.004814905, 0.028546205, 0.011533754, -0.006395049, -0.040876508, -0.038855996, -5.7595916E-4, 0.006106867, -0.014078822, -1.681736E-4, -0.005365365, -0.01260877, -0.0025499247, -0.013949302, -0.009280107, 0.01925962, 0.007266071, -0.01451919, -0.020917477, -0.0051937513, -0.018197557, 0.009701047, 0.008813835, -0.0028105837, -4.6546242E-4, -0.035669804, 0.008813835, 0.0023507876, -0.013003807, -0.010562355, -0.0016028098, 0.008904499, 0.015995719, -0.03269084, -0.0109638665, -0.006909891, 0.0061554373, 0.0031861917, -0.014117678, 0.019440949, -1.770781E-4, -0.017057782, 0.011592038, 0.0014376718, 0.023171125, -0.0041090213, -0.006637899, 0.0035877035, 0.01633247, 0.031136604, 0.011158146, -0.026784733, -0.0041122595, -0.0016950928, 2.7664658E-4, 0.0033416154, -0.051367626, -0.0082892785, 0.027173292, -0.008082047, 0.02120242, -0.038234297, -0.015179742, -0.006909891, 4.5251043E-4, -0.039918058, -0.024518132, 0.008962783, 0.004562341, 0.0014311958, -0.012168402, -3.0922896E-4, 0.018624973, 0.010070179, -0.0012701054, -0.004737193, 0.006450095, 0.01150785, -0.02890886, -0.016228853, -0.011650322, 8.2771364E-4, 0.01426015, 0.005112801, 0.0041187354, 0.007466827, 0.0037139854, 0.012984378, -0.025632005, 0.0197777, -0.010756634, 0.018093942, 0.006236387, 0.035177626, -0.019699989, -0.018236414, -0.013107422, 0.012401538, 0.008600127, -0.019415045, 0.01354779, -0.017562909, 0.020787956, -0.012511631, 0.029349228, 0.017472245, 0.023313597, 0.026784733, 9.843518E-4, 0.017239109, -0.0036265594, -0.013573694, 0.028934764, -0.0132045625, 0.03590294, 0.007725867, 8.362134E-4, 0.02644798, 0.009739903, 0.0050577554, 0.007000555, -2.8352733E-4, -0.0048537613, 0.023184076, -0.030307677, 0.0038305535, -0.010251506, 0.034115564, 0.016280662, 0.005864017, -0.0049185213, -0.017485198, -0.038985513, -8.707183E-5, 0.014558046, -0.005430125, 0.0011486803, -0.011630895, 0.024453372, 0.0055110753, -0.009849994, -0.026422076, 0.0330535, 0.038027067, 0.013405318, -0.013884542, -0.6204525, -0.027976315, -0.0013024854, -0.0033578055, 0.03079985, 0.0029174376, 0.014506238, 0.018132798, -0.01905239, 0.016643317, -0.01290019, 0.009973039, -0.015827341, -0.0017614717, 0.0027199197, -0.016461989, -0.009824091, -0.0061845793, -0.025852188, 0.01796442, -0.016410181, 0.01562011, -0.022186773, -0.018236414, 0.014337862, -0.016215902, -0.009571526, -0.027276909, -0.019997885, 0.041705433, -0.036576442, 0.03901142, 0.014998414, -0.014117678, 0.048181433, -0.0039438833, -0.029789595, 0.050564602, 0.019415045, 0.026046468, -0.024220238, -0.017148446, 0.015827341, -0.0099082785, 0.011112815, -0.006961699, 0.024025956, -0.015153838, 0.01801623, 0.0025628766, -0.0042353035, -0.0033707574, 0.0029384845, -0.0015914767, -0.012731814, 0.016695125, 0.039063226, -0.030748043, -0.01163737, 0.0014692423, -0.006589329, 0.009383723, -0.013949302, -0.010950915, -0.016449038, 0.01562011, -0.007492731, 0.005987061, 0.020723198, 0.0031068607, -0.0051095635, 0.0049347114, 0.014609854, 0.018093942, 0.011125767, 0.013729118, 0.037742123, -0.0028915335, -0.020956334, 0.014311958, 0.011695654, -0.019712942, -0.018948773, 0.0023313598, 0.006877511, -0.012569915, -0.038674667, -0.01822346, 0.021435557, -0.0042968253, 0.010769586, 0.02028283, 0.024090717, 0.0019444188, 0.008263375, 0.018327078, -0.008470607, -0.024803076, 0.0041640676, 0.014570998, -0.0054625054, 0.011061006, 0.016669221, 0.008412323, 0.007201311, 0.009552099, -0.026681116, -0.006521331, -0.0035650374, -0.01840479, 0.018003277, -0.01510203, -0.01796442, 0.0025207826, 0.024272045, -0.032898076, 0.016837597, 0.012550486, 0.00843175, 0.008412323, 0.0090987785, 0.0060971533, 0.019712942, -0.008502987, -0.021590982, 0.029375132, -0.007486255, -0.012971426, -0.0032282856, 0.007421495, -0.010633591, 0.0019897507, 0.016034573, -0.019894268, 0.03033358, -0.031551067, 0.008308707, -0.0126411505, 0.04802601, -0.011876983, -0.027017869, -0.014221294, -0.010491119, 0.017718334, -0.0026762066, -0.016449038, -0.01490775, -0.005760401, -0.026914252, 0.013340558, 0.007123599, 0.004520247, -0.007745295, 0.022925036, -0.018871062, -0.0026389696, 0.007777675, -0.008898023, -0.008308707, 3.936193E-5, 0.009072875, 0.0013850543, -0.01464871, 0.006006489, -0.005925539, -0.01866383, -0.033727, 0.016733982, -0.006246101, -0.023054557, -0.016695125, -0.0042061615, -0.009610383, 0.011203478, 0.0089109745, -0.016759885, 0.0016837597, -0.005423649, 0.0045688176, -0.016539702, -0.009985991, -0.027147388, -0.015335166, 0.0021548886, -0.0032590465, -0.007058839, 0.029711884, 0.04025481, -0.006621709, 0.021629836, -0.008295755, 0.025165733, -0.008107951, 0.008127379, 0.036343306, -0.025204588, 0.0011932028, 0.02735462, 0.015982766, 0.017537005, 0.012323827, 0.009215347, 0.014104726, -0.0120777385, -4.7841444E-4, -0.021318989, 0.007240167, -0.01231735, 0.0020010837, 0.01098977, 0.0010321124, -0.022044301, -0.019427998, 0.0024592606, -0.01315923, 0.019130101, 0.0025304966, -6.358622E-4, 0.008107951, -0.018521357, 0.007272547, 0.016733982, -0.0016934738, -0.04686033, -0.029064285, -0.014493286, 0.012272018, 0.03131793, 0.0130167585, -0.007687011, -0.024712412, -0.014855942, -0.02249762, 0.025632005, 0.004209399, -0.060459927, 0.0032234285, -0.018599069, 0.054553818, 0.03800116, 0.007557491, -0.0014789563, 0.006760943, -0.030773947, 2.950627E-4, 0.016837597, 0.04349281, 0.008703743, 0.0018148988, 0.0038273155, -0.015995719, -0.036187883, -0.013275798, -0.00911173, 0.007207787, -0.058491223, 0.0019071817, -0.014039966, 0.01516679, 0.044891626, 0.012680006, 0.04551332, -0.0021111758, -0.0027927747, 0.020256925, 0.0024997357, 0.016513798, -0.03279446, -0.007706439, 0.0010264459, -0.0021678407, 0.005261749, 0.0023783108, -0.009170014, 0.007168931, -0.02054187, -0.008211567, -0.0029433416, 0.0051516574, 0.015089078, 6.973841E-4, -0.037534893, -0.010037798, 0.01222021, -0.0021937448, -0.013832734, -0.012945523, -0.034452315, -0.022653045, 0.018003277, 0.015581254, 0.028028125, -0.012809526, 8.872119E-4, 0.012123071, -0.009681619, 0.038855996, -0.0032655227, -0.059475575, -0.027898604, 0.029064285, -0.014078822, 0.022665996, -0.035643898, 0.005067469, 4.998662E-4, -0.008230994, -0.0024284997, 2.5215923E-4, 0.011779842, -0.0052747014, -0.016941214, -0.019635228, -0.017226158, -0.0037431275, 0.0037269376, -0.0046627196, -0.013923398, 0.029375132, -0.013534838, -0.019272573, -0.0034355174, -0.0044490113, 0.012725338, 0.035151724, 0.0014061013, 0.018132798, 0.029867308, 0.019971982, 6.2210066E-4, -0.016358374, -0.02008855, 3.7161106E-5, -0.014596902, 0.014208342, 0.0022034587, 0.009571526, -0.011222906, 0.007188359, -0.009927707, -0.016112287, -0.0036168455, -0.0020367017, -0.013379415, -0.013923398, 0.01445443, -5.3872215E-4, 0.015309262, 0.009519719, 0.0013340558, -0.006100391, 0.031991437, 0.020153308, -0.007589871, -0.007065315, 0.01464871, -0.010374551, -0.008373467, -0.010562355, 0.01951866, -0.0097204745, 0.025450677, -0.013379415, -0.013431222, -0.0042871116, 0.032716747, 0.014804134, 0.013314654, -0.009694571, 0.0020707007, -0.01471347, 0.014959558, -0.010303315, -0.007797103, 0.019946078, 0.016487895, -0.0285203, -0.03105889, -0.008923926, 0.040954217, -0.0272251, -0.009843519, -0.009144111, 0.013340558, -0.011462518, -0.021603933, -0.007725867, 8.535165E-5, -0.0140140625, -0.03144745, -0.008075571, -0.01691531, -0.0063497173, -0.020153308, -0.0015145743, -0.005925539, -0.033675194, 9.414484E-4, 0.025049165, 0.02994502, 0.007622251, -0.017018925, -0.009273631, 0.024712412, -0.008800883, -0.005248797, 0.020438254, -0.020256925, -0.014182438, 0.0013648168, 0.006832179, -2.2463621E-4, 0.006683231, 0.01257639, 0.018832205, 0.020658437, 0.01458395, 0.018573165, -0.011630895, -0.0097204745, 0.008820311, 0.0119611705, -0.026046468, -0.0018278507, 0.027769083, -0.01626771, -0.016461989, -5.9133966E-4, -7.4878737E-4, 0.03136974, 0.016461989, -8.305469E-4, 0.007732343, 0.0041414015, 0.029271515, -0.010011895, 0.037612602, -2.3637396E-4, -0.0039762636, 0.02327474, 0.006550473, 0.007823007, 0.0058963974, -0.035825226, 0.010510546, -0.01730387, 0.038286105, -0.009053446, 0.025761524, -0.008690791, -0.01821051, -0.028235355, -0.01406587, 0.0115855625, -0.010089607, 0.027769083, -0.0050868974, -0.027717276, -0.013910446, -0.023404261, -0.0039730254, 0.036783677, -0.01613819, -0.030229963, -0.030022731, -0.010018371, 0.01413063, -0.015840294, 0.006871035, -0.02534706, -0.012744767, -8.1455924E-5, 0.016423134, 0.022860277, -0.009001639, -0.005990299, -0.02994502, -5.6786416E-4, 0.013431222, -0.0291679, -0.0035035156, -0.014570998, -0.0010402073, 0.0029190567, 0.021940686, 0.017316822, 0.0049476633, -0.011443091, -0.009539147, -0.0034419936, 0.0045526274, -6.1521993E-4, -0.025852188, 0.0053394614, 0.009118207, -0.0016384277, -0.008936878, -0.015697822, -0.012492202, 0.0027361095, -7.131694E-4, -0.007039411, -0.007654631, -0.033856522, 0.0022892656, -0.014480334, -0.019065341, 0.005048041, 0.043363288, 0.007356735, 0.008082047, -1.9427997E-4, 0.026214844, -0.010478167, 0.02146146, -0.009701047, -0.0010499214, -0.017057782, -0.01069835, -0.0030793375, 0.022640092, -0.0076934868, 0.008891547, 0.010290363, 0.02243286, 0.020140357, -0.01150785, 0.0053977454, -0.01137833, 0.015982766, -0.013884542, 0.0036362736, 0.010575307, -0.018391838, -0.0045105335, -0.0032979026, -0.020917477, -0.026603404, 0.022601238, -2.0983754E-5, -0.0041932096, 0.006087439, -0.026072372, -0.019156005, -0.016721029, -0.008321659, 0.0050156615, -0.02547658, 0.04447716, 0.057714105, 0.0050286134, -0.024712412, -0.05911292, -0.020503012, -0.0016181903, -0.0036589394, 0.010750159, 0.013534838, -0.014480334, -0.007874815, 0.03800116, -0.0048408094, -5.1241345E-4, 0.027017869, 0.023481973, -0.01659151, 0.0027749657, 0.01769243, -0.019207813, 0.018689733, 0.010303315, -0.015646014, -0.0343487, -0.013858638, -0.006242863, 0.021616885, -0.025813332, 0.022769613, 0.023987101, 0.0034743736, 0.015866198, -0.021629836, -0.015089078, -0.0020723196, -0.0026082087, 0.02573562, -0.018508404, 0.017316822, -0.008237471, 0.030022731, 0.0050771832, 0.0011041579, -0.018430693, 0.0427934, 2.0824384E-4, -0.020386444, -0.009066399, 0.014881846, 0.014221294, -0.006252577, 0.00962981, 0.014350814, -0.025916949, -0.013703214, 0.013431222, 0.0037139854, -7.7023916E-4, -0.012304398, -0.015050222, -0.02513983, -0.0014125773, -0.026603404, -0.008425275, -0.0049994714, -0.015542398, 0.016798742, -0.028779339, 0.028882956, 0.028727531, -0.0031748586, -0.012563438, 0.03131793, -0.04064337, 0.013975206, -0.01898763, 0.0022083158, 0.008444703, -0.012654102, 5.2779395E-4, -0.0037334135, 0.0054042214, 0.020490061, -8.2690414E-4, -0.0226919, 0.010096082, 0.011501375, -0.0043518716, -0.006488951, 0.022147916, 0.014959558, 0.0033189496, -0.012647626, -0.04569465, 0.020373493, -0.0010296839, 0.011164622, 0.007531587, -0.0262537, 0.009247727, 0.0013874829, 0.007674059, -0.017679477, -0.021772308, -0.015063174, -0.0028818196, 0.009947134, -0.012783622, -0.0051354673, 0.007097695, -0.012686483, -2.7361096E-4, 0.0048051914, -0.007596347, 0.014402622, 0.028623916, 0.03864876, -0.0051710852, 0.0021613648, -0.01231735, -0.025204588, 0.0033319015, -0.02191478, -0.032509517, -0.021694597, 4.6141492E-4, 0.025230492, 4.658672E-4, -0.014350814, -0.03592884, -0.0022552668, -0.043026537, -0.0013559123, -0.016954165, 0.024790125, 0.0056049773, -0.0040442613, -0.0028283927, 0.04038433, 0.0022504097, -0.0052293693, -0.022458766, -0.007615775, -0.028675724, -0.0035779895, 0.0038791234, -0.004491105, -0.021422604, -0.03320892, 0.0055564074, -0.005734497, 0.009655715, 0.035695706, 0.0041381633, 0.0023847867, -0.011048054, -0.0265775, -0.005371841, 0.009118207, -0.009221823, -0.020231022, -0.014739374, 0.0027522997, 0.008677838, 0.004801953, 0.01581439, 0.005579073, 0.0051160394, 0.01082787, -0.029530555, -0.016565606, -0.020723198, -0.043984987, -0.009616858, -0.011261762, 0.0052455594, 0.02067139, 0.010944438, -0.025049165, -0.01536107, 0.01626771, -0.009882375, -0.010866727, 0.0033642815, -0.007376163, 5.3710316E-4, 0.0027474426, 0.01299733, -0.011229383, -0.020399397, 0.025541341, -0.021772308, -0.039503593, 0.0015623348, 0.010005418, -0.03390833, -0.009934182, 0.011533754, -0.030877564, 0.0027296336, -0.027043773, 0.03364929, -0.03351977, 0.018301174, -8.001906E-4, -0.01822346, -0.0013599598, 0.013599598, 0.009927707, -0.017925566, 0.019453902, 0.2832861, -0.01374207, -0.009221823, 0.038027067, 0.0122072585, 0.019130101, 0.011941742, -0.0066314233, 0.010368074, 0.014545094, -0.019389141, -0.010232079, -0.0017987087, 0.008651935, 0.018547261, -0.016902357, -0.020010836, -0.012246114, -0.03105889, -0.013178658, 0.011935267, 0.0020399396, 0.008684315, 0.0028138217, 0.0011745844, 0.017070733, -0.007350259, 0.021565078, 0.014376718, -0.0010669208, -0.0125828665, -0.011579086, 0.010096082, -0.0066897073, -0.010005418, -0.03390833, 0.039115034, -0.014311958, 0.022678949, 4.5655793E-4, 0.0032460946, -0.0107760625, 0.017770141, -0.010633591, 0.006362669, 0.023313597, -8.4187987E-4, -0.009610383, -0.009448483, 0.024142524, -0.01290019, -0.0034711354, 0.03351977, 0.04090241, 0.009707523, -0.017239109, 0.03460774, -0.012259066, 0.019855414, -0.030773947, 0.01536107, 0.035177626, -0.022912085, 0.022653045, -0.0051937513, 0.015723726, -0.024466325, 0.007551015, 0.025437724, -0.007188359, 0.018754493, 0.007777675, 0.0058737313, 0.0037010335, -0.025269348, -0.0054851715, 0.03287217, 0.01134595, 3.9017893E-4, 0.0021208897, -0.014661662, 0.022290388, 0.006618471, -0.0058510653, -0.016371327, -0.033364348, 0.02300275, 0.0028899147, 0.01254401, -0.01562011, 0.0011276334, 0.0032169526, 0.010406931, -0.010866727, -0.013962254, -0.0014490047, -0.020904524, 0.0052585113, -0.01814575, 0.02274371, 0.006420953, -0.045746457, 0.009804662, 0.027691372, 0.004591483, -0.0020982237, 0.018948773, -0.0013842448, 0.0011494899, -0.017770141, 0.0028931526, -0.019427998, 0.015697822, -0.0023928815, -0.009675142, 0.023171125, 0.0115855625, 0.007071791, -0.010905582, -0.0025612577, 0.026137132, -0.007920147, -0.028598012, 0.023481973, 0.026046468, -0.019997885, -0.010251506, 0.0017274728, 0.01846955, -0.053310424, 0.041394588, -6.7795615E-4, 0.014687566, 0.008062619, -0.0016084763, 0.006093915, 0.017537005, 0.0100248465, 0.0021484126, 0.011190526, -5.120087E-4, -0.024336804, -0.01406587, -0.018301174, 0.0037981735, -0.0036297976, -0.0013372938, -0.032820363, -0.007738819, 0.015594206, -0.029996827, -0.02839078, -0.007842435, -0.007013507, 0.02191478, 0.0023086937, -0.04616092, -0.029711884, 0.0014668138, 0.04310425, -0.020062646, 7.7023916E-4, 0.026486836, -0.033467963, -0.01581439, -0.0010361598, -0.16371326, 0.014855942, -0.0023653586, -0.020800909, 0.010147891, 0.0042288275, 0.009318963, 0.0025774476, -0.014558046, -0.008328135, 0.021228325, 0.027199196, -0.021059949, 0.021098806, 0.005060993, 0.021888876, -0.027173292, 0.0019444188, 0.034452315, 0.0052520353, 0.026396172, -0.016837597, 4.7598593E-4, 5.715069E-4, 0.03007454, 0.0034193275, -0.03680958, 0.012459822, 0.006793323, -0.008094999, -0.009694571, 0.006974651, 0.044632584, 0.009862946, 0.0051581333, 4.8974744E-4, 0.0013227228, 0.005154895, -0.01516679, 0.0044587255, 0.0030275297, 0.0036233214, 0.015969813, 0.008606602, -0.028546205, 0.020632533, 0.016449038, 0.012310875, -0.024751268, -0.015658965, 0.016824646, -0.01348303, 0.012757719, 0.006650851, 0.024207285, 0.023805773, -0.01361255, 0.022588285, 0.01270591, -0.011915838, -0.0010094463, -0.03124022, -0.008587175, 0.0048472853, 0.0027976315, 0.019065341, -0.01957047, 0.01685055, 1.2081786E-4, 0.006702659, 0.015594206, -0.03541076, -0.009655715, -0.021694597, 0.0048278575, -0.0063497173, -0.027069677, 0.0020674628, 0.005235845, -0.011935267, -0.017213205, 0.047300696, -0.0031003845, -0.0010515404, -0.008632507, 0.007751771, 0.01286781, -0.004678909, -0.034581836, -0.007952527, 0.03007454, -0.040099386, 0.0017371868, -0.02300275, -0.010517023, 0.0019217527, 0.012984378, 0.022963893, -0.011974122, -0.019194862, -0.010614162, -0.0033286635, -0.01393635, 0.012971426, -0.016474942, 0.02410367, 0.0078553865, 0.011838126, 0.02515278, 0.0060680113, 0.008133855, -0.01299733, 0.012589342, 0.0036880814, 0.019855414, 0.013962254, -0.008185663, -0.010653019, 0.02670702, -0.031680588, -0.017666526, -0.026279604, -0.0043648235, 0.030877564, -0.0055207894, -0.0022617427, -0.05709241, 0.013327606, -0.006420953, 0.026124181, 0.01608638, 0.03784574, 0.015063174, 0.024790125, -0.01060121, -0.013139802, 3.3776383E-4, 0.0015145743, -0.030126348, -0.014091774, 0.021629836, -0.026784733, -0.006340003, -0.019596374, -0.013625502, -7.1114564E-4, -0.0041543534, -0.0040151193, -0.016889406, -0.029271515, -0.02683654, 0.007279023, -0.02112471, 0.058750264, 0.01821051, 0.005747449, 0.030126348, -0.014027014, 0.0029676266, -0.019816557, -0.013457126, -0.013081518, -0.024751268, -0.010931486, 0.0027943936, -0.026292557, 0.019687038, -0.0037981735, 4.4967717E-4, -0.02359854, -0.026862444, 0.0052326075, -0.0018391837, 0.014441478, 0.0025531626, -0.0053394614, -0.03201734, -0.0013105803, -0.028468492, -0.024660604, 0.018637925, -0.0024835456, 0.0042612073, 0.01853431, -0.021940686, 0.009390199, -0.0036395115, 0.0025029737, -0.0053459373, 0.046394058, 0.009785235, 0.023715109, -0.008561271, -0.010368074, 0.013366462, 0.0035585614, 0.005067469, 0.034478217, -0.010251506, 0.032613132, -0.018573165, -0.022122012, -0.038286105, -0.037534893, 0.01704483, -0.013793878, -0.006767419, -0.0213967, 0.007551015, -0.0084770825, 0.009798187, 0.017135493, -9.6816185E-4, 0.0049120453, 0.016500846, 0.017990325, 0.008846215, 7.8076264E-4, 0.026888348, -0.01341827, -0.009785235, -0.013923398, -0.007894243, -0.014337862, 0.013819782, -0.005647071, 0.00885269, -0.032302283, -0.07242757, 0.01510203, 0.007117123, 0.0040474995, -0.009053446, -0.0029935306, -0.007466827, -0.009053446, -0.0032460946, -0.006877511, -0.020800909, 0.011753938, 0.006903415, -3.2076432E-4, -0.03054081, -8.297374E-4, 0.03201734, 0.015309262, 0.01134595, 0.009079351, -0.0011608228, 0.010504071, -0.005964395, 0.018197557, -0.007835959, 0.025580196, -1.9225622E-4, 0.019013533, -0.007680535, -0.018637925, -4.002977E-4, -0.033364348, 0.017977374, 0.023507876, -0.012045358, -0.022122012, -0.0044878675, 0.014817086, 0.01523155, 0.009461435, -0.020166261, -0.03608427, 0.044192217, 0.012854858, -0.025852188, -0.010096082, -0.024919644, 0.011728034, 0.02067139, -0.0045299614, 0.01432491, 0.014208342, 0.006139247, 0.0039503593, 0.0027037296, -0.020166261, 0.014441478, 0.010607687, 0.019130101, -0.012291446, 0.02326179, 0.021293085, 0.024207285, 0.0053815553, 0.01141071, 0.012893714, -0.0013996253, -0.008755551, 0.010808443, -0.01222021, -0.015801437, 0.020567773, -0.0055045993, 0.029245611, 0.015658965, -0.0016724268, 0.018935822, -0.021785261, -0.019453902, 0.03797526, 0.0039665494, 0.017187301, -0.010374551, 0.014622806, 0.01247925, 0.007188359, -0.021888876, -0.014985462, -0.028960668, 0.019440949, -0.031913724, -0.0024252618, 0.019168958, 0.020425301, 0.021824118, 0.015633062, 0.017575862, -0.014674614, 0.02385758, 0.02839078, -0.0052941293, 0.009811139, -0.01652675, -0.0037496034, -0.0054268874, -0.0014376718, -0.0153869735, -0.020826813, 0.0060032513, 0.010866727, -0.008120903, 0.013495982, -0.02469946, 0.028079933, -0.011061006, -0.0024803076, -0.0020755576, -0.025826285, -0.017498149, 0.02508802, 2.102676E-4, 0.006994079, 0.013845686, -0.0184825, 0.005355651, -0.006670279, -0.01150785, -0.006722087, 0.019220766, 0.0024155476, 0.0061554373, -0.0030663856, -0.008561271, -0.007525111, -0.016980069, 0.022381052, 0.009824091, 0.02436271, -0.039374076, 0.037042715, 0.0049541392, -0.0042773974, 0.027017869, -0.019298477, -0.0011405853, 0.014506238, 0.010063702, 0.006420953, -0.0041932096, -0.006087439, 0.004338919, -0.008885071, -0.016358374, -0.030281771, -0.022601238, -0.005300605, 0.021733453, -0.03020406, -0.0013170564, 0.034840874, -0.006812751, 0.014830038, 0.010232079, -0.021603933, -0.02774318, 0.023430165, -0.0032250476, -0.0017274728, -0.022963893, -0.0034873255, 0.012757719, 0.011689179, -0.0037722695, -0.009066399, -0.0035715136, -0.006760943, 0.013703214, 0.0011090148, 0.026227796, 8.9044985E-4, 0.006272005, -0.02515278, -0.005857541, 0.025981707, -0.006194293, -0.0065375213, 0.0109638665, -0.0057150694}}}, model:"text-embedding-ada-002-v2", usage:{total_tokens:9, prompt_tokens:9}}

★Click Here to Open This Script 

Posted in Natural Language Processing REST API Text | Tagged 12.0savvy 13.0savvy ChatGPT | 1 Comment

macOS 13の複合的な不具合。とくにPDF書き出しについて

Posted on 2月 24, 2023 by Takaaki Naganoya

いろいろ不具合が多すぎて、本当にこれがリリース版なのか理解に苦しむmacOS 13。リリース当初から、AppleScript経由でPagesの(大量の)書類に順次PDF書き出しを行わせると、PDF書き出しされない書類が発生することがわかっていました。

同じバージョンのPages 12.2.1でも、macOS 12.x上では問題が発生していなかったため、明確にmacOS 13.xが理由ではあるのですが、不具合の発生源がよくわかりません。

(1)Pages書類オープン後に時間待ちが必要?

macOS 13移行当初、Pages種類をオープンした後に一定の時間(1秒程度)待機を行って、内部の状態が安定するのを待ってPDF書き出しを行うようにしました。数十程度のPages書類であれば、これで問題は起こりませんでした。

(2)数百個のPages書類を順次オープン→PDF書き出しするとミスを行う

その後、百以上のPages書類を順次オープンして、時間待ちして、PDF書き出し処理を行ってみたところ、明確にPDF書き出しできない書類が複数出てきました。何回実行しても書き出されません。また、そのPages書類単独でPDF書き出しを行わせると問題なく書き出しが行えます。

このPDF書き出しミスを行う書類の動作を観察していると、指定した時間待ちが正しく行われません。delayコマンドに問題があるのかと考え、shellのsleepコマンドを試したりもしていますが、正しく時間待ちが行われません。

さらに、普通にPages書類からPDF書き出しできていたとしても、それを数回繰り返すとPDF書き出しされなくなる(何か、一定の回数書き出すと問題が発生するらしい)ため、macOS 13自体の再起動かログアウト→再ログインが必要でした。

そもそもmacOS 13の出来がよくない、いろいろ問題がありすぎるということ自体が問題なわけですが、、、「複数回実行しないと再現しない」「原因の所在がどこにあるのかよくわからない」といった状況で、レポート自体を行いにくいというのが現状です。

ほかにも、Finder上で選択したファイルをCommand-Oでオープンさせるとオープンできない場合があったりと(なんだこれ?)、何がやりたいのかよくわからないOSバージョンです。セキュリティ強化はもちろん重要ですが、まともに動かないOSをリリースされても、、、、さらに、Beta段階では許可されていた外付けSSDからの前バージョンのOSの起動がmacOS 13リリース以後は封じられており、そういうのは「まともなOS」をリリースできるようになってからやってほしい気持ちでいっぱいです。

もう、macOS 13自体、やり直してほしい気持ちでいっぱいです。macOS 10.13、macOS 10.15と同じかそれ以上にダメなバージョンにしか見えません。

Posted in Bug PDF | Tagged 13.0savvy Pages | Leave a comment

AppleScriptによるWebブラウザ自動操縦ガイドをmacOS 13対応アップデート

Posted on 2月 22, 2023 by Takaaki Naganoya

SafariやGoogle Chromeなど7つのmacOS用Webブラウザを操作するAppleScriptの書き方と有用な実例を紹介する電子書籍「AppleScriptによるWebブラウザ自動操縦ガイド」をアップデートしたv1.3を公開しました。ページ数も317から330ページに増加。macOS 12, Monterey & 13 Ventura, Apple Silicon Mac対応です。

→ 販売ページ

目次

1章 めんどうな操作を自動化しよう!
人間の手で操作して情報を集めたり、データ入力するのは非効率。スクリプトから操作して自動操作

2章 スクリプトエディタの使い方
AppleScript専用のスクリプトエディタの使い方など、基礎的な内容をご紹介。

3章 WebブラウザをAppleScriptから動かそう
macOS用Webブラウザの大半はAppleScriptから操作可能。AppleScript対応は必須の機能!

4章 Webブラウザの情報を取り出そう
Webブラウザ自体が大量の情報を管理しています。まずは、ブラウザの情報を調べてみましょう。

5章 指定URLをオープンしよう
誰にでも確実に行える操作です。かならず経験しておきましょう。URLをオープンした後が大事です。

6章 コンテンツをキャプチャして保存しよう
表示内容を変化しないデータや、再利用可能なデータとして残しておくことは、重要な処理です。

7章 Webコンテンツにアクセスしよう
HTML内の操作対象にアクセスするための、さまざまなアプローチをご紹介

8章 Webコンテンツを画面部品として操作しよう
画面上の部品と同様にWebコンテンツにアクセスして強引に操作する「奥の手」GUI Scripting

9章 ログイン、ログアウトしてみよう
ユーザー登録が必要なWebサイトの処理を行うために必須の作業です。意外とクリアしにくい箇所

10章 データをダウンロードして処理しよう
直接ダウンロードできないファイルのダウンロード完了を検出して、ファイル処理しよう! ダウンロード後にファイル整理したりファイル名を変更したり

11章 仮想ディスプレイでユーザーの誤操作を防ごう
ユーザーからの操作をガードするために、仮想ディスプレイを用意してWebブラウザを表示! 画面上から強引にScriptで動かすと、ユーザーの誤操作が一番の大敵

12章 さまざまな実行環境を知ろう
AppleScriptにはいろいろな実行環境があって、環境ごとにできる/できないことがあります。時間と気持ちに余裕のある時にでも読んでおくとよいでしょう。

13章 実例:Quoraの統計データを取得しよう
実際に、Quoraのアクセス情報ページにアクセスし、自分の投稿情報を取得してみよう!

14章 さまざまな技術資料。興味があったら読んでね
アプリケーション・オブジェクトの指定方法/AppleScript用語辞書の確認方法/Webブラウザの基礎的なScripting/Google Chrome系のWebブラウザのsdef/AppleScriptの歴史/AppleScriptのエラーコード表/各Webブラウザの用語辞書の変更履歴/AppleScript予約語一覧

Posted in Books news | Tagged 12.0savvy 13.0savvy Brave Browser Google Chrome Google Chromium Microsoft Edge Opera Safari Vivaldi | Leave a comment

Dockアイコンにプログレスバーを追加 v3

Posted on 2月 17, 2023 by Takaaki Naganoya

実行プログラムのDock上のアイコンにプログレスバーを描画して、プログレスバーの内容をアニメーションするAppleScriptです。オリジナルはedama2さんが書かれたものです。

以前のバージョンはmacOS 10.12以前の時代に書かれたものだったので、macOS 10.13以降の形式に書き換えました。

実行プログラムが何であっても、Dockにアイコンが表示されるかぎりはアイコンにプログレスバーを描画します。スクリプトエディタ、Script Debugger、AppleScriptアプレット、Script DebuggerのEnhanced Appletなどなど。

ただし、Dockにアイコンが表示されない種類のAppleScript実行プログラム(例:スクリプトメニュー など)については、プログレスバーは表示されません。

choose colorコマンドで色選択しているのは、あくまでもデモ動作のためであり、あらかじめRGB値を指定しておけばその色でプログレスバーを描画します。

プログラム中でプログレスバーの表示ループ中にてdelayコマンドで時間待ちしているのは、目で見てわかるようにしているだけで、本来この数値はもっと小さい値でかまいません(ただし、表示のためにdelayコマンドは必須です)。

AppleScript名:Dockアイコンにプログレスバーを追加 v3.scptd
use AppleScript
use scripting additions
use framework "Foundation"
use framework "AppKit"

property NSApp : a reference to current application’s NSApp
property NSColor : a reference to current application’s NSColor
property NSImage : a reference to current application’s NSImage
property NSGradient : a reference to current application’s NSGradient
property NSZeroPoint : a reference to current application’s NSZeroPoint
property NSBezierPath : a reference to current application’s NSBezierPath

on run
  set aASCol to choose color
  
set aCocoaList to retCocoaColorList(aASCol, 65535) of me
  
set aCol to makeNSColorFromRGBAList(aCocoaList)
  
  
set max to 100
  
repeat with num from 1 to max
    my progDockTile(max, num, aCol)
    
delay 0.05
  end repeat
  
  
#アイコンを元に戻す
  
NSApp’s setApplicationIconImage:(NSImage’s imageNamed:"NSApplicationIcon")
end run

#Dockアイコンにプログレスバーを追加
on progDockTile(max, current, strartColor)
  set appIcon to NSImage’s imageNamed:"NSApplicationIcon"
  
set iconSize to appIcon’s |size|()
  
  
tell (NSImage’s alloc()’s initWithSize:iconSize)
    
    
lockFocus()
    
    
appIcon’s dissolveToPoint:(NSZeroPoint) fraction:1.0
    
set n to (iconSize’s width) / 16
    
    
#プログレスバーの長方形
    
set myRect to current application’s NSMakeRect(n / 2, n, n * 15, n * 1.6) –>{origin:{x:4.0, y:8.0}, |size|:{width:120.0, height:12.800000190735}}
    
    
tell (NSBezierPath’s ¬
      bezierPathWithRoundedRect:myRect ¬
        xRadius:(myRect’s item 2’s item 2) / 2 ¬
        
yRadius:(myRect’s item 2’s item 2) / 2)
      
      (
NSColor’s colorWithWhite:1.0 alpha:0.4)’s |set|() –>背景色
      
fill()
      
      
NSColor’s whiteColor()’s |set|() –>枠色
      
stroke()
    end tell
    
    
if current is greater than 0 then
      if current is greater than max then set current to max
      
set myRect’s item 2’s item 1 to (myRect’s item 2’s item 1) / max * current
      
      
tell (NSBezierPath’s ¬
        bezierPathWithRoundedRect:myRect ¬
          xRadius:(myRect’s item 2’s item 2) / 2 ¬
          
yRadius:(myRect’s item 2’s item 2) / 2)
        
        
–set strartColor to NSColor’s colorWithRed:0.15 green:0.55 blue:1 alpha:0.8
        
set endColor to strartColor’s shadowWithLevel:0.7
        
set grad to NSGradient’s alloc()’s initWithStartingColor:strartColor endingColor:endColor
        
grad’s drawInBezierPath:it angle:270.0
      end tell
    end if
    
    
unlockFocus()
    
    
NSApp’s setApplicationIconImage:it
  end tell
  
  
return (current + 1)
end progDockTile

–Convert "choose color" RGB list (0-65535) to Cocoa color RGBA Array (0.0-1.0)
on retCocoaColorList(aColorList, aMax)
  set cocoaColorList to {}
  
repeat with i in aColorList
    set the end of cocoaColorList to i / aMax
  end repeat
  
set the end of cocoaColorList to 1.0
  
return cocoaColorList
end retCocoaColorList

on makeNSColorFromRGBAList(colList)
  copy colList to {redValue, greenValue, blueValue, alphaValue}
  
set aColor to NSColor’s colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:alphaValue
  
return aColor
end makeNSColorFromRGBAList

★Click Here to Open This Script 

Posted in GUI | Tagged 12.0savvy 13.0savvy Dock | Leave a comment

Post navigation

  • Older posts
  • Newer posts

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

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AppleScriptによる並列処理
  • macOS 15でも変化したText to Speech環境
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • デフォルトインストールされたフォント名を取得するAppleScript
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • Script Debuggerの開発と販売が2025年に終了
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • NSObjectのクラス名を取得 v2.1
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • 有害ではなくなっていたSpaces
  • AVSpeechSynthesizerで読み上げテスト

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (197) 14.0savvy (150) 15.0savvy (139) CotEditor (66) Finder (51) Keynote (119) 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) Pixelmator Pro (20) 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
  • process
  • 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年7月
  • 2025年6月
  • 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