タグ

ブックマーク / imaya.blog.jp (9)

  • zlib.js 0.3.0 リリース : document

    6月1 zlib.js 0.3.0 リリース 致命的なバグの修正 HLIT と HDIST のデコードに関するバグ修正 Inflate において、リテラルと長さ符号(HLIT)と距離符号(HDIST)の展開において不具合があったため、Inflate に失敗あるいは正しくないデータになってしまうことがありました。 これはどういうことかと言うと、HLIT と HDIST は連続して格納されていますが、その中で同じ符号が連続する場合は繰り返しを行う処理があります。 0.2.0 までの実装では、HLIT と HDIST をそれぞれ別の配列として扱っていたため、 HLIT と HDIST をまたぐような繰り返し符号が出現していた際、誤ったデータが展開されてしまっていました。 0.3.0 では HLIT と HDIST の展開を連続する配列として展開し、その後のハフマン符号テーブルを構築する際に HL

  • 難読化されたJavaScriptコードを読む : document

    10月16 難読化されたJavaScriptコードを読む はじめに 何らかの事情で JavaScript のコードを読み、その挙動について調査しなくてはいけないということはよくあると思います。 そんなとき、難読化やMinifyなどによって複雑怪奇に見えるコードに遭遇したという経験をもつひとも多いのではないでしょうか。 この記事はそんなコードにぶつかった際に、どうすれば良いのかを自分なりにまとめてみました。 また、jjencode 作者のはせがわようすけさんのJavaScript難読化読経というスライドを見て、 作者がネタバレしてるんだからこの辺の知見について書いても大丈夫だろうという気持ちで書き始めたことも一応記しておきます。 ツールによって難読化されたコードの読み方 まずはコードリーディング出来る状態にするため、よく見る2つのツールによる難読化のデコード方法について書いておきます。 Ja

  • 6to5 に末尾呼び出し最適化が実装されたので調べてみた : document

    2月8 6to5 に末尾呼び出し最適化が実装されたので調べてみた @azu_re さんのツイートで知ったのですが、6to5 に末尾呼び出し最適化が追加されました。 Added complete TCO (tail call optimization). by RReverser · Pull Request #714 · 6to5/6to5 · GitHub ECMAScript 6 compatibility table によると ES6 transpiler では初めてテストを通った実装のようです。 6to5 ではどのような ECMA−262 5th のコードに変換して実現しているのか気になったので調査してみました。 末尾呼び出し最適化って何? その前に「末尾呼び出し最適化って何?」って人のために簡単に説明しておきます。 通常、再帰するようなコードを書くとこんな感じになります。 fun

  • Zopfli を Emscripten で移植した際の備忘録 : document

    3月10 Zopfli を Emscripten で移植した際の備忘録 Emscripten で Zopfli を移植した際のメモを残します。 思ったより簡単に使えましたが、知らないとハマることも結構多かったです。 導入 自分の環境(Mac)では以下のような感じでやれば OK でした。この辺りは情報が豊富なので適当です。 JS Engine は NodeJS だけで良いっぽいです 必要な環境は homebrew 環境なら brew install llvm だけ? あとは emscripten を clone するだけ clang, clang++ の位置が llvm-link と違う場合はシンボリックリンクを張るなどして合わせる 使い方 C プログラムから JS へ変換 $ emcc *.c -o hoge.js ライブラリの場合 通常だとリンク時最適化(LTO)によりエントリポイント(

  • あとから線の編集が可能なお絵描きツールの描画高速化 : document

    7月24 あとから線の編集が可能なお絵描きツールの描画高速化 はじめに 2010 年くらいからのんびり開発している趣味のお絵かきツール Diceros の実装について、ドキュメントを残しておいたほうがよさそうなのでこの文章を書きます。 まだ未完成ですが、お絵描きツールは以下の URL で開発バージョンを触ることができます。IE10+, Google Chrome 17+ あたりで動作すると思います。Wacom のペンタブレットプラグイン(MouseEvent)、Android Chrome(TouchEvent)、IE10(PointerEvents) あたりの筆圧に対応してます。 http://draw-imaya.sqale.jp/diceros/ しばらく触るとわかると思うのですが、このお絵描きツールは(VectorLayer/SVGLayerでは)一度書いた線をあとから調整すること

  • ファイルサイズを考慮した Canvas の保存 : document

    12月18 ファイルサイズを考慮した Canvas の保存 こんにちは、18 日以降の Graphical Web Advent Calendar が空いているので、場をつなぐ意味も込めて簡単な記事を投稿させていただきます。 先日の記事では PNG の仕様について書きましたが、その知識をさっそく生かす事ができます。 また、この記事では HTMLCanvasElement を省略して Canvas と表記させていただきます。 Canvas#toDataURL() さて、一般的に Canvas の描画状況を保存しようと思うと、Canvas#toDataURL メソッドを使用すると思います。 ですが、このメソッドで保存された画像がどのようになっているかご存知の方はあまりいないと思います。 まずは、以下のコードで簡単な Canvas 描画を行ってみます。 function draw1(target

  • 「改行削除の代わりにGZIP」を実践してみた : document

    11月16 「改行削除の代わりにGZIP」を実践してみた はじめに この記事の内容は「改行削除するくらいなら gzip したらいいじゃない」という記事の内容を受けて書いたものですので、まずはそちらをご覧になると良いかと思います。 記事を読んで、なんとなく呼ばれたんじゃないかという気になったので間違った方向でこれに取り組んでいこうと思います。 GZIP の展開を JavaScript で行う まずは、GZIP ファイルを JavaScript で展開します。 いくつか実装はあると思いますが、ここは自作で使い慣れてる zlib.js を使ってやります。 そして、展開したらそれを Object URL にして適用します。 簡単ですね。 大体こんな感じです。 で、できたものはこちらになります。 http://imaya.github.com/demo/gunzip/ こちらのデモでは割と最近の機能

  • 3連休だし Web ブラウザで動作する Markdown Editor 作った : document

    11月25 3連休だし Web ブラウザで動作する Markdown Editor 作った きっかけ ドキュメントを書く機会があったので、最近使う事の多い Markdown(GFM) で書こうと思った。 普段は gist で適当に書いてるんだけど、長くなりそうだしリアルタイムプレビューのあるツールが欲しかった。 少し探しても良さそうなのがなかったので、せっかくなので自作しようと思った。 デモ http://imaya.github.com/demo/markdown/ (ソースコードは準備中です…) あ、保存は gist にでもコピペするといいと思います。 使用ライブラリ、ツール群 このエディタはほとんどが他の方のつくったライブラリを組み合わせただけです。 特に Ace は素晴らしい出来で、リッチなエディタが簡単に Web アプリケーションに組み込めます。 Ace (エディタ) http:

  • JavaScript で書かれた ZLIB の伸張速度比較 : document

    8月15 JavaScript で書かれた ZLIB の伸張速度比較 はじめに 最近、Inflate 実装のチューニングを行うことが多かったので、現状でどの程度の速度が出ているか把握するため、他の実装と比較してみました。 比較に使用した ZLIB ライブラリ 今回の比較では、以下のライブラリの存在を確認しています。 uncompress.js に関しては、今回入手できなかったため比較対象からはずしています。 名前 Input Output 名前空間 ライセンス ファイルサイズ pdf.js Uint8Array, Array, ArrayBuffer(*) Uint8Array FlateStream, Stream, DecodeStream, etc... MIT stream.js: 80,349 zlib-js String String ZLIB zlib zlib-inflat

  • 1