Home>History>

2010.01

2010-01-29

2010-01-29T10:28:25+09:00

XList 1.4

Iterator, Queue, Stack として使えるリストのラッパーオブジェクトを提供する AppleScript のモジュールです。

AppleScript のリストの欠けている機能の多くを補完します。

また、AppleScript のリストはリファレンスを経由して要素を参照しないと速度が大きく低下するという性質があります。XList は内部で、常にリファレンスを経由してリストにアクセスする為、常に良好な動作速度が得られます。

ModuleLoader 2.1 以降の読み込み形式に対応したのが、主な変更です。でも、これによって XList のロードには、必ず ModuleLoader が必要になっちゃいました。

しばらくの間、AppleScript モジュールのアップデートが続きそうです。

2010-01-24

2010-01-24T06:58:58+09:00

ModuleLoader 超入門

ModueLoader は、AppleScript のライブラリ/モジュール管理システムです。

僕に取っては、最近リリースしたソフトの中で最も血湧き肉踊るソフトウェアです。一般ユーザー向けのソフトではなく、AppleScript の開発者向けのソフトなので、分かってくれる人が限られちゃうのが残念です。

「すげーだろー」と胸を張れる数少ない作品ですので、いくらか詳しく紹介します。

ある程度まとまった規模のソフトウェアを作る時には、いくつかのモジュールに分割して作られます。汎用性のあるモジュールは複数のモジュールで共有されます。たいていのプログラム言語にはモジュールやライブラリを扱う為の仕組みが用意されているのですが、AppleScript には十分な仕組みが用意されていません。AppleScript にあるのはファイル参照を与えてスクリプトを load script コマンドだけ。

load script コマンドでまず問題なのは完全なファイル参照を与えなければならないのこと。普通のモジュールシステムは、あらかじめ決められた場所から名前もしくはサブパスを指定すればモジュールをロードできます。もう一つは、モジュールが依存するモジュールを自動的にロードすることができないこと。

ModuleLoader を使えば、上記の問題点が全部解決できます。必要なコードも他の高機能なスクリプト言語(Perl、Ruby とか)と同程度に簡潔で直感的です。もし、そう思えない部分があるならご指摘ください。

まずは、トップレベルのスクリプトのコードを見てみましょう。

property ModuleA : module
property loader : boot (module loader) for me

ModuleA's do_something()

上記のスクリプトでは、ModuleA を property に設定します。ModuleLoader はモジュールを ホームフォルダ/Library/Scripts/Modules もしくは /Library/Scripts/Modules から探します。スクリプトファイル、スクリプトバンドル、スクリプトアプリケーションがモジュールとして扱われます。要するに、スクリプトエディタ/AppleScript エディタで保存したものは何でもモジュールになれます。

property の定義で実行している"module" コマンドは、その property にモジュールをセットする場所である印を設定します。引数を与えなければ、property 名と同じモジュールを読み込むことを指示する意味になります。

実際のモジュールの読み込みは、boot (module loader) for me で行われます。property の定義で記述、コンパイル時に実行されるので実行時には ModuleLoader は不要になります。つまり、スクリプトを配布するのに ModuleLoader は何の障害にならないということです。スクリプトの開発者だけが ModuleLoader を持っていればよく、ユーザーには ModuleLoader はいりません。

実行時に、モジュールの読み込みを行いたければ、boot (module loader) for me を run ハンドラ内などで実行するようにすればいいです。

ロードされたモジュールが別のモジュールをロードする必要もあるでしょう。ModuleLoader はモジュールの依存性も自動的に解決することができます。次のように、依存するモジュール名と同じ名前の property を用意し、"module" コマンドを実行しておけば、それで OK。これで、ロードされた時に property にモジュールが設定されます。簡単でしょう。

property ModuleB : module

on call_moduleB()
return ModuleB's do_something()
end call_moduleB

on do_something()
end do_something

on run -- test code
boot (module loader) for me
call_moduleB()
end run

ここで説明した機能以外に ModuleLoader には、さまざまな機能があります。ほとんどのニーズに柔軟に対応できる機能を備えています。もし、疑問点/不明点があるなら容赦なくご質問いただけることを願ってやみません。

2010-01-22

2010-01-04T22:58:03+09:00

FileClipper 3.0.5r1

クリップボードに参照があるファイルをコピー、移動、エイリアスファイル/シンボリックリンク/ハードリンクの作成を行うアプリケーションです。Finder がクリップボードに入れるファイル参照を読み取りますので、コピー&ペーストの要領の自然な操作で、様々なファイル操作を行えます。

ko-g さんが、フォルダのアイコンをさらに美しいものに作り替えてくれました。

最近、ko-g さんから、多くのアイコンをご提供いただいています。さらに、ko-g さんの web ページでは他にも色んなアイコンを見る/入手することができるみたいです。

G-air

また、拙作の JavaScript の PopupImage をご利用頂いているようです。

