SlideShare a Scribd company logo
1 of 62
Download to read offline
This presentation by Mikkel Flindt Heisterberg (mh@intravision.dk, http://lekkimworld.com),
OnTime® by IntraVision, is licensed under a Creative Commons Attribution-ShareAlike 2.5 Denmark License
An Introduction to
Working With the
Activity Stream
Mikkel Flindt Heisterberg
Senior Solution Architect / Partner
OnTime® by IntraVision
@me
• Developer for IBM Notes, Domino,
Sametime, Java, DB2, Websphere
Application Server, Web
• Lover of plugins – plugins are cool! –
but slowly becoming the widget guy
• IBM Champion
• Blog: lekkimworld.com
• @lekkim
OnTime® Group Calendar
• Probably the best, most versatile, group calendar
product in the World
• In active development since 1997, sold through
partners throughout the World
• Various user interfaces to suit just about any need
from IBM Notes Standard, to web browsers, mobile
devices, IBM Connections and IBM Notes Basic
• Oh and there’s an API as well...
NOTES INTERFACE
WEB INTERFACE
Team-At-A-Glace (TAAG) SIDEBAR INTERFACE
MOBILE INTERFACES
DISCOVERY INTERFACE
API EXPLORER
Questions? Talk to Lars...
...and then head to
http://www.ontimesuite.com
for a fully functional 30 day
trial license. It takes under 30
minutes to set up.
Want online demos? Head to
http://demo.ontimesuite.com
What is this session about?
“The future of business is social and the activity
stream is the way events and messages are
communicated in the social business. In this session
you'll learn all there is to know about the activity
stream including exactly what it is and how to
interact with it using your favorite development
environment whether that be JavaScript, XPages,
Java or even the plain vanilla HTTP based REST API.
This session is for you if you want to start working
the Activity Stream.”
The activity stream concept
Activity stream was added in IBM Connections v. 4.0.
“An activity stream is a list of recent activities performed
by an individual, typically on a single website. For
example, Facebook's News Feed is an activity stream.
Since the introduction of the News Feed on September 6,
2006 other major websites have introduced similar
implementations for their own users. Since the
proliferation of activity streams on websites, there have
been calls to standardize the format so that websites
could interact with a stream provided by another
website.”
What is the Activity Stream
• River of news – it’s like water flowing by you
• Notifications about ”stuff” happening in (other) systems – we
refer to these notifications as entries
• Entries may be saved for future reference and entries may be
actionable i.e. indicated that it must be acted upon
• Typically you decide what goes into your stream
• A replacement for email notifications (although you
can have those too...)
• Standards based – like – meaning – IBM took the
standard and added IBM Connections specific
stuff to it
What is the Activity Stream NOT
• A new inbox – doesn’t replace email
• A perpeptual data store – entries are deleted
based on a server defined purge interval
(default is 30 days) unless saved or actionable
• Meant as a content repository
• Something that implies that you must read it
all – it’s notifications – treat it as such...
Demo
• Let’s look at the activity stream in IBM
Connections
• See options for filtering (saved/actionable)
Demo safety slide
No content stored in the stream
• HTTP is much more than what a web browser reveals
• The request
– has a method (GET, POST, PUT, DELETE)
– may have headers that describe the request such as a
Content-Type (text/html), cookies and authentication
information.
– may have a body data
• The response
– has a return code (200 = OK, 301 = Moved, 404 = Not found)
– may carry body data
– may have headers that describe the response (e.g. Content-
Type, charset and new location)
REST API’s 101 (1)
• You will mainly use the POST and PUT methods to send JSON data
(Content-Type: application/json) to the API
• JSON is super simple key/value data format. It has simple datatypes
(strings, numbers, booleans), objects and arrays
{
”email”: ”mh@intravision.dk”,
”niceGuy”: true,
”age”: 36,
”name”: {
”first”: ”Mikkel Flindt”,
”last”: ” Heisterberg”
},
”Lotuspheres”: [2006, 2007, 2008, 2009, 2010, 2011, 2012],
”IBMConnects”: [2013]
}
REST API’s 101 (2)
• HTTP is pure text and easily done using
telnet but there are cool tools to make it
easier:
– RESTClient in Firefox
– Advanced REST Client in Chrome
– cURL if you’re a command line guy/gal
• Recommend RESTClient in Firefox as the
Chrome equivalent sends an Origin header
that doesn’t agree with IBM Connections
• Charles Web Proxy,
http://www.charlesproxy.com
REST API’s 101 (3)
How many streams are there?
• In my opinion it makes most sense to not
consider the activity stream as one single
stream
• Instead think that
– Each user has his/her own (@me)
– There is a public stream (@public)
– A community may have a stream if the widget has
been added by a community owner – if there’s no
stream for a community posting to it will return a
”403 Forbidden”
Stream URL components
https://<host>/connections/opensocial/<auth>/rest/activitystreams
/<user ID>/<group ID>/<application ID>/<activity ID>
Component Meaning
<auth> (optional) If using form based authentication leave this component
out. Otherwise options are anonymos, basic, oauth (last option not
covered in this presentation).
<user ID> The user whose stream you’re addressing – use @me for current
users stream, @public for public stream or a community ID for the
stream in a community.
<group ID> The group of entries you’re addressing – use @all for all posts or
options for special meaning such as @saved, @actions etc. Refer for
InfoCenter and resources slide for more.
<application ID> When retrieving entries this refers to the application (or ”generator”)
that created the entry. All the IBM Connections app names can be
used (profiles, blogs, wikis etc.) plus custom ones (e.g. ontimegc).
@all used for all applications.
<activity ID> Used to reference a specific event e.g. for updating saved status.
1. /activitystreams/@me/@all
List my (current users) entries
2. /activitystreams/@public/@all
List public stream entries
3. /activitystreams/@me/@actions
List my actionable events
4. /activitystreams/@me/@saved/blogs
List my saved events from blogs
5. /@me/@all/@all/bdb562fb-b145-43dc...
Work with entry from my stream based on ID
Stream URL Examples
* All URLs above start with https://<host>/connections/opensocial/<auth>/rest
Also used
when creating
new entries
(e.g. POSTing)
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it”
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it”
The person doing the posting
is called the actor and can be
a specific user ID but usually
the current user (@me)
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it”What the person does is called
the verb and there’s a long list of
predefined ones such as post,
update, create...
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it” The object in question is called
the object and can be anything
that represents the target ”thing”
i.e. file, note, meeting...
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it”The system the user worked
on is called the target and
can be any system you need
to refer to
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a note to IBM Connections and you
should act on it”
IBM Connections supports some
special properties for entries
such as actionable and saved to
allow users to work with entries
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a file to IBM Connections and you
should act on it”
{
"actor": {"id": "@me"},
"verb": "post",
"title": "Some entry title",
"updated": "2013-05-17T12:00:00.000Z",
"object": {
"title": "Some object title",
"objectType": "note",
"id": "1234567890-1234567890-1234567890"
}
}
Anatomy of a stream entry
• A stream entry reads like ”the current user
posted a file to IBM Connections and you
should act on it”
{
"actor": {"id": "@me"},
"verb": ”create",
"title": ”Sales proposal for Rockets Inc.",
"updated": "2013-05-17T12:00:00.000Z",
"object": {
"title": "Sales proposal for Rockets Inc.",
"objectType": ”proposal",
"id": "1234567890-1234567890-1234567890"
},
”target”: {
”displayName”: ”Acme Corp. CRM”,
”url”: ”https://crm.example.com”
}
}
IBM Connections is the implied
default target but you can
specify your own target in the
entry
POST /connections/opensocial/basic/rest/activitystreams/@me/@all
Host: social.example.com
Content-Type: application/json
Content-Length: xyz
Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"verb": "post",
"title": "Some entry title",
"updated": "2013-05-17T12:00:00.000Z",
"object": {
"title": "Some object title",
"objectType": "note",
"id": "1234567890-1234567890-1234567890"
}
}
* Smallest entry you can/should post to the stream
Posting an entry* to the stream
Demo
• RESTClient in Firefox
• Easily work with feeds, add authentication,
headers etc.
• Use Private
Browsing
mode
Demo safety slide
Deleting from the stream
• In short you can’t – up to IBM Connections v. 4.5
you cannot delete from the activity stream –
you’ll just get an 403 Forbidden back
• There is some light at the end of the tunnel though –
this directly from the developers
at IBM: “We are however adding
'propagateDelete' at the
moment, which deletes all events
related to a given object on
receipt of a delete event (if so
specified). This will be protected by
a trusted role.”
Action required!
GET /connections/opensocial/basic/rest/activitystreams/@me/@actions
Host: social.example.com
Authorization: Basic xyz123
PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a
Host: social.example.com
Content-Type: application/json
Content-Length: xyz
Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"id": "de325123-e269-4a33-b62a",
"connections": {
"actionable": false
}
}
Mark/unmark as actionable
Response
{"entry": {
"connections": {
"actionable": "false"
},
"id": "unmark actionable:"
}}
Save for later
GET /connections/opensocial/basic/rest/activitystreams/@me/@saved
Host: social.example.com
Authorization: Basic xyz123
PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a
Host: social.example.com
Content-Type: application/json
Content-Length: xyz
Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"id": "de325123-e269-4a33-b62a",
"connections": {
”saved": false
}
}
Mark/unmark saved
Response
{"entry": {
"connections": {
“saved": "false"
},
"id": "unmark saved:“
}}
Rolling it up
• Rollup is telling the stream that an
post/update relates to the same ”thing”
• Used to avoid cluttering up the user
interface
POST /connections/opensocial/basic/rest/activitystreams/@me/@all
Host: social.example.com
Content-Type: application/json
Content-Length: xyz
Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"verb": "post",
"title": "Some entry title",
"updated": "2013-05-17T12:00:00.000Z",
"object": {"title": "Some object title”, "objectType": "note",
"id": "1234567890-1234567890-1234567890"
},
”connections”: {
”rollupid”: ”1234567890-1234567890-1234567890”
}
}
Rolling it up
Templates
• Two main reasons for looking at templates
– Internationalization (i18n) / translation
– Getting a standard representation in the UI
• Two types of templates
– Object Substitution replaces a reference with nice
markup – an example is replacing the actor with a
HTML reference using the business card
– Title Template Substitution – uses object
substitutions it makes standard titles
Templates
• Object Substitution
– ${Actor} - this is converted into appropriately marked up HTML which
displays the Actors name and links to a Business Card
– ${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
– ${created} = ${Actor} created ${Object}
– ${create.target} = ${Actor} created ${Object} in ${Target}
POST /connections/opensocial/basic/rest/activitystreams/@me/@all
Host: social.example.com
Content-Type: application/json
Authorization: Basic xyz123
{
"generator": {"id": "ontimegc”},
"actor": {"id": ”@me"},
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Z Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
}
}
Using templates
Embedded Experiences
• EE works a litte different in e-mail
and in the activity stream
• E-mail
– Traditional (SMTP) e-mail is using
Multipurpose Internet Mail Extension
(MIME)
– EE’s adds an additional ”MIME part” –
clients in the know will show content
based on this data if possible and
allowed by policy
• Activity stream
– Activity stream delivery model is a bit different than in e-mail as we already
have a structured payload
– Application sending the entry adds an openSocial.embed object to the entry
with link to the gadget required for rendering the EE and context info
{
”actor”: {”id”: ”@me”},
...
...
"openSocial": {
"embed": {
"gadget": "http://ee.example.com/mygadget.xml",
"context": {"id":"12345"}
}
}
}
Embedded Experiences
• By default you may only post entries to your own
activity stream
• Sending to others can be considered as spam
• As with standards there are multiple ways of doing it
using either
– OpenSocial (openSocial: {deliverTo: []})
– Activitystrea.ms (to: [])
– Just use the second one...
• To send to another users stream
you need to either be him/her
or be a trusted application (more
information later...)
Posting to other users stream
{
"generator": {"id": "ontimegc”},
"actor": {"id": "@me"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project X Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890MN”
},
"connections": {
"rollupid": "123456789012345678901234567890MN",
}
}
Posting to other user
{
"generator": {"id": "ontimegc”},
"actor": {"id": "A7E718F4-3040-2A00-C125"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Y Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
},
"connections": {
"rollupid": "123456789012345678901234567890OP”
}
}
Posting as other user
{
"generator": {"id": "ontimegc”},
"actor": {"id": "1E7F44DD-9C20-842A-C125"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Z Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
},
"connections": {
"rollupid": "123456789012345678901234567890OP”
}
}
Posting to & as other user
How it looks in the UI
Registering generators
wsadmin>execfile("newsAdmin.py")
wsadmin>NewsActivityStreamService.listApplicationRegistrations()
{wikis=wikis, communities=communities, general=General, profiles=profiles,
activities=activities, homepage=homepage, blogs=blogs, forums=forums,
files=files, dogear=dogear, demoapp=Demo Application, kudos=Kudos}
wsadmin>NewsActivityStreamService.registerApplication("ontimegc",
"OnTime Group Calendar", "http://www.ontimesuite.com", "",
”http://inside.intravision.dk/images/ontime.gif”, ””, ”OnTime Group
Calendar”, ”true”)
wsadmin>
After first use of a generator it can be referenced by ID. Purpose of registering
is that users may filter by it in the UI.
Benefit of registering generator
Granting access (1)
• Permission to send to other users are granted
using the trustedExternalApplication role
• Granted in the WidgetContainer application
using wsadmin or the Websphere Application
Server Integrated Solutions Console – the
latter is easiest
Granting access (2)
Granting access (3)
Granting access (4)
Granting access (5)
Summary
• There’s no one stream - @me vs. @public vs. community
• Be patient – wrapping your head around these concepts can be
hard in the beginning
• Remember that the data isn’t stored in the stream but rather is
pointed to from the stream
• Entries are automatically purged from the stream unless saved or
marked actionable
• You cannot delete from the stream (yet)
• Accessed using REST API URL based on user, group, application and
activity ID
• When working with the RESTClient in Firefox use ”Private Browsing”
mode as credentials used and cookies returned in one tab doesn’t
leak to other ”Private Browsing” tabs.
• Pretty easy to use once you grasp the concepts
Resources
• Activity Streams in the OpenSocial specification, http://opensocial-
resources.googlecode.com/svn/spec/trunk/Social-API-
Server.xml#ActivityStreams-Service
• AppDev wiki, http://www-10.lotus.com/ldd/appdevwiki.nsf
• IBM Connections Activity Stream Integration (AD104 from IBM Connect
2013), http://www.slideshare.net/brianog/ad104-ibm-connections-
actiivtystream-integration
• Activity Stream hands-on lab, http://www-
10.lotus.com/ldd/appdevwiki.nsf/xsp/.ibmmodres/domino/OpenAttachm
ent/ldd/appdevwiki.nsf/82567C415DF5243185257AEE00626F82/attach/5-
sdk-workshop-activitystreams.pdf
Tools of the trade
• RESTclient in Firefox (recommended),
https://addons.mozilla.org/da/firefox/addon/r
estclient/
• Advanced REST client in Chrome (issues with
POSTs), http://bit.ly/advancedrest
• cURL (for any imaginable operating system),
http://curl.haxx.se/
• Charles Web Proxy,
http://www.charlesproxy.com
Q&A
• But?, How?, Doesn't that
mean...
• Give it to me! (or come talk
to me after the session or
find me in the hallways...)
• Twitter: @lekkim
• Email: mh@intravision.dk
• Blog: http://lekkimworld.com

More Related Content

What's hot

In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017
In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017
In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017BookNet Canada
 
OpenURL Linking: the Academic Library Experience
OpenURL Linking: the Academic Library ExperienceOpenURL Linking: the Academic Library Experience
OpenURL Linking: the Academic Library ExperienceJohn McDonald
 
Neo4j Stored Procedure Training Part 1
Neo4j Stored Procedure Training Part 1Neo4j Stored Procedure Training Part 1
Neo4j Stored Procedure Training Part 1Max De Marzi
 
Parsing strange v4
Parsing strange v4Parsing strange v4
Parsing strange v4Hal Stern
 
Dev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBDev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBMongoDB
 
Week 1 - Interactive News Editing and Producing
Week 1 - Interactive News Editing and ProducingWeek 1 - Interactive News Editing and Producing
Week 1 - Interactive News Editing and Producingkurtgessler
 
Parsing strange v4
Parsing strange v4Parsing strange v4
Parsing strange v4Hal Stern
 
ICONUK 2018 - Do You Wanna Build a Chatbot
ICONUK 2018 - Do You Wanna Build a ChatbotICONUK 2018 - Do You Wanna Build a Chatbot
ICONUK 2018 - Do You Wanna Build a ChatbotPaul Withers
 
Sharing OERs via Jorum
Sharing OERs via JorumSharing OERs via Jorum
Sharing OERs via JorumSiobhán Burke
 
Eba ppt rajesh
Eba ppt rajeshEba ppt rajesh
Eba ppt rajeshRajeshP153
 
Parsing strange v3
Parsing strange v3Parsing strange v3
Parsing strange v3Hal Stern
 
Rest api design by george reese
Rest api design by george reeseRest api design by george reese
Rest api design by george reesebuildacloud
 
2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten
2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten
2018 09-03 aOS Aachen - SharePoint demystified - Thomas VochtenaOS Community
 

What's hot (13)

In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017
In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017
In the Trenches with Accessible EPUB - Charles LaPierre - ebookcraft 2017
 
OpenURL Linking: the Academic Library Experience
OpenURL Linking: the Academic Library ExperienceOpenURL Linking: the Academic Library Experience
OpenURL Linking: the Academic Library Experience
 
Neo4j Stored Procedure Training Part 1
Neo4j Stored Procedure Training Part 1Neo4j Stored Procedure Training Part 1
Neo4j Stored Procedure Training Part 1
 
Parsing strange v4
Parsing strange v4Parsing strange v4
Parsing strange v4
 
Dev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBDev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDB
 
Week 1 - Interactive News Editing and Producing
Week 1 - Interactive News Editing and ProducingWeek 1 - Interactive News Editing and Producing
Week 1 - Interactive News Editing and Producing
 
Parsing strange v4
Parsing strange v4Parsing strange v4
Parsing strange v4
 
ICONUK 2018 - Do You Wanna Build a Chatbot
ICONUK 2018 - Do You Wanna Build a ChatbotICONUK 2018 - Do You Wanna Build a Chatbot
ICONUK 2018 - Do You Wanna Build a Chatbot
 
Sharing OERs via Jorum
Sharing OERs via JorumSharing OERs via Jorum
Sharing OERs via Jorum
 
Eba ppt rajesh
Eba ppt rajeshEba ppt rajesh
Eba ppt rajesh
 
Parsing strange v3
Parsing strange v3Parsing strange v3
Parsing strange v3
 
Rest api design by george reese
Rest api design by george reeseRest api design by george reese
Rest api design by george reese
 
2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten
2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten
2018 09-03 aOS Aachen - SharePoint demystified - Thomas Vochten
 

Viewers also liked

We4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT Group
 
Rock the activity stream api
Rock the activity stream api Rock the activity stream api
Rock the activity stream api Wannes Rams
 
Afci e reputation & com interne 12052011
Afci e reputation & com interne 12052011Afci e reputation & com interne 12052011
Afci e reputation & com interne 12052011Pierre Milcent
 
Whats New in IBM Sametime (We4IT)
Whats New in IBM Sametime (We4IT)Whats New in IBM Sametime (We4IT)
Whats New in IBM Sametime (We4IT)We4IT Group
 
Martin Carnoy PLenary comment by Elsbeth
Martin Carnoy PLenary comment by ElsbethMartin Carnoy PLenary comment by Elsbeth
Martin Carnoy PLenary comment by ElsbethMaggie Verster
 
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...John Head
 
Automated Application Tests For Lotus Notes Uklug 2009
Automated Application Tests For Lotus Notes Uklug 2009Automated Application Tests For Lotus Notes Uklug 2009
Automated Application Tests For Lotus Notes Uklug 2009maxistar
 
The XSP Starter Kit (We4IT)
The XSP Starter Kit (We4IT)The XSP Starter Kit (We4IT)
The XSP Starter Kit (We4IT)We4IT Group
 
Collaboration & reseau social pour esce 2012
Collaboration & reseau social pour esce 2012Collaboration & reseau social pour esce 2012
Collaboration & reseau social pour esce 2012Pierre Milcent
 
School libraries Vital for teaching & learning?
School librariesVital for teaching & learning?School librariesVital for teaching & learning?
School libraries Vital for teaching & learning?Maggie Verster
 
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed Brill
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed BrillAusLUG - Australian Lotus User Group - "Social Business at Work" by Ed Brill
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed BrillEd Brill
 
Lotus Domino 8.5 Client Comparison
Lotus Domino 8.5 Client ComparisonLotus Domino 8.5 Client Comparison
Lotus Domino 8.5 Client ComparisonEd Brill
 
Goldsmiths
GoldsmithsGoldsmiths
Goldsmithsdrjulia
 
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDI
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDIBeyond the Basics: An Overview of User LifeCycle and Managing Users with TDI
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDIStuart McIntyre
 
AD201 - IBM Domino Application Development Today And Tomorrow
AD201 - IBM Domino Application Development Today And TomorrowAD201 - IBM Domino Application Development Today And Tomorrow
AD201 - IBM Domino Application Development Today And Tomorrowpjanzen11
 
ICON UK 2014 - Look mum, no passwords!
ICON UK 2014 - Look mum, no passwords!ICON UK 2014 - Look mum, no passwords!
ICON UK 2014 - Look mum, no passwords!Martin Leyrer
 

Viewers also liked (20)

We4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application development
 
Rock the activity stream api
Rock the activity stream api Rock the activity stream api
Rock the activity stream api
 
Afci e reputation & com interne 12052011
Afci e reputation & com interne 12052011Afci e reputation & com interne 12052011
Afci e reputation & com interne 12052011
 
Billetter info
Billetter infoBilletter info
Billetter info
 
Librarians and blogs
Librarians and blogsLibrarians and blogs
Librarians and blogs
 
Whats New in IBM Sametime (We4IT)
Whats New in IBM Sametime (We4IT)Whats New in IBM Sametime (We4IT)
Whats New in IBM Sametime (We4IT)
 
Martin Carnoy PLenary comment by Elsbeth
Martin Carnoy PLenary comment by ElsbethMartin Carnoy PLenary comment by Elsbeth
Martin Carnoy PLenary comment by Elsbeth
 
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...
IBM Lotus Notes/Domino Application Development Competitive Advantage : The So...
 
Automated Application Tests For Lotus Notes Uklug 2009
Automated Application Tests For Lotus Notes Uklug 2009Automated Application Tests For Lotus Notes Uklug 2009
Automated Application Tests For Lotus Notes Uklug 2009
 
The XSP Starter Kit (We4IT)
The XSP Starter Kit (We4IT)The XSP Starter Kit (We4IT)
The XSP Starter Kit (We4IT)
 
Collaboration & reseau social pour esce 2012
Collaboration & reseau social pour esce 2012Collaboration & reseau social pour esce 2012
Collaboration & reseau social pour esce 2012
 
IBM Connections 5 Gæstemodel
IBM Connections 5 GæstemodelIBM Connections 5 Gæstemodel
IBM Connections 5 Gæstemodel
 
School libraries Vital for teaching & learning?
School librariesVital for teaching & learning?School librariesVital for teaching & learning?
School libraries Vital for teaching & learning?
 
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed Brill
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed BrillAusLUG - Australian Lotus User Group - "Social Business at Work" by Ed Brill
AusLUG - Australian Lotus User Group - "Social Business at Work" by Ed Brill
 
Preso Nettskap
Preso NettskapPreso Nettskap
Preso Nettskap
 
Lotus Domino 8.5 Client Comparison
Lotus Domino 8.5 Client ComparisonLotus Domino 8.5 Client Comparison
Lotus Domino 8.5 Client Comparison
 
Goldsmiths
GoldsmithsGoldsmiths
Goldsmiths
 
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDI
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDIBeyond the Basics: An Overview of User LifeCycle and Managing Users with TDI
Beyond the Basics: An Overview of User LifeCycle and Managing Users with TDI
 
AD201 - IBM Domino Application Development Today And Tomorrow
AD201 - IBM Domino Application Development Today And TomorrowAD201 - IBM Domino Application Development Today And Tomorrow
AD201 - IBM Domino Application Development Today And Tomorrow
 
ICON UK 2014 - Look mum, no passwords!
ICON UK 2014 - Look mum, no passwords!ICON UK 2014 - Look mum, no passwords!
ICON UK 2014 - Look mum, no passwords!
 

Similar to Mikkel Heisterberg - An introduction to developing for the Activity Stream

BP301 - An introduction to working with the activity stream
BP301 - An introduction to working with the activity streamBP301 - An introduction to working with the activity stream
BP301 - An introduction to working with the activity streamMikkel Flindt Heisterberg
 
There’s an API for that! Why and how to build on the IBM Connections PLATFORM
There’s an API for that! Why and how to build on the IBM Connections PLATFORMThere’s an API for that! Why and how to build on the IBM Connections PLATFORM
There’s an API for that! Why and how to build on the IBM Connections PLATFORMMikkel Flindt Heisterberg
 
1309 leveraging social business data visualizing the connections org structure
1309  leveraging social business data visualizing the connections org structure1309  leveraging social business data visualizing the connections org structure
1309 leveraging social business data visualizing the connections org structureMatthew Milza
 
Social Connections VI Prague - An introduction to ibm connections as an appde...
Social Connections VI Prague - An introduction to ibm connections as an appde...Social Connections VI Prague - An introduction to ibm connections as an appde...
Social Connections VI Prague - An introduction to ibm connections as an appde...Mikkel Flindt Heisterberg
 
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data AnalyticsAmazon Web Services
 
Serverless by Example: Building a Real-Time Chat System
Serverless by Example: Building a Real-Time Chat SystemServerless by Example: Building a Real-Time Chat System
Serverless by Example: Building a Real-Time Chat SystemAmazon Web Services
 
IBM Connections REST API Klompendans
IBM Connections REST API KlompendansIBM Connections REST API Klompendans
IBM Connections REST API KlompendansHenning Schmidt
 
Scraping talk public
Scraping talk publicScraping talk public
Scraping talk publicNesta
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopVarun Ganesh
 
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoTAmazon Web Services
 
Data encoding and Metadata for Streams
Data encoding and Metadata for StreamsData encoding and Metadata for Streams
Data encoding and Metadata for Streamsunivalence
 
Social Graphs and Semantic Analytics
Social Graphs and Semantic AnalyticsSocial Graphs and Semantic Analytics
Social Graphs and Semantic AnalyticsColin Bell
 
Getting started with titanium
Getting started with titaniumGetting started with titanium
Getting started with titaniumNaga Harish M
 
Tackling a 1 billion member social network
Tackling a 1 billion member social networkTackling a 1 billion member social network
Tackling a 1 billion member social networkArtur Bańkowski
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web appsyoavrubin
 
Introduction to Web Programming - first course
Introduction to Web Programming - first courseIntroduction to Web Programming - first course
Introduction to Web Programming - first courseVlad Posea
 
Beyond Social – Tailor SharePoint 2013 Social features according to your need...
Beyond Social – Tailor SharePoint 2013 Social features according to your need...Beyond Social – Tailor SharePoint 2013 Social features according to your need...
Beyond Social – Tailor SharePoint 2013 Social features according to your need...Adis Jugo
 

Similar to Mikkel Heisterberg - An introduction to developing for the Activity Stream (20)

BP301 - An introduction to working with the activity stream
BP301 - An introduction to working with the activity streamBP301 - An introduction to working with the activity stream
BP301 - An introduction to working with the activity stream
 
There’s an API for that! Why and how to build on the IBM Connections PLATFORM
There’s an API for that! Why and how to build on the IBM Connections PLATFORMThere’s an API for that! Why and how to build on the IBM Connections PLATFORM
There’s an API for that! Why and how to build on the IBM Connections PLATFORM
 
1309 leveraging social business data visualizing the connections org structure
1309  leveraging social business data visualizing the connections org structure1309  leveraging social business data visualizing the connections org structure
1309 leveraging social business data visualizing the connections org structure
 
Social Connections VI Prague - An introduction to ibm connections as an appde...
Social Connections VI Prague - An introduction to ibm connections as an appde...Social Connections VI Prague - An introduction to ibm connections as an appde...
Social Connections VI Prague - An introduction to ibm connections as an appde...
 
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
Serverless by Example: Building a Real-Time Chat System
Serverless by Example: Building a Real-Time Chat SystemServerless by Example: Building a Real-Time Chat System
Serverless by Example: Building a Real-Time Chat System
 
IBM Connections REST API Klompendans
IBM Connections REST API KlompendansIBM Connections REST API Klompendans
IBM Connections REST API Klompendans
 
Scraping talk public
Scraping talk publicScraping talk public
Scraping talk public
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPop
 
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT
(MBL305) You Have Data from the Devices, Now What?: Getting the Value of the IoT
 
Data encoding and Metadata for Streams
Data encoding and Metadata for StreamsData encoding and Metadata for Streams
Data encoding and Metadata for Streams
 
Social Graphs and Semantic Analytics
Social Graphs and Semantic AnalyticsSocial Graphs and Semantic Analytics
Social Graphs and Semantic Analytics
 
Unit 10
Unit 10Unit 10
Unit 10
 
Getting started with titanium
Getting started with titaniumGetting started with titanium
Getting started with titanium
 
Tackling a 1 billion member social network
Tackling a 1 billion member social networkTackling a 1 billion member social network
Tackling a 1 billion member social network
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web apps
 
Log Analysis At Scale
Log Analysis At ScaleLog Analysis At Scale
Log Analysis At Scale
 
Introduction to Web Programming - first course
Introduction to Web Programming - first courseIntroduction to Web Programming - first course
Introduction to Web Programming - first course
 
Beyond Social – Tailor SharePoint 2013 Social features according to your need...
Beyond Social – Tailor SharePoint 2013 Social features according to your need...Beyond Social – Tailor SharePoint 2013 Social features according to your need...
Beyond Social – Tailor SharePoint 2013 Social features according to your need...
 

More from LetsConnect

Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6LetsConnect
 
Oh $h@# - How to deal with emotional outbursts and hate in social situations
Oh $h@# - How to deal with emotional outbursts and hate in social situationsOh $h@# - How to deal with emotional outbursts and hate in social situations
Oh $h@# - How to deal with emotional outbursts and hate in social situationsLetsConnect
 
It is not About Connections vs Office 365 - You can have the best of the both...
It is not About Connections vs Office 365 - You can have the best of the both...It is not About Connections vs Office 365 - You can have the best of the both...
It is not About Connections vs Office 365 - You can have the best of the both...LetsConnect
 
Using ibm connections to enhance university courses
Using ibm connections to enhance university coursesUsing ibm connections to enhance university courses
Using ibm connections to enhance university coursesLetsConnect
 
IBM Connections 6 Component Pack
IBM Connections 6 Component PackIBM Connections 6 Component Pack
IBM Connections 6 Component PackLetsConnect
 
IBM Connections 6.0 CR3 New Features
IBM Connections 6.0 CR3 New FeaturesIBM Connections 6.0 CR3 New Features
IBM Connections 6.0 CR3 New FeaturesLetsConnect
 
10 years of IBM Connections
10 years of IBM Connections10 years of IBM Connections
10 years of IBM ConnectionsLetsConnect
 
IBM Collaboration Framework in action: Customer success stories
IBM Collaboration Framework in action: Customer success storiesIBM Collaboration Framework in action: Customer success stories
IBM Collaboration Framework in action: Customer success storiesLetsConnect
 
Design for the Digital Workspace
Design for the Digital WorkspaceDesign for the Digital Workspace
Design for the Digital WorkspaceLetsConnect
 
New Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
New Ways to Deliver Business Outcomes with INtelligent Workstream CollaborationNew Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
New Ways to Deliver Business Outcomes with INtelligent Workstream CollaborationLetsConnect
 
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...LetsConnect
 
There is nothing more practical than a good theory
There is nothing more practical than a good theoryThere is nothing more practical than a good theory
There is nothing more practical than a good theoryLetsConnect
 
Kubernetes Basics for Connections Admins
Kubernetes Basics for Connections AdminsKubernetes Basics for Connections Admins
Kubernetes Basics for Connections AdminsLetsConnect
 
Intelligent Collaboration driving Digital Transformation
Intelligent Collaboration driving Digital TransformationIntelligent Collaboration driving Digital Transformation
Intelligent Collaboration driving Digital TransformationLetsConnect
 
Developing IBM Connections Community Apps using Domino
Developing IBM Connections Community Apps using DominoDeveloping IBM Connections Community Apps using Domino
Developing IBM Connections Community Apps using DominoLetsConnect
 
IBM Connections - Have it YOUR Way!
IBM Connections - Have it YOUR Way!IBM Connections - Have it YOUR Way!
IBM Connections - Have it YOUR Way!LetsConnect
 
You Get What You Give
You Get What You GiveYou Get What You Give
You Get What You GiveLetsConnect
 
Building Custom ibm Watson Workspace Templates to make you and your team more...
Building Custom ibm Watson Workspace Templates to make you and your team more...Building Custom ibm Watson Workspace Templates to make you and your team more...
Building Custom ibm Watson Workspace Templates to make you and your team more...LetsConnect
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceLetsConnect
 
Communities as the fundament of social learning
Communities as the fundament of social learningCommunities as the fundament of social learning
Communities as the fundament of social learningLetsConnect
 

More from LetsConnect (20)

Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6Installing Component Pack 6.0.0.6
Installing Component Pack 6.0.0.6
 
Oh $h@# - How to deal with emotional outbursts and hate in social situations
Oh $h@# - How to deal with emotional outbursts and hate in social situationsOh $h@# - How to deal with emotional outbursts and hate in social situations
Oh $h@# - How to deal with emotional outbursts and hate in social situations
 
It is not About Connections vs Office 365 - You can have the best of the both...
It is not About Connections vs Office 365 - You can have the best of the both...It is not About Connections vs Office 365 - You can have the best of the both...
It is not About Connections vs Office 365 - You can have the best of the both...
 
Using ibm connections to enhance university courses
Using ibm connections to enhance university coursesUsing ibm connections to enhance university courses
Using ibm connections to enhance university courses
 
IBM Connections 6 Component Pack
IBM Connections 6 Component PackIBM Connections 6 Component Pack
IBM Connections 6 Component Pack
 
IBM Connections 6.0 CR3 New Features
IBM Connections 6.0 CR3 New FeaturesIBM Connections 6.0 CR3 New Features
IBM Connections 6.0 CR3 New Features
 
10 years of IBM Connections
10 years of IBM Connections10 years of IBM Connections
10 years of IBM Connections
 
IBM Collaboration Framework in action: Customer success stories
IBM Collaboration Framework in action: Customer success storiesIBM Collaboration Framework in action: Customer success stories
IBM Collaboration Framework in action: Customer success stories
 
Design for the Digital Workspace
Design for the Digital WorkspaceDesign for the Digital Workspace
Design for the Digital Workspace
 
New Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
New Ways to Deliver Business Outcomes with INtelligent Workstream CollaborationNew Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
New Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
 
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
 
There is nothing more practical than a good theory
There is nothing more practical than a good theoryThere is nothing more practical than a good theory
There is nothing more practical than a good theory
 
Kubernetes Basics for Connections Admins
Kubernetes Basics for Connections AdminsKubernetes Basics for Connections Admins
Kubernetes Basics for Connections Admins
 
Intelligent Collaboration driving Digital Transformation
Intelligent Collaboration driving Digital TransformationIntelligent Collaboration driving Digital Transformation
Intelligent Collaboration driving Digital Transformation
 
Developing IBM Connections Community Apps using Domino
Developing IBM Connections Community Apps using DominoDeveloping IBM Connections Community Apps using Domino
Developing IBM Connections Community Apps using Domino
 
IBM Connections - Have it YOUR Way!
IBM Connections - Have it YOUR Way!IBM Connections - Have it YOUR Way!
IBM Connections - Have it YOUR Way!
 
You Get What You Give
You Get What You GiveYou Get What You Give
You Get What You Give
 
Building Custom ibm Watson Workspace Templates to make you and your team more...
Building Custom ibm Watson Workspace Templates to make you and your team more...Building Custom ibm Watson Workspace Templates to make you and your team more...
Building Custom ibm Watson Workspace Templates to make you and your team more...
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open Source
 
Communities as the fundament of social learning
Communities as the fundament of social learningCommunities as the fundament of social learning
Communities as the fundament of social learning
 

Recently uploaded

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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

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
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
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
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

Mikkel Heisterberg - An introduction to developing for the Activity Stream

  • 1. This presentation by Mikkel Flindt Heisterberg (mh@intravision.dk, http://lekkimworld.com), OnTime® by IntraVision, is licensed under a Creative Commons Attribution-ShareAlike 2.5 Denmark License An Introduction to Working With the Activity Stream Mikkel Flindt Heisterberg Senior Solution Architect / Partner OnTime® by IntraVision
  • 2. @me • Developer for IBM Notes, Domino, Sametime, Java, DB2, Websphere Application Server, Web • Lover of plugins – plugins are cool! – but slowly becoming the widget guy • IBM Champion • Blog: lekkimworld.com • @lekkim
  • 3. OnTime® Group Calendar • Probably the best, most versatile, group calendar product in the World • In active development since 1997, sold through partners throughout the World • Various user interfaces to suit just about any need from IBM Notes Standard, to web browsers, mobile devices, IBM Connections and IBM Notes Basic • Oh and there’s an API as well...
  • 10. Questions? Talk to Lars... ...and then head to http://www.ontimesuite.com for a fully functional 30 day trial license. It takes under 30 minutes to set up. Want online demos? Head to http://demo.ontimesuite.com
  • 11. What is this session about? “The future of business is social and the activity stream is the way events and messages are communicated in the social business. In this session you'll learn all there is to know about the activity stream including exactly what it is and how to interact with it using your favorite development environment whether that be JavaScript, XPages, Java or even the plain vanilla HTTP based REST API. This session is for you if you want to start working the Activity Stream.”
  • 12. The activity stream concept Activity stream was added in IBM Connections v. 4.0. “An activity stream is a list of recent activities performed by an individual, typically on a single website. For example, Facebook's News Feed is an activity stream. Since the introduction of the News Feed on September 6, 2006 other major websites have introduced similar implementations for their own users. Since the proliferation of activity streams on websites, there have been calls to standardize the format so that websites could interact with a stream provided by another website.”
  • 13. What is the Activity Stream • River of news – it’s like water flowing by you • Notifications about ”stuff” happening in (other) systems – we refer to these notifications as entries • Entries may be saved for future reference and entries may be actionable i.e. indicated that it must be acted upon • Typically you decide what goes into your stream • A replacement for email notifications (although you can have those too...) • Standards based – like – meaning – IBM took the standard and added IBM Connections specific stuff to it
  • 14. What is the Activity Stream NOT • A new inbox – doesn’t replace email • A perpeptual data store – entries are deleted based on a server defined purge interval (default is 30 days) unless saved or actionable • Meant as a content repository • Something that implies that you must read it all – it’s notifications – treat it as such...
  • 15. Demo • Let’s look at the activity stream in IBM Connections • See options for filtering (saved/actionable)
  • 17. No content stored in the stream
  • 18. • HTTP is much more than what a web browser reveals • The request – has a method (GET, POST, PUT, DELETE) – may have headers that describe the request such as a Content-Type (text/html), cookies and authentication information. – may have a body data • The response – has a return code (200 = OK, 301 = Moved, 404 = Not found) – may carry body data – may have headers that describe the response (e.g. Content- Type, charset and new location) REST API’s 101 (1)
  • 19. • You will mainly use the POST and PUT methods to send JSON data (Content-Type: application/json) to the API • JSON is super simple key/value data format. It has simple datatypes (strings, numbers, booleans), objects and arrays { ”email”: ”mh@intravision.dk”, ”niceGuy”: true, ”age”: 36, ”name”: { ”first”: ”Mikkel Flindt”, ”last”: ” Heisterberg” }, ”Lotuspheres”: [2006, 2007, 2008, 2009, 2010, 2011, 2012], ”IBMConnects”: [2013] } REST API’s 101 (2)
  • 20. • HTTP is pure text and easily done using telnet but there are cool tools to make it easier: – RESTClient in Firefox – Advanced REST Client in Chrome – cURL if you’re a command line guy/gal • Recommend RESTClient in Firefox as the Chrome equivalent sends an Origin header that doesn’t agree with IBM Connections • Charles Web Proxy, http://www.charlesproxy.com REST API’s 101 (3)
  • 21. How many streams are there? • In my opinion it makes most sense to not consider the activity stream as one single stream • Instead think that – Each user has his/her own (@me) – There is a public stream (@public) – A community may have a stream if the widget has been added by a community owner – if there’s no stream for a community posting to it will return a ”403 Forbidden”
  • 22. Stream URL components https://<host>/connections/opensocial/<auth>/rest/activitystreams /<user ID>/<group ID>/<application ID>/<activity ID> Component Meaning <auth> (optional) If using form based authentication leave this component out. Otherwise options are anonymos, basic, oauth (last option not covered in this presentation). <user ID> The user whose stream you’re addressing – use @me for current users stream, @public for public stream or a community ID for the stream in a community. <group ID> The group of entries you’re addressing – use @all for all posts or options for special meaning such as @saved, @actions etc. Refer for InfoCenter and resources slide for more. <application ID> When retrieving entries this refers to the application (or ”generator”) that created the entry. All the IBM Connections app names can be used (profiles, blogs, wikis etc.) plus custom ones (e.g. ontimegc). @all used for all applications. <activity ID> Used to reference a specific event e.g. for updating saved status.
  • 23. 1. /activitystreams/@me/@all List my (current users) entries 2. /activitystreams/@public/@all List public stream entries 3. /activitystreams/@me/@actions List my actionable events 4. /activitystreams/@me/@saved/blogs List my saved events from blogs 5. /@me/@all/@all/bdb562fb-b145-43dc... Work with entry from my stream based on ID Stream URL Examples * All URLs above start with https://<host>/connections/opensocial/<auth>/rest Also used when creating new entries (e.g. POSTing)
  • 24. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it”
  • 25. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it” The person doing the posting is called the actor and can be a specific user ID but usually the current user (@me)
  • 26. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it”What the person does is called the verb and there’s a long list of predefined ones such as post, update, create...
  • 27. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it” The object in question is called the object and can be anything that represents the target ”thing” i.e. file, note, meeting...
  • 28. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it”The system the user worked on is called the target and can be any system you need to refer to
  • 29. Anatomy of a stream entry • A stream entry reads like ”the current user posted a note to IBM Connections and you should act on it” IBM Connections supports some special properties for entries such as actionable and saved to allow users to work with entries
  • 30. Anatomy of a stream entry • A stream entry reads like ”the current user posted a file to IBM Connections and you should act on it” { "actor": {"id": "@me"}, "verb": "post", "title": "Some entry title", "updated": "2013-05-17T12:00:00.000Z", "object": { "title": "Some object title", "objectType": "note", "id": "1234567890-1234567890-1234567890" } }
  • 31. Anatomy of a stream entry • A stream entry reads like ”the current user posted a file to IBM Connections and you should act on it” { "actor": {"id": "@me"}, "verb": ”create", "title": ”Sales proposal for Rockets Inc.", "updated": "2013-05-17T12:00:00.000Z", "object": { "title": "Sales proposal for Rockets Inc.", "objectType": ”proposal", "id": "1234567890-1234567890-1234567890" }, ”target”: { ”displayName”: ”Acme Corp. CRM”, ”url”: ”https://crm.example.com” } } IBM Connections is the implied default target but you can specify your own target in the entry
  • 32. POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123 { "actor": {"id": "@me"}, "verb": "post", "title": "Some entry title", "updated": "2013-05-17T12:00:00.000Z", "object": { "title": "Some object title", "objectType": "note", "id": "1234567890-1234567890-1234567890" } } * Smallest entry you can/should post to the stream Posting an entry* to the stream
  • 33. Demo • RESTClient in Firefox • Easily work with feeds, add authentication, headers etc. • Use Private Browsing mode
  • 35. Deleting from the stream • In short you can’t – up to IBM Connections v. 4.5 you cannot delete from the activity stream – you’ll just get an 403 Forbidden back • There is some light at the end of the tunnel though – this directly from the developers at IBM: “We are however adding 'propagateDelete' at the moment, which deletes all events related to a given object on receipt of a delete event (if so specified). This will be protected by a trusted role.”
  • 37. GET /connections/opensocial/basic/rest/activitystreams/@me/@actions Host: social.example.com Authorization: Basic xyz123 PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123 { "actor": {"id": "@me"}, "id": "de325123-e269-4a33-b62a", "connections": { "actionable": false } } Mark/unmark as actionable Response {"entry": { "connections": { "actionable": "false" }, "id": "unmark actionable:" }}
  • 39. GET /connections/opensocial/basic/rest/activitystreams/@me/@saved Host: social.example.com Authorization: Basic xyz123 PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123 { "actor": {"id": "@me"}, "id": "de325123-e269-4a33-b62a", "connections": { ”saved": false } } Mark/unmark saved Response {"entry": { "connections": { “saved": "false" }, "id": "unmark saved:“ }}
  • 40. Rolling it up • Rollup is telling the stream that an post/update relates to the same ”thing” • Used to avoid cluttering up the user interface
  • 41. POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123 { "actor": {"id": "@me"}, "verb": "post", "title": "Some entry title", "updated": "2013-05-17T12:00:00.000Z", "object": {"title": "Some object title”, "objectType": "note", "id": "1234567890-1234567890-1234567890" }, ”connections”: { ”rollupid”: ”1234567890-1234567890-1234567890” } } Rolling it up
  • 42. Templates • Two main reasons for looking at templates – Internationalization (i18n) / translation – Getting a standard representation in the UI • Two types of templates – Object Substitution replaces a reference with nice markup – an example is replacing the actor with a HTML reference using the business card – Title Template Substitution – uses object substitutions it makes standard titles
  • 43. Templates • Object Substitution – ${Actor} - this is converted into appropriately marked up HTML which displays the Actors name and links to a Business Card – ${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 – ${created} = ${Actor} created ${Object} – ${create.target} = ${Actor} created ${Object} in ${Target}
  • 44. POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Authorization: Basic xyz123 { "generator": {"id": "ontimegc”}, "actor": {"id": ”@me"}, "verb": "create", "title": "${create}", "updated": "2013-05-21T12:00:00.000Z", "object": { "summary": "Project Z Review Meeting", "objectType": "meeting", "id": "123456789012345678901234567890OP” } } Using templates
  • 45. Embedded Experiences • EE works a litte different in e-mail and in the activity stream • E-mail – Traditional (SMTP) e-mail is using Multipurpose Internet Mail Extension (MIME) – EE’s adds an additional ”MIME part” – clients in the know will show content based on this data if possible and allowed by policy • Activity stream – Activity stream delivery model is a bit different than in e-mail as we already have a structured payload – Application sending the entry adds an openSocial.embed object to the entry with link to the gadget required for rendering the EE and context info
  • 46. { ”actor”: {”id”: ”@me”}, ... ... "openSocial": { "embed": { "gadget": "http://ee.example.com/mygadget.xml", "context": {"id":"12345"} } } } Embedded Experiences
  • 47. • By default you may only post entries to your own activity stream • Sending to others can be considered as spam • As with standards there are multiple ways of doing it using either – OpenSocial (openSocial: {deliverTo: []}) – Activitystrea.ms (to: []) – Just use the second one... • To send to another users stream you need to either be him/her or be a trusted application (more information later...) Posting to other users stream
  • 48. { "generator": {"id": "ontimegc”}, "actor": {"id": "@me"}, "to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}], "verb": "create", "title": "${create}", "updated": "2013-05-21T12:00:00.000Z", "object": { "summary": "Project X Review Meeting", "objectType": "meeting", "id": "123456789012345678901234567890MN” }, "connections": { "rollupid": "123456789012345678901234567890MN", } } Posting to other user
  • 49. { "generator": {"id": "ontimegc”}, "actor": {"id": "A7E718F4-3040-2A00-C125"}, "to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}], "verb": "create", "title": "${create}", "updated": "2013-05-21T12:00:00.000Z", "object": { "summary": "Project Y Review Meeting", "objectType": "meeting", "id": "123456789012345678901234567890OP” }, "connections": { "rollupid": "123456789012345678901234567890OP” } } Posting as other user
  • 50. { "generator": {"id": "ontimegc”}, "actor": {"id": "1E7F44DD-9C20-842A-C125"}, "to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}], "verb": "create", "title": "${create}", "updated": "2013-05-21T12:00:00.000Z", "object": { "summary": "Project Z Review Meeting", "objectType": "meeting", "id": "123456789012345678901234567890OP” }, "connections": { "rollupid": "123456789012345678901234567890OP” } } Posting to & as other user
  • 51. How it looks in the UI
  • 52. Registering generators wsadmin>execfile("newsAdmin.py") wsadmin>NewsActivityStreamService.listApplicationRegistrations() {wikis=wikis, communities=communities, general=General, profiles=profiles, activities=activities, homepage=homepage, blogs=blogs, forums=forums, files=files, dogear=dogear, demoapp=Demo Application, kudos=Kudos} wsadmin>NewsActivityStreamService.registerApplication("ontimegc", "OnTime Group Calendar", "http://www.ontimesuite.com", "", ”http://inside.intravision.dk/images/ontime.gif”, ””, ”OnTime Group Calendar”, ”true”) wsadmin> After first use of a generator it can be referenced by ID. Purpose of registering is that users may filter by it in the UI.
  • 54. Granting access (1) • Permission to send to other users are granted using the trustedExternalApplication role • Granted in the WidgetContainer application using wsadmin or the Websphere Application Server Integrated Solutions Console – the latter is easiest
  • 59. Summary • There’s no one stream - @me vs. @public vs. community • Be patient – wrapping your head around these concepts can be hard in the beginning • Remember that the data isn’t stored in the stream but rather is pointed to from the stream • Entries are automatically purged from the stream unless saved or marked actionable • You cannot delete from the stream (yet) • Accessed using REST API URL based on user, group, application and activity ID • When working with the RESTClient in Firefox use ”Private Browsing” mode as credentials used and cookies returned in one tab doesn’t leak to other ”Private Browsing” tabs. • Pretty easy to use once you grasp the concepts
  • 60. Resources • Activity Streams in the OpenSocial specification, http://opensocial- resources.googlecode.com/svn/spec/trunk/Social-API- Server.xml#ActivityStreams-Service • AppDev wiki, http://www-10.lotus.com/ldd/appdevwiki.nsf • IBM Connections Activity Stream Integration (AD104 from IBM Connect 2013), http://www.slideshare.net/brianog/ad104-ibm-connections- actiivtystream-integration • Activity Stream hands-on lab, http://www- 10.lotus.com/ldd/appdevwiki.nsf/xsp/.ibmmodres/domino/OpenAttachm ent/ldd/appdevwiki.nsf/82567C415DF5243185257AEE00626F82/attach/5- sdk-workshop-activitystreams.pdf
  • 61. Tools of the trade • RESTclient in Firefox (recommended), https://addons.mozilla.org/da/firefox/addon/r estclient/ • Advanced REST client in Chrome (issues with POSTs), http://bit.ly/advancedrest • cURL (for any imaginable operating system), http://curl.haxx.se/ • Charles Web Proxy, http://www.charlesproxy.com
  • 62. Q&A • But?, How?, Doesn't that mean... • Give it to me! (or come talk to me after the session or find me in the hallways...) • Twitter: @lekkim • Email: mh@intravision.dk • Blog: http://lekkimworld.com