練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

Irvine: getuploader_r.dms のタイムスタンプ機能の件

コメントなし»

スクリプト内でダウンロードしてファイルに保存して touch.exe で変更してみるテスト。
Timestamp=true で有効に。

Dorothy2R_resp.dms で Last-Modified ヘッダを上書きしてみるテスト。
Timestamp=ThreadStorage で有効に。

pixiv などの、スクリプト内で複数のアイテムを新規追加する場合は ThreadStorage が使えないので、コメント経由で Last-Modified ヘッダを上書きする機能を追加。
getuploader_r.dms には関係ないが、テストとして Timestamp=Getter で有効に。

という計画性のない実装歴により、Timestamp= の設定がぐちゃぐちゃになっております。

pixiv_api.dms の方は touch.exe と ThreadStorage の方法は実装せず、Timestamp=true で 最後の方法が有効になります。

コメント方式ができて ThreadStorage 方式の意味がなくなったような気もしますが、コメント欄はどんな使われ方をするか分からない怖さがあるので、やむを得ない場合をのぞいては ThreadStorage を使ったほうが安心できます。

今後もアイデアがあれば試行錯誤すると思います。

Irvine: ActiveDorothyX

コメントなし»

うちの Windows 7 x64、IE11 環境では成功せず。
インストールフォルダは C:\bin\Irvine 。
管理者として実行しても変わらず。

Part31 で「URLを展開して貼り付け」による方法がでたときも不可でしたが、その報告者さんは Windows 8 で、かつ IE11 が公開される前だったので IE10 だったと思われます。

うちは当時 Windows 7 x64、IE8 だったはずなので、やはり IE10 というのが鍵っぽい……?

Irivne/Dorothy2: netinst.dms ネットインストール

コメントなし»

GitHub ではコミットごとに ZIP ファイルが自動生成されます。このファイルは Dorothy2 のパッケージインストール機能で扱えないこともありませんが、プロジェクトから出力して圧縮した書庫ではないため不要なファイルまでインストールされるといったデメリットがあります。

そこで、ZIP ファイルをダウンロードしてインストールする専用のツールを作っています。

自分自身は使わないし、必要とされるツールなのかどうか分かりませんが、一応形にはなったので反応を伺うためにも紹介しておきます。

ただ、簡単にインストールできるということが教えてクンを呼び込むことに繋がったら困る……。


設定画面のメニュー→パッケージ→ネットインストールで起動。

netinst_1

リストボックスがありますが選択肢は一つしか無いので、そのまま「ダウンロード」をクリックします。

netinst_2

ZIP ファイルのダウンロード、展開、内容の解析が行われ、スクリプトの一覧が表示されます。

ファイルに問題がある(必要なファイルが含まれない)場合は、ここでエラーが表示されます。

同じファイル名のスクリプトがインストール済みならチェックボックスにチェックが入り、「インストール済」欄にバージョンが表示されます。「→」は同じバージョンがインストールされていることを示します。

netinst_3

コンテキストメニューもあります。
WinMerge (WinMergeU.exe) がインストールされていれば差分を表示できます。

インストールしたいスクリプトにチェックを入れて「インストール」をクリックします。
(なおチェックを外してもアンインストールはされません)

※「新しいバージョンをインストールする」という動作ではなく「チェックを入れたスクリプトをインストールする」という動作です。同じバージョンや、より新しいバージョンがインストール済みでもチェックを入れたスクリプトは必ずインストールが行われます。

netinst_4

ファイルのコピーが行われ結果がステータスバーに表示されます。

ドキュメントが UTF-8 の場合は Shift_JIS に変換してインストールします。
今は Shift_JIS でレポジトリにコミットしていますが、このツールの使用を前提としていいなら UTF-8 でのコミットに変更したいと考えています。

netinst_5

先ほどの画面で「詳細表示」ボタンをクリックするとログファイルが開きます。

copy …… 新規ファイルをコピーした。
update …… 既存ファイルに上書きした。
same …… 同一内容のファイルが存在した(コピー省略)。
skip …… ファイル内容は異なるが、バージョン番号が同一なのでコピーしなかった。
※program\*.dms のみ適用。
error …… コピー時にエラーが発生した。

終了時に、ウィンドウ位置などの設定が Dorothy2\user\netinst.ini に保存されます。

Irvine/Dorothy2: ThreadStorage

4 個のコメント»

しばらく前から作っていた threadstorage ブランチを master にマージしました。
実験的な機能で、問題があれば削除して元に戻すかも知れません。

2ch で話題になっていた、プロセスIDとスレッドIDでダウンロードスレッドの同定を行い、スクリプトごしにデータを受け渡す仕組みです。common_load() で使える形式に実装し、Dorothy2R 本体側にも標準のインターフェースを設けています。

Dorothy2R_done.dms (Dorothy2B.dms に相当)とか Dorothy2R_resp.dms が増えています。

Dorothy2\common\threadstorage.dms は多分単体でも使えると思います。

いまのところ意味があるのは Dorothy.fileName = 'remove'; のための処理と、getuploader_r だけです。

自分の環境では、基本のキューフォルダは Dorothy2R_a.dms のみ有効、getuploader_r 用のフォルダは Dorothy2R_a.dms と Dorothy2R_resp.dms を有効にして使っています。

Irvine: Dorothy2\common\additem.dms

3 個のコメント»

AddItem の解説。

Dorothy2 スクリプト内から Irvine に新しいキューアイテムを追加するオブジェクトです。
Read the rest of this entry »

