Live Mesh and Live Framework
Oran Dennison
@orand
orand.blogspot.com
[email protected]
What is the mesh?
the consumer experience
Live Mesh
the developer experience
Live Framework
future experiences
Wild Speculation
Live Mesh on the Mac
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 Mesh
Resources, collections and links
collection
Uri
EntityTag
SubscriptionUri
…
resource
resource
Uri
LastUpdateTime
…
link
resource
Uri
Title
RelationshipType
…
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 Framework Resource Model
Live Operating
Environment
Scripts
Devices
Members
Mesh
Profiles
Applications
Mappings
Mesh
Objects
Contacts
News
Data Feeds
Notification
Queue
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
Always Online
Live Operating
Environment
(https://user.windows.net)
WL
WL
Services
WL
Services
Services
Web Apps
Cloud
Device
Occasionally Connected
Live Operating
Environment
(https://user.windows.net)
WL
WL
Services
WL
Services
Services
Cloud
Device
P2P to
another device
Mesh Resource Partitioning
you are here
each resource has a stable canonical
URI based on its resource identifier
each resource lives in a ‘home’ datacenter
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
Authentication & Authorization
Mesh Apps Overview
Mesh-Enabled
Web Application
Web Apps
Rich Client Apps
• Pre-authenticated
• Pre-authorized to only
access data in its own
Mesh Object
• Pre-authorized to only
access user data that it
is granted access to
• App runs with specific
permissions
specifically granted by
the user (Delegated
Authorization)
• Authentication
through Domain, App
ID & Secret
• App runs as the user,
with same privilege
• Need Device ID & App
ID
• Access to Cloud or
Client Live Operating
Environment
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 = function MeshApp$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
{
var meshApplication = 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 = new LiveFX();
$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 click click,
type type type, pretend to read
EULAs, Privacy Policies, Terms of Use,
click click click, etc.
This step is the non-obvious one.
Tokens are no longer required.
Sign in at http://developer.mesh-ctp.com
Warning
Speculative^ stuff ahead
New Device Types
•Media Center
•Ultra Mobile PC
•Windows Home Server
New Devices Printers
New Devices Cars, Zunes, XBoxes
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)
Visual Resource Script Designer
New Resource TYpes
•Calendar
•Mail
•Photos
•Groups
•Favorites
•Mapping / geospatial
•Search
•Messenger
External Data Sources
•Custom external service proxies
•Facebook
•Twitter
•Flickr
•Photobucket
•SmugMug
•TripIt
•Dopplr
•eHome
SDKs for More languages
•ActionScript
•Python
•Ruby
•Java
•Perl
More Operating Systems
•Windows Mobile
•Zune
•XBox
•Embedded
•Symbian
•Linux
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
[email protected]
Descargar

Live Mesh and Live Framework