project syndroid
DESCRIPTION
A proposed architecture for a Gadget API that allows deployment of OpenSocial/Gears enabled gadgets to Android, iGoogle, OSX Dashboard, Google Desktop, etcTRANSCRIPT
Project SyndroidGadgets on a Cloud Computing Platform
Ray CromwellCTO Timepedia.org
Problem: Gadgets can span many Clouds
Android iGoogle OSX GoogleDesktop
Yahoo
And many Flash widget startups
Clouds
•Android and J2ME are Java
•What of iPhone SDK? Objective-C? Javascript?
•iGoogle, Yahoo, Google Desktop, OSX Dashboard, Javascript
•Browser and Android have different persistent storage APIs too
Fatigue
•Developers duplicate work
•Write same widget over and over
•New environments like OpenSocial and Gears make it more problematic
Help!
•Wouldn’t it be nice to write a Gadget just once?
•And deploy it everywhere natively?
•And take advantage of OpenSocial and Gears-like storage?
•And abstract away network I/O?
Syndroid
•Synthesis of Android and GWT
•Write Gadgets to a restricted API
•Compile to Javascript or Dalvik or (later) Actionscript
•Run on Android, iGoogle, OSX, Yahoo, et al
How?•New subset of Android declarative UI
XML
•UI widgets with Android, Browser, Flex implementations
•Abstract Canvas system for Graphics
•Proven Cross GWT->Android->Flash
•Persistent Storage API
•OpenSocial Proxy Container
Picture = 2^10 WordsSyndroid GadgetSyndroid GadgetXML + Java + XML + Java +
PackagingPackaging
UI ElementsUI Elements NetworkingNetworking
OpenSocialOpenSocial
StorageStorage
AndroidAndroid GWTGWT Flex/AIRFlex/AIR
ShindigShindig
OSX DashboardOSX Dashboard
Google DesktopGoogle Desktop
Cloud Agnostic
Cloud Specific
UI Elements
•Define subset of Android/GWT widgets useful for Gadgets
•Map to UI XML and Java implementation classes
•Restricted LCD event handling
UI Elements
•Full Canvas API supportable
•Proven GWT->Android->Flash implementation in Chronoscope
•Custom UI elements can be created across the cloud! (games and graphs for example)
Networking
•Common Gadget Operations
•Fetch RSS/Atom/JSON Data
•Submit Forms
•Especially useful with File Upload
•OpenSocial environment layered on top
OpenSocial
•What does it mean to run an OpenSocial container in an Android phone?
•Use Address Book as social network?
No!
•I want Orkut/Plaxo/Ning/etc widgets to run in my phone and show data from those containers.
Solution: Proxy Container
Syndroid Syndroid OpenSociOpenSocial Gadgetal Gadget
Android Android
SyndroidSyndroidOpenSocial OpenSocial
APIAPI
SyndroidSyndroidNetworkingNetworking ProxyProxy
Internet
QuickTime™ and aGIF decompressorare needed to see this picture.
Any Any ShindiShindi
gg
OpenSocial Proxy
•Uses optional proxy server to access foreign container interfaces
•In cases where direct access is possible with XHR/JSON, proxy can be avoided
•User deploys Gadget and uses Preference to select destination OpenSocial container
Persistent StorageSyndroid StorageSyndroid Storage
DB and PreferencesDB and Preferences
Android Android SQLLite SQLLite
Gears Gears
Android
GWT
Desktop AIR Local DBAIR Local DBpref pref
Persistent Storage
•SQL-Like interface to Android, AIR, and Gears Databases
•How to handle non-Gears JS environments? Open Question
•HashMap-style prefs interface for everything else
GWT, the Enabler•Single language: Java
•Subset JRE runs in JS, Android, and can be made to run in ActionScript and J2ME
•Code written to GWT JRE + Abstract UI/Event system is Cloud Safe
•Can be translated into multiple environments
Open Question
•Interaction of Caja and GWT code
•Can GWT be modified to produce Cajoled code for Shindig containers?
Details to finalize
•Set of widgets
•Event interface
•Packaging and Deployment process
•Toolset
Syndroid•Write Gadgets in Java
•Use OpenSocial and Offline Features
•Compile and Deploy as Native Android App
•Compile and Deploy to JavaScript
•and later AIR/Flash
•Support OSX Dashboard, Google Desktop, Vista Sidebar, Yahoo Widgets, ....
Syndroid
One Gadget API to Rule Them All