About

  • Macintosh の自作ソフトウェアを公開しています。
  • 配布しているアプリケーションは、すべてフリーウェアかつソースコードを公開しています。
  • コメント、不具合の報告、ご要望を待っています。

Donation

このサイトで配布しているソフトを常用されている方は寄付をお願いします。

Tags

2016.08.25

09:29:23Permanent Link

Droplet Icon MergePDF : PDF/画像 ファイルを、Finder 上で並んでいる順番にしたがって、一つの PDF ファイルに束ねます

フォルダに含まれている PDF/画像 ファイル(PDF だけでなく一般的な画像ファイルも)を一つの PDF ファイルに束ねるためのアプリケーションです。

PDF/画像ファイルを束ねる際に、その順番が問題になると思いますが、フォルダの表示に従ってその順番を決定します。すなわちフォルダ内でファイルが見えている順番で束ねるので非常に直感的ですし、束ねる順番の変更も簡単です。

変更点:

  • ブックマークを持っている PDF をマージできない不具合を修正。
  • コード署名をつけた。
  • Sparkle フレームワークをアップデート

2016.08.23

01:41:56Permanent Link

OSAX ModuleLoader 3.0 : AppleScript の近代的なライブラリシステム

ModuleLoader は AppleScript のライブラリシステムです。必要最小限の記述で外部のライブラリ/モジュールとしてのスクリプトをロードすることができます。

OS X 10.9 から AppleScript にライブラリ機能がサポートが追加されました(AppleScript Libraries) 。ModuleLoader は、それ以前の2006年から継続的に開発/メンテナンスされてきたライブラリシステムです。おおよそ AppleScript Libraries と同じことができます。

変更点:

  • AppleScript Libraries と相互運用できるようにした。
    • OS X 10.9 で導入された AppleScript Libraries のライブラリの保存場所(~/Libraries/Script Libraries, /Libraries/Script Libraries) からもモジュール/ライブラリを検索/ロードします。
    • AppleScript Libraries の 「use LibName : script "LibName"」形式のライブラリのロードを解釈して、AppleScript Libraries の代わりにロードします。
  • module loaded by イベントを実装した時、その戻り値をロードしたライブラリとして扱われるようになった。
  • コードの近代化
  • Mac OS X 10.7 以降が必要になった。
  • コード署名を追加した。

2016.08.04

18:23:15Permanent Link

ModuleLoader のマニュアルのドラフト - module loaded イベント

現在執筆中の ModuleLoader のマニュアルのドラフト第6弾です。AppleScript Libaries にはない、ModuleLoader 特有の機能の紹介です。module loaded イベントを利用すると、他のライブラリを継承したライブラリを作ることができます。

boot (module loader) for me 」によってライブラリがロードされた直後に、ライブラリには「 module loaded 」イベントが送られます。ライブラリで「 module loaded 」ハンドラを実装することにより、ライブラリがロードされたタイミングでさまざまな処理を行うことができます。

  • 依存ライブラリのロードが行われた後に呼ばれます。
    • すなわち、「 module 」コマンドが置かれた property へのライブラリの設定が行われた後に呼ばれます。
  • 自分自身の初期化などの処理に利用できます。
  • module loaded 」の返り値がロードされたライブラリになります。
    • me 」もしくは、なんらかのスクリプトオブジェクトを返す必要があります。
  • 追加でモジュールの読み込みを行えます。
    • module loaded 」イベントの 「 by 」パラメータに与えられる loader スクリプトの load ハンドラを使ってください。。

ライブラリの初期化

まずは、ライブラリがロードされたタイミングでライブラリの初期化を行うサンプルです。追加のライブラリの読み込みを行っており、動的にロードするライブラリを変えられます。

property MoreLib : missing value
property _value : missing value

on module loaded by loader
-- initialization of myself
set my _value to current date

-- load an additional library
tell loader
try
set MoreLib to load("ExtendedTextLib")
on error
set MoreLib to load("SimpleTextLib")
end try
end tell
return me
end module loaded

on time_from_loaded()
return ((current date) - (my _value)) as text
end time_from_loaded

上のライブラリを読み込むトップレベルのスクリプトです。

property ModuleLoadedEvent : module

boot (module loader) for me
delay 1
tell ModuleLoadedEvent
log time_from_loaded() -- result : 1
tell its MoreLib
log replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow
end tell
end tell

他のライブラリを継承したライブラリ

module loaded 」イベントのもう一つの大きな用途は、他のライブラリを継承したライブラリを作ることです。

通常、スクリプトオブジェクトの parent はコンパイル時に決定されます。実行時に parent を決定するには、ハンドラの内部で、スクリプトオブジェクトを定義する必要があります。

