2007年12月 8日

Lightroom SDK: プラグインの構成

[ Lua ]

プラグインの配置場所

プラグイン名.lrplugin or プラグイン名.lrdevpluginのフォルダを、/Library/Application Support/Adobe/Lightroom/Modulesに入れる。

Windowsならexeがあるのとおなじところ、またはC:\Documents and Users\username\Application Data\Adobe\Lightroom\Modules(Windows XP) or C:\Users\username\AppData\Roaming\Adobe\Lightroom\Modulesc (Vista)

プラグインの構成ファイル

Info.lua
プラグインの情報。バージョンとか、動作を定義したスクリプトとか、そういった情報を入れたテーブルをreturnするコードを書いておく。
動作定義ファイル.lua
最低限、Info.luaから参照されるスクリプトファイルが必要。

Info.luaの例

return {
	LrSdkVersion = 1.3,
	LrSdkMinimumVersion = 1.3

	LrToolkitIdentifier = 'jp.skoji.my_export_plugin',
	
	LrExportServiceProvider = {
		title = "skoji uploader",
		file = 'uploader.lua',
	},
}

続く...

Lightroom SDK: Luaとの差異

[ Lua ]

ちょっとだけLua自体を勉強してわずかにパワーアップしたところで、またLightroom SDKのGuideに戻ります。

namespace

どうもnamespaceって概念はLua自体にはないみたい。Lightroomでは、いくつかの関数を定義したテーブルを「Namespace」と呼んでいるそうな。Lua5.1にはmoduleという概念があるけれども、それとは関係ない。

built in functionであるimport()は、Lightroom SDKで定義しているnamespaceにアクセスする手段。

プラグイン側であたらしいnamespaceは作れない(というのは、正確にどういう意味なのかまだ理解できてない)

class, object

クラスもオブジェクトも、Luaの言語仕様にはなくて、Lightroom SDKの用語。実態はテーブル。 namespace同様、classもプラグインで新しくつくることはできない。ってこれも、どうやって「できなく」しているのかが理解できてません。

Lua組み込み機能

Lua5.1の機能がすべて使えるわけじゃない。collectgarbage(), getmetatable(), module()なんてあたりは使えない。

2007年11月25日

Lightroom SDKでは(いまのところ)SHA1が使えない...

[ Lua ]

ちょっと寄り道してWSSEってどうやって使うんだ? とか調べていて気付きました。

いまのPreview版Lightroom SDKではLrMD5ってのがあるけど、そこではSHA1は使えません。では自前でSHA1の実装を...と思うと、Luaで書くのはちょっと現実的じゃありません。Luaにはビット演算子がないんです(元データから0,1の数字列を生成すればできなくはないですが...)。では外部コマンドを、と思うと、Lightroom SDKではシェルからの実行は削除されてます。

実行速度はともかくとして、Lua単体でSHA1作ってみるかな(笑)

追記: あ、LrTasks.execute()ってのがos.execute()とほぼ同じだ。これでできるな

Luaの勉強: 5

[ Lua ]

Luaリファレンスマニュアルの日本語訳でお勉強第5回です。

コルーチン

言葉だけ知ってるけど意味を知らないコルーチン。協調型マルチスレッドといわれたりします。継続の一種だともいわれたりします。

Luaのコルーチンは、

  • coroutine.createに、引数としてコルーチンのメイン関数を渡して作成
  • corutine.resumeで開始。
  • コルーチン内部では、coroutine.yieldで抜ける。このとき、よんだ側のresumeが帰ってくる。戻り値はtrueと、yieldの引数(あれば)。コルーチン内部でエラーがあればfalse。
  • 再度corutine.resumeを呼ぶと、yieldの後から再開される。
  • resumeの引数は、最初の時はメイン関数への引数。yieldからの復帰のときは、yieldの戻り値になります。
  • coroutine.wrapってのがあります。resumeに似ているが、
    • 戻り値はコルーチンじゃなくてresumeを呼び出す関数
    • 関数の戻り値は、resumeの戻り値から最初のブール値を除いたもの
    • コルーチン内部のエラーをキャッチすることはなく、そのまま呼び出しもとに伝搬

メカニズムは簡単ですね。使いどころを理解するのがちょっと難しそう。

でも、Lightroom SDKでは標準ライブラリcoroutineが使えないので、Lightroomのプラグイン使ってる限りはコルーチン使うことはないのです。ちょっとつまらん

2007年11月24日

Luaの勉強: 4

[ Lua ]

Luaリファレンスマニュアルの日本語訳でお勉強第4回です。

環境

グローバル変数を解決する「環境」。これもやっぱりテーブル。実はそれほどグローバルじゃなくて、関数の環境や実行中スレッドの環境はsetfenv関数で置き換えられるのでした。ユーザデータ、C関数、他のスレッドの環境は、C APIを使わないと変更できません。

って、ユーザデータの環境って使うことあるのかな...?

弱参照テーブル

弱参照テーブルから参照されているオブジェクト(キーまたは値)は、ガベージコレクト対象になります。

テーブルのメタテーブルで__modeに"k"が含まれているとキーが弱参照, "v"が含まれていれば値が弱参照、だそうです。

何に使うんだろう、弱参照...。

次はコルーチン。なので別記事をおこします。ところで「べつき」を変換すると「戸次」になるんですね。これはなんだ、地名か、人名か?