Monthly Archives: 8月 2010

2010-08-27

JavaScriptからバイナリファイルを読む

JavaScriptからバイナリファイルが読めると知った( Handling binary data - XMLHttpRequestの利用 - MDC )ので、色々試しているところです。

flash(flex)のURLLoaderByteArrayに似せたクラスがあればflashとの相互移植がやりやすくなりそうだなと思い、作ってみたり。

いくつか直面した問題を列挙。

  • Google Chromeでローカル・同一ディレクトリ下のファイルにアクセスできない。

    どうもセキュリティ上の都合のようです。コマンドラインオプション –allow-file-access-from-files で回避できました。(参考: Maginot-line: Error: NETWORK_ERR: XMLHttpRequest Exception 101)

  • IE8のXMLHttpRequestでローカル・同一ディレクトリ下のファイルにアクセスできない。

    ActiveXObject("Msxml2.XMLHTTP")ならアクセスできました。

  • IEでバイナリが取得できない。

    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を使うのかな。

2010-08-25

Dropbox

Dropboxを導入してみた。

Dropboxの存在は前々から知っていたのだけど、普段cvsやgit、scp、ange-ftp(tramp)などを使っているとあまり必要性を感じることはなく、導入していなかった。

しかし、今日ハードディスクを整理しているときに、開発に使う資料(pdfや参考になる第三者のソースコード等)はDropboxで共有するのが良さそうだと思うに至った。これらのファイルはそれなりに容量が大きく、ネットワーク越しに閲覧するにはややストレスを感じる。ローカルでさくさく閲覧したい。それでいていつでもどこでも見たくなったときに見ることができるようにしたい。見たくなったときにいちいちダウンロードするのは手間だし時間がかかる。新しく手に入れた資料をアップロードし忘れるのも心配。「あ、あの資料自宅のPCの中だ……」なんてことは避けたい。バックグラウンドで自動的に同期されることが望ましい。Dropboxはそんな用途にはぴったりではないだろうか。

2010-08-11

体調不良

昨晩、窓を開けてエアコンを付けず扇風機を直当てで寝たら(つまりエアコン導入前と同じに戻したら)少し良くなった。たまたま治るタイミングだったのかもしれないけど。朝起きたら喉は乾いていたのだけど変な音の咳はほとんど出なくなっていた。

でも相変わらず喉は痛いし熱っぽい。頻度は減ったけど咳・鼻水も出る。

思うにもっと冷房をガンガンに効かせてその代わりに冬用の装備で寝れば大丈夫なのではないだろうか。電気代をけちって30度くらいに設定するものだから暑くなったり寒くなったりで体が混乱するのではないか。現に上着を着なきゃいけないほど寒い職場の冷房では全く健康を害する気がしないし。いや、やらないけどね。電気料金の請求怖いし。

電気代と言えばこのところ電気メーターを頻繁にチェックしています。

2010-08-03

高尾山

高尾山へ行きました。六号路を上って、山頂でとろろそばを食べ、小仏城山まで歩き、なめこ汁をすすって、高尾山頂まで戻り、一号路でケーブルカー駅まで行き、十一丁目茶屋で良い景色を見ながら団子を食べました。

普段ろくに運動しない男性四人で行ったのですが、ゆっくりとしたペースで歩けたのがよかったかもしれません。一人だとハイペースで歩いてバテバテになってたと思います。

2010-08-02

htmlビューア

Webサイトを読むだけのためにタブレット端末が欲しい。机の上にでっかく鎮座している23インチ液晶表示装置ではなく、手元に目線をおろして読めるような表示装置が欲しい。

なに、iPad? うーん、まあ、悪くはない。