練炭ブログ

X680x0、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

Fiddler: Unable to Generate Certificate エラーの対処

コメントなし»

Fiddler で Decrypt HTTPS traffic にチェックを入れると

fiddler_unable_to_generate_certificate

というエラーが出てしまう場合の対処。

Fiddler: Creation of interception certificate failed. | Harachie's Blog

直った。

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() を呼び出せる、という挙動のようです。

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

DMonkey: 変数経由のnew演算子

コメントなし»
function Foo () {
  alert ('Foo constructor');
}
Foo.prototype.p = function () {
  alert ("this is Foo\nnameOf = " + nameOf (this));
};

function Baz () {
  alert ('Baz constructor');
}
Baz.prototype.p = function () {
  alert ("this is Baz\nnameOf = " + nameOf (this));
};

function test () {
  var f = new Foo ();  // Foo constructor
  f.p ();  // this is Foo, nameOf = Foo

  var Bar = Foo;
  var f2 = new Bar ();  // Foo constructor
  try { f2.p (); } catch (e) { alert (e); }  // ENameError

  var Baz = Foo;
  var f3 = new Baz ();  // Foo constructor
  f3.p ();  // this is Baz, nameOf = Baz
}
test ();

変数に関数を代入してその変数名で new すると、参照している関数がコンストラクタとして呼び出されますが、prototype として使われるのはその変数名と同名の関数の prototype になってしまいます。

名前付き関数式はグローバルスコープに対する関数宣言として動作する の末尾のエラー例も、これと同じことだと思います。

DMonkey: StringBuffer.indexOf() の不具合

コメントなし»
var sb = new StringBuffer ('aZ');
alert (sb.indexOf ('Z', 0));  // 1 
alert (sb.indexOf ('Z', 1));  // 1
alert (sb.indexOf ('Z', 2));  // 1 ※本来は -1
alert (sb.indexOf ('Z', 3));  // 1 〃
alert (sb.indexOf ('Z', 4));  // 1 〃

StringBuffer.indexOf()

  • 1バイトの文字列を検索。
  • 検索開始位置に length 以上の値を指定。
  • 末尾の文字が検索する文字と同じ。

という条件の時、-1 ではなく末尾の文字の位置を返してしまいます。

検索する文字列が2バイト以上なら問題ないようですが確証はありません。

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(修正版) からコピーする。

Bookmarklet: ニコニコ生放送最小化

コメントなし»

Internet Explorer によるニコニコ生放送の閲覧を支援するブックマークレットです。

ニコ生を閲覧中に実行すると、Flash Player だけが表示されるように IE のウィンドウを出来るだけ小さくします。

もう一度実行するとウィンドウが大きくなります(手抜きのため、元と同じ大きさには戻りません)。

Windows 7(テーマは Windows 7)、IE10、ニコ生 GINZA にあわせて作ってあるので、それ以外の環境では動作しなかったりズレたりすると思います。

javascript:(function(w){var o=$('flvplayer');if(o.style.position==='fixed'){o.style.position='static';w.resizeTo(992,1000);}else{['ad_bnr','footer_ads'].each(function(id){var e=$(id);e&&e.remove();});o.hide();o.style.position='fixed';o.style.top='-61px';w.resizeTo(992,506);o.show();}})(window)

こんな感じになります。
niconama_minimize

YouTube URL サンプル

コメントなし»

増えてきたのでこっちに保存。

RTMP
http://www.youtube.com/watch?v=bEPO400pwgE

日本語投稿者名
http://www.youtube.com/watch?v=WUjnBoIjZL0

有料 この動画はお住まいの地域ではご利用いただけません。
http://www.youtube.com/watch?v=AtzsWDbFzps

4K2K
http://www.youtube.com/watch?v=N0m1XmvBey8

3D
http://www.youtube.com/watch?v=Ya5eQ_QfAog

3D変換有効
http://www.youtube.com/watch?v=9jGvCdthQso

VP9
http://www.youtube.com/watch?v=aPkyPdubqDs

itag 264
http://www.youtube.com/watch?v=huxJKlMSu0k

関連:
YouTube でタイトルに結合文字が使われている例

Proxomitron: ブラウザでのコピー操作を監視するスパイウェアからの防御

コメントなし»

WordPress:誰かが記事をコピーしたら教えてくれるプラグインCCC(Check Copy Contents)を作ってみた。 | 着ぐるみ追い剥ぎペンギン

