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

月: 2021年4月

macOS 11.3、11.4betaの変更点?

Posted on 4月 29, 2021 by Takaaki Naganoya

printコマンドでプリンタを指定して出力をする機能がmacOS 10.14から10.15、11.xまですべて利かなかったのが、11.3だか11.4Betaで直っていますね。

# 11.3がリリースされた直後に11.4Betaが降ってきて、どちらで修正されたのか自分には判断できません。少なくとも11.4Beta上ではプリンタ指定ができています

黒歴史入り確実なこのバグ、とっとと「なかったこと」にしたかったのか、さすがにド派手な機能だったからなのか、直っていますね。もしかしたらこれまでにも、細かくバグを出していたのかもしれませんが、ソフトウェア的にプリンタ名を取得する手段が提供されてこなかったので、そのバグが「見えていない」だけだったのかもしれません。

AppleScript Engineering Teamも、AppleScript Studioのお守りから解放されたので、前向きな機能の実装にもパワーを割いてほしいところです。個人的には、Blocks構文が必要なCocoa APIを呼べるようにしてほしいですわ。

(Visited 26 times, 1 visits today)
Posted in Bug | Tagged 11.0savvy | Leave a comment

Keynoteの表の背景色がない箇所を白く塗る

Posted on 4月 29, 2021 by Takaaki Naganoya

Keynoteでオープン中の最前面の書類の現在表示中のスライド(ページ)の上にある表の背景色が塗られていないセルを白く塗るAppleScriptです。

一応、非同期処理モードを使うことでスピードを稼いでいますが、この処理は速くありません。非同期処理モードの宣言部分を外した姿が本当のスピードです。

全部一括で塗るとかRangeを指定して塗るといった処理ができるとスピードを稼げると思いますが、「辻褄合わせ」とか「例外」的な処理なので、(Apple側の対応は)あまり期待できないでしょう。


▲処理前


▲処理後

AppleScript名:Keynoteの表の背景色がない箇所を白く塗る
tell application "Keynote"
  tell front document
    tell current slide
      tell table 1
        set cList to every cell
        
repeat with i in cList
          tell i
            set tmpColor to background color
            
if tmpColor = missing value then
              ignoring application responses
                set background color to {65535, 65535, 65535}
              end ignoring
            end if
          end tell
        end repeat
      end tell
    end tell
  end tell
end tell

★Click Here to Open This Script 

(Visited 90 times, 1 visits today)
Posted in Color list | Tagged 10.14savvy 10.15savvy 11.0savvy Keynote | Leave a comment

Keynoteで現在表示中のスライド上にあるすべての表のカラム幅を自動調整

Posted on 4月 28, 2021 by Takaaki Naganoya

Keynoteで現在オープン中の書類の表示中のスライド(ページ)に存在する表のカラム幅を自動調整するAppleScriptです。


▲スライド上のカラム幅が不揃いの表を….


▲1列目はそのままの幅で、残りは均等割で調整します

AppleScript名:Keynoteで現在表示中のスライド上にあるすべての表のカラム幅を自動調整
— Created 2017-10-06 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

tell application "Keynote"
  tell front document
    tell current slide
      set tList to every table
      
      
repeat with i in tList
        set j to contents of i
        
prepareCoumnWidthInATable(j) of me
      end repeat
    end tell
  end tell
end tell

on prepareCoumnWidthInATable(aTable)
  tell application "Keynote"
    tell aTable
      set cCount to count every column
      
set cWidth to width of every column
      
set aWidth to width –table width
      
      
set aveWidth to (aWidth – (first item of cWidth)) / (cCount – 1)
      
      
tell columns 2 thru cCount
        set width to aveWidth
      end tell
    end tell
  end tell
end prepareCoumnWidthInATable

★Click Here to Open This Script 

(Visited 44 times, 1 visits today)
Posted in Number | Tagged 10.14savvy 10.15savvy 11.0savvy Keynote | Leave a comment

PDFにファイルサイズ縮小のQuartzフィルタをかけて出力

Posted on 4月 27, 2021 by Takaaki Naganoya

PDFに対して、Quartzフィルタをかけてファイルサイズを縮小する(はずの)AppleScriptです。

macOS標準搭載のPreview.appやColorSyncユーティリティを使うことで、PDFに対して各種Quartzフィルタを適用して加工できるようになっています。


▲/System/Library/Filtersに入っているQuartzフィルタ

フィルタする対象は「book20_Cocoa Scripting Course #03_v1.0_sampler.pdf」(16.7MB)です。

縮小した結果は22.2MB。オリジナルよりも大きくなってしまいました(実施前から分かっていたので、驚きはありません)。このテストはメインマシンのmacOS 10.14.6環境で実施しましたが、macOS 11.4betaの環境で実行してみたら22.1MB。オリジナルよりも大きくなるという意味では大差ありませんでした。

サンプルはKeynote書類から書き出したPDFで、AppleScriptによりTOCを添付してあるものです。Cocoa Scripting Course #3のリリース後も「もうちょっとPDF小さくなるんでは?」と試しています。Adobe Acrobatで縮小することでかなり小さくできることはわかっているものの、Acrobatとは縁を切りたい気持ちでいっぱいです。

色をいじくるフィルタについては問題なく動作しています。

