吉野家の牛鍋丼、意外といける。肉が減っているように感じない不思議。シラタキも豆腐も好きだし。肉の味変わった?
吉野家の牛鍋丼、意外といける。肉が減っているように感じない不思議。シラタキも豆腐も好きだし。肉の味変わった?
JavaScriptからバイナリファイルが読めると知った( Handling binary data - XMLHttpRequestの利用 - MDC )ので、色々試しているところです。
flash(flex)のURLLoaderとByteArrayに似せたクラスがあればflashとの相互移植がやりやすくなりそうだなと思い、作ってみたり。
いくつか直面した問題を列挙。
どうもセキュリティ上の都合のようです。コマンドラインオプション –allow-file-access-from-files で回避できました。(参考: Maginot-line: Error: NETWORK_ERR: XMLHttpRequest Exception 101)
ActiveXObject("Msxml2.XMLHTTP")ならアクセスできました。
Msxml2.XMLHTTPにはoverrideMimeTypeは無く、responseTextでは正しくバイナリが取得できません。0のところで列が切れてしまうみたいです。responseBodyを使うと取得できるのですが、これはJavaScriptからはアクセスできず、VBScriptを経由してアクセスするものらしいです。(参考: JavaScriptによるLZHの解凍サンプル)
私は以下のようなコードでresponseBodyの中身をJavaScript文字列へ変換しました。かなり遅いです。
execScript("Function vbBinaryToText(bin)n"+
" Dim in"+
" Dim sn"+
" s=""n"+
" For i=1 to LenB(bin)n"+
" s = s & ChrW(AscB(MidB(bin, i, 1)))n"+
" Nextn"+
" vbBinaryToText = sn"+
"End Functionn"+
"n", "VBScript");
str = vbBinaryToText(xhr.responseBody);
ByteArray.readMultiByte()のようなことをするのは難しそうです。Escape Codec Library: ecl.jsでやっているようなことをすれば実装できるのだとは思いますが、とりあえずUTF-8さえデコードできれば十分なので、readUTFBytes相当だけ実装しました。手元にあったC++の変換コードを移植。JavaScriptの内部エンコーディングはUTF-16っぽいのでサロゲートペアは分割。
NaN(JavaScriptにqNaNとsNaNの区別ってあるの?)、±無限大、±0、非正規数、正規化数をそれぞれ自分で分解・組みたてするしかないんでしょうね。powを使うのかな。
Dropboxを導入してみた。
Dropboxの存在は前々から知っていたのだけど、普段cvsやgit、scp、ange-ftp(tramp)などを使っているとあまり必要性を感じることはなく、導入していなかった。
しかし、今日ハードディスクを整理しているときに、開発に使う資料(pdfや参考になる第三者のソースコード等)はDropboxで共有するのが良さそうだと思うに至った。これらのファイルはそれなりに容量が大きく、ネットワーク越しに閲覧するにはややストレスを感じる。ローカルでさくさく閲覧したい。それでいていつでもどこでも見たくなったときに見ることができるようにしたい。見たくなったときにいちいちダウンロードするのは手間だし時間がかかる。新しく手に入れた資料をアップロードし忘れるのも心配。「あ、あの資料自宅のPCの中だ……」なんてことは避けたい。バックグラウンドで自動的に同期されることが望ましい。Dropboxはそんな用途にはぴったりではないだろうか。