アサブロの機能が増えたようだが。2009年01月18日 03時09分55秒

なんかね。

アサブロの管理画面に、
新着コメントと新着トラックバックのお知らせが表示されるようになりました!
とか、
コメント一覧画面とトラックバック一覧画面の
削除チェックボックスにゴミ箱アイコンを追加しました。
とか、機能が追加されたみたいなんですがね。

複数チェックつけたコメント/トラックバックが、1回に1件しか削除されないんですよ。

これバグっつーかデグレでしょ?なんとかしてくださいよー >アサブロ

こっそり?2009年01月23日 02時19分28秒

前のエントリで、

複数チェックつけたコメント/トラックバックが、1回に1件しか削除されないんですよ。

これバグっつーかデグレでしょ?なんとかしてくださいよー >アサブロ
とかっていってたら、なんか直ってるし。

でもアサブロ informationには別に載ってないし。

まぁ、こっそりでもなんでも、直ってるのはありがたいけどね。

evalとTextStream.OpenTextFileのナゾ2009年01月27日 04時12分05秒

久々にスクリプトネタ

ずいぶんと古い記事なんだけど、「主に言語とシステム開発に関して」さんからリンクしていただいたので便乗してWSHネタ。

話題としてはJScriptで外部ライブラリをロードする手法に関してで、おっしゃるとおり

WSF形式にする。  ←これがベスト ※後述
なのは確かなんだけども、サンプルであげられてたTextStreamオブジェクトのエラーについてちょっと気になったので。

eval()は確かにダメだけどセキュリティは関係ないっす

「主に言語とシステム開発に関して」さんでは、こんなサンプルコードをあげられていた。

// evalを使う
var str = "var fso = WScript.CreateObject('Scripting.FileSystemObject');" +
    "fso.CreateTextFile('b.txt');" +
    "var txt = fso.OpenTextFile('b.txt',2);" +
    "txt.WriteLine('hoge');" +
    "txt.Close();"
eval( str ); 


で、これ実行すると確かに「エラー:書き込みできません。」とでるんだけども、これ、セキュリティが原因じゃないっす。

ためしにこんな風に変えてみたり、

var str = "var fso = WScript.CreateObject('Scripting.FileSystemObject');" +
    "var txt = fso.CreateTextFile('b.txt');" +
    "txt.WriteLine('hoge');" +
    "txt.Close();"
eval( str ); 

またはこんな風に変えてみたり
var str = "var fso = WScript.CreateObject('Scripting.FileSystemObject');" +
    "fso.CreateTextFile('b.txt').Close();" +
    "var txt = fso.OpenTextFile('b.txt',2);" +
    "txt.WriteLine('hoge');" +
    "txt.Close();"
eval( str ); 

すると、エラーにならず、意図どおりに書き込める。要するに、「主に言語とシステム開発に関して」さんのサンプルのエラーはCreateTextFileで書き込み権付で開いたストリームを閉じていないので排他がかかってるということではないかと。

だもんで、eval()方式だからといって、ファイルI/Oを扱うライブラリが使えないということはないんです。実際、dara-jはそういうライブラリ作って、eval()方式で読み込んでつかってるし。

まぁ、eval()がダメな2番目の理由が本当に致命的で、関数化できるのはファイル読み込みくらいまでだもんだから、素直にWSF使ったほうが精神衛生上よろしいのは確かなんですが。

で、ナゾが残る、と。

と、ここまで書いてハタと気づいたんだけども、さっぱり理屈がわからないのだが、「// evalを使わない」ほうのサンプルでは、同じようにCreateTextFile()で開いたストリーム放置しててもエラーがでないんですよ、これが。なんで???

まぁ、コールスタックの数によってセキュリティ警告がでたりでなかったりという不可思議な現象もあるJScriptの環境だから、「そんなこともあるのかぁ」と納得しておくことにしようか。つか、そんな内部の挙動を調べるスキルなんかないし。