AppleScript名:PDFにファイルサイズ縮小のQuartzフィルタをかけて出力.scptd
— Created 2014-12-26 by Takaaki Naganoya
— Modified 2021-04-27 by Takaaki Naganoya
— 2021 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "Quartz"
use framework "QuartzCore"

property QuartzFilter : a reference to current application’s QuartzFilter
property NSDictionary : a reference to current application’s NSDictionary
property PDFDocument : a reference to current application’s PDFDocument

property |NSURL| : a reference to current application’s |NSURL|

set aHFSPath to (choose file of type {"com.adobe.pdf"} with prompt "フィルタするPDFを指定してください")
set aPOSIX to POSIX path of aHFSPath
set aURL to (|NSURL|’s fileURLWithPath:aPOSIX)

set bHFSPath to (choose file name with prompt "出力先を指定してください")
set bPOSIX to POSIX path of bHFSPath

set origPDFdoc to PDFDocument’s alloc()’s initWithURL:aURL

set aFilterURL to |NSURL|’s fileURLWithPath:"/System/Library/Filters/Reduce File Size.qfilter"
set aQFilter to QuartzFilter’s quartzFilterWithURL:aFilterURL

set aDict to NSDictionary’s dictionaryWithObjects:{aQFilter} forKeys:{"QuartzFilter"}

origPDFdoc’s writeToFile:(bPOSIX) withOptions:(aDict)

★Click Here to Open This Script 

(Visited 196 times, 2 visits today)
Posted in PDF | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Piyo Menu Clicker for Stream Deckβ版を配布開始

Posted on 4月 26, 2021 by Takaaki Naganoya

ファイル名にクリックしたいアプリケーション名+メニュー名を書いておくと、そのメニューをクリックする「Piyo Menu Clicker for Stream Deck」のベータ版の配布を開始しました。

→ 配布ページ(@BOOTH)

β版のため2021/5/31までの試用期限を設けています。

旧称Dynamic Menu Clickerの機能強化版で、クリック先をファイル名から取得。メニュー項目の指定にワイルドカードが使えるなど、トグル式のメニュー項目にも対応しています。

(Visited 39 times, 1 visits today)
Posted in PRODUCTS | Tagged 10.14savvy 10.15savvy 11.0savvy Streamdeck | Leave a comment

電子書籍「Cocoa Scripting Course Volume #3 NSDictionary」を発売

Posted on 4月 24, 2021 by Takaaki Naganoya

eSeminor: Cocoa Scripting Course Volume #3 NSDictionary

Cocoa Scripting本「Cocoa Scripting Course #3 NSDictionary」の販売を開始しました(通称:Cocoa本3)。今回は、ちょっと凝った背景イメージを敷いていただけなのに、初回PDF書き出し時に1Gバイトを超える容量になって焦りました。最終的には100MBをちょっと超えるぐらいで収まっています。

ページ数:251ページ(うち、Vol.3独立部分 101ページ 2021/4/23現在)
フォーマット:PDF+Zipアーカイブ(通常AppleScript 664ファイル、Xcode based AppleScript 442 Project)

# 添付サンプルだけで、137MB分もあります

特別特典:
Script Debuggerの15%割引購入コード入り
購入後3か月まで、本書の内容で理解できない箇所について3か所まで補足説明
理解度確認テストで合格した方に修了証明書を発行

→ Cocoa Scripting Course #3
→ Cocoa Scripting Course #3 (お試し版)

内容:

macOSのAPIであるCocoaをAppleScriptから利用し、macOSの持つ強力な機能をアプリケーションの補助なしに直接呼び出せる「Cocoa Scripting」は、日々の業務やデータ処理に、たいへん強力な武器になります。

この、Cocoa Scriptingについてはとくに日本語の書籍が存在しておらず、これまでは「Xcodeの使い方、GUIの作り方、各メソッドの使い方….」といった、体系がまったく異なるObjective-Cの入門書で断片的に情報を得ることしかできませんでした。

Vol.3では、NSDictionary/NSMutableDictionaryを解説。AppleScriptのrecord型変数に該当するオブジェクトですが、高度な各種APIに対してのパラメータとして使われることが多く、XMLやplist、JSONやYAML、HTMLなど幅広いデータとの相互変換などが行えます。

さらに、NSArrayよりもソートが高速。さまざまな抽出機能を持っているため、データベースを併用していたような機能が、Cocoa Scriptingの導入で他のデータベースの手助けなしに実現できます。

基礎的なサンプルから高度な使い方までていねいに解説。実際に各種ソート処理の処理時間を計測しグラフ化して比較しています。

本書は「AppleScriptの穴」掲載AppleScriptのカテゴリ別アーカイブ集ともなっており、本書にはNSDictionaryなどレコード処理を行うサンプルScriptをはじめ有用なAppleScriptのファイルを大量に添付しています。とくに、XcodeベースのAppleScript Projectを多数収録。他に類を見ない充実度を見せています。

続刊予定:

eSeminor: Cocoa Scripting Course Volume #1 NSString (Basic object to know Cocoa API)
eSeminor: Cocoa Scripting Course Volume #2 NSArray(Most valuable API to use Cocoa with AppleScript to sort data)
eSeminor: Cocoa Scripting Course Volume #3 NSDictionary (Key object to access various other APIs)
eSeminor: Cocoa Scripting Course Volume #4 System hardware & software Information

