SlideShare una empresa de Scribd logo
1 de 40
Node.js で学ぶマルチスレッドプログラミング入門 サイボウズ・ラボ / Shibuya.pm 竹迫 良範 @TAKESAKO
2009/04/06 Cybozu University 2 JavaScript
sleep のない言語 JavaScript どうやって実現するか? function sleep(msec) { // CPU_100%   var t = (new Date()).getTime()-(-msec);    while ( (new Date()).getTime() < t ) {}  } function sleep(msec) {    // LiveConnect   Packages.java.lang.Thread.sleep(msec);  }
クロスブラウザで sleep を実現(無理矢理) function sleep(msec) {    try { // for IE window.showModalDialog(        "javascript:document.write('<script>"        + "window.setTimeout(function(){window.close()},"        +  msec + ");<"script>');");    } catch (e) {      try { // for Firefox, Opera with LiveConnect Packages.java.lang.Thread.sleep(msec);      } catch (e) {  // for Safari and others  var limit = (new Date()).getTime() - (-msec);        while ((new Date()).getTime() < limit) {}      }    }  }
1秒ごとに表示したい(よくある間違い) <script> function sleep(msec) { var t = (new Date()).getTime() - (-msec);   while ( (new Date()).getTime() < t ); } function init() { var body = document.body;   sleep(1000); body.innerHTML += "<h1>Hello!</h1>";   sleep(1000); body.innerHTML += "<h2>Hello?</h2>";   sleep(1000); body.innerHTML += "<h3>Hello!?</h3>"; }; </script> <body onload="init()"></body>
問題1:sleep している間 CPU_100% (><)
問題2:3秒後にまとめて表示される
setTimeoutで1秒ごとに表示する(正解) <script> setTimeout(function(){ var body = document.body; body.innerHTML += "<h1>Hello!</h1>"; setTimeout(function(){ body.innerHTML += "<h2>Hello?</h2>"; setTimeout(function(){ body.innerHTML += "<h3>Hello!?</h3>";     }, 1000);   }, 1000); }, 1000); </script>
setTimeout.html – シングルスレッド+遅延
2009/04/06 Cybozu University 10 				}, 1000); 			}, 1000); 		}, 1000); 	}, 1000); }, 1000);
2009/04/06 Cybozu University 11 				}); 			}); 		}); 	}); });
yield
yield で1秒ごとに表示 <!DOCTYPE html> <title>Firefox2.0+ only</title> <script type="application/javascript;version=1.7"> (function(g){var f=arguments.callee;setTimeout(  function(){f(g)},g.next())})((function(){   yield (1000); document.body.innerHTML += "<h1>Hello!</h1>";   yield (1000); document.body.innerHTML += "<h2>Hello?</h2>";   yield (1000); document.body.innerHTML += "<h3>Hello!?</h3>"; })()); </script>
yield.html– 疑似マルチタスク処理
やりたいこと = 細かく setTimeoutを呼ぶ // こんな風に書けたらいいなぁ(><)   for (var i = 0; i < 10000000; i++) { 	//   すん 	//  ごく 	//   重たい 	//    処理 	//   ・・・ setTimeout(次の行, 0); // ブラウザに処理を戻す 	// でもループの中は繰り返したい   }   // 終了
JavaScript 1.7 (Firefox 2.0+)
yield を含む関数は Generator になる function generator() { 	for (var i = 1; i <= 1000; i++) { 		document.title = i; 		yield; 	} } var g = generator(); // [object Generator] // まだ document.title は変更されない
Generator#nextで次の yield まで実行戻る function generator() { 	for (var i = 1; i <= 1000; i++) { 		document.title = i; 		yield; 	} } var g = generator(); // [object Generator] g.next(); // document.title = 1; g.next(); // document.title = 2; g.next(); // document.title = 3;
uncaught exception: [object StopIteration] function generator() { 	for (var i = 1; i <= 1000; i++) { 		document.title = i; 		yield; 	} } var g = generator(); for (var j = 1; j <= 998; j++) { g.next() } g.next(); // document.title = 999; g.next(); // document.title = 1000; g.next(); // Error: uncaught exception:           //       [object StopIteration]
Generator#close function generator() { 	for (var i = 1; i <= 1000; i++) { 		document.title = i; 		yield; 	} } var g = generator(); for (var j = 1; j <= 998; j++) { g.next() } g.next(); // document.title = 999; g.next(); // document.title = 1000; g.close();
yield の引数が next() の戻り値になる function generator() { 	for (var i = 1; i <= 1000; i++) { 		document.title = i; 		yield (i); 	} } var g = generator(); var r; r = g.next(); // r = 1; r = g.next(); // r = 2; r = g.next(); // r = 3;
next() の戻り値をチェックしてきちんと終了 function generator() { 	for (var i = 1; i <= 1000; i++) { document.title = i; 		yield (i); 	} 	yield (-1); // 終了条件 } var g = generator(); var r; do { r = g.next() } while (r > 0); // 1...1000 g.close();
巨大ループ中で setTimeout(f, 0) が呼べる! function generator() { 	for (vari = 1; i <= 1000; i++) { document.title = i; 		yield true; 	} 	yield false; } function driveGenerator(g) {     if (g.next()) { //  yield true? var f = function(){ driveGenerator(g) }; setTimeout(f, 0);	 } else { g.close(); //  yield false     } } driveGenerator( generator() );
yield + setTimeoutイディオムが完成 (function(g){var f=arguments.callee;var t=g.next();  (t<0) ? g.close():setTimeout(function(){f(g)},t)}) ((function(){   for (vari = 0; i < 10000; i++) { document.title = i; // 重たい処理     yield (0); // ブラウザに一旦処理を戻す(setTimeout)   }   yield (-1); // 終了 })());
yield すごい !
 でも…  Firefoxでしか…
JavaScript1.7 の指定をしないと yield 動かない <script type="application/javascript;version=1.7"> (function(g){var f=arguments.callee;var t=g.next();  (t<0) ? g.close():setTimeout(function(){f(g)},t)}) ((function(){   for (vari = 0; i < 10000; i++) { document.title = i; // 重たい処理     yield (0); // ブラウザに一旦処理を戻す(setTimeout)   }   yield (-1); // 終了 })()); </script>
28 
HTML5 関連 Web Workers
HTML5 Web Workers API main.html worker.js (1) var worker = new Worker(“worker.js”); ワーカースレッドの作成 (2) worker.postMessage(”hello”); (3) onmessage = function(e) { var result = e.data + ”!”; (4)   postMessage(result); (5) worker.onmessage = function(e) {        // DOM 更新処理 window.alert(e.data);
ワーカスレッドを呼び出す UIスレッド worker.html <title>HTML5 Web Workers</title> <script> var worker = new Worker("worker.js"); worker.onmessage = function(e){ document.body.innerHTML += e.data; } worker.postMessage("hello"); </script>
ワーカスレッドの定義(重たい処理を分離) worker.js function sleep(msec) { var t = (new Date()).getTime() - (-msec);   while ( (new Date()).getTime() < t ); } //↓ワーカ側でメッセージを受信したときの処理 onmessage = function(e) {   sleep(1000); postMessage("<h1>" + e.data + "!</h1>"); }
Web Workers のセキュリティ UIスレッド ワーカスレッド window.document.write(“hoge”) Workerスレッドからは wndowオブジェクトに 触れない! CPU_100%でも ブラウザ固まらない!
Firefox, Safari, Chrome で動作
2009/04/06 Cybozu University 35 Node.js 拡張 できる?
2009/04/06 Cybozu University 36
2009/04/06 Cybozu University 37
v8-juice
jsthread.sourceforge.net
40 

Más contenido relacionado

La actualidad más candente

Precise garbage collection for c
Precise garbage collection for cPrecise garbage collection for c
Precise garbage collection for cmiura1729
 
大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」Shunsuke Watanabe
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackTaketo Sano
 
Qt Creator を拡張する
Qt Creator を拡張するQt Creator を拡張する
Qt Creator を拡張するTakumi Asaki
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutinemelpon
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成眞樹 冨澤
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Yuki Higuchi
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用Sho Okada
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成眞樹 冨澤
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村Koichi Uchimura
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
UniRxことはじめ
UniRxことはじめUniRxことはじめ
UniRxことはじめShoichi Yasui
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersShota TAMURA
 

La actualidad más candente (20)

Spockの基礎
Spockの基礎Spockの基礎
Spockの基礎
 
Precise garbage collection for c
Precise garbage collection for cPrecise garbage collection for c
Precise garbage collection for c
 
大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」大阪Node学園 六時限目 「generator小咄」
大阪Node学園 六時限目 「generator小咄」
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & Hack
 
Try Webworkers
Try WebworkersTry Webworkers
Try Webworkers
 
Qt Creator を拡張する
Qt Creator を拡張するQt Creator を拡張する
Qt Creator を拡張する
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
RGtk2入門
RGtk2入門RGtk2入門
RGtk2入門
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
UniRxことはじめ
UniRxことはじめUniRxことはじめ
UniRxことはじめ
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 

Similar a Node.js - JavaScript Thread Programming

Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010biscuitjam
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010biscuitjam
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9Saiki Iijima
 
cloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfcloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfKosuke Saigusa
 
Flow.js
Flow.jsFlow.js
Flow.jsuupaa
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaandroid sola
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGParsfumokmm
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
 

Similar a Node.js - JavaScript Thread Programming (20)

Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
About Jobs
About JobsAbout Jobs
About Jobs
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
 
JavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, PerformanceJavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, Performance
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9
ViewModel テスト難しすぎ問題 by saiki iijima in Android Test Night #9
 
cloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfcloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdf
 
Flow.js
Flow.jsFlow.js
Flow.js
 
CLR/H No.35-2
CLR/H No.35-2CLR/H No.35-2
CLR/H No.35-2
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
 
jQuery勉強会#4
jQuery勉強会#4jQuery勉強会#4
jQuery勉強会#4
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 

Más de takesako

SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてSECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてtakesako
 
Acme minechan
Acme minechanAcme minechan
Acme minechantakesako
 
Acme::MineChan LT demo
Acme::MineChan LT demoAcme::MineChan LT demo
Acme::MineChan LT demotakesako
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithmtakesako
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTtakesako
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validatortakesako
 
正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一takesako
 
Perl6 Regex Programming with Rakudo
Perl6 Regex Programming with RakudoPerl6 Regex Programming with Rakudo
Perl6 Regex Programming with Rakudotakesako
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to ustakesako
 
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)takesako
 
Perl x86 JIT Programming
Perl x86 JIT ProgrammingPerl x86 JIT Programming
Perl x86 JIT Programmingtakesako
 
YAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing CeremonyYAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing Ceremonytakesako
 
HTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a PloyglotHTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a Ployglottakesako
 
Devsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 TokyoDevsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 Tokyotakesako
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtypetakesako
 
Shibuyajs Digest
Shibuyajs DigestShibuyajs Digest
Shibuyajs Digesttakesako
 
HTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fallHTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-falltakesako
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detectiontakesako
 
Shibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnectShibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnecttakesako
 

Más de takesako (19)

SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてSECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催について
 
Acme minechan
Acme minechanAcme minechan
Acme minechan
 
Acme::MineChan LT demo
Acme::MineChan LT demoAcme::MineChan LT demo
Acme::MineChan LT demo
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator
 
正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一
 
Perl6 Regex Programming with Rakudo
Perl6 Regex Programming with RakudoPerl6 Regex Programming with Rakudo
Perl6 Regex Programming with Rakudo
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
 
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
 
Perl x86 JIT Programming
Perl x86 JIT ProgrammingPerl x86 JIT Programming
Perl x86 JIT Programming
 
YAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing CeremonyYAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing Ceremony
 
HTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a PloyglotHTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a Ployglot
 
Devsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 TokyoDevsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 Tokyo
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtype
 
Shibuyajs Digest
Shibuyajs DigestShibuyajs Digest
Shibuyajs Digest
 
HTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fallHTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fall
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
 
Shibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnectShibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnect
 

Node.js - JavaScript Thread Programming