伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか…がんばっても8割だ。
1月 27

いろいろ仕事があったり、足をケガしたり、なんやかんやで、最近なでしこのFilemakerプラグインを使えてなかったのですが、先月久々に大きくバージョンアップがあったようなので使ってみました。


プラグイン自体に「vnako()」と「vnakofile()」関数が追加になっていました。

・vnako
Filemakerとは別プロセスでなでしこ本体のランタイムみたいなものを起動して、そこでなでしこスクリプトを起動する。

・vvakofile
vnako関数は引数の中に直接スクリプトを記述してそれを起動しますが、こちらは、引数になでしこスクリプトが記述されたテキストファイルのパスを書いて、それを起動するというもの。

別プロセスなので、他の従来の関数とは違い、返り値を得ることができません。
またプロセス終了を待たないので、スクリプト中に記述した場合は、起動だけして、そのままスクリプトは順に進められます。
終了を待つ関数と待たない関数があると良かったなぁと思ったり。特にvankofile。

別プロセスなので、MS-Office操作などを行うときは、各種セキュリティのブロックに配慮がいるかもです。ランタイム配布や別の人のPCで動かすときなんかとくに。


こちらでなでしこプラグインのダイアログ各種がFMのウインドウハンドルと関連付けられていないという話をしたのですが、関連付けがされて、FMのウインドウの後ろに回ってしまうということがなくなったようです!これは個人的にかなり嬉しいです!(全部のダイアログについて調べてはいませんが)



その他、

FMプラグイン版だとブラウザ要素クリック命令があるとうまく動きません。。。。これができれば、オープンのJS製WYSIWYGライブラリを使って、Filemaker上でWYSIWYGエディタが実現できるのですが・・・。近いうちに動くといいなぁ。

前からの懸案だった、メール周りの動作はこれからチェックします。

ということでVIVA!なでしこ!!

12月 21

以前、こちらの記事で、なでしこプラグインを利用して、Filemaker内のウインドウの最小化ボタンや閉じるボタンを無効にするお話を書いたのですが、「FMアプリウインドウ自体はできないの?」というコメントを頂戴しました。

確かにそれも価値があるかも。ということで、作ってみました。

ここからダウンロードして下さい。

仕組みは以前と一緒で、なでしこからWin32APIを呼び出してウインドウスタイルを変更しています。

使い方は同梱のテキストファイルを読んでください。なお、以前のFM内のウインドウスタイルを変更するものを改造しているので、スクリプト名が重複しています。同時利用される際は、リネームするなど適宜変更して利用してくださいね。

12月 4

なでしこでタイムスタンプ

なでしこには標準でUNIXタイムスタンプを取り扱う関数がないっす。
結構僕は、UNIXタイムスタンプをあちこちでつかうので、結構困ってて、今までは、Perlのスクリプトを作っておいて、その標準出力をなでしこで取得して…なんて回りくどいことしてました。

1970/1/1からの秒差で計算させてみたこともあるんですが、どういうわけだか正確じゃないんですよね。閏秒とかのせいでしょうか?

なでしこがLuaをサポートしてくれたおかげで、なでしこだけで、UNIXタイムスタンプが正確にあつかえるようになりました。

ってことで、現在のUNIXタイムスタンプと、日付と時間からUNIXタイムスタンプを取得する関数を作っておきました。

●unixtime()
	「nowtime = os.time()」をLUAする。
	LUA値(「nowtime」)で戻る。

●mktime( Y, M, D, h, m, s)
	//nako_get
	『tbl = {}』& 改行 &
	「tbl['year'] = nako_get('Y')」& 改行 &
	「tbl['month'] = nako_get('M')」& 改行 &
	「tbl['day'] = nako_get('D')」& 改行 &
	「tbl['hour'] = nako_get('h')」& 改行 &
	「tbl['min'] = nako_get('m')」& 改行 &
	「tbl['sec'] = nako_get('s')」& 改行 &
	「print(tbl['year'])」& 改行 &
	「nowtime = os.time(tbl)」をLUAする。
	LUA値(nowtime)で戻る

