練炭ブログ

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

DMonkey: Math.round()

コメントなし»

JavaScript と DMonkey における Math.round() の動作の違い。

JavaScript …… round half up

  • 小数部分が 0.5 より大きければ、次に大きい整数。
  • 小数部分が 0.5 なら、次に大きい整数(↑と同じ)。
  • 小数部分が 0.5 より小さければ、次に小さい整数。

DMonkey …… round half to even

  • 小数部分が 0.5 より大きければ、次に大きい整数。
  • 小数部分が 0.5 なら、最近接偶数への丸め
  • 小数部分が 0.5 より小さければ、次に小さい整数。
function r (n) {
  alert ('Math.round (' + n + ') == ' + Math.round (n));
}

r (-2.5);   // -2
r (-1.5);   // -2
r (-0.5);   // 0
r (+0.5);   // 0
r (+1.5);   // 2
r (+2.5);   // 2

関連: DMonkey: Global.parseInt()

Global.parseInt() に number 型を渡した時も同じ丸め方になります。これらの挙動は Delphi の System.Round() を規定の丸めモード(rmNearest)で呼び出しているためと思われます。

DMonkey: iconv.dll による文字列変換

コメントなし»

KaoriYa さんが配布している Vim に同梱されている iconv.dll を使って、Irvine のスクリプトで UTF-8 文字列を Shift_JIS に変換するテスト。

