SlideShare a Scribd company logo
1 of 46
Download to read offline
Activity Streams APIs
Lab session
Practice!
Imagine you had to implement a service listening to action from Youtube and
publishing them as events to Connections

Your service
Listen to actions
(through APIs
for instance)

Push events
to Activity Stream

In this lab session, we'll learn more about the Activity Stream APIs through a concrete
scenario of generating Youtube events:
● Basics of fetching Activity Stream data with RESTClient
● Pushing a basic event to your own stream
● Adding some “shiny” (templated title)
● Implementation an OpenSocial gadget displaying video from YouTube
● Using a Gadget as the Embedded Experience popup content
2 |

© 2012 IBM Corporation
Tool being used in this lab session
■
■

Any tool allowing to perform GET and POST HTTP request would do the job
RESTClient – plugin for Firefox
─ https://addons.mozilla.org/en-US/firefox/addon/restclient/
─ The plugin is already installed on your laptops

■

http://qs.renovations.com:9085/EE/ActivityStreamAPIsLab.pdf
3 |

© 2012 IBM Corporation
1. Fetching Activity Stream with RESTClient

4 |

© 2012 IBM Corporation
Fetching Activity Stream with RESTClient
Objectives:
●

Get familiar with RESTClient

●

Fetch Activity Stream feed corresponding to the “I'm Following” view in Homepage

1. Open Firefox on your VM and the RESTClient

2. A new tab opens up with RESTClient

5 |

© 2012 IBM Corporation
Set HTTP Headers on the request

Target of the request
HTTP Method
Body content of the request
(for POST / PUT requests)

Detail of the response to the
request (headers and content
with various formatting options)

6 |

© 2012 IBM Corporation
Fetching Activity Stream with RESTClient

Replace <ctxRoot> with the
hostname of your VM (including
port). Ie:
https://qs.renovations.com:44
4/connections

3. Our aim is to trigger a GET HTTP request to the following URL:
<ctxRoot>/opensocial/basic/rest/activitystreams/@me/@all/@all?rollup=true

<ctxRoot> is the
context root of the
OpenSocial endpoint deployment on
your VM

Authentication scheme
Specify the auth. Scheme
intendend to be used:
●
“basic”: basic
authentication
●
“form”: form based
authentication
●
“oauth”

User id
The stream returns all
events that are related
to the given user.
@me is an alias
representing the
currently authenticated
user.
(“I'm Following” view in
the UI)

Group Id

App id

Events for the group
related to the user id.
@all (wild card) in most
cases.

Events for a given
applications.

@friends – events
from user network
@following – events
from people followed
@self – own events

@all corresponds to
top level view
Application name:
“activities”,
“blogs”, ...

3.1. Set the HTTP method to GET (we're fetching/getting data from the server)

7 |

© 2012 IBM Corporation
Fetching Activity Stream with RESTClient
3.2. Input basic authentication credentials to be used when sending the request
(RESTClient transforms and passes them as request headers under the hood)
Username: ablanks
Password: passw0rd

Once done, RESTClient
adds the (encoded) basic
auth. credentials in
the header field of the request
8 |

© 2012 IBM Corporation
Fetching Activity Stream with RESTClient
4. Examining the response from the server

9 |

© 2012 IBM Corporation
2. Posting a “simple” event to my own stream

10 |

© 2012 IBM Corporation
Posting a “simple” event to my own stream
Objective: Posting an event with static content to my own stream

11 |

© 2012 IBM Corporation
Semantic of an event
“Amy Blanks posted a new video to a channel”
Actor

Verb

Object

Target

■

actor: Entity performing the activity (for instance, “Amy”)

■

verb: Action of the activity (for instance, “post”-ing)

■

object: The primarity object of the action (for instance, “video”)

■

target: Target of the action (for instance, “a channel”)

■

■

Activities/events can be represented in 2 formats:
─ JSON document
─ ATOM document
JSON is the primary format supported by Connections. Atom is only supported
on retrieval – not to post events

12 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
}
}

JSON document

13 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
}
}

Actor

14 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
}
}

Verb

15 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
}
}

Object

Note: objectType can be any
string.
Only the objectType “person”
is recognized by the system
for specific purposes
(templating)

16 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
}
}

Target

17 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
"target": {
"summary": "IBM Channel",
"objectType": "channel",
"id": "youtube:channel:IBM",
"displayName": "IBM YouTube Channel",
"url": "http://www.youtube.com/user/IBM"
},
{
"generator": {
"image": {"url": "http://www.roomsxml.com/RXLFTP/images/youtube-logo.gif"},
"id": "Youtube",
"displayName": "Youtube",
"url": "http://www.youtube.com/"
}
}

Generator field is optional (but
good practice to use): specify
information about the application
generating the event

18 |

© 2012 IBM Corporation
JSON representation of an activity
{
"actor": {
"id": "@me"
},
"verb": "post",
"title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.",
"content": "<b>Access the video by clicking on the thumbnail.</b>
<a href='http://www.youtube.com/watch?v=g8qbmhc59lY'>
<img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a>
",
"object": {
"summary": "IBM Connections 4 Homepage Demo",
"objectType": "video",
"id": "youtube:video:g8qbmhc59lY",
"displayName": "IBM Connections 4 Homepage",
"url": "http://www.youtube.com/watch?v=g8qbmhc59lY"
},
…
{"generator": {
"image": {"url": "http://www.roomsxml.com/RXLFTP/images/youtube-logo.gif"},
...
}
}

Only some fields are rendered
by the Connections Activity
Stream UI – title, content
(HTML), object.summary field
and generator.image field

title
content

Generator
image

Object
(summary)
19 |

© 2012 IBM Corporation
Posting a “simple” event to my own stream
1. Open Firefox and RESTClient
2. Set your credentials (basic authentication) (ablanks / passw0rd)
3. We're going to POST to the following URL (user's own feed):
<ctxRoot>/opensocial/basic/rest/activitystreams/@me/@all/@all