eSeminor: Cocoa Scripting Course Volume #5 NSImage (image conversion and filtering)
eSeminor: Cocoa Scripting Course Volume #6 NSAttributedString (Attributed string and HTMLs)
eSeminor: Cocoa Scripting Course Volume #7 NSFileManager (File processing)
eSeminor: Cocoa Scripting Course Volume #8 NSURL (Cloud API Scripting)
eSeminor: Cocoa Scripting Course Volume #9 PDFKit (PDF Processing)
eSeminor: Cocoa Scripting Course Volume #10 Webkit (WebView Scripting)

(Visited 38 times, 1 visits today)
Posted in Books PRODUCTS | Leave a comment

Pagesで最前面の書類中のテキストアイテムと本文テキストで文字サイズが最大のもののテキストを求める

Posted on 4月 12, 2021 by Takaaki Naganoya

Pagesの最前面の書類中のテキストアイテム(ボックス)中のテキストと、本文テキスト(body text)で文字サイズが最大のものを取得するAppleScriptです。Pagesで書いた書類からタイトルらしきものを抽出するために書いたものです。

まず、前提条件を書いておかなければなりません。

一般的なDTPアプリケーション(InDesignとか)やワープロであれば、書式スタイルが「タイトル」のテキストを求めるといった処理になりますが、Pagesにはその機能がありません。正確にいえば、PagesのAppleScript用語辞書にはその機能がありません。そこで、「各文書のタイトルには文章中で最大の文字サイズを設定しておく」というルールを自分に課して、文字サイズが最大のものを取得すればタイトル文字列が取得できるように決めておきました。

テキストアイテム中の最大サイズの文字を抽出し、そのあとで本文テキスト(body text)の最大サイズの文字を抽出、両者の間で最大サイズのものを求めて返します。

目下、実際に本を書き出すのに「指定フォルダ以下のPages、Markdown、Word Document、PDFをすべてPDF化してファイル名順でソートして結合」するAppleScriptを作って利用しているのですが、これにTOCつきPDFを書き出す機能を結合できるといいなーと思って書いています。

Keynote書類からTOCつきPDFを書き出すAppleScriptは実戦レベルのものを作って運用しており、これを用いて電子書籍を作っています(逆をいえば、このAppleScriptの開発に成功したのでバカスカ電子書籍を作れているわけで)。

TOCつきPDFをPagesなどの書類群から書き出せるようになれば、PagesやMarkdownで書いた書籍も自動でTOCつきPDFを生成できるわけで、PagesやMarkdown系の書類で作った書籍も手軽に生成できるようになるはずです。

AppleScript名:pagesTitleLib.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/06/12
–  Modified on: 2021/04/10
—
–  Copyright © 2020 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 NSCharacterSet : a reference to current application’s NSCharacterSet
property NSMutableArray : a reference to current application’s NSMutableArray

set aRes to pagesTitleGetter() of me
–> "商標、著作権について"

on pagesTitleGetter()
  set tiList to getLargestTextItem() of me –Text Item
  
set bList to getLargestBodyText() of me –Body Text
  
  
if tiList = {} and bList = {} then return ""
  
if tiList = {} and bList ≠ {} then set allList to bList
  
if tiList ≠ {} and bList = {} then set allList to tiList
  
  
set allList to tiList & bList
  
–> {{10.0, "Macrovector – jp.freepik.com によって作成された business ベクトル"}, {16.0, "商標、著作権について"}}
  
  
set allRes to returnMaxItem(allList, 1, 2) of me
  
set bRes to repChar(allRes, string id 10, "") of me
  
set bRes to repChar(bRes, string id 13, "") of me
  
  
return bRes
end pagesTitleGetter

–2D Listのうち、指定アイテム目の最大値をもとめ、その指定アイテムを返す
on returnMaxItem(aList, seekItemNum, retItemNum)
  script spd
    property aList : {}
  end script
  
  
set (aList of spd) to aList
  
  
set tmpMax to 0
  
set tmpItem to 0
  
set aCount to 1
  
repeat with i in (aList of spd)
    set tmpV to item seekItemNum of i
    
if tmpV > tmpMax then
      copy tmpV to tmpMax
      
set tmpItem to aCount
    end if
    
    
set aCount to aCount + 1
  end repeat
  
return item retItemNum of item tmpItem of (aList of spd)
end returnMaxItem

–Pagesの最大文字サイズのText Item中の最大テキストを返す
on getLargestTextItem()
  set rList to {}
  
  
tell application "Pages"
    if not running then return {}
    
if every document = {} then return {}
    
tell front document
      set tmpList to every text item
      
if length of tmpList = 0 then return –テキストアイテムがない場合には処理終了
      
      
set szList to size of object text of every text item
      
if szList is not equal to {} then
        set aMaxPoint to calcMax(szList) of me –最大の文字サイズを取得
        
        
–文字サイズが最大のテキストアイテムを抽出
        
–set resList to object text of every text item whose size of object text is aMaxPoint
        
set resList to every text item whose size of object text is aMaxPoint
        
        
repeat with ii in resList
          –指定のtet item内の文字のサイズをすべて取得
          
