Irvineのスクリプト用にGitHubアカウントを持っているのですが、最近はまったく活動していないため、近い内にアカウントを削除します。
ファイルはここに置いておきます(Download ZIPから保存したものなのでリポジトリ情報は含みません)。
Irvineはいまでも毎日使っています。
2chのIrvineスレでは多くのことを知ることができ、また刺激を受けました。
ありがとうございます。
なにかあればコメント欄かXアカウントまで。
Irvineのスクリプト用にGitHubアカウントを持っているのですが、最近はまったく活動していないため、近い内にアカウントを削除します。
ファイルはここに置いておきます(Download ZIPから保存したものなのでリポジトリ情報は含みません)。
Irvineはいまでも毎日使っています。
2chのIrvineスレでは多くのことを知ることができ、また刺激を受けました。
ありがとうございます。
なにかあればコメント欄かXアカウントまで。
1バイトずつ key [0]
~ key [7]
と排他的論理和を取っていくループ。
var k0 = key [0];
var k1 = key [1];
var k2 = key [2];
var k3 = key [3];
var k4 = key [4];
var k5 = key [5];
var k6 = key [6];
var k7 = key [7];
var sb = new StringBuffer (http.data);
var len = sb.length;
sb.append ('*'.multiply (32));
for (i = 0; i < len;) {
sb [i++] = sb.charCodeAt (i) ^ k0;
sb [i++] = sb.charCodeAt (i) ^ k1;
sb [i++] = sb.charCodeAt (i) ^ k2;
sb [i++] = sb.charCodeAt (i) ^ k3;
sb [i++] = sb.charCodeAt (i) ^ k4;
sb [i++] = sb.charCodeAt (i) ^ k5;
sb [i++] = sb.charCodeAt (i) ^ k6;
sb [i++] = sb.charCodeAt (i) ^ k7;
sb [i++] = sb.charCodeAt (i) ^ k0;
// 中略
sb [i++] = sb.charCodeAt (i) ^ k7;
sb [i++] = sb.charCodeAt (i) ^ k0;
sb [i++] = sb.charCodeAt (i) ^ k1;
sb [i++] = sb.charCodeAt (i) ^ k2;
sb [i++] = sb.charCodeAt (i) ^ k3;
sb [i++] = sb.charCodeAt (i) ^ k4;
sb [i++] = sb.charCodeAt (i) ^ k5;
sb [i++] = sb.charCodeAt (i) ^ k6;
sb [i++] = sb.charCodeAt (i) ^ k7;
}
sb.delete (len);
ここは19世紀か。
まったくループを展開しない場合に比べて、ちょっとだけ速くなります。ちょっとだけ。
まじめに速くしたいなら外部プロセスに投げるべき。
アップデートした場合は Dorothy2R 設定でユーザー設定を行った上で上書き保存して下さい。
従来の仕様の
Dorothy.nulUrl
が定義されている場合のみダウンロードしたダミーファイルを削除しない。というのが柔軟性に欠けて気になっていたので、
Dorothy.dummyUrl
で定義する。Dorothy.dummyRemove
が true
ならダミーファイルを削除する(既定値 true
)。Dorothy.removeThis()
を新設。という構造に変更してみました。
rutil_dorothy2r.dms で追加される Dorothy.removeThis()
の方はダミー URL はハードコーディングです。変更可能にするとファイル読み込みが増えるのと、そこまでしなくてもいいかなと。
あと関係ないけど今日気がついたことをついでに。
ダウンロードスレッドで VCLForm
を使ってモーダルダイアログを表示すると、ポップアップメニューを定義してても表示されないっぽい?
alert ('foo'.indexOf ('')); // -1
空文字列を検索すると -1 が返ります。
(JavaScript では 0)
alert ('foo'.indexOf ()); // undefined
特に意味はありませんが、引数を省略すると undefined
が返ります。
(JavaScript では -1)
'string'.lastIndexOf ('')
も同様です。
RegExp.$0~$9
と、正規表現リテラル /…/
で生成した全ての regexp
インスタンスの $0~$9
は共有されている。
したがって、
RegExp.$1 = 123;
のようにすると全ての regexp
インスタンスの $1
も変更される。
new RegExp()
で生成した RegExp
インスタンスでマッチングを行うと当該インスタンスの $0~$9
が更新される。
また同時に RegExp.$0~$9
も更新されるが、これは全ての regexp
インスタンスの $0~$9
とも共有されているのでそちらの値も更新される。
一方、
var r = new RegExp ('a'); r.$1 = 123;
のようにすると当該インスタンスの $1
だけが書き換わる。
このように、RegExp
インスタンスでは、正規表現マッチングによる $0~$9
の更新と代入式による $0~$9
の書き換えでは影響範囲が異なる。
ちなみに、regexp
インスタンスに対して
/a/.$1 = 123;
/a/ ['$1'] = 123;
といった方法はエラーになり、書き換えはできない。
RegExp.$1 = 123;
alert (/a/.$1); // 123
new RegExp ('(a)').test ('a');
alert (RegExp.$1); // a
alert (/a/.$1); // a
new RegExp ('(a)').$1 = 123;
alert (/a/.$1); // a
スクリプト内でダウンロードしてファイルに保存して 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 を使ったほうが安心できます。
今後もアイデアがあれば試行錯誤すると思います。
http://peace.2ch.net/test/read.cgi/win/1437882775/388 より引用。
388 :名無し~3.EXE:2015/11/03(火) 18:09:45.24 ID:J6VV5WH0
function test(f){return f;}
var fn = function(){};
alert(fn == test(fn)); //falseDMonkeyだと何故これがfalseになるんだろう?
確かに……。
分解して調べてみます。
function x () { }
function xx () { return x; }
(function (f) {
alert (f == x); // true
}) (x);
alert (xx () == x); // false
引数として渡す時は問題なく、戻り値として受け取った値が ==
にならないようです。
うちの Windows 7 x64、IE11 環境では成功せず。
インストールフォルダは C:\bin\Irvine 。
管理者として実行しても変わらず。
Part31 で「URLを展開して貼り付け」による方法がでたときも不可でしたが、その報告者さんは Windows 8 で、かつ IE11 が公開される前だったので IE10 だったと思われます。
うちは当時 Windows 7 x64、IE8 だったはずなので、やはり IE10 というのが鍵っぽい……?
下記サイトの画像を Irvine でダウンロードすると、途中でデータが破損して正しく表示されません。
(小さい画像は問題ありません。)
2015『C88夏コミ』新作アルバム Nostalgie :: SoundCouture
Internet Explorer で保存したファイルと比較すると一部に違いがあります。
サーバからは Transfer-Encoding: chunked でデータが送信されてきますが、ダウンロードしたファイルには、chunk デコード時にブロックの頭に 0x0a
が挿入されてその分末尾の1バイトが失われている、と思わしき領域がいくつかありました。
送信データそのものは正常で、IE 等のブラウザでは正常に表示されますし、common\http.dms の chunk デコード機能でも正常にデコードできます。
今のところ原因不明で、こちらの環境の問題かもしれないし、Irvine の chunk デコード機能のバグかもしれません。
Irvine のバグだとしたら今までに見つかってないのはおかしい気もしますが、長いデータでないと発生しない挙動ならありえるかも。
普通は chunk エンコードされるのは HTML データでかつ短いデータの上、HTML をダウンロードすることは割合としては少ないので。
このサイトは CMS の仕様で静的な画像ファイルも chunk エンコードしてしまうんでしょうね。
フォルダ設定の「同名のファイルが有ればリネーム」にチェックを入れると、同名のファイルが存在する(=既に一度ダウンロードが完了している)場合にリネーム([0]、[1]、……の付加)が行われます。
ただし、アイテム設定の「別名で保存」にファイル名を入力した場合はリネームが行われません。
この際フォルダ設定の「リジュームを行う」にチェックが入っていないと
リジュームを行いません → ダウンロードに失敗しました
となります。
一方、「リジュームを行う」にチェックが入っていると、サーバの仕様にもよりますが
プロトコルエラー(416 Requested range not satisfiable) → リジューム開始エラー
となります。
(サーバ上のファイルサイズを超えてデータを要求してしまうため)
いずれにせよダウンロードは失敗したという扱いになります。
しかも、フォルダ設定の「完了していないファイルを隠す」にチェックが入っているとダウンロード完了しているファイルに隠し属性が設定されるというオマケ付きです。
pixiv_r.dms のような Dorothy2 用スクリプトでは「別名で保存」に入力した形でアイテムを登録するので、この挙動が問題になります。
どう対処するのがいいんだろ……。
Irvine カテゴリーの記事を表示しています。