2016年3月5日土曜日

GIMP Script-Fu (9) 進め方 続編

GIMP の Script-Fu は便利です。
でも、実際に自分で書くとなると敷居が高く挫折の経験をお持ちの方も多いのではないでしょうか?。
最近の開発言語に慣れてらっしゃる方々は 特に そう思われる気がします。
そこで、以前の投稿を追補します。  


以下に書くのは、 個人的な感想です。
既に Internet 上に公開されているものや 既定の組み込み Script-Fu を参考に、 独自のものを書く場合を想定しています。


以前の投稿: GIMP Script-Fu (2) 雛形と進め方 ですが、 これは、教科書的で、実践的ではありませんでした。
無論、そこで書いた事に誤りはないのですが、
普通、何か書いて見ようと思えば、 Internet で GIMP Script-Fu 等と検索を掛け、 見本のコードを弄くる 場合が多いのでは?。
つまり、 エディタを広げ、 コンソールを開き、 プロシジャーを探し、 SIOD の解説を眺める、 そんな感じになりますよね。
     コンソール : Script-Fu コンソール ですね。
     プロシジャー : プラグインブラウザ(P) と プロシージャブラウザ(B) で ですね。  後者はコンソールの 参照 からも開けます。.
     SIOD の解説 : 謂わば、表面に出て来ない GIMP で使える実装済み Script-Fu 関数の事ですね。
                実際には、初期の GIMP で使われていた SIOD は TinyScheme に替わっていて、
                文法上の食い違いがあったりするみたいです。  詳しくは、検索を!。


既成のScript-Fu コードは、 この プロシジャー では見付からない 自己記述や 実装済み関数 が多用されています。
  通常、ひとつで良い筈の (define xxx ... 文が、幾つも散見出来るのは、こうした記述になっているからですね。.
  稀ですが、 別途、ライブラリを別ファイルに持つ為か、 不明な関数があったり ... 。
  散々、調べた挙句、定義がないと思ったら、Scheme の実装済み関数だった とか。.
ですから、部分的にコードをコピペ(Copy&Paste)したのでは、動かないものが多いのですね。
コードが動かないと思ったら、別の場所に関数の定義が記述してあり、これを呼び出していた とか ... 。
或いは、古い SIOD の記述で、 今の環境では動かないとか ... 。
つまり、既存コードの読解力が必要になります。


そして、自分でコードを組み立て、エディタ等に記述していくのですが、
最初は、コンソールで試す事になります。
  この辺りが、語句の候補をガイドしてくれたり変数の値を探査出来たりする最近の開発環境 と異なる所ですね。
  Windows のコマンドプロンプトでのスクリプトと同様に、 Script-Fu や Scheme の最低限の知識が無いと厳しいと思います。
  初心者は、この辺りの壁が高いのではないでしょうか ... 。  自分も正に そのレベルですから。.


コードとして書いている、
(define xxx ... で定義する関数を試すのですね。
差し当たり、 登録絡みの定義 (script-fu-register は不要です。 分かり難いですね。.
(define xxx ... ) のみのテストをします。
勿論、条件分岐やループ処理があれば、 最初は、それを除外して、 1行ずつ 逐次実行 で試します。
(let OR (let* の部分も (define に置き換えて、コンソールで試行します。

変数をダイアログから取得して実行する スクリプト も同様に、 (define で値を入れてあげます。  例: (define img 1)
これで、書いている関数の挙動が掴めます。


ここで、やはり、悩みの種が、 () 括弧 の位置と 閉じ忘れ 開き過ぎ です。  これには、いつも、悩みます。
コードが動かない大抵の理由は 括弧の ミス なのです。
コンソールで1行毎に実行する事で、この初歩的ミスに気付く可能性が増えます。

 
そして、ある程度のブロック(コードの塊)が出来て来ると、 ブロック毎 コンソールに投げ込む形になります。
でも、可笑しな挙動が ... !?。
そんな時は、 (tracing TRUE) とコンソールに投げ込んで、 トレースしましょう。
         (tracing true) と書いても駄目です。  (tracing TRUE) です。
変数に代入される値が確認出来て、 思った様に動いているか否かが掴めます。

但し、膨大な数のトレース結果が出力されるので、 これは最後の手段でしょうか。


こうして、ある程度、形が整えば、
登録絡みの定義 (script-fu-register を加えた、 正規の形に調整して仕上げましょう。



[2016/03/07] ラベル欠落を修正

0 件のコメント:

コメントを投稿