set cList to size of every character of object text of ii
          
          
–文字サイズのうち最大のものを取得
          
set cMax to calcMax(cList) of me
          
          
–最大サイズの文字のみ抽出
          
set cRes to (every character of object text of ii whose size = cMax)
          
set cText to cRes as string
          
          
–取得したテキストの前後の改行などを削除してクリーンアップ
          
set c2Text to cleanUpTextFromHEadAndTail(cText) of me
          
          
set c2Text to repChar(c2Text, string id 10, "") of me
          
set c2Text to repChar(c2Text, string id 13, "") of me
          
          
–何か結果が得られていたら、リストに加える
          
if c2Text is not equal to "" then
            set the end of rList to {cMax, c2Text}
          end if
        end repeat
      end if
    end tell
  end tell
  
  
return rList
  
–> {{10.0, "Macrovector – jp.freepik.com によって作成された business ベクトル"}}
end getLargestTextItem

on getLargestBodyText()
  set esList to {}
  
  
tell application "Pages"
    if not running then return {}
    
if every document = {} then return {}
    
tell front document
      set sCount to count every section
      
repeat with i from 1 to sCount
        tell section sCount
          set sList to size of every character of body text
          
if sList is not equal to {} then
            set cMax to calcMax(sList) of me
            
            
–最大サイズの文字のみ抽出
            
set cRes to (every character of body text of it whose size = cMax)
            
set cText to cRes as string
            
            
–取得したテキストの前後の改行などを削除してクリーンアップ
            
set c2Text to cleanUpTextFromHEadAndTail(cText) of me
            
            
set c2Text to repChar(c2Text, string id 10, "") of me
            
set c2Text to repChar(c2Text, string id 13, "") of me
            
            
            
set tmpList to {cMax, c2Text}
            
            
set the end of esList to tmpList
          end if
        end tell
      end repeat
    end tell
  end tell
  
return esList
end getLargestBodyText

on repChar(origText as string, targStr as string, repStr as string)
  set {txdl, AppleScript’s text item delimiters} to {AppleScript’s text item delimiters, targStr}
  
set temp to text items of origText
  
set AppleScript’s text item delimiters to repStr
  
set res to temp as text
  
set AppleScript’s text item delimiters to txdl
  
return res
end repChar

on calcMax(aList as list)
  set nArray to (NSMutableArray’s arrayWithArray:aList)
  
set maxRes to (nArray’s valueForKeyPath:"@max.self")’s doubleValue()
  
return maxRes
end calcMax

on cleanUpTextFromHEadAndTail(aStr)
  set aString to NSString’s stringWithString:aStr
  
set bStr to (aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet()))
  
return bStr as string
end cleanUpTextFromHEadAndTail

★Click Here to Open This Script 

(Visited 45 times, 1 visits today)
Posted in list | Tagged 10.14savvy 10.15savvy 11.0savvy Pages | 1 Comment

最前面の書類中のテキストアイテムの文字サイズが最大のものの中に入っている最大のテキストを求める

Posted on 4月 10, 2021 by Takaaki Naganoya

以前に作った、Pagesのページ中のテキストアイテムのうち最大文字サイズのものを抽出するAppleScriptの強化版です。その最大文字サイズの文字を含むテキストアイテムの中から、さらに最大文字サイズのテキストを取り出します。

タイトル部分(と思われるテキストアイテム)から、さらに最大文字サイズのものだけを抽出。

用途は、Blog新アーカイブ本の作成時に書類からタイトルを取り出す処理を行えないか実験してみたものです。このページだけ、この例外のデータだったのですが、あとから考えれば文字サイズの小さなサブタイトル的なものは別のテキストアイテム(ボックス)に分ければよかっただろうかと。

AppleScript名:最前面の書類中のテキストアイテムの文字サイズが最大のものの中に入っている最大のテキストを求める.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/06/12
–  Modified on: 2021/04/10
—
–  Copyright © 2020 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 NSCharacterSet : a reference to current application’s NSCharacterSet
property NSMutableArray : a reference to current application’s NSMutableArray

set rList to {}

tell application "Pages"
  tell front document
    set tmpList to every text item
    
if length of tmpList = 0 then return –テキストアイテムがない場合には処理終了
    
    
set szList to size of object text of every text item
    
set aMaxPoint to calcMax(szList) of me –最大の文字サイズを取得
    
    
–文字サイズが最大のテキストアイテムを抽出
    
–set resList to object text of every text item whose size of object text is aMaxPoint
    
set resList to every text item whose size of object text is aMaxPoint
    
    
repeat with ii in resList
      –指定のtet item内の文字のサイズをすべて取得
      
set cList to size of every character of object text of ii
      
      
–文字サイズのうち最大のものを取得
      
set cMax to calcMax(cList) of me
      
      
–最大サイズの文字のみ抽出
      
set cRes to (every character of object text of ii whose size = cMax)
      
set cText to cRes as string
      
      
–取得したテキストの前後の改行などを削除してクリーンアップ
      
set c2Text to cleanUpTextFromHEadAndTail(cText) of me
      
      
–何か結果が得られていたら、リストに加える
      
if c2Text is not equal to "" then
        set the end of rList to c2Text
      end if
    end repeat
  end tell
end tell

return rList
–> {"Shane StanleyのScript Toolの変遷"}