4. The content of the POST is a JSON fragment – we must specify this to the server through
a request header

4.1. Go to “Header → Custom Header”
4.2. Input the following:

Name: “Content-Type”
Value: “application/json”

20 |

© 2012 IBM Corporation
Posting a “simple” event to my own stream
5. Copy-paste the JSON document to the “body” field of RESTClient
● JSON document is located in the file Ex2-PostingSimpleEvent.txt

6. Press “Send” to post the event!
21 |

© 2012 IBM Corporation
3. Adding some “shiny” (title templating)

22 |

© 2012 IBM Corporation
Event title templating
Objectives:
● Use template support to:
●

Enhance the title of the event (business card on person name and links on object)

●

Internationalize the event title string

23 |

© 2012 IBM Corporation
Event title templating
■

Connections allows for the introduction of two kinds of title template
─ Object substitutions - where an appropriate representation of a known object within the event is
substituted into the title.
─ Title template substitutions - these use the above object substitutions, providing a full title that is
appropriately resourced.

■

Object Substitution. Number of substitution values are supported within a
submitted event.title:
─ ${Actor} - this is converted into appropriately marked up HTML which displays the Actors name
and links to a Business Card corresponding to the Actor
─ ${Object} - if this is a person we display as with the Actor above, otherwise the displayName with
a link to the url
─ ${Target} - if this is a person we display as with the Actor above, otherwise the displayName with
a link to the url

■

Title Template Substitution. Particular text appropriate for the locale of the
viewing user is used when retrieving the event
─ ${add}=${Actor} added ${Object}.
─ ${add.target}=${Actor} added ${Object} to ${Target}.
─ .... (refer to API documentation for full list)

24 |

© 2012 IBM Corporation
Event title templating
3.1. Using object substitution to enhance the event title
●

Replace the hardcode title string with the templated string below
Hardcoded string

{
...

"title": "Amy posted the video
IBM Connections 4 Homepage
to the IBM channel.",

...
"title": "${Actor} posted the video ${Object} to the
${Target}.",

...
}

●

Templated string

{

...
}

Post the new event as shown in exercise 2

Note: Ex3-Templating1.txt
contains the JSON document
with template if needed

25 |

© 2012 IBM Corporation
Event title templating
3.2. Using full template substitution for internationalization purposes
Replace the hardcode string with the full templated string

●

Hardcoded string

{
...

Templated string

{
...

"title": "Amy posted the video
IBM Connections 4 Homepage
to the IBM channel.",
...
}
●
●

"title": "${post.target}",
...
}

Post the new event
You can change the browser locale to see the templated string in different
locales through Edit → Preferences → Languages
Note: Ex3-Templating2.txt
contains the JSON document
with template if needed

26 |

© 2012 IBM Corporation
4. Referencing an Embedded Experience Gadget

27 |

© 2012 IBM Corporation
Referencing an EE gadget
Objective:
● Understanding the basics of OpenSocial Gadget
● Registering an OpenSocial Gadget as an Homepage gadget
● Registering an OpenSocial Gadget as an EE gadget

28 |

© 2012 IBM Corporation
OpenSocial Gadgets in Connections
■

OpenSocial Gadget specs used to define extension points across Connections:
─ Homepage Widget page (“My Page”) and side bar
─ Sections of the Global Sharebox
─ EE experience gadgets

■

Administrators can:
─ Register/remove/disable gadgets
─ Gadgets are administrated through:
– Homepage Admin UI
– wsadmin commands

■

opensocial-config.xml offers
additional config options:
─ Enable “developer” mode
─ Advanced security options (feature
access, whitelist, ...)

29 |

© 2012 IBM Corporation
Anatomy of an OpenSocial Gadget

1. <?xml version="1.0" encoding="UTF-8"?>
2. <Module>
3. <ModulePrefs title="Hello EE World"
4.
description="Hello World gadget"
height="400" width="500">
5. </ModulePrefs>
6. <Content type="html" view="default">
7. <![CDATA[
8.
Hello World!
9. ]]></Content>
10. </Module>

1. XML version doc type
2. Root of the gadget definition (a
“module”)
3. Gadget preferences (title,
description, prefered
height/widget, …)
6. Root of the content (HTML
displayed to the end-user)

30 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
Prereqs:
● The Gadget XML descriptor file is accessible from HTTP.
This is already done on your Vms – you can try to access the file from a web
browser at:
http://qs.renovations.com:9085/EE/HelloWorld.xml
● You are logged as a user mapped in the JEE “admin” role in Homepage
application

31 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
■

Mapping a user as admin in Homepage:

1) Go to the WebSphere administration console:
https://qs.renovations.com:9047/admin
2) Log as admin / passw0rd
3) Expend Applications → Application Types → WebSphere enterprise applications

4) In WebSphere enterprise application page, click Homepage (link)

5) Click “Security role to user/group mapping” (under “Detail Properties”)
6) Select the checkbox next to the J2EE role “admin“ and click “Map Users...” button
7) In “Search string” field, type “ablanks” and click “Search”

32 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
8) Select “AmyBlanks” in the select field named “Available” and click the → arrow

9) Click ok to validate (two forms) and then “Save”

10) Logout from WebSphere admin console by clicking the “logout” button
33 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
1. Log in as Amy Blanks in Connections (admin user in Homepage)
2. Click Homepage → Administration
3. Select “Add another widget”