DMonkey: 名前付き関数式からの参照

コメントなし»

過去に書いた名前付き関数式で定義されたグローバル関数からはクロージャが使えないからの関連で。

参照先オブジェクトが属するスコープから抜ける前なら(クロージャとしての定義時の環境ではなく実行時の環境として)、名前付き関数式のブロック内から参照することは出来ます。

(function () {
  (function () {
    function common_load () {
      void function x () { alert (typeof common_load); };
    };
    common_load ();

    x ();  // function (まだ生きている)
  }) ();

  x ();  // undefined (スコープを抜けたので消失)
}) ();

Dorothy2 の Dorothy2A.dms では OnHttpRequest() 内で common_load() が定義されていて、実行終了まで OnHttpRequest() を抜けないので、common_load() で実行したスクリプトで名前付き関数式によって定義された関数内からも common_load() を呼び出せる、という挙動のようです。

あと名前付き関数式でなくて無名の関数式(を変数に代入したもの)でもスコープ抜けたら参照できなくなります。

Irvine: DOA インストールメモ

コメントなし»

●アーカイブからファイルをコピー

http://u1.getuploader.com/irvn/download/549/DOA.tx-.zip

Dorothy2\document\プログラミング\DOA.txt を
%Irvine%\Dorothy2\document\プログラミング\ にコピー。

http://u1.getuploader.com/irvn/download/376/DOA0.17.zip

xor100813_2.dms を
%Irvine%\scripts\ にコピー。

http://u1.getuploader.com/irvn/download/388/DOA018.zip

DOA.txt を
%Irvine%\Dorothy2\document\使い方\ にコピー。

xor100813.dms を
%Irvine%\scripts にコピー。

http://u1.getuploader.com/irvn/download/1112/DOA.zip (ver0.22)

DOA.dfm と DOA.dms を
%Irvine%\scripts にコピー。

●Irvine のオプション設定

ツール→オプション設定→スクリプトを開く。
OnListMenuClick の DOA にチェックを入れる。
OnTreeMenuClick の DOA にチェックを入れる。

●DOA スクリプトのコピー

使用したい DOA スクリプトのファイルを
%Irvine%\Dorothy2\DOA にコピー。

※Dorothy2 のパッケージインストール機能で出来る。

●その他

openQfolder 関係は省略。
使う場合は DOA018.zip と xor100914.zip(修正版) からコピーする。

Irvine/DMonkey: 関数クロージャよりクラスのメソッドが優先される場合がある

コメントなし»
class Test {
  function a () { alert ('class method'); }

  function test () {
    function a () { alert ('local func'); }
    function b () { a (); }

    a ();   // local func
    b ();   // class method
  }
}

(new Test ()).test ();

これはハマる。

Dorothy2 用のスクリプトを作る時は、呼び出し元のクラスで定義されている関数名と重複しないようにしなければなりません(変数名も)。

特に設定プログラム(Dorothy2\setting\*.set)は、Dorothy2set.dms で定義されている class SettingForm に多数の関数が含まれているので注意が必要です。

Irvine/DMonkey: DMonkey スクリプトから JScript を実行する

コメントなし»

文字列をスクリプトとして実行(MSScriptControl.Scriptcontrol) | 作業日報

ActiveXObject 経由で VBScript、JScript を実行する方法。WSH のスクリプトエンジンを直接呼び出してるっぽいです。

var js = "function main () { var api = new ActiveXObject ('Irvine.api'); api.AddUrl ('http://www.google.co.jp/favicon.ico', 0); return 1; }";

var script = new ActiveXObject ('MSScriptControl.Scriptcontrol');
script.Language = 'JScript';
script.addCode (js);

alert (script.run ('main', {}));

Irvine の「スクリプトの直接実行」でなら動作しますが、Dorothy2 スクリプトからだと EActiveXError エラーになります。

今更な話ですが、もしかして Irvine スクリプトの

※synchronize=1 以外の場合にIrvine.Api/UrlManager/Folder/Itemを使用しないでください

という制限は Irvine.Api 側の仕様ではなくて、DMonkey の ActiveX 機能がメインスレッドでないと使えない仕様によるもの、なのかも知れません(どこまで正しいか不明ですが)。

Irvine/Dorothy2: InternetGetCookieEx

コメントなし»

HTTP レスポンスヘッダで Set-Cookie: ~; HttpOnly のように HttpOnly を指定された Cookie は、JavaScript から読み込むことが出来ません(保存やアクセス時の送信はされます)。

ブラウザのアドレスバーで javascript:alert(document.cookie); というコードを実行しても、HttpOnly のない Cookie しか表示されません。

XSS 攻撃を和らげるセキュリティ対策だそうです。ちなみに気がついた範囲では Circle.ms が HttpOnly を使っています。

Windows API の InternetGetCookie でも読み込めないようになっていて、代わりに InternetGetCookieEx を使えば読み込めます。

Dorothy2 の common/InternetGetCookie.dms では InternetGetCookie を呼び出しているので読み込めません。InternetGetCookieEx を呼び出す関数を使うか、あるいは設定ファイルにIDとパスワードを書いて自前でログインするなどの対策が必要です。

IE の Cookie フォルダからファイルを直接読み込む方法でも可能かとは思いますが、現在は Cookie ファイル名がランダム化されているので実用的ではないでしょう(KB2559049 のホットフィックスでファイル名の仕様が変更されたようです)。

SQLite で Cookie を管理している Firefox や Chrome については未調査です。