練炭ブログ

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

DMonkey: ループのアンロール

コメントなし»

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世紀か。

まったくループを展開しない場合に比べて、ちょっとだけ速くなります。ちょっとだけ。
まじめに速くしたいなら外部プロセスに投げるべき。

DocuWorks PDF Creatorで印刷(保存)ができない

コメントなし»

WordやExcelからDocuWorks PDF Creatorに対して印刷することでPDF形式に変換して保存することが出来ます。

Word等のアプリで印刷実行

PDFの保存ダイアログが開く

変換実行

こういう流れで処理されますが、ある日突然、PCを起動してからWordで印刷を実行しても保存ダイアログが表示されなくなりました。

よくあるご質問 富士ゼロックス

DocuWorks PDF Creatorをインストールしても、PDFへの変換処理が行われません。対処方法を教えてください。

1)
DocuWorks PDF Creatorをインストールしても、PDFへの変換処理が行われない場合があります。
OSを再起動することでPDFへの変換処理を行うことができます。

再起動しろとか安直だなあ、と思いつつも実際に再起動したら直りました。

少しググってみただけだと同様の体験談は見つかりませんでしたが、サポート情報として掲載されているということはメーカーへの問い合わせはある程度あるのかも知れません。

原因は不明ですが、同じ日にAdobe Reader XIが勝手にAdobe Acrobat Reader DCにアップデートされていた(ライセンス同意画面が表示されたので同じ日というのはほぼ確実)のが関係している可能性もあり。

Inateck FE3001

コメントなし»

そういえば以前、USB3.0外付けHDDケースが3TB対応してなかった件を書きましたが、その後 Inateck FE3001 を買っていました。

Amazon.co.jp | Inateck 2.5/3.5インチ USB3.0 HDD外付けケース SATA(SATA-I/II/III)にサポート UASP超高速データ転送モードに対応 アルミ製 | Inateck | ドライブケース

HDDの固定は簡単で、動作も問題なし。

ただ蓋のLED窓部分が接着されてなくて嵌め込んであるだけなので、うっかり落として外れて無くしてしまわないように注意が必要かも。

側面にゴム足が最初から貼り付けられています。縦置きは非対応ですが、適当なスタンドさえあれば縦置きできるかもしれません。

USB3.0外付けHDDケースが3TB対応してなかった件

コメントなし»

玄人志向 | GW3.5AI-SU3/VB:3.5型SATA HDDケースに1TBのHDDを入れてバックアップ用に使っていましたが、空きがなくなってきたので3TBのHDDを買ってきたんです。7ヶ月前に。

で、ようやく中身入れ替えて電源入れたら3TBのHDDなのに約746GBしか認識されない。

3TBに対応してませんでした。さすがに古いか……。

コントローラはAS2015だったので、下記URLを参考にしてファームウェアのアップデートを試みましたが、どのバージョンでも FAIL FAIL FAIL のエラーになってしまいました。詳細が表示されないので何が原因かは分かりませんが、チップのリビジョンが古すぎるのかもしれません。

さて、どうしよう。

NECのノートパソコンで無線マウスが動作しない

コメントなし»

NEC のノートパソコン(LaVie)で、付属の無線マウスが突然動作しなくなった場合の対処メモ。

「マウス・リモコン登録ユーティリティ」を起動すると、ワイヤレス機能が無効になっているのでワイヤレススイッチを有効に切り替えて下さい、みたいな(うろおぼえ)エラーが表示される場合に、スイッチを有効側にしたり機内モードをオフ(=無線機能有効)にしても改善しないことがあります。

PC設定の変更→ネットワーク→機内モードで「RF INPUT DEVICE」がオフになっているなら、オンにすることで直ります。

Windows 8.1でワイヤレスマウスを有効/無効に設定する方法

トラブルの原因の一つにすぎないのに、遭遇するのはこのパターンばっかりの気がします。

設定画面の出し方も分かりにくいし、ユーティリティの表示も分かりにくい。ユーティリティなんて LaVie の専用アプリなんだから、「RF INPUT DEVICE」の状態を調査して自動的にオンにしてくれてもいいと思います。

Irvine: Dorothy2R をいろいろいじった

コメントなし»

アップデートした場合は Dorothy2R 設定でユーザー設定を行った上で上書き保存して下さい。

従来の仕様の

  • ダミー URL がハードコーディングされている。
  • Dorothy.nulUrl が定義されている場合のみダウンロードしたダミーファイルを削除しない。

というのが柔軟性に欠けて気になっていたので、

  • ダミー URL は Dorothy.dummyUrl で定義する。
  • ユーザー設定で変更可能。
  • Dorothy.dummyRemovetrue ならダミーファイルを削除する(既定値 true)。
  • Dorothy.removeThis() を新設。

という構造に変更してみました。

rutil_dorothy2r.dms で追加される Dorothy.removeThis() の方はダミー URL はハードコーディングです。変更可能にするとファイル読み込みが増えるのと、そこまでしなくてもいいかなと。

あと関係ないけど今日気がついたことをついでに。
ダウンロードスレッドで VCLForm を使ってモーダルダイアログを表示すると、ポップアップメニューを定義してても表示されないっぽい?

DMonkey: 'string'.indexOf('') == -1

コメントなし»
alert ('foo'.indexOf (''));    // -1

空文字列を検索すると -1 が返ります。
(JavaScript では 0)

alert ('foo'.indexOf ());    // undefined

特に意味はありませんが、引数を省略すると undefined が返ります。
(JavaScript では -1)

'string'.lastIndexOf ('') も同様です。

DMonkey: RegExp.$0~$9 の書き換えの影響範囲

コメントなし»

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

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 を使ったほうが安心できます。

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

DMonkey: 関数を返すと元の関数と==にならない

コメントなし»

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)); //false

DMonkeyだと何故これがfalseになるんだろう?

確かに……。

分解して調べてみます。

function x () { }
function xx () { return x; }

(function (f) {
  alert (f == x);  // true
}) (x);

alert (xx () == x);  // false

引数として渡す時は問題なく、戻り値として受け取った値が == にならないようです。