SlideShare a Scribd company logo
1 of 15
プロパティディスクリプ
タとその拡張ライブラリ
Gunma.web #14 発表
お前誰よ?
• 村岡友介
• @jbking
• Python!
• Python!!
• Python!!!
• JavaScript
• jQuery使い
ECMA-262 5.1
ECMAScript
Property Descriptor
Property
Descriptor?
• オブジェクトごとの
プロパティの挙動を
記述
• value
• writable
• enumerable
• configurable
• setter/getter foo.bar
オブジェクト プロパティ
Object.defineProperty(foo, ‘bar’, {
get: function() {
return ‘baz’;
},
set: function(v) {
console.log(v);
}
});
foo.bar
‘baz’
foo.bar = ‘qux’
qux // console.log
‘qux’
foo.bar
‘baz’
Property
Descriptor?
• オブジェクトごとの
プロパティの挙動を
記述
• value
• writable
• enumerable
• configurable
• setter/getter
ここまでが基本
BeautifulProperties.js
Hookable
LazyInitializable
Events
Observable
Versionizable
https://github.com/monjudoh/BeautifulProperties.js/
BeautifulProperties.LazyInitializable.define(
object,
‘key’,
{
init: function () {
console.log(‘initialized’);
return 1;
}
}
);
object.key
initialized // console.log
1
LazyInitializable
• 初期化を遅延させる
BeautifulProperties.Hookable.define(
object,
‘key’,
{
beforeGet: function () { console.log(‘beforeGet’); },
afterGet: function (v) { console.log(‘afterGet’, v); },
beforeSet: function (v, p) { console.log(‘beforeSet’, v, p); },
afterSet: function (v, p) { console.log(‘afterSet’, v, p); }
}
);
object.key
beforeGet // console.log
afterGet undefined // console.log
undefined
object.key = 10
beforeSet 10 undefined // console.log
afterSet 10 undefined // console.log
10
Hookable
• getter/setterの直前
と直後にそれぞれ
フックを仕込める
• 値の変更も
BeautifulProperties.Events.on(object, ‘event1’,
object,
‘event1’,
function () {
console.log(‘event1 called’);
}
);
BeautifulProperties.Events.trigger(object, ‘event1’)
event1 called // console.log
undefined
Events
• オブジェクトに対し
てイベントをはれる
• jQ.on/jQ.triggerのよ
うなもの
• プロトタイ
プへ伝播
BeautifulProperties.Observable.define(
object,
‘key’
);
BeautifulProperties.Events.on(
object,
‘change:key’,
function (_ev, v, p) {
console.log(‘key is changed’, v, ‘from’, p);
}
);
object.key = ‘foo’
key is change foo from undefined // console.log
‘foo’
Observable
• プロパティの変更で
イベントを発行でき
る
BeautifulProperties.Versionizable.define(
object,
‘key’
);
object.key = ‘foo’
‘foo’
object.key = ‘bar’
‘bar’
BeautifulProperties.Versionizable.getVersions(
object,
‘key’)
[ { value: ‘bar’, timestamp: 1379121665980 },
{ value: ‘foo’, timestamp: 1379121662234 } ]
Versionizable
• プロパティの変更を
履歴として保存でき
る
• 履歴改変もできる
一つのプロパティに対して
組み合わせられます
Hookable
LazyInitializable
Events
Observable
Versionizable
BeautifulProperties.Observable.define(
object,
‘key’
);
BeautifulProperties.Versionizable.define(
object,
‘key’
);
BeautifulProperties.Events.on(
object,
‘change:key’,
function () { console.log(‘key is change’); }
);
object.key = ‘foo’
key is changed // console.log
‘foo’
BeautifulProperties.Versionizable.getVersions(
object,
‘key’)
[ { value: ‘foo’, timestamp: 1379121662234 } ]
組み合わせ例
• プロパティの変更を
履歴取りながらイベ
ント発行する
以上。

More Related Content

What's hot

Crawler Commons
Crawler CommonsCrawler Commons
Crawler Commonschibochibo
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#将 高野
 
202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20thSatoru Abe
 
My misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleMy misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleYukiya Hayashi
 
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshopSatoru Abe
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Sugawara Genki
 
redashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやredashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやYASUKAZU NAGATOMI
 
Capistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrbCapistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrbTsubasa Yumura
 
Web Workers
Web WorkersWeb Workers
Web Workerskaboccha
 
Jenkinsで行う並列テスト(公開用)
Jenkinsで行う並列テスト(公開用)Jenkinsで行う並列テスト(公開用)
Jenkinsで行う並列テスト(公開用)Yamamoto Kazuhisa
 
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Koji SHIMADA
 
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDDRuby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDDYasutomo Uemori
 
Active job meets kubernetes
Active job meets kubernetesActive job meets kubernetes
Active job meets kubernetesYasutomo Uemori
 
