6月 2009 のブログ記事

IEなどメジャーなWEBブラウザ「オートコンプリート」のような、
自動入力支援機能がついていることが多いです。

一度送信した<form>の内容を記録しておいて、
後日同じフォームを表示したとき、
自動入力したり、入力候補を列挙したりという機能ですね。

便利とも危険ともとれる機能なので、
使う人使わない人様々でしょう。



で、特にオートコンプリートをオフにしてないのに、
オートコンプリート機能が効かないページがあります。

で、まぁどうしたらいいもんかと悩んでいたら、
HTMLに「autocomplete」属性なるものが存在すること知りました。

前もって記述しておきますが、
HTMLコーダーならすでにお気づきかもしれませんが、
非標準の属性なので、この属性を適用するかは、
サイト制作の案件ごとに判断したり、
依頼者との話し合いをしたりなどは必要でしょう。

ちなみに、ほとんどのモダンブラウザは対応しているようです。



オートコンプリートを明示的にONにする場合。

<input type="text" name="textfield" id="textfield" autocomplete="on" />

オートコンプリートを明示的にOFFにする場合。

<input type="text" name="textfield" id="textfield" autocomplete="off" />

だいたい、こんな感じ。

※HTML記述とブラウザの設定どちらが優先かはブラウザによって異なる様子。

クライアントさんから先日リリースしたKIYOVBSが動作しないとご指摘頂きました。
多謝です。

環境によりVC++2008ランタイムが必要です。

インストールしてみて動作しないということであれば、
ランタイムをインストールしてみてください。

ランタイムはマイクロソフトサイトより
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja
こちらからダウンロードしてください。

IE8のレンダリングモードについて。

用意されたレンダリングモードは全部で3つ。

・IE8標準モード
・IE7標準準拠モード
・互換モード

2つ目までは、まんま。
「互換モード」はIE5系統と「互換」モード。(←IE7までもあった。)