on calcMax(aList as list)
  set nArray to (NSMutableArray’s arrayWithArray:aList)
  
set maxRes to (nArray’s valueForKeyPath:"@max.self")’s doubleValue()
  
return maxRes
end calcMax

on cleanUpTextFromHEadAndTail(aStr)
  set aString to NSString’s stringWithString:aStr
  
set bStr to (aString’s stringByTrimmingCharactersInSet:(NSCharacterSet’s whitespaceAndNewlineCharacterSet()))
  
return bStr as string
end cleanUpTextFromHEadAndTail

★Click Here to Open This Script 

(Visited 33 times, 1 visits today)
Posted in Text | Tagged 10.14savvy 10.15savvy 11.0savvy Pages | Leave a comment

手元に残っているAppleScript本

Posted on 4月 10, 2021 by Takaaki Naganoya

もはや「本」といえば「勝手に書いて勝手にオンラインストアで売るもの」という存在で、他人の本を最近そんなに読んだ覚えがありません。そんな自分の本棚にも何冊かAppleScript系の書籍が転がっています。

一番存在感があるはずの「AppleScriptリファレンス」は、どこかに転がっていて見つかりません。自分たちで書いた、しかも800ページぐらいある本ですが、なくても大丈夫なように支援Script(コンテクストメニューから入力できる)を整備しまくったので、あの手のリファレンス本が手元にある必要がなくなってしまいました。

全般的に、AppleScript系の日本語の書籍で「こりゃすごい!」というものにお目にかかったことがなくて、面白くないしわくわくしないし、知識的にもたいして参考になるものがないしで、不満ばかり抱えていました。ここに出ていない本は「論外」のさらに外のものばかりです。

「The Tao of AppleScript」

1990年代当時流行っていた「Tao(道)」をタイトルに冠した本の日本語訳。書店に並んで割とすぐ購入した記憶があります。同梱フロッピーに入っていた「スクリプト対応エディタ」をAppleScriptからコントロールして、画面の隅を直線的に移動させるスクリプトが印象的。当時からこの直線的な動きが気に入らなくて、のちに三角関数で軌道計算して楕円移動させるScriptを書く原動力になりました。

最初に本書付録Scriptを動かして「勝手にアプリケーションが操作されて怖い!」と感じた記憶があります。勝手にコンピュータのアプリケーションを動かされると、最初はちょっと怖いですよねー。

AppleScriptに対しての第一印象は「コ難しそうな見た目の割に、大したことができないもの」というものでした。

本書も、ちょっと読んですぐに本棚に放り込んでおいた記憶があります。いま読むと、筆者がいろいろ頑張って書いてはいるものの、リストとか配列とか、そういう用語が使われていないので、いまひとつピンと来ない内容に感じます。書いている方もそういう感じだったんでしょう。

あと、絶望的にScriptが書きこなれていないとか、わかりやすく書かれていないとか。センスの欠如を感じるものであります(世界でほぼ最初に出た本なので、それは無理)。この、クラシカルな書き方をひきずっているScripterの集団をみかけたことがあって、Scriptを読んだだけでめまいがしました。どことは言いませんが……。

自分が本格的にAppleScriptを使うようになったのは、部署を月刊誌の編集部からWeb系の運営チームに移ってからです。メールを登録者に一斉送信しなくちゃいけないとか、データベースに入力した製品カタログをHTMLに書き出してCD-ROMに焼いて配布しないといけないとか、ちょっと手の込んだWebコンテンツを自動で作りたいとか、アンケートのCGIをフォームから自動で作りたいとか、そういうニーズを満たすために1週間ぐらいで覚えました。Script Debuggerを購入してアホみたいにステップ実行で動作を確認していました。

# Script Debuggerこそ初心者に使ってもらうべきツール。あれがあるだけでAppleScriptの理解が3億倍ぐらい深まる

「AppleScript言語ガイド 英語表現形式」

後にも先にもこれ1冊、Apple ComputerによるAppleScript公式解説書。ただ、これをほとんど読んだ記憶がありません。1990年代、日本国内のScripter同士が話をすることがほとんどなくて、自分は海外のMailing Listで情報をやりとりするだけでした。逆に日本国内のScripter同士で会話が通じなくて、そのためにこの本で用語を調べた記憶があります。aeteリソースを日本語でどう発音するのかで議論になったりしました(「えーいーてぃーいー」派と「えいと」派がいました。著しくどうでもいい話ですが、日本人同士でコトバが通じなくて困っていました)。

サンプルも大量に書かれていて、とてもいい本なのですが、1ページ以上続けて読むことに抵抗をおぼえます。辞書とか教科書みたいな本で、味付けがほとんどありません。

こういう本は1冊あるべきだと思うものの、つまんねー本の代表みたいな本でした。フォントの使い方とかで「見せる」努力をほとんどしておらず、「正しさ」で出来上がっている本とでもいうのでしょうか。でも、必要な本だと思います。

たまに本棚から取り出して眺めてみると、けっこう知らないことが書かれていて焦ります。知らなくて済むということは、ほぼ「実用的ではないこと」なのですが、案外それが他人に説明するときに必要な言葉や概念だったりして焦ります。

「AppleScriptでぜんまいびゅんびゅん」

