Skip to content

Instantly share code, notes, and snippets.

@uupaa
uupaa / Base64.jsx.md
Created July 18, 2013 21:19
Base64.jsx
// JSX

var base64 = Base64.btoa(xhr.responseText, true);
// JSX
import "js.jsx";
import "js/web.jsx";
@uupaa
uupaa / Mixin.jsx.md
Created July 18, 2013 21:21
Mixin.jsx
// JSX

var obj = null:Map.<variant>;

obj = Mixin.mixin({}:Map.<variant>, { a: 123 }:Map.<variant>);
// JSX
@uupaa
uupaa / markdown.syntax.md
Last active January 16, 2022 10:17
Markdown Syntax, markdown, md

GitHub, Hatena, Google+ で使える Markdown

GitHub Hatena Google+
<style>
<link> ? ?
<div> YES YES
<h1> YES YES
<br> YES YES
@uupaa
uupaa / leap.motion.md
Last active December 26, 2016 03:06
LEAP Motion まとめ

LEAP Motion と WebSocket

LEAP Motion はデフォルトの状態で、WebSocketのサーバが起動しポート 6437 で listen しています。
適当なクライアントから接続するだけで、情報を取得することができます。

  1. Chrome に拡張機能 Simple WebSocket Client をインストールします
  2. LEAP Motion を接続し ws://localhost:6437/ に接続します。
  3. JSONでデータが取得できます。

たったこれだけで、3D空間上の指の配置と手のひらの情報が取得できます。

@uupaa
uupaa / background.js
Created July 30, 2013 19:48
LEAP Motion My First Chrome Extension
var connected = false; // Boolean: { false: disconnected, true: connected }
var gestureState = 0; // Number: { 0: none, 1: start, 2: progress }
var leap = null; // Leap.Controller instance
chrome.browserAction.onClicked.addListener(function() {
connected = !connected; // toggle state
if (connected) {
//Leap.loop({ enableGestures: true }, onframe);
leap = new Leap.Controller({
@uupaa
uupaa / typical.javascript.module.md
Last active December 20, 2015 13:19
The typical javascript module pattern
@uupaa
uupaa / flow.js.ver.2.0.0.beta.md
Last active December 21, 2015 06:09
Flow.js version 2.0.0 beta

Flow.js version 2.0.0 beta

Flow.js version 2.0.0 では以下の変更を行っています。

  • Flow#xhr を追加

Flow#xhr を追加

@uupaa
uupaa / array.bench.md
Last active December 21, 2015 08:19
ArrayLike/Array shallow copy bench mark

bench result

  • Chrome 30 で A = B*3
  • Firefox 22 で A = B
function A(obj, i) {
    var rv = Array.apply(null, obj);
    rv.push(i);
}
@uupaa
uupaa / WebSocket.Nagle.md
Last active February 27, 2017 07:14
WebSocket Nagle アルゴリズム問題

http://www.html5rocks.com/ja/tutorials/casestudies/world_wide_maze/ によると、

普通の OS では、TCP レベルでバッファリングすることで、効率良く通信するための Nagle アルゴリズム という仕組みがが実装されているのですが、このアルゴリズムが有効なままだとリアルタイムにデータを送信することができないという現象がありました。(正確にはこれに加えて TCP 遅延 ACK が組み合わさった場合。遅延 ACK でなくても、サーバーが海外にあったりして ACK がある一定レベル遅れる場合には同様の問題が発生します。)

Chrome for Android の WebSocket 実装では Nagle を無効にするための TCP_NODELAY オプションが付いているので、Nagle 遅延問題は発生しませんでしたが、Chrome for iOS につかわれている WebKit の WebSocket 実装には、このオプションが指定されておらず、遅延問題が発生します。同じ WebKit を使っている Safari も同様。この問題は Google を通して Apple に報告され、開発バージョンの WebKit ではすでに修正されている とのこと。

実際、この問題が発生すると、100ms ごとに送信している傾きデータが、500ms ごとにまとめて PC 側に届きます。これではゲームとして成立しないので、サーバーサイドから短い間隔(50msぐらい)でデータを送り続けることで遅延を回避しています。これはおそらく ACK が短い間隔で届くために、Nagle アルゴリズム的に送信可能な状態になるからだと考えています。

との事です。

changeset 138352

@uupaa
uupaa / unsupportd_amd.md
Last active December 21, 2015 10:18
The typical module pattern が AMD に対応しない理由

The typical module pattern の「AMD をサポートしない理由」をこちらに移動しました。

AMD をサポートしない理由

  • AMDに対応しようとするとコードの上下に無視できない量のノイズ(コード)が乗ってしまいます
  • Node.js 上でAMDは正直使いどころがありません
  • 依存を解消するために、AMD 対応を行うと、今度は何らかのライブラリに依存することになります
  • Mobile WebApplication の エッジトレンドは、今後は WebWorkers にシフトすると考えており、WebWorkers には importScript があるため、AMD 対応する理由がないのです