latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

第三次ブラウザ戦争がそろそろ閉幕します

追記: このエントリを投稿してから3日後に Google から AMP が発表されました。AMP は 既存の HTML/CSS/JavaScript の機能を制限することで、ページの表示パフォーマンスを改善するものです。AMP で書かれたページは Google 検索ランキングにおける特典が受けられるといった情報もあります。AMPの実装方法

iOS 9 Safari で発生していた touchstart で音が鳴らない不具合に対するパッチが投入されました

iOS 9 Safari で発生していた touchstart で 音が鳴らせない不具合に対するパッチが先ほどWebKitに投入されました。修正されるもようです

http://qiita.com/uupaa/items/e5856e3cb2a9fc8c5507 iOS 9 Safari WebAudio::AudioBufferSourceNode does not play on first touchstart event.

バイナリダンプをカラフルに

あと90日でクリスマスですね。

(バイナリ解析が辛くなって来た事もあり)ちょっと気が早いですが、視認性の改善とモチベーションの維持のために TypedArray.dump のダンプ結果を色々とデコれるようにしてみました。

低レベルなビット操作関数を集約した WebModule ベースのライブラリ Bit.js を追加

結構な割合で必要となるビット演算系の関数をまとめた WebModule ベースのライブラリ Bit.js を追加しました。

こんな関数があります。

// make bit mask
Bit.mask(2)     // -> 0x03
Bit.mask(4)     // -> 0x0f

// bit split by bit-pattern
Bit.split(0xffff1234, [16,4,4,4,4])  // -> [0xffff,0x1,0x2,0x3,0x4]

// With ES6 Destructuring Assignment
// ES6 Destructuring Assignment と Bit.split を併用すると以下のように簡便に記述できます
var [u16, u8a, u8b] = Bit.split(0x00001234, [16, 8, 8]); // u16 = 0x0000, u8a = 0x12, u8b = 0x34

// population count (counting 1 bits)
Bit.popcnt(0x6) // -> 2

// Number of Leading Zero
Bit.nlz(0x6)    // -> 29

// Number of Training Zero
Bit.ntz(0x6)    // -> 1

// binary dump
Bit.bin(0x12345678, [4,4,8,4,4,8])
// -> "0001, 0010, 00110100, 0101, 0110, 01111000"

// binary(hex) dump
Bit.dump(0x12345678, [4,4,8,4,4,8]);
// -> "0001(1), 0010(2), 00110100(34), 0101(5), 0110(6), 01111000(78)"

// dump IEEE754 internal format
var doublePrecision = true;
var u32array = Bit.IEEE754(0.15625, doublePrecision);
Bit.bin(u32array[0], [1,11,20]) + Bit.bin(u32array[1], [32])
// -> "0, 01111111100, 0100000000000000000000000000000000000000000000000000"

Bit.IEEE754 は数値を IEEE754 表現のビット列に変換する関数です。
数値をネットワーク透過性のあるバイナリに変換するために、結構な頻度で必要になります。
そういえば MessagePack.js の内部でも同様の変換を使っていますね。

ビットを数える・探すアルゴリズム を大変参考にさせていただきました。

また、32bit の精度で NLZ を正しく実装 するには、Float32Array では精度不足で、 Float64Array が必要だったりするなど、ちょっとした学びがあったりました。