古今東西、これしか存在しないだろうという奇書中の奇書。「日本語AppleScript」について書かれた本で、サンプルもすべて日本語AppleScriptで書かれています。

当時からの海外のアプリケーションしか使っていなかったので(EudoraもFetchも日本語版なんてずいぶん後に出てきました)、海外のScripterと話が通じない「日本語AppleScript」(Japanese Dialect)なんて悪い冗談だと思っていましたし、自分自身、実際に日本語AppleScriptのプログラムリストを読んで、理解できる感じがしませんでした(「ぴゅう太」の日本語Basicみたいでした)。

日本のコミュニティの中でケンカしながら質問するよりも、海外のMLで情報収集していたほうがはるかに効率的だったので、日本のコミュニティの中にいる意義がほとんどなく、この日本語AppleScriptも海外のScripterと話が通じなくなるのなら覚える必要もないし、すぐに廃れてなくなるだろうと思っていました。

日本語は同義語や類義語が多いので、ちょっとした言葉遣いを間違えるとエラーになるという仕様については実用性を感じませんでした。本書もきれいなまま本棚で干物になっていました。たぶん、通しで読んだことは一度もありません。

こうした傾向は後日AutomatorのActionを検索するキーワードでも痛感しました。

「こっちのActionでは写真といい、別のActionではイメージといい、はたまた別のActionでは画像と言う」

という支離滅裂さで再現されることになります。Automator Ver.1.0が出た瞬間に「検索キーワードに同義語や類義語を通すようにしないと使い物にならんよ」と意見しておきましたが……。

「AppleScript Programming for Mac OS X」

AppleScript Studioの本です。524ページもあって、とても内容が充実していました。とても堅実かつ誠実に作られているのですが、残念ながらこれも通しで読んだことはありません。読後感がよろしくなくて、読むと眠くなります。「プログラムリストを白黒で掲載されると眠くなる」と当時は思っていました。

悪い本ではないのですが、用例がとてもつまらないというか、初心者向けにはそういう単純な用例のほうがためになるはずなんですが、読むと絶望的に眠くなる本でした。レイアウトデザインに問題があるのではないかと思います。デザイナーがページデザインを頑張りすぎている、とか。

あまり奇抜なデザインにせず、デザイン的には棒組みに近い形態のほうがいいように思います。雑誌のセンスでそのまま書籍を作るとこんな感じになるのだろーか、という見本でもあります。

あとは、説明が強引すぎて納得できない箇所が多すぎるとか、強引に説明している割に書籍で説明している最終到達点が低いので興醒めだとか、そういうポイントも多々あります。

でも、Xcodeの使い方はだいたいこの本で覚えました。自由自在にプログラムを組めるようにはなりませんでしたが、Xcode(Project Builder+Interface Builder)を使えるようにはなりました。

「AppleScript Studioでぜんまいびゅんびゅん」

AppleScript系の本で、はじめて眠くならなかった画期的な本です。

わかりやすくて、サンプルが実用的で、うだうだ説明しないという、商品設計の勝利みたいな本でもあります。

「AppleScript Programming for Mac OS X」をベースにしながらも、内容をけずって文字の情報量を減らしているのですが、それが大変にわかりやすく、この本の存在は画期的でした。

文字通り穴が開くまで読み返し、マーカーで線を引き、大量の付箋を貼って読み返しました。これまでに日本国内で発行されたAppleScript関連書籍で自分的にいちばん面白かった本です。

(Visited 171 times, 2 visits today)
Posted in Books | Leave a comment

New Blog Archives

Posted on 4月 9, 2021 by Takaaki Naganoya

Blogのアーカイブ本は、以前の消失したBlogをサルベージしたものを6冊ほど出しています。

現行のBlogについては、WordPressおよび構成部品のアップデートをまめに行うことで、どこぞの極悪非道なWebホスティング会社がいきなりDBサーバーをシャットダウンするような暴挙に遭遇しないように……したいですね。

Webホスティング会社は単なる上位ホスティング会社のリセーラーでありながら、肝心のサポート能力がほぼ皆無で日本語で正しく意思疎通を行うことが困難です。信頼感はまったくありません。以前は知り合いにすすめていたのですが、あの暴挙を経てまったくおすすめできない状況です。

インターネットプロバイダとWebホスティング業者は、事前の話どおりなのか実際に試してみないとさっぱりわからないので(しかも、利用している間に状況が変わったりする)、乗り換えコストがひじょーに大きいサービスであり、実際に利用しているユーザーの口コミしか信用できません。

一方で、過去記事をアーカイブ本の形でまとめておけば、Blogが吹き飛んでも記事の内容を参照できるし、Blogの形でWebブラウザ上で読むよりも読みやすいという声があります。

Blogが吹き飛んだといった緊急事態に対処する性質のものではないので、現行のBlogのアーカイブ本については緊急度はありません(たぶん)。

Piyomaru Softwareが刊行可能な本をまとめると、このように(↑)なり、「できることしかできない」ので、可能なものを順次出しているところですが、新Blogアーカイブを検討すると、

のような内容になりそうです。

Blogアーカイブ本については「発行する手間」と「世間一般的に期待される値付け」×「予想販売数」を比較すると、どうしても手間のほうが大きいところ。つまり、手間がかかる割に実入りが少ない本の典型例なので、そこが難しいところです。