4. Select “Open Social Gadget” as widget type

●

Input name “Hello World” in Widget Title

●

Input url to the xml descriptor of the OpenSocial gadget in “URL Address”
Url is http://qs.renovations.com:9085/EE/HelloWorld.xml
Tick the box “Display on the Widget page”
●

●

●

Leave any other form fields at their default value

●

Click “Save”
34 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
5. Enable the widget by selecting it and clicking “Enable”

35 |

© 2012 IBM Corporation
Registering an OpenSocial Gadget in Connections
6. Go to Homepage → My Page
7. Click Customize (top right)
8. The “Hello World” gadget should be available

36 |

© 2012 IBM Corporation
Gadget specific registration settings
■

Widget Type:
─ Indicate if you are registering a gadget or iWidget

■

Security:
─ Indicate if this is a “restricted”, “trusted” or SSO gadget
─ Although the term is “trusted” trusted gadgets are still
“locked”
─ SSO access has major security implications and breaks
all of the security features of the product

■

UI Integration points:
─ Indicate if this gadget is intended for use in the
ActivityStream or Share Dialog
─ Note: this setting has additional security implications for
“feature access”

■

Server access via Proxy:
─ After the SSO box this is the most important security
feature.
─ For simplicity this setting, can either:
–

Open up all servers

–

Restrict access to servers not in the SSO domain
(Only out side the intranet

–

The custom setting gives the gadget no access.
With this, you must enumerate the server access.
|

© 2012 IBM Corporation
Using an OpenSocial gadget to define the EE
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="YouTube EE" description="YouTube EE" height="300"
width="500">
<Require feature="embedded-experiences"/>
</ModulePrefs>
<Content type="html" view="embedded, default"><![CDATA[
// (omitted) Code to load YouTube JavaScript API code

1

2

<script type="text/javascript">
var context;
function _runVideo(videoId) {
// (omitted) Render the YouTube player for videoId
}

3

function init(){
opensocial.data.getDataContext().registerListener('org.opensocial.ee.context',
function(key) {
context = opensocial.data.getDataContext().getDataSet(key);
var videoId = context['videoId'];
_runVideo(videoId);
}

});

gadgets.util.registerOnLoadHandler(init);
</script>
<div>
<h3>Video Viewer</h3>
<div id="videoDiv">Loading...</div>
</div>
]]></Content>
</Module>

4

1. Require feature: “embeddedexperiences”. Indicates to the
container to load JavaScript
resources/API specific to the EE
view
2. View = “embedded”. If this view is
defined, then it is the view being
rendered in the EE popup.
3. Init(): main function of our gadget.
Function is registered through
gadgets.util.registerOnLoadHandler
so that it is executed by the gadget
container when the gadget is open
4.
opensocial.data.getDataContext().get
DataSet(key) return an json object
(name / value pairs) corresponding to
the “context” defined in the event
(more in next slides)
38 |

© 2012 IBM Corporation
Referencing a EE gadget from the event
■

"openSocial":
{
"embed": {
"gadget": "<url to XML file>",
"context":
{"videoId":"g8qbmhc59lY"}
}
}

It's simply a matter of pointing to the XML file
(HTTP accessible) in
openSocial.embed.gadget field when
POSTing the event
─ Important: For security reason, the referenced
gadget MUST be registered (added to “whitelist”)
through Homepage admin

■

openSocial.embed.context field contains the
“context” in which the OpenSocial Gadget is
rendered
─ This is simply additional data that is passed to the
OpenSocial Gadget when it is opened
─ In the case of the YouTube gadget, we pass the
“videoId”
─ The gadget code can access the context through
opensocial.data.getDataContext().getDataSet(key)
ie:
opensocial.data.getDataContext().getDataSet(key)
['videoId'] returns the “g8qbmhc59lY” in our example
39 |

© 2012 IBM Corporation
Referencing a EE gadget from the event
Some practice...
1. Register the YouTube Gadget through Homepage admininistration UI
● Located on your VM at http://qs.renovations.com:9085/EE/EEYoutube.xml
● Similar as for the Hello World gadget in Homepage earlier. Only difference:
●

Make sure you check “Show for Activity Stream events” (in other words: allow to use the gadget
as EE)

2. Add the openSocial.embed fragment in previous slide to the
JSON event data
3. Post the new event to the stream

Note: Full JSON document
with EE is also available in file
Ex4-ReferencingEE.txt

40 |

© 2012 IBM Corporation
5. Distributing event to multiple users

41 |

© 2012 IBM Corporation
Distributing events to other users
Objective:
● Pushing the event to stream of multiple users

42 |

© 2012 IBM Corporation
Distributing events to other users
●

{

Posting to multiple users is done through the following fragment in the event (“mail box” model):
...

"to":[
{"id":"personId"},
{<... additionalPeople ...>}
]}
●

●

To avoid spam – normal users do not have the right to distribute events to other users steam
Special user (user in “trustedExternalApplication” J2EE role in WidgetContainer app) can deliver to
anyone
Posting to other steams can also be done by substituting the userId placeholder on POST

<ctxRoot>/opensocial/basic/rest/activitystreams/<userId>/@all/@all
●

Some basic rules:
1) To [UserID] where the user in question is the current user
2) To @me which resolves to the same thing
3)

To @public which means the event will appear on everyones discovery tab - but this is
only permitted if the submitting user is also the actor in the event

4)

To [CommunityId] where the current user is a member of that community or the
community is public - again this is only permitted if the submitting user is also the actor in
the event.
43 |

© 2012 IBM Corporation
Distributing events to other users
1. Remember – the event poster must be a user mapped in
trustedExternalApplication role in WidgetContainer application
─ This is already done on your VMs
─ From WAS admin console: Applications → WebSphere enterprise applications →
WidgetContainer → Security role to user/group mapping

