タグ

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

  • Zstandard と Zip ファイル : document

    7月22 Zstandard と Zip ファイル Zstandard 対応のアーカイバ欲しい問題 Zstandard はパフォーマンスに優れたすばらしいものですが、今のところ個別のファイルしか圧縮できません。(いわゆるアーカイブ機能がない) Zstandard に対応したアーカイバ欲しいなと思っていたけど特に何もせずにいたのですが、最近 @__gfx__ さんの下記ツイートを見て再び興味を持ちました。 zipの中身、原理的にはzstdとかで圧縮してよさそうな気がしてる。— FUJI Goro (@__gfx__) 2017年7月20日 これは例えば Zip ファイルの仕様に Zstandard が追加され、その仕様に対応したアーカイバが公開されれば問題は解決しますが、そもそも仕様に追加されるかすらわかりません。 しかし、実際に仕様に追加されるのを待つのではなく、Zipでは圧縮を行わずアー

  • asm.js を手書きする : document

    6月9 asm.js を手書きする はじめに 人間は誰しもパフォーマンスを求め、最終的には asm.js か WebAssembly を手書きするようになるので、人権を手に入れるためにいつでも asm.js を書ける環境をつくります。 WebAssembly はさすがに手書き厳しそうでした。 というのは冗談で、zlib.js の一部の処理を asm.js で高速化できないかと考え、ひとまず Adler-32 と CRC-32 を asm.js で書き直してみた際にいろいろ苦労したので忘れないようにこの記事を書いています。 なお、今回 asm.js で書いたコードは以下の通り gist で公開しています。 zlib.js での採用はまだ検証が必要なので未定ですが、採用するにしてももう少しきちんとした書き方になるでしょう。 Adler-32: https://gist.github.com/i

    y-imaya
    y-imaya 2017/06/09
    書きました
  • 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

    y-imaya
    y-imaya 2017/06/01
    リリースしました
  • 難読化されたJavaScriptコードを読む : document

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

    y-imaya
    y-imaya 2015/10/16
    最初はもう少しがんばって書くつもりでした
  • 6to5 に末尾呼び出し最適化が入ったと思ったら一瞬でなくなった : document

    2月10 6to5 に末尾呼び出し最適化が入ったと思ったら一瞬でなくなった 一昨日の記事を書いた後、末尾呼び出し最適化の実装にバグがあって速攻で消されたようです。 v3.5.0: 末尾呼び出し最適化の実装が入る v3.5.1: 他のTailオブジェクトと混同して判定されてしまうため、Tail.prototype._isTailDescriptor というのを付けて対処 v3.5.2: _tailCall をつかった末尾呼び出し最適化がコメントアウト v3.5.3: v3.5.0 以前の末尾再帰最適化の実装に戻す 少し見たところ、以下のようなケースでうまく動かないようです。 Do not attempt nested TCO by peferron · Pull Request #721 · 6to5/6to5 function foo() { return "foo"; } functio

    y-imaya
    y-imaya 2015/02/10
    久しぶりに記事書いたと思ったらこれだよ
  • zlib.js の Inflate 実装を JSX-lang に移植しました : document

    5月1 zlib.js の Inflate 実装を JSX-lang に移植しました はじめに JSX 速いという話を聞いたので、zlib.js を移植したらどうなるのか興味があったので試しました。 https://github.com/imaya/zlib.jsx お詫び JSXがリリースされた直後に少し触ってみたのですが、最初期のバージョンでは素のJSとの連携が取りにくかったので、自分の用途には少しマッチしないなと敬遠気味でした。 その認識は最近まで続いていたのですが、現在は export なども出来るようになっているのでライブラリなんかも簡単に作れるようになってます。 (おそらく実装されたのは 2013-04-30 にリリースされた v0.9.27 ?) 何度か飲み会などで「素のJSとの連携が取りにくいからなー」とか言ってしまって誤解を与えてしまったのをここでお詫びします。 (exp

    y-imaya
    y-imaya 2014/05/01
    書きました
  • #寿司js で Docker について雑に話してきました : document

    4月1 #寿司js で Docker について雑に話してきました #寿司js で Docker について雑に話してきました 寿司だ寿司だとつられていったらなぜかLTする雰囲気だったので慌てて資料をつくって、最近やっていたDockerでの環境構築について簡単に話してきました。 以下のような話題が話されていた気がします。すでにうろ覚えです。 promises http://swipe.to/0990 状態は一方向で基的に使い捨て 例外処理がきちんと出来る 別に実装は含まれなくてもいいけど標準仕様は決めてほしい 各実装でAPIばらばらでつらい なごやLTとは 突っ込みが無限に入るけど時間はゆるい 東京も大きいところ以外は大体ゆるい E2Eテストどうする https://github.com/marmelab/gremlins.js/blob/master/README.md Selenium

    y-imaya
    y-imaya 2014/04/01
    雑にまとめました
  • #JSオジサンで Source Map について話してきました : document

    3月29 #JSオジサンで Source Map について話してきました JSオジサンという名前からしてダメそうな感じのイベントでLTしてきました。 内容については azu さんのまとめ(→ JSオジサンで現在のJavaScript ASTについて発表してきた )を見ると良いと思います。 LT5分なのに時間オーバーしたあげく枠のおかわりまでしてすみませんでした…。 おっさんたちが集まってわいわいLTするゆるふわイベントだと思って、 最近ちょっと触った Source Map の話でもするかーと思って申し込んだら予想外にガチ勢が多くいたため、こりゃもうちょっと資料ちゃんとしないと駄目かなと思ってページ増やしたら時間足りなくなってしまいました。 楽しいイベントだったので次回以降もあるならば、予定があえば参加していきたいです。 発表資料 カテゴリなしの他の記事

    y-imaya
    y-imaya 2014/03/29
    LTした
  • zlib.js 0.2.0 をリリースしました : document

    2月22 zlib.js 0.2.0 をリリースしました 更新が必要な人 今回は Inflate のアルゴリズム部分のバグ修正となるので、過去のバージョンで Inflate を利用している方は更新する必要があります。 バグ詳細 このコミットの解説となります。 Deflate では、リテラルと長さ・距離符号(LZSS)をハフマン符号化して圧縮します。 ハフマン符号も辞書をそのまま格納するのではなく、符号の長さだけを格納することで更なるサイズ節約を行っています。 さらに、符号の長さもランレングス符号化を行って格納されます。 リテラルと長さ符号、距離符号は別々にハフマン符号化し、それぞれ RFC1951 では HLIT, HDIST と呼ばれています。 このように、別々の辞書を使ってハフマン符号化されるため、ランレングス符号化もそれぞれ別のコンテキストで行われるものだとおもっていたのですが、 ど

    y-imaya
    y-imaya 2014/02/22
    書きました
  • Emscripten によって生成された asm.js 対応コードは本当に人間が書いたコードより速いのか? : document

    12月2 Emscripten によって生成された asm.js 対応コードは当に人間が書いたコードより速いのか? はじめに 先日、いつものように Twitter 監視業務に勤しんでいたところ、下記のような発言を見かけました。 asm.jsは対応してないブラウザでは読めないし遅いって説明をされることが多いけど、ams.jsはJavaScriptの中で高速実行可能なものだけを使って更に少し制約を加えて底上げをしてるものなので、多のブラウザであっても普通に人間が書いたコードよりも速いっすよ— dynamis (でゅなみす) (@dynamitter) 2013, 11月 29 なるほど、機械によって生成された asm.js 対応のコードはどんなブラウザでも速いよという主張です。 自分は JavaScript で高速に動作するように注意して書いた zlib.js というのを作っていたので、zl

    y-imaya
    y-imaya 2013/12/02
    書いた
  • Canvas でカラーハーフトーン : document

    8月21 Canvas でカラーハーフトーン はじめに ネット上で Photoshop にはカラーハーフトーンというフィルタがあることを知って、面白そうなので実装してみました。 適当にググってカラーハーフトーンフィルタを使った画像を見ながら「多分こういうものだろう」と考えて実装したものなので Photoshop のものとは大きく異なる可能性があります。 カラーハーフトーンってなに 元々は網点という印刷まわりの技法のようですが、Photoshop のものは完全に画像の効果としてあつかった方が良いみたいです。 ネットで使用例を見た感じ、各色ごとに指定された角度の正方形に画像を分割して、色の多いところは大きく、少ないところは小さく円を描いて水玉模様みたいにする効果だと思います。 実装1: 独自実装(わりとゴリ押し) (0, 0) から角度と正方形のサイズから dx, dy を計算してそれを加算し

    y-imaya
    y-imaya 2013/08/22
    作ってメモった
  • Canvasできれいな色相環を描画する : document

    8月14 Canvasできれいな色相環を描画する はじめに JavaScript で Canvas を使っていると、HSV の Color Picker とか作りたくなって色相環を描画したくなることがよくあるとおもいます。 ここでは、自分の行っている色相環の描画方法を説明します。 準備 色相を扱うのために HSV 色空間を使います。HSV から RGB への変換は以下の function を用います。 function hsvToRGB(hue, saturation, value) { var hi; var f; var p; var q; var t; while (hue < 0) { hue += 360; } hue = hue % 360; saturation = saturation < 0 ? 0 : saturation > 1 ? 1 : saturation; v

    y-imaya
    y-imaya 2013/08/14
    メモった
  • あとから線の編集が可能なお絵描きツールの描画高速化 : 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では)一度書いた線をあとから調整すること

  • Web Audio API で Sound Font を使った標準 MIDI ファイルの再生 : document

    5月17 Web Audio API で Sound Font を使った標準 MIDI ファイルの再生 はじめに Google Chrome では Web Audio API という API を使って音を鳴らすことができます。 今回、これをつかって Sound Font を使った標準 MIDI ファイル(以下 SMF と表記)のプレイヤーを作ってみました。 なお、仕様の具体的な話しなどはほとんどしません。 音楽的な知識などもほとんどないため、何かおかしなことをしていたらご指摘いただけるとありがたいです。 また、今回の実装はあくまでも実験・検証用のものなので実用にはまだ手を加えなくてはいけないところが多いため、もし利用としようと思う方がいたらそこは注意してください。 動作環境は PC 版の Google Chrome のみです。 現在開催中の Google I/O で Chrome for

    y-imaya
    y-imaya 2013/05/17
    乗るしかない、このビッグウェーブ(局地的)に
  • zlib.js 0.1.6 をリリースしました : document

    5月10 zlib.js 0.1.6 をリリースしました はじめに 日 zlib.js 0.1.6 をリリースしました。ここでは告知とともに 0.1.6 の更新内容などを簡単に説明したいと思います。 なお、今回から Change Log を添付したあるので概要はそちらでも確認できます。 今回のバージョンでは主にビルド環境の整理やテスト・デバッグ効率の向上を行っています。 https://github.com/imaya/zlib.js ビルド環境の更新、最適化 zlib.js は Closure Compiler でビルドしているのですが、今までは minify したコードに余分なコードが含まれている事がありました。 今回の更新では Closure Compiler の更新とその辺りの設定を見直す事で minify したファイルのサイズを縮小しました。 例えば、Inflate だけならば

    y-imaya
    y-imaya 2013/05/10
    リリースしました
  • JavaScript でペンと筆圧を扱う : document

    4月11 JavaScript でペンと筆圧を扱う はじめに JavaScript でアプリケーションを作っていると、筆圧を取得したくなることがよくあると思います。 ここでは JavaScript でタッチやペンによる筆圧の取得の仕方について簡単にまとめます。 Wacom ペンタブレットによる筆圧の取得 Wacom のペンタブレットではブラウザにプラグインをインストールすることにより筆圧の取得が可能になります。 最近はタブレットの最新版ドライバをインストールすると一緒にプラグインもインストールされるようです。 タブレットプラグインのバージョンによる API 変更 Wacom のタブレットプラグインでは元々ペンを扱う単体のものでしたが、バージョン 2 からはタッチと統合されたため API が変更されました。 基的には統合であるため、プラグインのオブジェクトに .penAPI を付けるか付け

    y-imaya
    y-imaya 2013/04/11
    かきました
  • ブラウザのデコード機能を利用した Shift JIS などの読み込み : document

    3月12 ブラウザのデコード機能を利用した Shift JIS などの読み込み はじめに JavaScript でバイナリから文字列を取り出したら Shift JIS だったなんてことよくありますよね。 そういう文字列もさっと表示したいことがあります。 読み込む方法はいくつかある これらの文字列を読み込む方法はいくつかあって、自分が把握してるだけでも以下のものがあります。 Shift JIS と UTF-16 の対応表をつくる ぽりごんさんの文字コード変換ライブラリ Blob, File API を使って読み込む 右京さんの javascriptのnative APIで任意の文字コードからutf8に変換 script, Data URL を使って変換 1, 2 の方法についてはそれぞれ解説や実装があるのですが、3 の方法については見当たらなかったので説明してみます。 準備 念のため 2 段

    y-imaya
    y-imaya 2013/03/12
    メモった
  • 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)によりエントリポイント(

    y-imaya
    y-imaya 2013/03/11
    メモった
  • Zopfli を Emscripten をつかって JavaScript に移植しました : document

    3月9 Zopfli を Emscripten をつかって JavaScript に移植しました はじめに Zopfli が公開されてから zlib.js の Deflate 処理と比較したいなーと思っていたので、 Emscripten を使って JavaScript に移植してみました。 Emscripten を使うのは初めてのためいろいろ手間取りましたが、とりあえず動作するようになったのでご報告です。 zopfli.js というわけで、JavaScript に移植したものを以下の場所で公開しています。 もし良ければご利用ください。 使い方は zlib.js と似せています。 https://github.com/imaya/zopfli.js zlib.js を使って簡単なテストも行っていますので使用できないほどのバグはないかと思いますが、何かあればお知らせください。 デモ せっかく移

    y-imaya
    y-imaya 2013/03/09
  • Zopfli を使って PNG の再圧縮を行ってみた : document

    3月1 Zopfli を使って PNG の再圧縮を行ってみた はじめに Google から Deflate 互換の圧縮アルゴリズム実装 Zopfli が公開されました。 「Deflate 互換ってどういうこと?」って方もいると思いますので簡単に説明します。 符号アルゴリズムは同じ(LZSS + Huffman符号) RFC では、 LZSS はこんな感じで Huffman 符号はこんな感じと大体のやり方が書かれている RFC に書かれている方法とは異なる手法でより最適な LZSS + ハフマン符号化を行うのが今回の Zopfli Kflate との比較 PNG の圧縮界隈では、一部で Kflate と呼ばれる Deflate 互換実装が圧縮効率の良いものが知られています。 (この実装は PNGOUT として PNGGauntlet や ImageOptim で使用されている) 今回は Im

    y-imaya
    y-imaya 2013/03/01
    書きました