(Visited 33 times, 1 visits today)
Posted in Books PRODUCTS | Leave a comment

Piyomaru Software 電子書籍発行20冊目を記念する本、それは….

Posted on 4月 7, 2021 by Takaaki Naganoya

これです。この、東京都西多摩地方で発生したとされる「ヤバい」という言葉。「危険」という意味から転じて「すごくいい」などの意味でも用いられている、現代日本語を代表する「ちょっと何言ってるのかよくわかんない」言葉です。

# 英語で言うと「Bad」?

バブル期に氾濫していた「かわいい」もそうですね。ちょっと前だと「ワンチャン」という、運用がとても難しい言葉があり、頭を悩ませました。

この「ヤバイ」という言葉が多義的であり情緒的であり曖昧であることを利用。「わけがわからんが、なんかスゲエ」というニュアンスというよりも「危険」「ひどい」と思わせて意識誘導しておきながら、その後の記事の積み重ねにより「すげえ」という感想にコペルニクス的転回をさせるような、そうした爽快な読後感をもたらすような本にしたいと考えております。

まだ企画段階であり、あーでもないこーでもない、と企画をこねくり回しているところですが、それほど分厚い本にする予定もないので、60ページ程度の「うっすい本」になることでしょう。

20冊を記念するようなもっと崇高で壮大な本にしようという案もあったのですが、すでに崇高(Book 2とか)や壮大(Book 1とかCocoa Scripting Courseとか)なものは作ってしまっていたので、「下世話」(に一見見える)な方向に振ってみたという….。

# などと企画を練っている間に、後発のBlog新アーカイブ本に追い抜かされたりして、、、
## さらに後続のCocoa Scripting本に抜かされてしまいました。意外と手間取っています、、、

(Visited 32 times, 1 visits today)
Posted in PRODUCTS | Leave a comment

アウトプットするとインプットもある?

Posted on 4月 5, 2021 by Takaaki Naganoya

いまからはじめるプログラミング②を書いていていろいろ新情報を見つけてしまいました。

すでにご存知の方もいるかもしれないので、「この俺がぁぁぁぁ、世界でぇぇぇぇ、一番に見つけたァァァァァァ!!!」と主張するわけではありません。「そういえばそうだよね」ぐらいの印象のものです。

長年deprecatedだと表示されてきたけど、そろそろそんな気がするinfo forコマンド

誰もがファイル情報の確認時に雑に使っているStandardAdditions.osax中の「info for」コマンド。長年「deprecated」扱いになっていました。

そんなにdeprecated感はなかったのですが、macOS 11上で使ってみるとその遅さにめまいがしました。

System Eventsでfileのpropertyを取得したほうがはるかに高速で、さすがにもうinfo forを用例で引き合いに出すのは無理があるなと感じました(②巻のリリース直前に気づいて書き直した次第です)。

ファイル処理は完全にCocoa系の機能を使ったほうが速くて強力なので、最近はまじめに深掘りしていなかったのですが、入門者向け本を書いてみて気になりました。入門者向け本にCocoaのコードはさすがに書けません、、、、

as alias listはないけれど……

Finderからまとめてfileを取得する際に、「as alias list」という用語が使えます。通常はfileなりdocumentなりのオブジェクトをlistで返してくるFinderですが、aliasで結果がほしい(ファイルパス情報だけほしい)というケースが多々あります。

それに応えるかたちで「as alias list」が、たしかMac OS X 10.4あたりで新設されました(selectionからファイルをとってくる処理が、えっらく簡単になった記憶があります)。

その後、Mac OS X 10.6あたりで(?)System Eventsにファイル関連のSuitesが新設され、「あー、こりゃFinderのないOS環境、ワンチャンくるかも?」と怯えていたのですが、さすがにFinderを廃止すると反発が大きいという判断をしたのでしょうか、「FinderレスMac OS X環境」という世界観はやってきませんでした(iOSあたりはそういう感じですけれども)。

で、System Eventsにファイル関連のSuitesができても「これ本気で使わせたり移行させたりするつもりがあるんか?」という雰囲気で、Finder上で行っていたファイル処理をそのまま移し替えられる様子ではなく、速度面でも腰が抜けるほど速いわけでもなく、Appleのエンジニアリングチームが何を考えているのか意図を測りかねていました。

指定フォルダ内のfile一覧をaliasで取得しようとして、

set aFol to choose folder
tell application "Finder"
	set aRes to every file of aFol
end tell

という処理を、

set aFol to choose folder
tell application "System Events"
	set aRes to every file of aFol
end tell

と、書き換えて、ふとaliasで欲しいと思って、

set aFol to choose folder
tell application "System Events"
	set aRes to every file of aFol as alias list
end tell

などと書いてみてもエラーに(知ってたけど)。そこで、冗談半分に、

set aFol to choose folder
tell application "System Events"
	set aRes to every alias of aFol
end tell

と、書いてみたら………期待どおりの動作に。aliasのlistで結果が返ってきます。

log on/log offってあったよね? ねえ、あったって言って

ログ(履歴)出力用のlogコマンド、そのログ出力を許可/禁止するlog on/log offコマンドがClassic Mac OSの時代には存在していま……