44 |

© 2012 IBM Corporation
Distributing events to other user
2. Add the following “to” JSON fragment to the event (after “openSocial”)
"to": [{"id": "0EE5A7FA-3434-9A59-4825-7A7000278DAA"}]

The id is the external id of user Frank Adams on your VMs

Note: Full JSON document is
also available in file Ex5Distributing.txt

3. Post (using url @me/@all/@all/ as previously)
4. You can log in as user Frank Adams with login fadams – passw0rd to see the
event

45 |

© 2012 IBM Corporation
Resources
■

IBM Connections APIs:
─ http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp?
lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&content=catc
ontent&ct=prodDoc

■

OpenSocial APIs in Connections
─ http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp?
lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&res_title=IBM
_Connections_OpenSocial_API&content=pdcontent

■

Opensocial Gadget video tutorial:
─ http://www.youtube.com/watch?v=9gW2YVBrNVA

■

Developing OpenSocial gadgets for IBM Connections 4.0
─ https://www.ibm.com/developerworks/lotus/documentation/osgadgetconnections4/index.html

■

OpenSocial specifications
─ http://docs.opensocial.org/display/OSD/Specs

46 |

© 2012 IBM Corporation

More Related Content

What's hot

HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1James Pearce
 
Thinking in Components
Thinking in ComponentsThinking in Components
Thinking in ComponentsFITC
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery PluginsMarc Grabanski
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
SproutCore GTUG
SproutCore GTUGSproutCore GTUG
SproutCore GTUGsproutit
 
Skb web2.0
Skb web2.0Skb web2.0
Skb web2.0animove
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Webphilogb
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Alberto Perdomo
 
Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...Andreas Bovens
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015Chang W. Doh
 

What's hot (10)

HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 
Thinking in Components
Thinking in ComponentsThinking in Components
Thinking in Components
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery Plugins
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
SproutCore GTUG
SproutCore GTUGSproutCore GTUG
SproutCore GTUG
 
Skb web2.0
Skb web2.0Skb web2.0
Skb web2.0
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Web
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011
 
Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
 

Viewers also liked

AD306 - Turbocharge Your Enterprise Social Network With Analytics
AD306 - Turbocharge Your Enterprise Social Network With AnalyticsAD306 - Turbocharge Your Enterprise Social Network With Analytics
AD306 - Turbocharge Your Enterprise Social Network With AnalyticsVincent Burckhardt
 
TI 1641 - delivering enterprise software at the speed of cloud
TI 1641 - delivering enterprise software at the speed of cloudTI 1641 - delivering enterprise software at the speed of cloud
TI 1641 - delivering enterprise software at the speed of cloudVincent Burckhardt
 
Connections customization lite
Connections customization liteConnections customization lite
Connections customization liteSharon James
 
AD 1656 - Transforming social data into business insight
AD 1656 - Transforming social data into business insightAD 1656 - Transforming social data into business insight
AD 1656 - Transforming social data into business insightVincent Burckhardt
 
MAS202 - Customizing IBM Connections - Downloadable
MAS202 - Customizing IBM Connections - DownloadableMAS202 - Customizing IBM Connections - Downloadable
MAS202 - Customizing IBM Connections - Downloadablepaulbastide
 
Agile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is builtAgile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is builtVincent Burckhardt
 

Viewers also liked (6)

AD306 - Turbocharge Your Enterprise Social Network With Analytics
AD306 - Turbocharge Your Enterprise Social Network With AnalyticsAD306 - Turbocharge Your Enterprise Social Network With Analytics
AD306 - Turbocharge Your Enterprise Social Network With Analytics
 
TI 1641 - delivering enterprise software at the speed of cloud
TI 1641 - delivering enterprise software at the speed of cloudTI 1641 - delivering enterprise software at the speed of cloud
TI 1641 - delivering enterprise software at the speed of cloud
 
Connections customization lite
Connections customization liteConnections customization lite
Connections customization lite
 
AD 1656 - Transforming social data into business insight
AD 1656 - Transforming social data into business insightAD 1656 - Transforming social data into business insight
AD 1656 - Transforming social data into business insight
 
MAS202 - Customizing IBM Connections - Downloadable
MAS202 - Customizing IBM Connections - DownloadableMAS202 - Customizing IBM Connections - Downloadable
MAS202 - Customizing IBM Connections - Downloadable
 
Agile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is builtAgile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is built
 

Similar to IBM Connections Activity Stream APIs - Lab Dec 2012

IBM Connections REST API Klompendans
IBM Connections REST API KlompendansIBM Connections REST API Klompendans
IBM Connections REST API KlompendansHenning Schmidt
 
Building Video Applications with YouTube APIs
Building Video Applications with YouTube APIsBuilding Video Applications with YouTube APIs
Building Video Applications with YouTube APIsJarek Wilkiewicz
 
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...Jarek Wilkiewicz
 
Yahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep DiveYahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep DiveTony Ng
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminarcontest-theta360
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...Wim Selles
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETOzeki Informatics Ltd.
 
Sphinx + robot framework = documentation as result of functional testing
Sphinx + robot framework = documentation as result of functional testingSphinx + robot framework = documentation as result of functional testing
Sphinx + robot framework = documentation as result of functional testingplewicki
 
Rock the ActivityStream API
Rock the ActivityStream APIRock the ActivityStream API
Rock the ActivityStream APILetsConnect
 
Integrate connections and twitter
Integrate connections and twitterIntegrate connections and twitter
Integrate connections and twitterStefano Pogliani
 
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...DataLeader.io
 
