500 likes | 526 Views
Live Mesh and Live Framework. Oran Dennison @ orand orand.blogspot.com odennison@gmail.com. What is the mesh?. the consumer experience. Live Mesh. the developer experience. Live Framework. future experiences. Wild Speculation . Live Mesh on the Mac.
E N D
Live Mesh and Live Framework Oran Dennison @orand orand.blogspot.com odennison@gmail.com
What is the mesh? the consumer experience Live Mesh the developer experience Live Framework future experiences Wild Speculation
Live Framework the developer experience • What’s new • The platform • The programming model
Live Framework as a Platform • User-centric data & services • Over 460M users, 30B relationships • Simple standards-based web architecture • Sync, communications, and P2P • Identity, authN, authZ • App management • Analytics
User-centric data • Users own their data • Can grant access to: • Other users • Roles: Full, Writer, Reader • Devices • Apps • Can see who has access to what • Can revoke access • Apps & devices access data on behalf of users
User-centric services • Contacts • Profiles • Calendar • Mail • Photos • Groups • Favorites • Geospatial • And much more…
Standards-based architecture • HTTP • REST • Atom, RSS, JSON, POX • Atom Publishing Protocol (AtomPub) • FeedSync
Verbs • Standard HTTP methods • POST Create a new resource entity • PUT Update an existing resource entity • GET Read a resource entity/collection • DELETE Delete a resource entity • OPTIONS Discover the capabilities • HEAD {GET – entity body} • Consistent across the entire Resource Model • AtomPub for CRUD and FeedSync for sync • URI-LINQ mappings for queries
Uses HTTP 1.1 semantics for… • Caching • Change notification • Incremental state transfer
REST In The MeshResources, collections and links collection Uri EntityTag SubscriptionUri … resource Uri LastUpdateTime … resource link Uri Title RelationshipType … resource
FeedSync • Synchronization via RSS and Atom feeds • Bi-directional sync (multi-master) • Preserves conflicting data • Creative Commons • Microsoft Open Specification Promise
FeedSync example <rss version="2.0"> <channel> <title>To Do List</title> <description>A list of items to do</description> <link> http://example.com/partial.xml </link> <item> <title>Buy groceries</title> <description>Get milk, ... </description> <sx:sync id="item_1_myapp_2005-05-21T11:43:33Z" updates="3"> <sx:history sequence="1" when="2005-05-21T09:43:33Z" by="a9"/> <sx:conflicts ...> <item> ... </item> </sx:conflicts> </sx:sync> </item> </channel> </rss>
It’s feeds all the way down! News Contacts Folders and files Custom app data Apps Devices Sharing User presence Change notifications
Live Operating Environment Live Framework Resource Model Mesh Objects Notification Queue News Applications Devices Contacts Mesh Scripts Profiles Members Mappings Data Feeds News Subscription Data Entry Data Entry Media Resources
Live Operating Environment • Live Framework’s service composition engine • Takes care of the hard problems… • Offline and sync • Communication • Device management, user/device presence, notifications • Exists in cloud and on all devices • All the incarnations look and feel the same • Provides a unified and consistent programming model
Sync is a big deal. “I consider lack of data sync in Gears one of my greatest personal failures. I was not able to convince Google to take on the data sync problem. So I moved on.” “Live Framework imposes a data schema (Atom) on you, but for that price of admission you get free automatic data sync between devices and the cloud, as well as cloud storage and associated services such as authentication.” Danny Thorpe – founding member of Google Gears, now at Microsoft working on Live Framework tools
Live Operating Environment … http://<contacts> [Client|Cloud] Live Operating Environment http://<storage> http://<directory> <peer devices>
Always Online WL Services WL Services WL Services Live Services Live Operating Environment (https://user.windows.net) Web Apps HTTP Cloud Device HTTP HTTP HTTP • AJAX/SL/Flash • Apps Desktop Apps Mobile Apps
Occasionally Connected WL Services WL Services WL Services Live Services Live Operating Environment (https://user.windows.net) HTTP Cloud P2P to another device Device AJAX/SL/Flash Apps Desktop Apps Live Operating Environment (http://localhost:2048) Local Cache HTTP
Mesh Resource Partitioning each resource lives in a ‘home’ datacenter you are here each resource has a stable canonical URI based on its resource identifier mapping a resource identifier to its ‘home’ datacenter requires a lookup in a replicated database https://accounts.mesh.com/Identities/FKEXBSLJR3VUXEXMTPSSOVO6GM/DeviceClaims/CSOW2TEBYUSE5BD3I5QOS724UU https://accounts.clus9.bay.mesh.com/Identities/FKEXBSLJR3VUXEXMTPSSOVO6GM/DeviceClaims/CSOW2TEBYUSE5BD3I5QOS724UU each resource has a location URI that routes requests directly to its ‘home’ datacenter requests to the ‘wrong’ datacenter get redirected, and clients cache the redirect URI for future use
Mesh-Enabled Web Applications • Same app on website, Live Desktop, and devices • HTML/JavaScript, Silverlight, Flash, etc. • Auto deployment and update • Socially aware and easily shareable • Accessed by originating website with user consent • Runs in a sandbox
Mesh-Enabled Web App Packaging YourApp.zip • index.html • Manifest.xml • Logo.png • [folders, other static content]
Live Framework Programming • HTTP • AtomPub client • Microsoft SDKs • .NET, Silverlight, JavaScript • Tools for Visual Studio • PHP library • Roll your own
Coding time: Let’s party on the mesh with .NET!
JavaScript SDK MeshApp.run = functionMeshApp$run() { Microsoft.LiveFX.MeshApplication.loadAsync(windows.location.hostname, Delegate.create(null, function(meshApplicationContext) { if (meshApplicationContext.state !== Microsoft.LiveFX.OperationState.Success) { MeshApp._showError('MeshApplication Load Failed'); } else { varmeshApplication = meshApplicationContext.resource; meshApplication.get_runtimeEndpoint().get_mesh().loadAsync (Delegate.create(null, function(meshOperationContext) { MeshApp._onLoadMesh(meshOperationContext); })); } }));
PHP Helpers • <?php • require_once'LiveFX.php'; • $token="<delegated authentication token>"; • $livefx=newLiveFX(); • $loe=$livefx->connectWithToken($token); • $contacts=$livefx->getContacts($loe['ContactsLink']); • $livefx->printArray($contacts); • ?>
“A whole new world… A new fantastic point of view…” • Data deeply owned by users not apps or devices • Just feeds? I want my RDBMS/filesystem/… back! • Hierarchies • Transactions • Referential integrity • Eventually consistent systems • Conflict resolution: the dark side of sync
Getting Started http://developer.mesh-ctp.com
Click on Join, Continue, click clickclick, type typetype, pretend to read EULAs, Privacy Policies, Terms of Use, click clickclick, etc.
This step is the non-obvious one. Tokens are no longer required.
Speculative stuff ahead Warning Unauthorized ^
New Device Types • Media Center • Ultra Mobile PC • Windows Home Server
Even More Speculative Device Stuff • Mesh-enabled picture frames • Mesh-enabled Eye-Fi cards in cameras • Mesh-enabled NAS appliance • Intel Remote Wake Technology • Listens to Mesh Services while the device is asleep
New App Types MSI,CAB, and more Note: this is an early mockup and doesn’t imply actual product plans (but wouldn’t it be cool)
New Resource TYpes • Calendar • Mail • Photos • Groups • Favorites • Mapping / geospatial • Search • Messenger • SDKs for More languages • ActionScript • Python • Ruby • Java • Perl • More Operating Systems • Windows Mobile • Zune • XBox • Embedded • Symbian • Linux • External Data Sources • Custom external service proxies • Facebook • Twitter • Flickr • Photobucket • SmugMug • TripIt • Dopplr • eHome • ETC. • App Marketplace • Office • Enterprise support • Streaming video & P2P • WebDAV
Get meshified! As a user (you, your friends & coworkers, your mom) http://www.mesh.com As a developer http://developer.mesh-ctp.com Live Framework Forum
Thank you. Any questions? Oran Dennison @orand orand.blogspot.com odennison@gmail.com