ご自由におつかいくださいませ。

11月 25

Filemakerなでしこプラグイン関連連投です。



今回やってみたのは、Win32APIでメッセージボックスを出す方法です。

FMにもカスタムダイアログあるじゃねぇかって、、、確かにそうなんですけど、Windows標準のダイアログじゃないので、なんかイケてないなぁって・・・。FM使いの人の中で同じコトを思った人絶対いると思います。

じゃぁなでしこに「言う」命令があるじゃねぇかって、、、こちらも確かにそうなんですけど、なでしこプラグインの仕様では、「言う」命令で出せるダイアログはオーナーがFMのウインドウハンドルになっていなくて、ダイアログのボタンを押さずに、FMのウインドウのどこかをクリックしてしまうと、ダイアログがウインドウの後ろに隠れてしまって、気がつかないとハングアップしているように見えてしまうんですよ。

ということで、
・FMでWindows標準のメッセージボックスを出す。
・ダイアログはFMのウインドウがオーナーとなっている。
ということを目標に作っています。




はい、いつものようにダウンロードはこちらから。

今回も説明は割愛・・・。申し訳ないです。時間がありません・・・。



なでしこのオープンファイルダイアログなんかも、FMがオーナーになっていないので同様の不都合が生じるので、Win32APIでやろうかなぁと思ってたら、構造体の定義が面倒で、今日は時間切れ。またそのうち。

その前に、なでしこプラグイン側で対応してくれないかなーーーとちょっと思ってたり・・・。

11月 21

ひさびさにFilemakerのなでしこプラグインについてのお話。



Filemakerは、他のソフトで言うところのマクロに値するスクリプトを駆使して、アプリケーションを作り上げるデータベースソフトです。ゆえに、開発者が意図しない利用者の動作手順は、往々にして不具合に直結しがち・・・。

ウインドウ内の「閉じる」「最大化」「最小化」ボタンもその一端じゃないでしょうか?私の個人的な経験ではそういった問題は結構多いです。

そこで、なでしこプラグインで、これらのボタンを有効化|無効化できる仕組みを作ってみました。

↑これが通常状態。これを、、、

↑こんな風に変えれます。最小化と閉じるボタンを無効にしています。

どうですか?使いようによっては便利でしょ?(・・・とは言いつつ、実はすでに同様のプラグインがどっかにあったとは記憶していますが・・・)



せっかくなので、使っていただけるようサンプルを用意しました。

ここからダウンロードしてください。

使い方は同梱のテキストをお読みください。




仕組みだけ説明しますと、なでしこがWin32APIを実行できるようになっているので、これを使って、ウインドウのスタイルを変化させています。

FilemakerでWin32APIを実行できるというのは、結構強みだと思います。そういう意味でも私は、なでしこプラグインが大好きなんだなー。(バグはご愛嬌ということで・・・笑)

細かい説明は難しい話になってしまい、FMのユーザー向けじゃないのなかぁ・・・という勝手な言い訳をさせてください。(本当は書くのが面倒なだけ・・・)

サンプルをダウンロードしてもらえれば、ソースは丸分かりですから、なでしことWin32APIが少し分かる人なら、なんとなく理解ができるはずです。改変も許可していますから、ご自由にお使いください。

6月 5

