Some ideas and starting points on how OpenSocial and CMIS may play nice together. It would be nice to get some thoughts here: http://wiki.opensocial.org/index.php?title=Align_CMIS_and_OpenSocial or here: http://groups.google.com/group/opensocial-and-gadgets-spec
4. Overview
of
OpenSocial:
History
• Started
in
2007
as
response
to
Facebook
– Google,
MySpace,
Yahoo!,
hi5,
Flixster
• Very
broad
adop@on
in
Social
Networking
space
– Global
reach
– Most
using
on
Apache
Shindig
• Increasing
adop@on
by
enterprises
&
enterprise
vendors
• Established
from
the
outset
as
a
community
effort
– Some
technology
seeded
by
Google
• 2008
started
OpenSocial
Founda@on
5. Overview
of
OpenSocial:
Founda@on
The OpenSocial Foundation is a non-profit corporation created to
sustain the free and open development of the OpenSocial specification.
• Board
– 5
Corporate
Members
(Bri@sh
Telecom,
Google,
IBM,
MySpace,
Yahoo!)
– 2
Community
Elected
Members
(Mark
Halvorson
–
Atlassian,
Paul
Lindner
–
LinkedIn)
• Officers
– President:
David
Peck
(MySpace)
– Treasurer:
Karthik
Suri
(Yahoo!)
– Secretary:
Mark
Weitzel
(IBM)
• Community
– Open
to
all
– No
cost
to
par@cipate
6. Overview
of
OpenSocial:
Development
Process
• All
development
done
transparently
• Lead
with
code
– Propose
an
idea
– Create
a
prototype
– Modify
the
spec
– Community
vote
7. Overview
of
OpenSocial:
The
Spec
• Defines
a
Web
2.0
Component
model
(OpenSocial
Gadgets—Not
the
same
as
Google
Gadgets)
• Defines
a
social
data
model
• Layered
to
accommodate
levels
of
compliance
• Designed
to
be
extended
• Current
version
is
1.0
– 1.1
under
development
– 1.2
tenta@ve
plan
OpenSocial
Specifica-on
Core
Gadget
Social
Gadget
Core
API
Social
API
Server
Core
Data
8. Overview
of
OpenSocial:
The
Spec
• Web
2.0
component
model
(OpenSocial
Gadgets)
– JavaScript
API
• Social
API
– JavaScript
&
REST
• Templates
• Discovery
Social
People
Groups
Ac@vi@es
AppData
Albums
Media
Items
Messages
Gadgets
Templates
Preferences
App
Data
Life
Cycle
Events
Inter-‐applica@on
events
Features
OAuth
&
Request
Signing
Data
Pipelining
Views
Versions
Localiza@on
Tabs
Skins
Batch
Requests
9. A
quick
look
at
the
API:
JavaScript
Gegng
Friends
osapi.people.get({userId: '@owner', groupId:
'@friends'}).execute(function(result) {
if (!result.error) {
alert('You have ' + result.totalResults + ' friends');
}
});
Gegng
Specific
Fields
(“Proper@es”)
osapi.people.getViewer({fields: ['displayName',
'birthday']}).execute(function(result) {
if (!result.error) {
alert('Your name is ' + result.displayName + '!');
alert('Your birthday is ' + result.birthday + '!');
}
});
Gegng
Specific
Fields
(“Proper@es”)
osapi.people.getViewer({fields: ['displayName',
'birthday']}).execute(function(result) {
if (!result.error) {
alert('Your name is ' + result.displayName + '!');
alert('Your birthday is ' + result.birthday + '!');
}
});
10. A
quick
look
at
the
API:
Data
Pipelining
&
Templates
Data
Pipelining
<Content type="html”>
<![CDATA[
<script xmlns:os="http://ns.opensocial.org/2008/markup" type="text/
os-data">
<os:ViewerRequest key="Viewer" fields="name, birthday"/>
<os:HttpRequest key="mydata" href="http://example.com/api"/>
</script>
... HTML content here ...
]]>
</Content>
Templates
<script type="text/os-template">
<div style="font-size: 20px">Hello ${Viewer.displayName}!
</div>
</script>
11. A
quick
look
at
the
API:
REST
General
Pajern
HTTPVerb http://baseURL/serviceName/userID/selector?queryParameters
Services
• People
Examples
• Groups
GET http://api.example.org/people/userID/@friends?sortBy=updated • Ac@vi@es
GET http://api.example.org/people/userID/@friends • AppData
GET http://api.example.org/people/@me/@friends • Albums
• MediaItems
• Messages
Try
it!!
http://www-opensocial.googleusercontent.com/api/people/
108384687998576846752/@self It
is
expected
that
http://www-opensocial.googleusercontent.com/api/people/ new
services
will
be
108384687998576846752/@self?format=xml
added
as
more
http://www-opensocial.googleusercontent.com/api/people/
108384687998576846752/@self?format=atom
capability
defined
in
OpenSocial,
e.g.
via
extensions
12. A
General
Ques@on
Given
that
we
have
a
number
of
vendors
that
are
acAvely
working
on
products
and
soluAons
that
use
both
OpenSocial
and
CMIS…
and
similar
concepts
appear
in
each
spec…
…as
OpenSocial
and
CMIS
emerge
in
the
enterprise,
can
we
provide
a
consistent,
open,
standards
based
programming
model
to
our
customers
that
leverages
the
strengths
of
each
specificaAon,
promotes
interoperability,
and
fosters
sharing
and
collaboraAon
between
communiAes?
13. More
ques@ons,
some
ideas,
some
first
steps…
• Are
there
“low
hanging
fruit”
that
we
can
do
to
“test
the
waters”?
– Build
CMIS
gadgets
to
demonstrate
parts
of
Chemistry
– Build
gadgets
to
show
how
the
APIs
can
work
together
– Add
OpenSocial
MediaItems
as
a
CMIS
Document
subclass
– Create
a
CMIS
based
extension
for
exis@ng
OS
MediaItems
Some First Steps…
(will be done in open source – not sure which project)
• MediaItems & Albums seem to overlap with CMIS
• Created a bi-directional mapping utility
Next Steps…
• In process of integrating mapping utility as binding with
Shindig
• Demonstrate complimentary APIs via OpenSocial Gadget
• Retrieve document info (CMIS) & Person info (OS)
• Create document (CMIS) & Post Activity (OS)
14. More
ques@ons,
some
ini@al
ideas,
some
first
steps…
• Moving
forward,
what
makes
sense?
– What
changes
are
necessary
to
OpenSocial
to
bejer
support
CMIS?
• Add
new
“CMIS-‐style”
MediaItems
(or
extensions)
• Formalize
rela@onships
– Create
CMIS
“bindings”
for
OpenSocial
JavaScript?
• Leverage
simple
OS
API
programming
model,
Templates,
Features
• Adds
social
constructs
“for
free”
– OAuth
support
in
Chemistry?