The Glass Class - Tutorial 2 - Mirror API
The Glass Class - Tutorial 2 - Mirror APIThe Glass Class - Tutorial 2 - Mirror API
The Glass Class - Tutorial 2 - Mirror APIGun Lee
 
Firefox OS workshop, Colombia
Firefox OS workshop, ColombiaFirefox OS workshop, Colombia
Firefox OS workshop, ColombiaRobert Nyman
 
Google Wave API: Now and Beyond
Google Wave API: Now and BeyondGoogle Wave API: Now and Beyond
Google Wave API: Now and BeyondMarakana Inc.
 
Get your mobile app in production in 3 months: DevOps and Infrastructure
Get your mobile app in production in 3 months: DevOps and InfrastructureGet your mobile app in production in 3 months: DevOps and Infrastructure
Get your mobile app in production in 3 months: DevOps and InfrastructureAckee
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)Binary Studio
 
Progressive Web Apps - Intro & Learnings
Progressive Web Apps - Intro & LearningsProgressive Web Apps - Intro & Learnings
Progressive Web Apps - Intro & LearningsJohannes Weber
 
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Svetlin Nakov
 
Petr Dvořák: Mobilní webové služby pohledem iPhone developera
Petr Dvořák: Mobilní webové služby pohledem iPhone developeraPetr Dvořák: Mobilní webové služby pohledem iPhone developera
Petr Dvořák: Mobilní webové služby pohledem iPhone developeraWebExpo
 

Similar to IBM Connections Activity Stream APIs - Lab Dec 2012 (20)

IBM Connections REST API Klompendans
IBM Connections REST API KlompendansIBM Connections REST API Klompendans
IBM Connections REST API Klompendans
 
Play framework
Play frameworkPlay framework
Play framework
 
Building Video Applications with YouTube APIs
Building Video Applications with YouTube APIsBuilding Video Applications with YouTube APIs
Building Video Applications with YouTube APIs
 
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
YouTube APIs presentation at Facultad de Ciencias, Universidad Nacional Autón...
 
Yahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep DiveYahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep Dive
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NET
 
Sphinx + robot framework = documentation as result of functional testing
Sphinx + robot framework = documentation as result of functional testingSphinx + robot framework = documentation as result of functional testing
Sphinx + robot framework = documentation as result of functional testing
 
Rock the ActivityStream API
Rock the ActivityStream APIRock the ActivityStream API
Rock the ActivityStream API
 
Integrate connections and twitter
Integrate connections and twitterIntegrate connections and twitter
Integrate connections and twitter
 
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
 
The Glass Class - Tutorial 2 - Mirror API
The Glass Class - Tutorial 2 - Mirror APIThe Glass Class - Tutorial 2 - Mirror API
The Glass Class - Tutorial 2 - Mirror API
 
Firefox OS workshop, Colombia
Firefox OS workshop, ColombiaFirefox OS workshop, Colombia
Firefox OS workshop, Colombia
 
Google Wave API: Now and Beyond
Google Wave API: Now and BeyondGoogle Wave API: Now and Beyond
Google Wave API: Now and Beyond
 
Get your mobile app in production in 3 months: DevOps and Infrastructure
Get your mobile app in production in 3 months: DevOps and InfrastructureGet your mobile app in production in 3 months: DevOps and Infrastructure
Get your mobile app in production in 3 months: DevOps and Infrastructure
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 
Progressive Web Apps - Intro & Learnings
Progressive Web Apps - Intro & LearningsProgressive Web Apps - Intro & Learnings
Progressive Web Apps - Intro & Learnings
 
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021
 
Petr Dvořák: Mobilní webové služby pohledem iPhone developera
Petr Dvořák: Mobilní webové služby pohledem iPhone developeraPetr Dvořák: Mobilní webové služby pohledem iPhone developera
Petr Dvořák: Mobilní webové služby pohledem iPhone developera
 