魔が差して、Classic Mac OSエミュレータ「SheepShaver」を起動してClassic Mac OS 8.6上で確認してみたら……

あっれえええええ???
log on/log offコマンドが存在していないよ?

現行のmacOSで確認されている(でも、AppleScript Language Guideに書かれていない)「start log」「stop log」を書いてみたら……通りますね。

当時流通していた何かのOSAXで提供されていたコマンドだったのか、ちょっとショックです。

駄目押しで、1999年に作成された「AppleScript Language Guide」で「logコマンド」まわりを確認してみたら「start log」「stop log」がある!!!

自分の「薄い資料集」を書き換える必要がありますね。
まー、気づいたのでヨシ!(よくない)

われながら、よくもまあこれだけド派手に間違ったもので。修正方法もいろいろ考えなくてはなりませんね。

なんといいますか、現在では現役ではないプラットフォーム(Classic MacOS)に関する言及の部分なので、しれっと「そんなことはなかったよ」という顔をして修正するのもアリなんですが、個人的にショックです(FileMaker選手権で落ちたときよりは大きくないですが)。

しばし放置しつつ、様子を見てみましょう、、、、
→ 相談したら、「誰も気にしてないので直せばいい」とのこと。直しておきました。すでに購入された方は再度購入ページからダウンロードしてください。

(Visited 71 times, 1 visits today)
Posted in news | Tagged 10.14savvy 10.15savvy 11.0savvy | 2 Comments

Macとアップルスクリプトで学ぶ いまからはじめるプログラミング②

Posted on 4月 5, 2021 by Takaaki Naganoya

Piyomaru Softwareがはじめて刊行した入門者向け本「Macとアップルスクリプトで学ぶ いまからはじめるプログラミング」の続刊である「同 ②」を刊行しました(全34ページ)。期間限定で156ページほどの最新版のAppleScriptコマンドリファレンスその他いろいろなんやかんやの「薄い本」がつきます。

→ 販売ページ

# 既刊本の①巻のおまけもv1.1からv1.2にアップデートしておきました。オマケにエラーコード表を追加しています。お買い上げの方は購入ページからダウンロード可能です

ほかに、新規企画で「ヤバイAppleScript ベスト10」という本の企画が立ち上がりました。まだ企画段階ですが、企画が固まれば出せることでしょう(気楽で安全でためになる読み物本です)。

ほかにも、「泣けるAppleScriptベスト10」という企画も出たものの、こちらはさすがに無理だという結論になりました。泣かされたことならあるのですが、さすがに泣かせるようなものは無理です。

(Visited 64 times, 1 visits today)
Posted in PRODUCTS | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

「Macとアップルスクリプトで学ぶ いまからはじめるプログラミング①」アップデート

Posted on 4月 1, 2021 by Takaaki Naganoya

Piyomaru Softwareがはじめて刊行した入門者向け本「Macとアップルスクリプトで学ぶ いまからはじめるプログラミング①」(全30ページ)をv1.1にアップデートしました。

本体:30ページ → 33ページ
オマケ:150ページ(体裁その他、いろいろ微調整。ページから表がはみ出していた箇所など全体的に修正)

購入ページから再ダウンロードを行なっていただけますよう、お願いいたします。

(Visited 63 times, 1 visits today)
Posted in PRODUCTS | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

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

Google Search

Popular posts

  • AppleScriptによるWebブラウザ自動操縦ガイド
  • macOS 13, Ventura(継続更新)
  • ドラッグ&ドロップ機能の未来?
  • macOS 12.x上のAppleScriptのトラブルまとめ
  • PFiddlesoft UI Browserが製品終了に
  • macOS 12.3 beta 5、ASの障害が解消される(?)
  • SF Symbolsを名称で指定してPNG画像化
  • 新刊発売:AppleScriptによるWebブラウザ自動操縦ガイド
  • macOS 12.3上でFinder上で選択中のファイルをそのままオープンできない件
  • Pixelmator Pro v2.4.1で新機能追加+AppleScriptコマンド追加
  • Safariで表示中のYouTubeムービーのサムネイル画像を取得
  • macOS 12のスクリプトエディタで、Context Menu機能にバグ
  • 人類史上初、魔導書の観点から書かれたAppleScript入門書「7つの宝珠」シリーズ開始?!
  • UI Browserがgithub上でソース公開され、オープンソースに
  • macOS 12.5(21G72)がリリースされた!
  • Pages v12に謎のバグ。書類上に11枚しか画像を配置できない→解決
  • 新発売:AppleScriptからSiriを呼び出そう!
  • iWork 12.2がリリースされた
  • macOS 13 TTS Voice環境に変更
  • NSCharacterSetの使い方を間違えた

Tags

10.11savvy (1102) 10.12savvy (1243) 10.13savvy (1391) 10.14savvy (586) 10.15savvy (434) 11.0savvy (274) 12.0savvy (174) 13.0savvy (34) CotEditor (60) Finder (47) iTunes (19) Keynote (97) NSAlert (60) NSArray (51) NSBezierPath (18) NSBitmapImageRep (21) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (18) NSImage (42) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (118) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSUUID (18) NSView (33) NSWorkspace (20) Numbers (55) Pages (36) Safari (41) Script Editor (20) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • 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
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • 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)
  • 未分類

アーカイブ

  • 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