もう、大好きが止まらない感じがするなでしこですが(^-^;

前回のバージョンアップからなでしこには「Lua」という言語が内包され、
便利度がアップしました。

Luaがなでしこで使えるようになったおかげで、
なでしこで、windowsのCOMライブラリが使えるようになりました。

前々から、なでしこでCOMつかえたらなぁと思ってたんですが、
それは、ほとんどのWindowsに搭載されている「scriptControl」という機能を使いたかったためです。

「scriptControl」とはMS謹製のスクリプトエンジンで、
標準で「VBScript」と「JScript」が利用でき、
COM経由で呼び出せば、
自前のアプリケーションにスクリプトエンジンを組み込むことができるのです。

何の意味があるかというと、なでしこで作ったアプリケーションに、
VBSやJSを利用するユーザースクリプトのような機能を実現できるというわけですね。

もちろん、作りこみは必要で、組込みにはそれ相応の知識が必要です。

それにそもそも、なでしこ言語やLua言語でのユーザースクリプトを実現したほうが、
組込みも簡単で、安定して使えると思うのですが、
多くの人に使ってもらおうと思うと、JScriptのほうがよく知られた言語ですから、
JScriptでユーザースクリプトを実現したいわけです。
(たしか、JScriptは、javascript1.5と互換だったと記憶しています)

で、さらに突っ込むならば、なでしこの中にLuaを書いて、
Luaの中にJSを書かなければならないので、いたってめんどくさい(^-^;



余談。

mozillaが開発しているspiderMonkeyというスクリプトエンジンがあり、
(たしかFirefoxの3.0まではこのスクリプトエンジンでjavascript機能を実現しています)
こちらは、C言語で開発されていてDLLもあるので、
なでしこ用のプラグインを作れば、
簡単になでしこJSが使えるんでしょうけどね・・・。ひまなときにでもつくろうかな。




ではごく簡単なコードでやってみましょう。
以下なでしこのコードです。

//なでしこJSテスト
『require('luacom')
sc = luacom.CreateObject("ScriptControl")
sc.Language = 'JScript'
sc:AddCode('function test(v){ return v+1; }' )
js = sc.CodeObject
test = 2
val = js:test(test)
』をLUAする。
LUA値(「val」)という。

『』の中はなでしこに内包されたLua言語です。

1行目は、LuaでCOMを扱うためのライブラリをロードします。

2行目で、ScriptControlオブジェクトを作成、scに代入します。

3行目で、使用する言語の名前を指定します。標準状態なら「VBScript」か「JScript」を選択します。適切な言語環境がインストールされているなら「PerlScript」なんかも使えますが、汎用的なアプリケーションを作るなら「VBScript」か「JScript」のほうがいいでしょう。

4行目で、3行目に指定した言語にユーザー定義のソースを加えます。例示では、「test」というユーザー定義関数を作っています。この「test」関数では、引数に与えられた値に1を足して返すというだけの関数です。

5行目では、スクリプトエンジンそのものを、Luaの変数「js」に代入しています。これにより、変数「js」はJScriptの関数をまるでLuaの関数であるかのように利用できるようになるのです。※1後述

7行目で、自作の「test」関数を実行し「val」へ代入しています。

で、以上をなでしこで「LUAする」します。

で、Luaの中の変数「val」にはtest関数を実行した内容が保持されるはずですので、この値をなでしこで取得して利用するわけですね。上記の例では単純に表示だけしていて、「3」と表示されるはずです。



※1ユーザー定義関数だけじゃなくて、JSで搭載されている関数なんかもそのまま利用できます。
たとえば、

val = js:escape('!"#$%&()*+,-./')

↑このようにすると、JS標準の「escape」関数をそのまま利用して結果を「val」に代入するなんてことができちゃうわけです。



【追記】
あら、
http://nadesi.com/man/page/LUA%E3%81%99%E3%82%8B
↑こちらによると「nako_set」という命令を使うと、なでしこの変数にLuaから直接代入できるのね。不勉強でした。。。

そうそう、MSのJScriptは、いわゆるJavascriptに比べて実装がアレなので、、、その点は目を瞑りましょう(>_<)

5月 30

最近、Filemakerの内容をエクセルへ書き出すということが増えてきて、
単純にエクセルファイルを出力するだけなら、FM単体でできるんですが、
罫線や計算式がすでに設定されたテンプレートファイルを用意しておいて、
そこへFMのDB内容を流し込むということはFM単体ではできません。

ということで、
ODBCでFMDBに接続

適切なSQLを発行してエクセルに出力したい内容を得る

エクセルをOLEとかで制御
という手段でエクセルファイルを出力したい。

VBAとかWSHを使えばできるんでしょうけど、
ADOでFMに接続して、エクセル起動して、
そのためにはDLLを呼び出してfasdlkdfjpaodfi:aoあうdsf…
と、まぁとてもめんどくさいわけですよ。

そこで登場するのがわれらがなでしこ
特に何かライブラリをインクルードしたりすることなく、
標準でADO接続したり、エクセル制御したりということができるようになっているので、
リファレンスどおりの命令文を使えば、
大体実現可能です。

が、ひとつ問題があります。
以前、なでしこからODBC接続で
FMのDBへ接続する方法という記事を書いたのですが、
ここを読んでもらえば分かるとおり、
FMへの接続はちょっと特殊です。

接続の下準備とか、SQL文の仕様はどうにもならないにしても、
接続するのに毎回UTFエンコードして,,ウダウダウダと接続文字列を作るのはめんどくせぇよぉ。
ってことで、FMのDBへODBC接続するための
なでしこ関数を作りました。

ここからダウンロードして下さい

使い方は、ダウンロードファイルに書いてあります。

※改変OKです。自作ソフトにバンドルの配布や販売もOKです。
 自己の全責任においてご利用ください。
※すみませんが、この関数のみの、再配布や再販は行わないで下さい。
※DB接続時、ハンドルをとらない仕組みなっているので、
 必要な人は、改造して利用してください。
※なでしこプラグインは未テストです。

5月 22

大好きな言語「なでしこ」がVer.1.521からLua言語を内包した。

???Luaって何じゃ???
恥ずかしながら、知らなかった。

ググってみた。こんなサイトがあった。。。

ほうほう。組み込み向けも言語なのですな。。。
Cに組み込んだり、Delphiに組み込んだり。。。
しかも、PerlやらRubyやらより高速らしい。ほぉ。

言語体系は、
見た感じJavascriptとQuickBasic系の中間って感じかな?
無名関数なんかもつくれて、言語としてはかなり完成されているよう。
それでいて、やっぱりJSに似てるということで、初心者でも使えそう。

これはいい!早速覚えよう!!

なでしこは、非常に利用しやすくてしかも強力で、そして何より日本語で書けるプログラミング言語なのだが、Luaを内包したことで、なでしこならではの弱点をカバーできそう。(なんか CにSmalltalkのオブジェクト指向を内包したobjective-Cを思い出すね。)

ただ、Luaを使おうとすると、日本語プログラミング言語としての簡易さは揺らぐ?バランスよく使わなきゃ。

Luaって、Perlで言うところのCPANみたいなものはないのかなぁ。あれば、さらにいいんだけど。
というか、本当はなでしこにCPANみたいなものがあってほしいんだけどね。

LuaにCAPNみたいなものがあるなら、Filemaker用のLua実行プラグインをつくっても楽しいかも。

とりあえず、勉強しなければならないことが増えました。

4月 30

なでしこでメールを送受信するための関数群をちょっとだけバージョンアップしました。

バージョンアップ内容

・メール送信時、メール重要度(X-Priority)を設定可能に。

現バージョンでは引き続きカンパウェアとします。

ダウンロードはこちらから

2月 14

Filemakerで画像の情報を取得するカスタム関数を作りました。
毎度ながらなでしこプラグイン必須です。

現在のところファイルサイズ・幅・高さのみ取得できます。
(それでも十分利用価値はあると思いますが)

サイズ変更・回転・保存形式変更くらいはできるようにしたいなと。。。
その他、こんなことができたらいいな。こんな情報取得したいなというのがあれば、お問い合わせください。

詳しくは同梱の「readme.doc」(MS-WORD形式)をご覧下さい。

まだ機能がすくないので、完全に無料ソフトです。

ダウンロードはこちらから>>

« Previous Entries

 ANZXCvg