次のサンプルは、ライブラリ「 SimpleTextLib 」を継承したスクリプトオブジェクト ExtendedTextLib を、module loaded ハンドラないで定義/生成し、それをライブラリとして扱います。

property SimpleTextLib : module

on module loaded by loader
script ExtendedTextLib
property parent : SimpleTextLib
on remove_spaces(a_text)
return my replace_text(a_text, space, "")
end remove_spaces
end script

return ExtendedTextLib
end module loaded

上のライブラリを読み込むトップレベルのスクリプトです。

property ExtendedTextLib : module

boot (module loader) for me

tell ExtendedTextLib
remove_spaces("How now brown cow")
-- result :"Hownowbrowncow"
end tell

2016.08.02

11:35:46Permanent Link

ModuleLoader のマニュアルのドラフト - AppleScript Libraries と一緒に使う

現在執筆中の ModuleLoader のマニュアルのドラフト第5弾です。新バージョンの目玉機能である AppleScript Libraries との相互運用機能です。

ModuleLoader は OS X 10.9 で導入された AppleScript Libraries と共に使うことができます。コンパイル時ライブラリの読み込みを完了させるなど、AppleScript Libraries に欠けた機能を補完します。ただし、スクリプティング定義を含んだライブラリは扱えません。

コンパイル時にライブラリの読み込みを完了させる

AppleScript Libraries の use 構文で property にライブラリをロードしているとします。この場合、ライブラリは実行時に読み込まれます。ModuleLoader を併用すると、コンパイル時に読み込ませることができます。

use 文による、ライブラリの指定の後に一つ property を追加して、その値の定義部分で 「boot (module loader) for me」を実行します。ModuleLoader は、ライブラリをロードしている use 文を解釈して、ライブラリの読み込み及び property の設定を行います。

use scripting additions
use SimpleTextLib : script "SampleLibs/SimpleTextLib"
property _ : boot (module loader) for me

SimpleTextLib's replace_text("Do your task", "your", "my")
-- result : "Do my task"

つまり ModuleLoader は、

use LibName : script "dir/LibName"

property LibName : module "dir/LibName"

と同じように、扱います。

コンパイル時にライブラリを読み込むことにより、そのスクリプトはライブラリ及び ModuleLoader.osax がインストールされていないコンピュータでも動作させることができます。配布に都合が良いスクリプトやアプレットを簡単に作れます。

バンドルの中にライブラリを含める方法もありますが、コンパイル時にロードしてしまう方が手軽で確実です。

ただし、スクリプティング定義ファイル(sdef ファイル)を含んだライブラリの扱いに制限があります。sdef ファイルで定義されたコマンドの実行は、そのスクリプトがロードされていたとしても、ライブラリが Script Libraries フォルダの中に無いと、実行できません。つまり、ModuleLoader では、sdef ファイルを持ったライブラリファイルへの依存性を解決できません。

ライブラリを強制リロード

AppleScript Libraries では読み込んだライブラリはアプリケーションが管理する AppleScript コンポーネントインスタンスにキャッシュされます。そのため、スクリプトの実行に一つの AppleScript コンポーネントインスタンスを使い回すアプリケーションの場合、ライブラリを更新してもロードされません。ModuleLoader を使えば、ライブラリのロードのタイミングを完全にコントロールできます。すなわち、「boot (module loader) for me」をスクリプトの実行の際に実行すれば、ライブラリの確実なリロードが行えます。

use scripting additions
use SimpleTextLib : script "SampleLibs/SimpleTextLib"

boot (module loader) for me -- force relaoding
SimpleTextLib's replace_text("Do your task", "your", "my")
-- result : "Do my task"

applescript ソースファイル、アプレット/ドロップレットをロードする

他にも、ModuleLoader を使えば、AppleScript Librareis がライブラリとして扱えない、AppleScript ソースファイル(.applescript)やアプレット、ドロップレットなど、スクリプトエディタが保存できるものならなんでもライブラリとして扱うことができます

2016.08.01

13:21:53Permanent Link

ブログにタグを導入した。

お手製のブログシステムにタグを導入した。過去のポストをもっと有効活用したいと思って。

検索だけでは、それがあることを知っていないと検索しないので、時系列だけでなくもう一つの軸での分類が欲しいなと思いまして。

とりあえず、トップページの右側のコラムにタグのリストを表示するようにした。でも、右側のコラムは結構混んでいて下の方までスクロールしなければいけないのが残念。あと、History ページにもタグのリストを表示されるようにした。

まだ洗練されていない/欠けている機能が見受けられが、とりあえずバージョン0ということで。

< Previous Topics