Skip to content

Instantly share code, notes, and snippets.

@uupaa
uupaa / gist:8ce18e31cd0e37f73870
Created February 26, 2015 19:48
Spec.js Media.js
//{@spec_media
(function(global) {
"use strict";
// --- dependency modules ----------------------------------
// --- define / local variables ----------------------------
//var _isNodeOrNodeWebKit = !!global.global;
//var _runOnNodeWebKit = _isNodeOrNodeWebKit && /native/.test(setTimeout);
//var _runOnNode = _isNodeOrNodeWebKit && !/native/.test(setTimeout);
//var _runOnWorker = !_isNodeOrNodeWebKit && "WorkerLocation" in global;
@uupaa
uupaa / GPU Rasterization.md
Last active August 29, 2015 14:15
GPU Rasterization in Chrome

How to get GPU Rasterization によると、 Chrome 37 以降で幾つかの条件を満たすと GPU ラスタライゼーションが機能するようになるとの事です。

  • <meta name="viewport" content="width=device-width, minimum-scale=1.0">
  • Android 4.4以上 + OpenGL ES 3.0 以上のデバイス
  • 最初は Nexus デバイスから

ツボにはまれば描画コストを大幅にカットできるとか。期待ですね

@uupaa
uupaa / requestAnimationFrame.md
Last active August 29, 2015 14:14
requestAnimationFrame を使うとジワジワとヒープが増えていく
function tick() {
    requestAnimationFrame(tick);
}
requestAnimationFrame(tick);

上記のコードをしばらく走らせた状態で、Chrome DevTools のプロファイラでリソース(ヒープメモリ)の様子がどうなっているか調べてみました。

@uupaa
uupaa / getFreeSpace.memo.md
Last active August 29, 2015 14:14
getFreeSpace memo
// OK case
//
// line        = 0000,1111,1111,0000,0000,0000,0000,0000
// bits        = 1110,0000,0000,0000,0000,0000,0000,0000
//
// ------------------------------------------------------
// a           = 1110,1111,1111,0000,0000,0000,0000,0000 = line xor bits
// b           = 1110,1111,1111,0000,0000,0000,0000,0000 = line  or bits
@uupaa
uupaa / MessagePack optimization.md
Created January 12, 2015 14:16
MessagePack optimization
function _encodeMessagePackNumber(source, view) {
    // https://github.com/msgpack/msgpack/blob/master/spec.md#int-format-family
    // https://github.com/msgpack/msgpack/blob/master/spec.md#float-format-family
    var type = 0, high = 0, low = 0, u8;
    var buffer = view.buffer, cursor = view.cursor;

    if (source !== source) {
        buffer.set(QUIET_NAN, cursor);
@uupaa
uupaa / next power of 2.md
Last active August 29, 2015 14:13
next power of 2

JavaScript の ArrayBuffer は生のメモリを扱う都合から fixed length です。つまり後から長さを変更できません。
エンコード/デコード処理の途中でバッファが足りなくなった場合は、ある程度のサイズに expand する必要があります。
一般的には2のべき乗でバッファサイズを拡張するのが良いとされています。(すげぇ面倒なのでここツッコミ禁止ね)

power of 2 を求める方法は、WikiPediaStackOverflowによると、色々とあるようですが、コードだけみても ?? になるので、多少遅めでも、もうちょっと分かりやすい表現がないかなーと考えてました。

そんなこんなで JavaScript における Next power of 2 を求める方法を考えてみました。

po2 関数は、値nを含む最小の power of 2 を返します。n が負の場合は考慮してません。

@uupaa
uupaa / troubleshoot.md
Created January 7, 2015 05:21
トラブルシュート

トラブルシュート

  1. npm run build でエラーが出る場合は https://github.com/uupaa/Compile.js/wiki/CompileError を参照してください。
    • Exception in thread "main" java.lang.UnsupportedClassVersionError: com/google/javascript/jscomp/CommandLineRunner : Unsupported major.minor version 51.0 といったバージョンの不一致によるビルドの内部エラーが発生した場合は Java runtime が古いのが原因です。ランタイムを更新しJAVA_HOMEを設定してください。
@uupaa
uupaa / gameover.md
Last active August 29, 2015 14:12
諦めたらそこで試合終了です。

設計書やドキュメントの記述は時間と労力がそれなりに掛かります。

馴れないうちはコードを書くよりも時間がかかり、
「書くことに何の意味があるんだ? どうせ自分が使うモジュールだ、自分だけが分かっていればいいじゃないか!?」と自問自答したり、苦痛を感じたりする事があるでしょう。
ですが、そこで諦めてしまったら試合終了です。そのままでは、いつまでもドキュメントをまともに書けない半人前のままです。
WebModule の作法においても、ドキュメントが存在しないモジュールは評価に値しません。

頭のなかに漫然とある設計を、他の人も理解できるように、読みやすく整理された形でアウトプットするのは、とても高度で時間がかかる作業です。
忙しい時などは、なかなか取り掛かれない事もよくあります。

@uupaa
uupaa / node-webkit.install.and.settings.md
Last active August 29, 2015 14:12
node-webkit install and settings
@uupaa
uupaa / npm dependency.modules.install.and.settings.md
Last active August 29, 2015 14:12
npm dependency modules install and setting
  • $ npm run score コマンドは plato を使用しています。

  • $ npm run hint コマンドは jshint に依存しています。

  • $ npm run lint コマンドは eslint に依存しています。

  • $ npm run min$ npm run build コマンドは uupaa.compile.js に依存しています。

 $ npm install -g plato