Recently uploaded

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Recently uploaded (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

IBM Connections Activity Stream APIs - Lab Dec 2012

  • 2. Practice! Imagine you had to implement a service listening to action from Youtube and publishing them as events to Connections Your service Listen to actions (through APIs for instance) Push events to Activity Stream In this lab session, we'll learn more about the Activity Stream APIs through a concrete scenario of generating Youtube events: ● Basics of fetching Activity Stream data with RESTClient ● Pushing a basic event to your own stream ● Adding some “shiny” (templated title) ● Implementation an OpenSocial gadget displaying video from YouTube ● Using a Gadget as the Embedded Experience popup content 2 | © 2012 IBM Corporation
  • 3. Tool being used in this lab session ■ ■ Any tool allowing to perform GET and POST HTTP request would do the job RESTClient – plugin for Firefox ─ https://addons.mozilla.org/en-US/firefox/addon/restclient/ ─ The plugin is already installed on your laptops ■ http://qs.renovations.com:9085/EE/ActivityStreamAPIsLab.pdf 3 | © 2012 IBM Corporation
  • 4. 1. Fetching Activity Stream with RESTClient 4 | © 2012 IBM Corporation
  • 5. Fetching Activity Stream with RESTClient Objectives: ● Get familiar with RESTClient ● Fetch Activity Stream feed corresponding to the “I'm Following” view in Homepage 1. Open Firefox on your VM and the RESTClient 2. A new tab opens up with RESTClient 5 | © 2012 IBM Corporation
  • 6. Set HTTP Headers on the request Target of the request HTTP Method Body content of the request (for POST / PUT requests) Detail of the response to the request (headers and content with various formatting options) 6 | © 2012 IBM Corporation
  • 7. Fetching Activity Stream with RESTClient Replace <ctxRoot> with the hostname of your VM (including port). Ie: https://qs.renovations.com:44 4/connections 3. Our aim is to trigger a GET HTTP request to the following URL: <ctxRoot>/opensocial/basic/rest/activitystreams/@me/@all/@all?rollup=true <ctxRoot> is the context root of the OpenSocial endpoint deployment on your VM Authentication scheme Specify the auth. Scheme intendend to be used: ● “basic”: basic authentication ● “form”: form based authentication ● “oauth” User id The stream returns all events that are related to the given user. @me is an alias representing the currently authenticated user. (“I'm Following” view in the UI) Group Id App id Events for the group related to the user id. @all (wild card) in most cases. Events for a given applications. @friends – events from user network @following – events from people followed @self – own events @all corresponds to top level view Application name: “activities”, “blogs”, ... 3.1. Set the HTTP method to GET (we're fetching/getting data from the server) 7 | © 2012 IBM Corporation
  • 8. Fetching Activity Stream with RESTClient 3.2. Input basic authentication credentials to be used when sending the request (RESTClient transforms and passes them as request headers under the hood) Username: ablanks Password: passw0rd Once done, RESTClient adds the (encoded) basic auth. credentials in the header field of the request 8 | © 2012 IBM Corporation
  • 9. Fetching Activity Stream with RESTClient 4. Examining the response from the server 9 | © 2012 IBM Corporation
  • 10. 2. Posting a “simple” event to my own stream 10 | © 2012 IBM Corporation
  • 11. Posting a “simple” event to my own stream Objective: Posting an event with static content to my own stream 11 | © 2012 IBM Corporation
  • 12. Semantic of an event “Amy Blanks posted a new video to a channel” Actor Verb Object Target ■ actor: Entity performing the activity (for instance, “Amy”) ■ verb: Action of the activity (for instance, “post”-ing) ■ object: The primarity object of the action (for instance, “video”) ■ target: Target of the action (for instance, “a channel”) ■ ■ Activities/events can be represented in 2 formats: ─ JSON document ─ ATOM document JSON is the primary format supported by Connections. Atom is only supported on retrieval – not to post events 12 | © 2012 IBM Corporation
  • 13. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" } } JSON document 13 | © 2012 IBM Corporation
  • 14. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" } } Actor 14 | © 2012 IBM Corporation
  • 15. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" } } Verb 15 | © 2012 IBM Corporation
  • 16. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" } } Object Note: objectType can be any string. Only the objectType “person” is recognized by the system for specific purposes (templating) 16 | © 2012 IBM Corporation
  • 17. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" } } Target 17 | © 2012 IBM Corporation
  • 18. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, "target": { "summary": "IBM Channel", "objectType": "channel", "id": "youtube:channel:IBM", "displayName": "IBM YouTube Channel", "url": "http://www.youtube.com/user/IBM" }, { "generator": { "image": {"url": "http://www.roomsxml.com/RXLFTP/images/youtube-logo.gif"}, "id": "Youtube", "displayName": "Youtube", "url": "http://www.youtube.com/" } } Generator field is optional (but good practice to use): specify information about the application generating the event 18 | © 2012 IBM Corporation
  • 19. JSON representation of an activity { "actor": { "id": "@me" }, "verb": "post", "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", "content": "<b>Access the video by clicking on the thumbnail.</b> <a href='http://www.youtube.com/watch?v=g8qbmhc59lY'> <img src='http://img.youtube.com/vi/g8qbmhc59lY/default.jpg'/></a> ", "object": { "summary": "IBM Connections 4 Homepage Demo", "objectType": "video", "id": "youtube:video:g8qbmhc59lY", "displayName": "IBM Connections 4 Homepage", "url": "http://www.youtube.com/watch?v=g8qbmhc59lY" }, … {"generator": { "image": {"url": "http://www.roomsxml.com/RXLFTP/images/youtube-logo.gif"}, ... } } Only some fields are rendered by the Connections Activity Stream UI – title, content (HTML), object.summary field and generator.image field title content Generator image Object (summary) 19 | © 2012 IBM Corporation
  • 20. Posting a “simple” event to my own stream 1. Open Firefox and RESTClient 2. Set your credentials (basic authentication) (ablanks / passw0rd) 3. We're going to POST to the following URL (user's own feed): <ctxRoot>/opensocial/basic/rest/activitystreams/@me/@all/@all 4. The content of the POST is a JSON fragment – we must specify this to the server through a request header 4.1. Go to “Header → Custom Header” 4.2. Input the following: Name: “Content-Type” Value: “application/json” 20 | © 2012 IBM Corporation
  • 21. Posting a “simple” event to my own stream 5. Copy-paste the JSON document to the “body” field of RESTClient ● JSON document is located in the file Ex2-PostingSimpleEvent.txt 6. Press “Send” to post the event! 21 | © 2012 IBM Corporation
  • 22. 3. Adding some “shiny” (title templating) 22 | © 2012 IBM Corporation
  • 23. Event title templating Objectives: ● Use template support to: ● Enhance the title of the event (business card on person name and links on object) ● Internationalize the event title string 23 | © 2012 IBM Corporation
  • 24. Event title templating ■ Connections allows for the introduction of two kinds of title template ─ Object substitutions - where an appropriate representation of a known object within the event is substituted into the title. ─ Title template substitutions - these use the above object substitutions, providing a full title that is appropriately resourced. ■ Object Substitution. Number of substitution values are supported within a submitted event.title: ─ ${Actor} - this is converted into appropriately marked up HTML which displays the Actors name and links to a Business Card corresponding to the Actor ─ ${Object} - if this is a person we display as with the Actor above, otherwise the displayName with a link to the url ─ ${Target} - if this is a person we display as with the Actor above, otherwise the displayName with a link to the url ■ Title Template Substitution. Particular text appropriate for the locale of the viewing user is used when retrieving the event ─ ${add}=${Actor} added ${Object}. ─ ${add.target}=${Actor} added ${Object} to ${Target}. ─ .... (refer to API documentation for full list) 24 | © 2012 IBM Corporation
  • 25. Event title templating 3.1. Using object substitution to enhance the event title ● Replace the hardcode title string with the templated string below Hardcoded string { ... "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", ... "title": "${Actor} posted the video ${Object} to the ${Target}.", ... } ● Templated string { ... } Post the new event as shown in exercise 2 Note: Ex3-Templating1.txt contains the JSON document with template if needed 25 | © 2012 IBM Corporation
  • 26. Event title templating 3.2. Using full template substitution for internationalization purposes Replace the hardcode string with the full templated string ● Hardcoded string { ... Templated string { ... "title": "Amy posted the video IBM Connections 4 Homepage to the IBM channel.", ... } ● ● "title": "${post.target}", ... } Post the new event You can change the browser locale to see the templated string in different locales through Edit → Preferences → Languages Note: Ex3-Templating2.txt contains the JSON document with template if needed 26 | © 2012 IBM Corporation
  • 27. 4. Referencing an Embedded Experience Gadget 27 | © 2012 IBM Corporation
  • 28. Referencing an EE gadget Objective: ● Understanding the basics of OpenSocial Gadget ● Registering an OpenSocial Gadget as an Homepage gadget ● Registering an OpenSocial Gadget as an EE gadget 28 | © 2012 IBM Corporation
  • 29. OpenSocial Gadgets in Connections ■ OpenSocial Gadget specs used to define extension points across Connections: ─ Homepage Widget page (“My Page”) and side bar ─ Sections of the Global Sharebox ─ EE experience gadgets ■ Administrators can: ─ Register/remove/disable gadgets ─ Gadgets are administrated through: – Homepage Admin UI – wsadmin commands ■ opensocial-config.xml offers additional config options: ─ Enable “developer” mode ─ Advanced security options (feature access, whitelist, ...) 29 | © 2012 IBM Corporation
  • 30. Anatomy of an OpenSocial Gadget 1. <?xml version="1.0" encoding="UTF-8"?> 2. <Module> 3. <ModulePrefs title="Hello EE World" 4. description="Hello World gadget" height="400" width="500"> 5. </ModulePrefs> 6. <Content type="html" view="default"> 7. <![CDATA[ 8. Hello World! 9. ]]></Content> 10. </Module> 1. XML version doc type 2. Root of the gadget definition (a “module”) 3. Gadget preferences (title, description, prefered height/widget, …) 6. Root of the content (HTML displayed to the end-user) 30 | © 2012 IBM Corporation
  • 31. Registering an OpenSocial Gadget in Connections Prereqs: ● The Gadget XML descriptor file is accessible from HTTP. This is already done on your Vms – you can try to access the file from a web browser at: http://qs.renovations.com:9085/EE/HelloWorld.xml ● You are logged as a user mapped in the JEE “admin” role in Homepage application 31 | © 2012 IBM Corporation
  • 32. Registering an OpenSocial Gadget in Connections ■ Mapping a user as admin in Homepage: 1) Go to the WebSphere administration console: https://qs.renovations.com:9047/admin 2) Log as admin / passw0rd 3) Expend Applications → Application Types → WebSphere enterprise applications 4) In WebSphere enterprise application page, click Homepage (link) 5) Click “Security role to user/group mapping” (under “Detail Properties”) 6) Select the checkbox next to the J2EE role “admin“ and click “Map Users...” button 7) In “Search string” field, type “ablanks” and click “Search” 32 | © 2012 IBM Corporation
  • 33. Registering an OpenSocial Gadget in Connections 8) Select “AmyBlanks” in the select field named “Available” and click the → arrow 9) Click ok to validate (two forms) and then “Save” 10) Logout from WebSphere admin console by clicking the “logout” button 33 | © 2012 IBM Corporation
  • 34. Registering an OpenSocial Gadget in Connections 1. Log in as Amy Blanks in Connections (admin user in Homepage) 2. Click Homepage → Administration 3. Select “Add another widget” 4. Select “Open Social Gadget” as widget type ● Input name “Hello World” in Widget Title ● Input url to the xml descriptor of the OpenSocial gadget in “URL Address” Url is http://qs.renovations.com:9085/EE/HelloWorld.xml Tick the box “Display on the Widget page” ● ● ● Leave any other form fields at their default value ● Click “Save” 34 | © 2012 IBM Corporation
  • 35. Registering an OpenSocial Gadget in Connections 5. Enable the widget by selecting it and clicking “Enable” 35 | © 2012 IBM Corporation
  • 36. Registering an OpenSocial Gadget in Connections 6. Go to Homepage → My Page 7. Click Customize (top right) 8. The “Hello World” gadget should be available 36 | © 2012 IBM Corporation
  • 37. Gadget specific registration settings ■ Widget Type: ─ Indicate if you are registering a gadget or iWidget ■ Security: ─ Indicate if this is a “restricted”, “trusted” or SSO gadget ─ Although the term is “trusted” trusted gadgets are still “locked” ─ SSO access has major security implications and breaks all of the security features of the product ■ UI Integration points: ─ Indicate if this gadget is intended for use in the ActivityStream or Share Dialog ─ Note: this setting has additional security implications for “feature access” ■ Server access via Proxy: ─ After the SSO box this is the most important security feature. ─ For simplicity this setting, can either: – Open up all servers – Restrict access to servers not in the SSO domain (Only out side the intranet – The custom setting gives the gadget no access. With this, you must enumerate the server access. | © 2012 IBM Corporation
  • 38. Using an OpenSocial gadget to define the EE <?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="YouTube EE" description="YouTube EE" height="300" width="500"> <Require feature="embedded-experiences"/> </ModulePrefs> <Content type="html" view="embedded, default"><![CDATA[ // (omitted) Code to load YouTube JavaScript API code 1 2 <script type="text/javascript"> var context; function _runVideo(videoId) { // (omitted) Render the YouTube player for videoId } 3 function init(){ opensocial.data.getDataContext().registerListener('org.opensocial.ee.context', function(key) { context = opensocial.data.getDataContext().getDataSet(key); var videoId = context['videoId']; _runVideo(videoId); } }); gadgets.util.registerOnLoadHandler(init); </script> <div> <h3>Video Viewer</h3> <div id="videoDiv">Loading...</div> </div> ]]></Content> </Module> 4 1. Require feature: “embeddedexperiences”. Indicates to the container to load JavaScript resources/API specific to the EE view 2. View = “embedded”. If this view is defined, then it is the view being rendered in the EE popup. 3. Init(): main function of our gadget. Function is registered through gadgets.util.registerOnLoadHandler so that it is executed by the gadget container when the gadget is open 4. opensocial.data.getDataContext().get DataSet(key) return an json object (name / value pairs) corresponding to the “context” defined in the event (more in next slides) 38 | © 2012 IBM Corporation
  • 39. Referencing a EE gadget from the event ■ "openSocial": { "embed": { "gadget": "<url to XML file>", "context": {"videoId":"g8qbmhc59lY"} } } It's simply a matter of pointing to the XML file (HTTP accessible) in openSocial.embed.gadget field when POSTing the event ─ Important: For security reason, the referenced gadget MUST be registered (added to “whitelist”) through Homepage admin ■ openSocial.embed.context field contains the “context” in which the OpenSocial Gadget is rendered ─ This is simply additional data that is passed to the OpenSocial Gadget when it is opened ─ In the case of the YouTube gadget, we pass the “videoId” ─ The gadget code can access the context through opensocial.data.getDataContext().getDataSet(key) ie: opensocial.data.getDataContext().getDataSet(key) ['videoId'] returns the “g8qbmhc59lY” in our example 39 | © 2012 IBM Corporation
  • 40. Referencing a EE gadget from the event Some practice... 1. Register the YouTube Gadget through Homepage admininistration UI ● Located on your VM at http://qs.renovations.com:9085/EE/EEYoutube.xml ● Similar as for the Hello World gadget in Homepage earlier. Only difference: ● Make sure you check “Show for Activity Stream events” (in other words: allow to use the gadget as EE) 2. Add the openSocial.embed fragment in previous slide to the JSON event data 3. Post the new event to the stream Note: Full JSON document with EE is also available in file Ex4-ReferencingEE.txt 40 | © 2012 IBM Corporation
  • 41. 5. Distributing event to multiple users 41 | © 2012 IBM Corporation
  • 42. Distributing events to other users Objective: ● Pushing the event to stream of multiple users 42 | © 2012 IBM Corporation
  • 43. Distributing events to other users ● { Posting to multiple users is done through the following fragment in the event (“mail box” model): ... "to":[ {"id":"personId"}, {<... additionalPeople ...>} ]} ● ● To avoid spam – normal users do not have the right to distribute events to other users steam Special user (user in “trustedExternalApplication” J2EE role in WidgetContainer app) can deliver to anyone Posting to other steams can also be done by substituting the userId placeholder on POST <ctxRoot>/opensocial/basic/rest/activitystreams/<userId>/@all/@all ● Some basic rules: 1) To [UserID] where the user in question is the current user 2) To @me which resolves to the same thing 3) To @public which means the event will appear on everyones discovery tab - but this is only permitted if the submitting user is also the actor in the event 4) To [CommunityId] where the current user is a member of that community or the community is public - again this is only permitted if the submitting user is also the actor in the event. 43 | © 2012 IBM Corporation
  • 44. Distributing events to other users 1. Remember – the event poster must be a user mapped in trustedExternalApplication role in WidgetContainer application ─ This is already done on your VMs ─ From WAS admin console: Applications → WebSphere enterprise applications → WidgetContainer → Security role to user/group mapping 44 | © 2012 IBM Corporation
  • 45. Distributing events to other user 2. Add the following “to” JSON fragment to the event (after “openSocial”) "to": [{"id": "0EE5A7FA-3434-9A59-4825-7A7000278DAA"}] The id is the external id of user Frank Adams on your VMs Note: Full JSON document is also available in file Ex5Distributing.txt 3. Post (using url @me/@all/@all/ as previously) 4. You can log in as user Frank Adams with login fadams – passw0rd to see the event 45 | © 2012 IBM Corporation
  • 46. Resources ■ IBM Connections APIs: ─ http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp? lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&content=catc ontent&ct=prodDoc ■ OpenSocial APIs in Connections ─ http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer.xsp? lookupName=IBM+Connections+4.0+API+Documentation#action=openDocument&res_title=IBM _Connections_OpenSocial_API&content=pdcontent ■ Opensocial Gadget video tutorial: ─ http://www.youtube.com/watch?v=9gW2YVBrNVA ■ Developing OpenSocial gadgets for IBM Connections 4.0 ─ https://www.ibm.com/developerworks/lotus/documentation/osgadgetconnections4/index.html ■ OpenSocial specifications ─ http://docs.opensocial.org/display/OSD/Specs 46 | © 2012 IBM Corporation