function iconvUtf8ToSjis (text) {
	var Dorothy = { path: 'C:\bin\Irvine\Dorothy2\' };

	var dll = Dorothy.path + 'bin\iconv.dll';

	var d = new DynaCall ();
	d.register (dll, 'libiconv_open',	'i=ss',		'r=l');
	d.register (dll, 'libiconv_close',	'i=l',		'r=l');
	d.register (dll, 'libiconv',		'i=lssss',	'r=l');

	var n;

	var iconv = d.libiconv_open ('Shift_JIS//IGNORE', 'UTF-8');
	// alert ('libiconv_open: ' + iconv);

	var insb = new StringBuffer (text);
	var inbufp = new Struct ('inbuf:s');
	inbufp.inbuf = insb;

	var inbytesleftp = new Struct ('inbytesleft:l');
	inbytesleftp.inbytesleft = new Number (insb.length);

	var outsb = new StringBuffer (100);
	var outbufp = new Struct ('outbuf:s');
	outbufp.outbuf = outsb;

	var outbytesleftp = new Struct ('outbytesleft:l');
	outbytesleftp.outbytesleft = new Number (outsb.length);

	n = d.libiconv (iconv, inbufp, inbytesleftp, outbufp, outbytesleftp);
	// alert (n + "\n\n" + outbytesleftp.outbytesleft + "\n\n" + outsb.text);

	n = d.libiconv_close (iconv);
	// alert ('libiconv_close: ' + n);

	return outsb.text;
}

var t = String.fromCharCode (0x61, 0xF0, 0xA0, 0xAE, 0xB7, 0x7a);
alert (iconvUtf8ToSjis (t));

てきとうに書いたのでバッファの扱いとか間違っているかもしれません。Irvine の動作自体がおかしくなる恐れもあるので、このコードは実行しないで下さい。

変換できない文字を米印※とかゲタ〓のような任意の文字に変換できればよかったんですが、変換自体をエラーにするか文字を無視するかしか選べないようです。

Windows 7 を再インストール

コメントなし»

IE9 で YouTube やニコニコ動画の Flash Player が「ムービーが未ロードです」と表示され動画が再生されない、IE9 をアンインストールして IE8 にしたら IE9 の再インストール時にエラーになってインストール出来ない、という問題が出てしまったので Windows 7 を再インストール……。

Flash Player だけじゃなく HTML やファイルのダウンロードもおかしくなってたみたいで、データの破損が頻発してました。

Windows 7 を再インストールしてから Windows Update で片っ端からアップデートかけたところ、また同じ症状になったので、再度 Windows 7 のインストールからやりなおして、多分原因が判明。

Windows Update のオプションに出てくる「Ralink - WLAN - BUFFALO WLI-UC-AG300N Wireless LAN Adapter」をインストールすると通信データが破損するっぽいです。

さすがにもう一度インストールしてみて再現するか試す気にはなりませんが、それ以外は以前と同じ環境になったはずなので、きっとコイツが犯人かなーと。

この無線 LAN アダプタ、Windows 7 がドライバを内蔵しているので指すだけで使えたんですが、Windows Update に出てくるなら何か改良されてるんだろううなあと思ってホイホイ入れちゃったのがまずかったですね(これが原因だったとしたら)。完全に通信できなくなるとかだったらすぐ気がつけたのに。

あー疲れた……。

IE10 については、今なら入れても問題ないと思いますが、検証する気力がなくなったのでしばらくは入れない方向で。

Proxydomo: Proximodo 派生の GNU GPL なローカルプロクシが登場

コメントなし»

lafe @ ウィキ - Proxydomo

proxydomo_v15
Proxydomo v1.5 メイン画面

Proximodo を作って作られたとのことで、動作可能なバイナリだけでなく、既に GitHub でソースコードも公開されています。

Proximodo は GUI ツールキットとして wxWidgets が使われていましたが、Proxydomo は WTL で GUI が実装されているみたいです、多分。ログ表示は Proxomitron に比べてかなり速いです。

DMonkey: オブジェクト.$数字 の直後に演算子を書くとエラー

コメントなし»
var o = { $1: 2 };
alert (o.$1+3);   // SyntaxError: Line(2) => Text( 3 )

オブジェクト.$数字 という形式の参照の直後に、スペースを置かずに +*
演算子を書くと SyntaxError になります。-/ は問題ありません。

上の例では alert (o.$1 +3) のようにスペースを入れると問題なく動作します。

RegExp.$1~$9 でもエラーになります。

Windows 7 用の Internet Explorer 10 が公開

コメントなし»

ie10_betafishie

ということで早速インストールしてみました。見た目や使い勝手は IE9 からそれほど変わってないっぽいです。

気がついた範囲では、Google Reader のトレンドの表のレイアウトが何故か崩れます。<td> は一列全部同じ幅になるはずが、行によって幅が違って直交した表になりません。

IPS液晶を謳うドスパラタブレット、実はTN液晶で返品対応へ

コメントなし»

ちょっと前に Android タブレットを買おうか考えてた時に、ドスパラタブレットも選択肢に入れてたんだけど、Google Play に対応していないとか解像度が低いとかで、どうせ買うなら nexus 7 かなーという結論に達しました。

結局まだ決断できなくて買ってないんですが。

Proxomitron: Kill image viewer JS 更新終了

コメントなし»

最近この手の JavaScript を潰すとページそのものがまともに表示されなくなるサイトがいくつもあったので、しばらく前から無効にして様子を見ていたのですが、どうしても潰したいほど不便なサイトはなかったので、いっそフィルタを使わないことにしました。

というわけで最終バージョンを貼っておきます。

※ Proxomitron 以外での使用およびそれを目的とした翻案、移植、改変等を禁止します。

[Patterns]
Name = "Kill JS image viewer  (2013-02-03; rentan)"
Active = TRUE
URL = "$TYPE(htm)(^sneakerbunko.jp/|www.chuable.net/|www.propeller-game.com/)"
Bounds = "<script\s*</script>"
Limit = 256
Match = "*src=$AV((*/)+"
        "(jquery[._]lightbox"
        "|jquery.lightpop"
        "|jquery.fancybox"
        "|jquery.prettyPhoto"
        "|jquery.lazyload"
        "|lightbox"
        "|lytebox"
        "|multibox"
        "|highslide(-with-gallery|)"
        "|shadowbox(-base|)"
        "|FancyZoom(HTML|)"
        ")*.js(\?*|))*"
Replace = "<!-- image viewer JS killed -->"

Proximodo が不自由なソフトウェアになる日

コメントなし»

Proximodo に手を加えてコンパイルした人が、Proximodo のライセンスを GPL から修正 BSD ライセンスに変更するよう原作者に依頼する事例が発生し、各所に波紋を呼んでいるようです。

オニギリを食べ終わった後になってから海苔が巻いてあったことに気がつくみたいな話で、そういう人が「私は有明海産の海苔しか食べないようにしています」「だからさっき食べたオニギリの海苔を有明産にして下さい」って言ってるみたいな?

ところで、FSF がコードを取り込むときはパブリックドメインとする宣言書か著作権を譲渡する書類に署名してもらうそうですが、Proximodo はそこまでしていたんでしょうか。著作権者の中に sourceforge.net のアカウントが削除されているとか、他界しているとかで連絡が取れない人がいたら勝手に変えられないような気がします。その場合ライセンスを変更できるのはコントリビュートを取り込む前のバージョンになりますね。

あと「完全に死んだプロダクト」って、プロジェクトとしては死んでるけどプロダクト単体としてはせいぜい半殺しくらいだと思う。機能的に発展してないというのはともかく、新しいOSへの対応といった面では RWIN や .. の問題は非公式の修正パッチがありますし。

SSD で Windows 7

コメントなし»

Windows XP サポート終了まであと1年ちょっとだし、Internet Explorer は XP で使える最終バージョンの IE8 だと Gmail で非対応の警告が表示されるしその他もろもろの問題があるしで、さすがに限界を感じてきたので Windows 7 にしてみました。

Intel SSD 335 240GB を買ってそちらに Windows 7 をインストール。円安で値上がりしたのでもうちょっと早く買えばよかったです。メモリも ASUS P6T の上限である 24GB を 8GB×3チャネルでやってみたかったのですが、ストレージ以上に高騰してたので断念。元の水準に戻ることはあるんでしょうかね……。

Windows 7 はずっと前に USB3.0 カードとセットの DSP 版を買っていて、USB3.0 カードだけ先に取り付けて使っていました。

元の HDD にはそのまま XP を残してあるので何かあれば起動できるのですが、まだ一度もしてません。いろいろ環境が整ってない部分は残っているのですが、おおむねすんなり移行出来ました。

ただ、IE9 でウェブページに埋め込まれた Twitter のツイートを表示するとフォントがひどいことになりますね。

IE8 でもなるらしいのですが知りませんでした。互換モードの関係とかで発現しなかったのかも。一時期のやらおんでツイートのスクリーンショットのフォントがおかしいのは、画像の転載を防ぐ細工だと思ってたのですが多分これが原因だったんですね。

『Hug Me In!』初回製造封入特典の「まもりいか」に関するお詫びとご報告のページなんか上から下まで全部これ。

そいうえばフォントといえば

なんていう不具合もあるらしく。