誰かが、あなたのブログの文章をコピーしたら、そのコピーされた箇所とページのURLを、こっそりとあなたにメールで通知します。

(リンク先より引用)

という恐ろしい WordPress プラグインがありまして、それに対する防御策の実験です。

以下のコードを実行する <script> タグをページに挿入することで、copy イベントから window.getSelection()document.selection.createRange() が呼ばれた場合に警告を表示して、ダミーのデータ(「輝け」)を返します。

  function hook (obj, name, func) {
    var orig = obj [name];

    var k = '__prox_' + name;
    if (!obj [k]) {
      obj [k] = orig;
    }

    obj [name] = func;
    return orig;
  }

  function hookSelection () {
    function msg (s) {
      alert (location.href + '\n\n' + s + ' is called from oncopy event.');
    }

    if (window.getSelection) {
      hook (window, 'getSelection', function () {
	if (!window.event || window.event.type !== 'copy') {
          return window.__prox_getSelection ();
	}
	msg ('window.getSelection');

	var sel = {
          anchorNode: null,
          anchorOffset: 0,
          focusNode: null,
          focusOffset: 0,
          toString: function () { return 'Shine'; }
	};
	return sel;
      });
    }

    if (document.selection.createRange) {
      hook (document.selection, 'createRange', function () {
	if (!window.event || window.event.type !== 'copy') {
          return document.selection.__prox_createRange ();
	}
	msg ('document.selection.createRange');

	var rng = {
          setStart: function () { },
          setEnd: function () { },
          cloneContents: function () { return document.createTextNode ('Shine'); },
          text: 'Shine',
          htmlText: 'Shine',
          toString: function () { return 'Shine'; }
	};
	return rng;
      });
    }
  }
  hookSelection ();

問題のプラグインの現状のコードがダミーのデータを消化できる程度に偽のプロパティを用意してありますが、ダミーを返す代わりに問答無用で例外を投げちゃってもいいかも知れません。

あと document.getSelection() も潰した方がいいかも。

copy イベント以外での監視には対応していないので、例えば window.setInterval() で監視、など防御策に対する対抗措置が取られると対応が難しいです。スパイ目的ではなく動的なウェブ表現のために選択範囲の取得を行うページもあるので、全てをブロックするという訳にもいかないと思うので。

こんな面倒な方法ではなくて、単にブロックリストに以下のように追加する手もありますが、パス名を変更されるとブロックできません。

*/wp-content/plugins/check-copy-contentsccc/

ブロックリストにおいて * から始まる URL だとハッシュ化されない、というのもマイナスポイント。

2016-02-12 イベント外から呼び出されると window.eventnull のためエラーになるので修正しました(赤字部分)。

Adblock Plusの闇が暴かれる

コメントなし»

広告を消してくれるブラウザ拡張機能「Adblock Plus」の秘密 - GIGAZINE

Adblock Plus が広告を受け入れるようになったのに対抗して、広告機能を削除した Adblock Edge というフォークが出たりといった動きもあるようで。

【CSS】Mozilla広告ブロック Part7かな【Adblock】の 688- あたり。

F12開発者ツールは@importしたCSSのURLがおかしい

コメントなし»

Internet Explorer 8 以降で F12 キーを押すと表示される「F12 開発者ツール」(F12 Developer Tools)。ちなみに F12 も正式名称の一部のようです。

CSS のタブにはページ内のスタイルシートを選択するリストボックスがありますが、@import で読み込んだ相対パスのスタイルシートが、少なくとも IE9 では(IE8、IE10 は試していないので不明)、正しくない URL で表示されます。

選択時に表示されるスタイルシートの内容と実際のページのレンダリング結果では正しく本来の URL のスタイルシートが反映されています。

例: 『ちいさな彼女の小夜曲』公式ホームページ
ie9_f12devtool_css

index.html から直接読み込まれている import.css は正しい URL です。

<link REL="stylesheet" type="text/css" HREF="css/import.css">

import.css から以下のように読み込まれている各ファイルは間違った URL になっています。

@import url("./base.css");
@import url("./common.css");
@import url("./page.css");
@import url("./format.css");

JavaScript で document.styleSheets[*].imports[*].href を参照すると開発者ツールと同じように間違った URL が得られます。同じ算出ルーチンを使っているか、開発者ツール自体がそのプロパティを参照してるのかも知れません。