dena technology seminar #3 - opensocial and javascript

129
OpenSocial and JavaScript DeNA 横江直輔 (@zentooo)

Upload: naosuke-yokoe

Post on 17-Jul-2015

1.951 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial

and

JavaScript

DeNA

横江直輔 (@zentooo)

Page 2: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Profile

• YokoeNaosuke

• 2010年度入社 / エンジニア

• Hatena: http://d.hatena.ne.jp/zentoo/

• Twitter: http://twitter.com/zentooo

Page 3: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Agenda

1. Y!モバゲー JS API

2. Test of JS API

3. OpenSocialの今後

Page 4: DeNA Technology Seminar #3 - OpenSocial and JavaScript

1. Y!モバゲー JS API

Page 5: DeNA Technology Seminar #3 - OpenSocial and JavaScript

1. Y!モバゲー JS API

Page 6: DeNA Technology Seminar #3 - OpenSocial and JavaScript

1. Y!モバゲー JS API

• OpenSocial 0.8

Page 7: DeNA Technology Seminar #3 - OpenSocial and JavaScript

1. Y!モバゲー JS API

• OpenSocial 0.8

• Core APIはほぼ提供(opensocial.*, …)

Page 8: DeNA Technology Seminar #3 - OpenSocial and JavaScript

1. Y!モバゲー JS API

• OpenSocial 0.8

• Core APIはほぼ提供(opensocial.*, …)

• 独自API(mbga.*)

Page 9: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API

Page 10: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(1)

• People API

• Activities API

• AppData API

Page 11: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(1)

• People API

• Activities API

• AppData API

これらはJSON-RPC経由でDBに話しかけるAPI

Page 12: DeNA Technology Seminar #3 - OpenSocial and JavaScript

JSON-RPC

Page 13: DeNA Technology Seminar #3 - OpenSocial and JavaScript

JSON-RPC

• HTTPベースのRPC

Page 14: DeNA Technology Seminar #3 - OpenSocial and JavaScript

JSON-RPC

• HTTPベースのRPC

• メッセージフォーマットにJSONを使用

Page 15: DeNA Technology Seminar #3 - OpenSocial and JavaScript

JSON-RPC

• HTTPベースのRPC

• メッセージフォーマットにJSONを使用

Client Server

{“method”: “people.get”, “params”:

{“userId”: “@owner”, “groupId”: “@all”, “fields”: …. }

}