2010-01-22T01:23:55+09:00

TeXCompileServer Icon TeX Tools for mi 3.3.8

テキストエディタ mi を中心とした LaTeX の統合環境を提供するアプリケーションとスクリプトのセットです。より高機能なTeX の統合環境を実現します。

リファレンスパレットが折り畳まれている状態で、タイプセットを実行するとエラーが発生する不具合を修正しました。高橋さん、ありがとうございました。

2010-01-21

2010-01-21T22:23:37+09:00

DateStamp 1.1.1

現在の日付をクリップボードにコピーします。起動すると、次のようなダイアログが表示され、いくつかの日付の書式を選択することができます。

ko-g さんが、カスタムアイコンを作ってくれました。誠にありがとうございました。

2010-01-21T16:14:07+09:00

Strip Styles of Text 1.1.1

クリップボードの中のスタイル付きテキストからスタイル情報(フォント、色、サイズなど)を取り除き、プレインテキストに変換します。

ワープロ等にテキストをペーストする時にプレインテキストに変換してから行うと、ペースト位置でのスタイル情報に従って貼付けることができます。

  • アプリケーションバンドル化。
  • アイコンをつけました(ko-g さんありがとうございました)。

2010-01-15

2010-01-15T01:22:46+09:00

ModuleLoader 2.1.1

AppleScript のモジュールシステムです。モジュール/ライブラリを簡単に賢くロードできます。

ModuleLoader を使うとスクリプトファイル名を指定するだけでスクリプトを load することができます。load script コマンドのようにファイルパスを書き込む必要はありません。また、モジュールが依存しているモジュールを自動的にアップデートできます。

タイプコードを持たないスクリプトファイルをロードできない不具合を修正しました。

ModuleLoader を使えば、Perl とか Ruby なみに簡潔にモジュール/ライブラリを扱えるようになります。原始的な load script コマンドから卒業しませんか?

2010-01-14

2010-01-14T11:35:46+09:00

VMWare Fusion 3 を購入した

頂いた寄付の使用報告です。

もっぱら、配布しているソフトの Snow Leopard でのテストに使用しています。VMWare Fusion をハックしてクライアントバージョンの Snow Leopard をインストールしちゃっているのは内緒の話だ。

2010-01-12

2010-01-12T16:30:23+09:00

ModuleLoader 2.1

AppleScript のモジュールシステムです。モジュール/ライブラリを簡単に賢くロードできます。

ModuleLoader を使うとスクリプトファイル名を指定するだけでスクリプトを load することができます。load script コマンドのようにファイルパスを書き込む必要はありません。また、モジュールが依存しているモジュールを自動的にアップデートできます。

ModuleLoader には様々な機能がありますが、まずは load script コマンド の便利な代わりとして使い始めることができます。使い始めるにあたって、お手持ちのライブラリを書き直す必要はありません。

ModuleLoader には以下のような特徴があります。

  • モジュールの名前を指定するだけでロードすることができます。
  • ModuleLoader は ~/Library/Scripts/Modules もしくは、/Library/Scripts/Modules 以下のフォルダからからモジュールを探します。
  • モジュールの置き場所をカスタムに追加できます。
  • モジュールは普通のスクリプトファイルです。アプレットやドロップレットおよびそれらのエイリアスもモジュールとして扱えます。
  • モジュールをロードするためのコードは必要最小限になるように配慮してあります。
  • モジュールの中でロードしているモジュールを自動的にアップデートします。
  • 複数のモジュール間で共有しているモジュールを同一に保つことができます。
  • Local Loader アプレットを作ることにより、あるプロジェクト専用のモジュールライブラリを持つことができます。

2010-01-06

2010-01-06T23:34:48+09:00

TeXCompileServer Icon TeX Tools for mi 3.3.7

テキストエディタ mi を中心とした LaTeX の統合環境を提供するアプリケーションとスクリプトのセットです。

  • mi で保存されていない書類が前面にありリファレンスパレットが表示されている時にエラーが発生する不具合を修正(桐木さん、ありがとうございました)。
  • ターミナル.app が起動していない状態から新規ターミナルを開いたとき、ターミナル設定のターミナルのサイズが新規ターミナルに反映されない不具合を修正(高橋さん、ありがとうございました)。

2010-01-06T22:41:35+09:00

OSHIRO さん、寄付ありがとうございました。

少し遅いお年玉をいただきました。誠にありがとうございました。

57人目。

2010-01-04

2010-01-04T22:58:03+09:00

FileClipper 3.0.5

クリップボードに参照があるファイルをコピー、移動、エイリアスファイル/シンボリックリンク/ハードリンクの作成を行うアプリケーションです。Finder がクリップボードに入れるファイル参照を読み取りますので、コピー&ペーストの要領の自然な操作で、様々なファイル操作を行えます。

変更点は、アイコンのアップデートです。ko-g さんが、アイコンをさらに美しいものに作り替えてくれました。