スクリプトエンジンをつくる話
スクリプトエンジンをつくる話スクリプトエンジンをつくる話
スクリプトエンジンをつくる話すずしめ
 
20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize Tools20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize ToolsKazuki Ueki
 

What's hot (19)

Crawler Commons
Crawler CommonsCrawler Commons
Crawler Commons
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#
 
202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th
 
My misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleMy misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile module
 
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
redashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやredashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレや
 
Capistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrbCapistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrb
 
Web Workers
Web WorkersWeb Workers
Web Workers
 
Jenkinsで行う並列テスト(公開用)
Jenkinsで行う並列テスト(公開用)Jenkinsで行う並列テスト(公開用)
Jenkinsで行う並列テスト(公開用)
 
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4
 
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDDRuby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
 
Active job meets kubernetes
Active job meets kubernetesActive job meets kubernetes
Active job meets kubernetes
 
スクリプトエンジンをつくる話
スクリプトエンジンをつくる話スクリプトエンジンをつくる話
スクリプトエンジンをつくる話
 
20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize Tools20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize Tools
 
HerokuMeetupCuon
HerokuMeetupCuonHerokuMeetupCuon
HerokuMeetupCuon
 
Cubby-2008-01-15 OT
Cubby-2008-01-15 OTCubby-2008-01-15 OT
Cubby-2008-01-15 OT
 
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
 

Viewers also liked

The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015Yusuke Muraoka
 
Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02Yusuke Muraoka
 
App Engineと非同期とテストと私
App Engineと非同期とテストと私App Engineと非同期とテストと私
App Engineと非同期とテストと私Yusuke Muraoka
 

Viewers also liked (6)

The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015
 
Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02
 
Django learning
Django learningDjango learning
Django learning
 
Poolboy
PoolboyPoolboy
Poolboy
 
App Engineと非同期とテストと私
App Engineと非同期とテストと私App Engineと非同期とテストと私
App Engineと非同期とテストと私
 
Django learning Part2
Django learning Part2Django learning Part2
Django learning Part2
 

Similar to プロパティディスクリプタとその拡張ライブラリ

BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回zakihaya
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、ReactのベストプラクティスとバッドプラクティスKohei Asai
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編ksimoji
 
Elasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめElasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめ朋哉 池田
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lispfukamachi
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -次朗 永島
 
Objective Front-End JavaScript
Objective Front-End JavaScriptObjective Front-End JavaScript
Objective Front-End JavaScriptMuyuu Fujita
 

Similar to プロパティディスクリプタとその拡張ライブラリ (14)

HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編
 
Elasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめElasticsearchの基本動作まとめ
Elasticsearchの基本動作まとめ
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
 
実践Realm
実践Realm実践Realm
実践Realm
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
 
Objective Front-End JavaScript
Objective Front-End JavaScriptObjective Front-End JavaScript
Objective Front-End JavaScript
 

More from Yusuke Muraoka

いかにして問題をとくか
いかにして問題をとくかいかにして問題をとくか
いかにして問題をとくかYusuke Muraoka
 
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Yusuke Muraoka
 
私のPythonとの関わりかた
私のPythonとの関わりかた私のPythonとの関わりかた
私のPythonとの関わりかたYusuke Muraoka
 
Substance D world-plone-day-2017
Substance D world-plone-day-2017Substance D world-plone-day-2017
Substance D world-plone-day-2017Yusuke Muraoka
 
Pythonistaの使い方
Pythonistaの使い方Pythonistaの使い方
Pythonistaの使い方Yusuke Muraoka
 
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HAGunma.web #24 MySQL HA
Gunma.web #24 MySQL HAYusuke Muraoka
 
Can A Python Go Beyond The Python
Can A Python Go Beyond The PythonCan A Python Go Beyond The Python
Can A Python Go Beyond The PythonYusuke Muraoka
 

More from Yusuke Muraoka (9)

いかにして問題をとくか
いかにして問題をとくかいかにして問題をとくか
いかにして問題をとくか
 
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発
 
私のPythonとの関わりかた
私のPythonとの関わりかた私のPythonとの関わりかた
私のPythonとの関わりかた
 
Substance D world-plone-day-2017
Substance D world-plone-day-2017Substance D world-plone-day-2017
Substance D world-plone-day-2017
 
Pythonistaの使い方
Pythonistaの使い方Pythonistaの使い方
Pythonistaの使い方
 
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HAGunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
 
Pyramid Security
Pyramid SecurityPyramid Security
Pyramid Security
 
Some about chef
Some about chefSome about chef
Some about chef
 
Can A Python Go Beyond The Python
Can A Python Go Beyond The PythonCan A Python Go Beyond The Python
Can A Python Go Beyond The Python
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

プロパティディスクリプタとその拡張ライブラリ