{“id”: “person”, “result”:

{“nickname”: “sengoku38”, “profileUrl”: “http://…” … }

}

Page 16: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and JSON-

RPC

OpenSocial Container

OpenSocial App JSON-RPC

Mbga DB

XmlHttpRequest

Page 17: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(2)

• opensocial.requestSendMessage()

• opensocial.requestShareApp()

• opensocial.requestPayment()

Page 18: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(2)

• opensocial.requestSendMessage()

• opensocial.requestShareApp()

• opensocial.requestPayment()

これらはポップアップを表示するAPI

Page 19: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Popup

OpenSocial Container

OpenSocial App

友達を招待

Page 20: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Popup

OpenSocial Container

OpenSocial App

友達を招待

Page 21: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Popup

OpenSocial Container

OpenSocial App

招待して大丈夫か?

大丈夫だ、問題ない

Page 22: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab

• gadgets.MiniMessage

• gadgets.window

• gadgets.flash

Page 23: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab ->いらない子

• gadgets.MiniMessage

• gadgets.window

• gadgets.flash

Page 24: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab ->いらない子

• gadgets.MiniMessage ->いらない子

• gadgets.window

• gadgets.flash

Page 25: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab ->いらない子

• gadgets.MiniMessage ->いらない子

• gadgets.window ->中間管理職

• gadgets.flash

Page 26: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab ->いらない子

• gadgets.MiniMessage ->いらない子

• gadgets.window ->中間管理職

• gadgets.flash ->無双

Page 27: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(3)

• gadgets.Tab ->いらない子

• gadgets.MiniMessage ->いらない子

• gadgets.window ->中間管理職

• gadgets.flash ->無双

これらは主にgadgetの表示に関するAPI

Page 28: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Gadgetってそもそも

どういう風に

表示してんの?

Page 29: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

Shindig

Page 30: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

Shindig

Page 31: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

Shindig

Request Rendering

Page 32: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

Shindig

Request Rendering

SAP Server

Page 33: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

Shindig

Request Rendering

SAP Server

GadgetXML

Page 34: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

OpenSocial App

Shindig

Request Rendering

Render

SAP Server

Page 35: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial App and Shindig

OpenSocial Container

OpenSocial App

Shindig

Request Rendering

Render

SAP Server

Page 36: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(4)

• gadgets.json

• gadgets.utils

• gadgets.io

Page 37: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(4)

• gadgets.json ->window.JSON

• gadgets.utils

• gadgets.io

Page 38: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(4)

• gadgets.json ->window.JSON

• gadgets.utils ->名前の通り

• gadgets.io

Page 39: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(4)

• gadgets.json ->window.JSON

• gadgets.utils ->名前の通り

• gadgets.io ->無双

Page 40: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial API(4)

• gadgets.json ->window.JSON

• gadgets.utils ->名前の通り

• gadgets.io ->無双

これらはユーテリティ的なAPI

Page 41: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.io.makeRequest

• 要はCross-Domain XHR

• Shindigがリクエストをproxy

• XML, JSON, RSSをデコード

• Signed-Requestも可能

Page 42: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.io.makeRequest

OpenSocial Container

OpenSocial App

Shindig

XHR

Page 43: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.io.makeRequest

OpenSocial Container

OpenSocial App

ShindigExternal

Site

XHR

Page 44: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

Page 45: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API

• NGWord API

• Avatar API

• TextData API

• Diary API

Page 46: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API ->いわゆるblock

• NGWord API

• Avatar API

• TextData API

• Diary API

Page 47: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API ->いわゆるblock

• NGWord API ->いわゆるフィルタリング

• Avatar API

• TextData API

• Diary API

Page 48: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API ->いわゆるblock

• NGWord API ->いわゆるフィルタリング

• Avatar API ->いわゆるアバター

• TextData API

• Diary API

Page 49: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API ->いわゆるblock

• NGWord API ->いわゆるフィルタリング

• Avatar API ->いわゆるアバター

• TextData API ->いわゆる…?

• Diary API

Page 50: DeNA Technology Seminar #3 - OpenSocial and JavaScript

mbga API

• BlackList API ->いわゆるblock

• NGWord API ->いわゆるフィルタリング

• Avatar API ->いわゆるアバター

• TextData API ->いわゆる…?

• Diary API ->いわゆる日記投稿機能

Page 51: DeNA Technology Seminar #3 - OpenSocial and JavaScript

APIまとめ

• OpenSocial 0.8にだいたい準拠

• mbga.*以下に独自API

Page 52: DeNA Technology Seminar #3 - OpenSocial and JavaScript

2. Test of JS API

Page 53: DeNA Technology Seminar #3 - OpenSocial and JavaScript

2. Test of JS API

• ちょっと環境がややこしい• gadgets.rpc

• Iframe

• Security Token

• QUnitを使用

• Test::QUnitで自動実行

Page 54: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial Container & App

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

Page 55: DeNA Technology Seminar #3 - OpenSocial and JavaScript

OpenSocial Container & App

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

.js .js .js .js

.js .js .js

Page 56: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.rpc

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

Page 57: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.rpc

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

gadgets.rpc.register

Page 58: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.rpc

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

gadgets.rpc.register

gadgets.rpc.register

Page 59: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.rpc

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

gadgets.rpc.register

gadgets.rpc.call

gadgets.rpc.register

Page 60: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Inside of gadgets.rpc

• window.postMessage -> modern browsers

• frameElement -> Firefox 2.x

• Native IE XDC -> IE6, 7

• RMR -> Safari 2.x, Chrome 1

• IFPC -> all others

Page 61: DeNA Technology Seminar #3 - OpenSocial and JavaScript

window.postMessage

• HTML 5

• Standard way ( hackではない )

• Cross-Domain messaging between

windows

• Web Workersへのmessagingにも

Page 62: DeNA Technology Seminar #3 - OpenSocial and JavaScript

window.postMessage

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

Page 63: DeNA Technology Seminar #3 - OpenSocial and JavaScript

window.postMessage

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

window.parent.postMessage(msg)onmessage

child.postMessage(msg) onmessage

Page 64: DeNA Technology Seminar #3 - OpenSocial and JavaScript

IFPC

• Inter-Frame Procedure Call

• 孫iframe + fragment IDで通信

• 一応どんなブラウザでも動く

Page 65: DeNA Technology Seminar #3 - OpenSocial and JavaScript

IFPC

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

function foo

Page 66: DeNA Technology Seminar #3 - OpenSocial and JavaScript

IFPC

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

(invisible iframe)

yahoo-mbga.jp

function foo

Page 67: DeNA Technology Seminar #3 - OpenSocial and JavaScript

IFPC

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

(invisible iframe)

yahoo-mbga.jp

ifr.src = http://…#<json>

function foo

Page 68: DeNA Technology Seminar #3 - OpenSocial and JavaScript

IFPC

OpenSocial Container

OpenSocial App

[hash].app.mbga-platform.jp

yahoo-mbga.jp

(invisible iframe)

yahoo-mbga.jp

ifr.src = http://…#<json>

window.parent.parent.foo()

function foo

Page 69: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

Page 70: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

5.callback

Page 71: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

2.shareApp

5.callback

gadgets.rpc

Page 72: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

2.shareApp

5.callback

3.endpoint DBgadgets.rpc

Page 73: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

2.shareApp

5.callback

3.endpoint DBgadgets.rpc

Page 74: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

2.shareApp 4.callback

5.callback

3.endpoint DBgadgets.rpc

Page 75: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Share app with gadgets.rpc

[hash].app.mbga-platform.jp

yahoo-mbga.jp

1.opensocial.requestShareApp

2.shareApp 4.callback

5.callback

3.endpoint DBgadgets.rpc

Page 76: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

Page 77: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

• StaticなJSライブラリのtestでは済まない

Page 78: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

• StaticなJSライブラリのtestでは済まない

• 各windowでloadされるべき.jsの存在

Page 79: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

• StaticなJSライブラリのtestでは済まない

• 各windowでloadされるべき.jsの存在

• gadgets.rpcが初期化プロセスにも関係

Page 80: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

• StaticなJSライブラリのtestでは済まない

• 各windowでloadされるべき.jsの存在

• gadgets.rpcが初期化プロセスにも関係

• gadgets.rpcを利用するAPIのテストも…

Page 81: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Constraints for test

• StaticなJSライブラリのtestでは済まない

• 各windowでloadされるべき.jsの存在

• gadgets.rpcが初期化プロセスにも関係

• gadgets.rpcを利用するAPIのテストも…

• Security Tokenとか(ry

Page 82: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Testing tools for JS

• JSUnit

• QUnit

• JSTAPd

• JSTestDriver

• Jasmine

etc…

Page 83: DeNA Technology Seminar #3 - OpenSocial and JavaScript

QUnit

• jQueryからスピンアウト

• Author: John Resig

• Maintainer: JornZaefferer

• QUnit.logやQUnit.doneなどをフック可能

Page 84: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Hijacking QUnit

Page 85: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Hijacking QUnit

• アプリとしてtestを書くのが一番ラク

Page 86: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Hijacking QUnit

• アプリとしてtestを書くのが一番ラク

• しかし手動テストは。。。

Page 87: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Hijacking QUnit

• アプリとしてtestを書くのが一番ラク

• しかし手動テストは。。。

• 「それMozReplでできるよ」

Page 88: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Hijacking QUnit

• アプリとしてtestを書くのが一番ラク

• しかし手動テストは。。。

• 「それMozReplでできるよ」

• MozRepl.pmでテストアプリを起動→QUnitオブジェクトをジャック→テストを実行→テスト結果をPerlに戻してTAP形式で集計

Page 89: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Test::QUnit

Page 90: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Test::QUnit

• proveによるremoteテスト

Page 91: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Test::QUnit

• proveによるremoteテスト

• QUnitJackerなので本番環境もテスト可

Page 92: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Test::QUnit

• proveによるremoteテスト

• QUnitJackerなので本番環境もテスト可

• 指定したwindowのonloadをフックし、処理を走らせる(例えばpopupのCloseボタンをクリックとか)ことも可能

Page 93: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Test::QUnit

• proveによるremoteテスト

• QUnitJackerなので本番環境もテスト可

• 指定したwindowのonloadをフックし、処理を走らせる(例えばpopupのCloseボタンをクリックとか)ことも可能

• http://github.com/zentooo/p5-test-qunit

Page 94: DeNA Technology Seminar #3 - OpenSocial and JavaScript

ごっつええ感じ

• テストの全自動化 ( via prove )

• ポップアップのテストも可能に(副産物)

• JSON-RPCの仕様変更もキャッチ

Page 95: DeNA Technology Seminar #3 - OpenSocial and JavaScript

テストまとめ

• gadgets.rpcはけっこうややこしい

• Firefoxでしかtestできない男の人って…

• 汎用性に限界

• JSTAPdとかJSTestDriverとかとか

• いっそNodeで書いちゃうのも

Page 96: DeNA Technology Seminar #3 - OpenSocial and JavaScript

3. opensocialの今後

• 主にextras↓

• opensocial-payment

• Activity Streams

• Open Ajax Hub

• Wave API

Page 97: DeNA Technology Seminar #3 - OpenSocial and JavaScript

opensocial-payment

Page 98: DeNA Technology Seminar #3 - OpenSocial and JavaScript

opensocial-payment

• 既に実用段階

Page 99: DeNA Technology Seminar #3 - OpenSocial and JavaScript

opensocial-payment

• 既に実用段階

• Y!mbgaでは少しいじったコードを利用

Page 100: DeNA Technology Seminar #3 - OpenSocial and JavaScript

opensocial-payment

• 既に実用段階

• Y!mbgaでは少しいじったコードを利用

• ユーザの課金はcontainer domain

Page 101: DeNA Technology Seminar #3 - OpenSocial and JavaScript

opensocial-payment

• 既に実用段階

• Y!mbgaでは少しいじったコードを利用

• ユーザの課金はcontainer domain

• 例によってgadgets.rpcで通信

Page 102: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Activity Streams

Page 103: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Activity Streams

• JSにはあまり関係ないけど

Page 104: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Activity Streams

• JSにはあまり関係ないけど

• SocialなActivityの標準化

Page 105: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Activity Streams

• JSにはあまり関係ないけど

• SocialなActivityの標準化

• DBは既に対応済

Page 106: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Activity Streams

• JSにはあまり関係ないけど

• SocialなActivityの標準化

• DBは既に対応済

• Shindig-2.0.0にはJavaによる実装あり

Page 107: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

Page 108: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

• Frame間通信、その弐

Page 109: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

• Frame間通信、その弐

• http://www.openajax.org/member/wiki/Ope

nAjax_Hub_2.0_Specification

Page 110: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

• Frame間通信、その弐

• http://www.openajax.org/member/wiki/Ope

nAjax_Hub_2.0_Specification

• Gadget間でのsecureなpub/subを想定

Page 111: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

• Frame間通信、その弐

• http://www.openajax.org/member/wiki/Ope

nAjax_Hub_2.0_Specification

• Gadget間でのsecureなpub/subを想定

• 夢のアプリ間通信!?

Page 112: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Open Ajax Hub

OpenSocial Container

App A

sub: []

App C

sub: [A, D]

App B

sub: [A]

App D

sub: [C]

pub

pub pubpub

Page 113: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Wave API

Page 114: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Wave API

• G◯◯gleのアレのWave Gadget API

Page 115: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Wave API

• G◯◯gleのアレのWave Gadget API

• ShindigコミッタにはG◯◯gleの人が多い

Page 116: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Wave API

• G◯◯gleのアレのWave Gadget API

• ShindigコミッタにはG◯◯gleの人が多い

• Waveは滅びん!何度でも蘇るさ!

Page 117: DeNA Technology Seminar #3 - OpenSocial and JavaScript

Wave API

• G◯◯gleのアレのWave Gadget API

• ShindigコミッタにはG◯◯gleの人が多い

• Waveは滅びん!何度でも蘇るさ!

ということで、復活させてみました

Page 118: DeNA Technology Seminar #3 - OpenSocial and JavaScript

(多分)世界初のwave on Shindig

• Shindigのwave featureで実現する簡単なお絵かきチャット feat. node.js and

Socket.IO –

http://d.hatena.ne.jp/zentoo/20101114/128

9751462

• 動画 ->

http://www.youtube.com/watch?v=1iqgKrD

UEAo

Page 119: DeNA Technology Seminar #3 - OpenSocial and JavaScript

ご清聴ありがとうございました

Page 120: DeNA Technology Seminar #3 - OpenSocial and JavaScript
Page 121: DeNA Technology Seminar #3 - OpenSocial and JavaScript

A. API側から見たアプリ作成のコツ

Page 122: DeNA Technology Seminar #3 - OpenSocial and JavaScript

A. API側から見たアプリ作成のコツ

• gadgets.util.registerOnLoadHandler()

• gadgets.io.makeRequest()

• gadgets.flash.embedFlash()

※ただしAPI提供側視点のコツに限る

Page 123: DeNA Technology Seminar #3 - OpenSocial and JavaScript

g.u.registerOnLoadHandler()

• (ほぼ) onload発火時の実行を保証• <script>/*ここで呼ばれる*/</script></body>

• これ使わないと上記タイミング無保証

• ShindigのJS APIの初期化プロセスは複雑

• なので使ったほうが何かと安心

Page 124: DeNA Technology Seminar #3 - OpenSocial and JavaScript

コード例(1)

function init() {

// アプリの初期化プロセスは全てこの中で行う

}

gadgets.util.registerOnLoadHandler(init);

Page 125: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.io.makeRequest()

• ほぼ100%使われているだろうAPI

• 意外と多機能

• HEAD, GET, PUT, POST, DELETE

• データフォーマットの指定(JSON, DOM,

RSS)によるresponseの自動deserialize

Page 126: DeNA Technology Seminar #3 - OpenSocial and JavaScript

コード例(2)

function jsonCallback(response) {

if ( response.rc === 200 )

gadgets.log(response.data.foo); // bar

}

gadgets.io.makeRequest(“http://example.com/json”,

jsonCallback,

{“format”: “JSON”}

); {“foo”:”bar”}のようなJSONを返す

Page 127: DeNA Technology Seminar #3 - OpenSocial and JavaScript

gadgets.flash.embedFlash()

• Flashを利用したアプリでは必需品

• 引数での指定が細かい

• embedFlash(<url>,<Elem>,<ver>,<obj>)

• IE/それ以外で埋め込み方が違う

• 第四引数でのwmodeとid重要

Page 128: DeNA Technology Seminar #3 - OpenSocial and JavaScript

コード例(3)

gadgets.flash.embedFlash(“http://example.com/myapp.swf”,

document.getElementById(“swfContainer”),

10,

{

“id”: “swfElem”, “wmode”: “opaque”

}

);後にgetElementById(“swfElem”)でアクセス可能に

Page 129: DeNA Technology Seminar #3 - OpenSocial and JavaScript

アプリのコツまとめ

• 半分コツ、半分「お願い」

• よいアプリは三者にとって幸せ