Skip to content

Instantly share code, notes, and snippets.

@uupaa
uupaa / MP4Box.md
Last active May 19, 2022 08:05
MP4Box install, setting and usage in Mac.

MP4Box は mp4 ファイルの結合や Mux ができます。

セットアップ

GPAC Nightly Buildsから最新版をダウンロードし、 dmg を実行して、適当な場所(例: /Application)にコピーします。

MP4Box を PATH に追加するか、Osmo4.app/Contents/MacOS/MP4Box コマンドへのエリアスを追加します。

@uupaa
uupaa / Tiny Adler32.js
Created June 25, 2015 12:57
Tiny Adler32
function Adler32(source) {
var u32 = new Uint32Array([1, 0, source.length, 0, 0, 65521, 5550, 0]);
while (u32[2] > 0) {
u32[4] = u32[2] > u32[6] ? u32[6] : u32[2];
u32[2] -= u32[4];
do {
u32[0] += source[u32[3]++];
@uupaa
uupaa / 2015-07-18.md
Last active April 27, 2017 20:35
navigator.bluetooth

2015/07/18 に試すと、requestDevice() は引数を1つ要求してくるように変化している。また、permission を要求してくる。

permission API は Chrome 43 から追加されているが、bluetooth 関連の ID はまだ利用できないようだ。

@uupaa
uupaa / Block modal dialogs inside a sandboxed iframe.md
Last active August 29, 2015 14:23
Block modal dialogs inside a sandboxed iframe. allow-modals

Block modal dialogs inside a sandboxed iframe

https://www.chromestatus.com/features/4747009953103872 は、Chrome 45 で追加された機能で、sandboxing された iframe の中における popup を抑止する。

具体的な用途は、不躾な広告をブロック など。

<!DOCTYPE html>
<meta http-equiv="Content-Security-Policy" content="sandbox allow-scripts">
@uupaa
uupaa / ES6 WeakSet usecase.md
Last active August 1, 2018 15:08
ES6 WeakSet usecase

ES6 (ES2015) で追加された WeakSet は、かなり使い方が限定された(≒ まだ有効な使い方があまり見つかっていない)コレクションクラスです。

Task.js では、この WeakSet を現在実行中のインスタンスの一覧を開発者に提示する Task.dump() 機能で利用していますので、その背景と使い方について軽く説明をしてみたいと思います。

Task.js が WeakSet を使って実装されたのはごく最近の事です。
初期の Task.js のデザインではこのようになっていました。

初期の Task.js の実装

https://github.com/uupaa/Task.js/blob/1798bcd241b7ac9268d3e7eedd39b40ae5107d06/lib/Task.js

@uupaa
uupaa / MessageChannel.md
Last active August 29, 2015 14:22
MessageChannel 考察

uupaa/Thread.js は、WebWorker に MessageChannel を使っていたが、実は不要なんじゃないか説があり、実際のところを調べた。

結論を先に言えば不要だった。

window.onmessage は闇を抱えており、それは「あらゆるコンテキストからメッセージが onmessage に流れ込み、どのコンテキストからのメッセージなのか判別ができなくなる」というものだ。MessageChannel はそれを解決する優れた手段である。

2つ以上のコンテキストが存在する場所とは、具体的には以下となる。

  • メインページ(window) 上の別の空間
  • iframe と window 間の通信
@uupaa
uupaa / WebModulePattern.consideration.md
Last active August 29, 2015 14:22
WebModulePattern考察

WebModulePattern を以下の形にする。

moduleExporter の中で return しているのがポイント。

// WebModule.js

GLOBAL.WebModule = {
    exports: function(name, closure) {
        var alias = name in GLOBAL ? (name + "_") : name;
@uupaa
uupaa / Chrome command line options and v8 options.md
Created June 4, 2015 11:07
Chrome command line options and v8 options.

Chrome に与えられるコマンドラインオプションの一覧はここにあって http://t.co/BCT7lZkGz9

さらに v8 の option は --js-flags “—fast-math false” みたいにすると渡す事ができる

@uupaa
uupaa / TypedArray optimization.md
Last active August 29, 2015 14:21
Optimize a variable using a reference to the TypedArray.

ES5 + TypedArray 環境において、Hash 生成関数のように、大量のデータをループで処理する場合は、TypedArray を使った変数の参照を作成することで、さらなる最適化を期待できる場合があります。

function Adler32(source, // @arg Uint8Array|String
                 hex,    // @arg Boolean = false
                 seed) { // @arg Integer = 1 - seed
                         // @ret UINT32|HexString - 0x00000000 or "00000000"
                         // @desc http://en.wikipedia.org/wiki/Adler-32
    seed = seed === undefined ? 1 : seed;
@uupaa
uupaa / REPOSITORY_NAME.js
Created May 23, 2015 18:49
WebModule idiom v2 base code
(function moduleExporter(moduleName, moduleBody) { // http://git.io/WebModule
"use strict";
var alias = moduleName in GLOBAL ? (moduleName + "_") : moduleName; // switch
var entity = moduleBody();
if (typeof modules !== "undefined") {
GLOBAL["modules"]["register"](alias, moduleBody, entity["repository"]);
}
if (typeof exports !== "undefined") {