3つもあるのか・・・。
IE9の話がそろそろ出てきているけど、
そのときはIE8互換モードというのができているのかな・・・。
制作者泣かせ。
(そういえば、8の次はIEシリーズをやめて、
 C#で開発した新ブラウザになるなんていう話もありましたね)

ちがいはCSSのプロパティのサポート範囲だと思うのですが、
IE8については、リリースされたばっかなのでまだ特有の不具合とかあるかもしれないです。

(IE7のときは、SJISで書かれたサイトが真っ白になるという妙な不具合がありましたね。
 最近は不具合の多いSJISでサイト作ることは少なくなったのでいいと思いますが。)



レンダリングモードの選択は、METAタグでやります。

DOCTYPE宣言で切替もできるみたいなんですが、

大体、レンダリングモードに関わらず同じDOCTYPE宣言すると思います。
(ちなみに、DOCTYPE宣言をつけないと勝手に互換モードになるので、
 つけたほうがいいですね。)

で、書くMETAタグは、

<meta http-equiv="X-UA-Compatible" content="値" />

です。
「値」のところへ採用するレンダリングモードを書きます。

IE=8 IE8レンダリングモード
IE=7 IE7レンダリングモード
IE=5 互換モード。
IE=EmulateIE8 DOCTYPE宣言に基づいて、
IE8モードか互換モードでレンダリング
IE=EmulateIE7 DOCTYPE宣言に基づいて、
IE7モードか互換モードでレンダリング

「IE=8」や「IE=7」にすると、柔軟性がなくなってしまうので、
「IE=EmulateIE8」「IE=EmulateIE7」にするのが妥当でしょうか。

2009年6月現在では、
HTMLなら

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

XHTMLなら

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

あたりで、DOCTYPE宣言した上で、

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

としておいて方が無難かなと思います。

先日、クライアントさまより、UTFのとき全角ハイフンがおかしくなるよ!と連絡。

そ・・・そんなはずは(-_-;)、と思って調べたら本当でした。

その対策方法をメモメモ。

どうも、Jcode.pmのtrを使って

全角マイナス記号「-」(コードでは、\xE2\x88\x92)
(※見た目はよく似ているけど、ハイフンでもないし、ダッシュでもないので注意。)
を半角記号へ変換するときに、
半角チルダ「~」になっちゃったり、
\x3Fという通常の環境で見ることができないコードに変換されている模様。

ってことで、Jcodeでtrしたあと、これらを無理やり「-」(コード\x2D)に変換することで対応。
本当にチルダが来たときどうすんだ!?という感じ。

だったので、さらに調べたら、

http://d.hatena.ne.jp/littlebuddha/20081121/1227241729

こちらのサイトにまとめがありました。のでまぁこの通り設定。
全角の扱いって難しいですね。

何か調べたら同じハイフンでも、
「ハイフン」「ノンブレーキングハイフン」「ハイフネーションポイント」…などなどあるんですって。
文系出身ダメプログラマーな私にはグルグルする話です。。。

PHPのmb関数でも同様の問題がおきます。
ので、ハイフンに見える文字についての知識はUTFを扱うときは必ず身につけておく必要がありそうです。

昨日公開した、FilemkerからVBSを実行するためのプラグイン
昨日の今日でいきなりバージョンアップです。、

JScriptを使えるようにしました。

当初、こういうのはGUI機能が標準で備わっている
VBScriptを中心に使えたほうがいいと思っていたのですが、
私は、どうにも、VB系言語の扱いが苦手なので、
どうしてもJScriptを使いたくなってしまったためのバージョンアップです。

あと、初版であった余計な機能は隠蔽しましたので、
少し計算式エディタが使いやすくなると思います。

ここからダウンロード

基本的な使い方は、VBSと同じです。
同梱の説明書をご覧ください。

まだまだしばらくベータ版です。

気に入った!という方はカンパくださいというスタンスでしばらく行きます。
あ、以前、私の作った別のカンパウェアで、
お菓子を物納してくれた方もいらっしゃいます。
そういったものも面白いと思っています。

次回バージョンは、
・環境がインストールされていればPerlScriptなども使えるよう
・スクリプト実行
を予定しています。

FilemakerからVBScriptを実行するプラグインを作りました。
とりあえず、日曜大工で作ったので、実装が適当ながらも公開しておきます。

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

利用方法などは、同梱の「readme.txt」に書いてありますので、
必ず読んでから利用してください。

今のところあまりに実装が適当ですので、ベータ版です。
利用する人の責において利用してください。
(いずれ正式版になったときは有料になるかも??)

しばらく、気に入った人はカンパしてねというスタンスで行きます。


仕組みは、プラグイン中で、MS COMである「ScriptControl」をロードして、
そこへVBSを渡して実行するという仕組みになっています。

ですので、実行するVBSスクリプトの実装は、OS環境によって変わりますので、
その点はご了承ください。

ScriptControlを利用していますから、JScriptも実装できると思います。
次期バージョンでは、JScriptも実装します。

(JScriptは、マイクロソフトによるECMAScriptの実装で、Javascript1.5相当に独自拡張を加えたものです。)

JScript実行も実装しました!
※現在JScriptの実装は多くのバグが発見されていますので、おまけ機能と考えてください。


実装が適当とはいえ、手前味噌でアレですが、案外便利です(^-^;

Filemaker界隈では、VBSでプリンタ切り替えをしたりするのが常套手段になっているようですから、
この辺は実装次第ではどうにかなるのではないでしょうか。


今回のプラグインはクジラ飛行机さんの八角研究所での記事を参考に作りました。多謝です。

クジラ飛行机さんは、
なでしこ」という日本語を使って作成するユニークなプログラミング言語の作者で、
この「なでしこ」をFilemakerに組み込むプラグイン「なでしこプラグイン」の作者さんです。
最も尊敬し、目標としているプログラマの一人です。

なでしこプラグインは私も愛用しており、便利さも使いやすさも抜群で、命令も豊富です。

今回のプラグインは、
なでしこプラグインほど豊富な機能はいらない。
というような場合向けに作ったプラグインです。

クジラ飛行机さんの回し者ではないですが、
より便利な機能をお求めの方、
より簡単なスクリプト環境をお求めの方は、
「なでしこプラグイン」オススメです!


【追記:2009年6月8日】
ver.0.6公開 JScriptも使えるようになりました!余計な機能を隠蔽しました。


【追記:2009年6月17日】
プラグインを認識・動作させるにあたり、VC++2008ランタイムが必要です。
インストール方法は、同梱readme.txtに記述しております。

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

前回のバージョンアップからなでしこには「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に比べて実装がアレなので、、、その点は目を瞑りましょう(>_<)

サーバへソフトウェアのインストールに挑戦中だったんですが、
久々に撃沈・断念しました。

ライブドアのラボEDGEが公開して話題になった、
レコメンドエンジン「cicindela」。

精度のほどはよく分からないけど、
こういった仕組み自体をオープンにするというのは画期的なわけで
ワクワクしてたんですが・・・。

基本的にはmod_perlとMySQLで動いてくれて、
daemontoolsによるバッチ処理で集計をします。

レンタルホスティングではこの時点でアウトになるところも多いでしょう。

mod_perlですからね、Apacheの再起動だのなんだのと、
たとえ占有であっても、root権限がもらえないと、結構厳しいと思います。

MySQLは最近ではほとんどのサーバーへ導入されていますが、
基本的に、「cicindela」用にmy.cnfを変更しないと動かないです。
。。。ウソです。。。動きますが、
cicindela以外のDBがあると心配になります。

やってできないってことはないですけど、
レンタルホスティングでやるなら、
cicindela専用に占有サーバーをひとつ借りないと厳しいでしょう。
自宅サーバーという手もありますけどね。
速度さえ気にしなければ。。。