This is an idea I’ve been toying with the last couple of months after working a lot on integrating Twitter, gathering RSS feeds and implementing an activity stream for iknow.co.jp.

When talking about Twitter over a couple of drinks, my friends often roll up their eyeballs. Again, this idiot evangelizing this ‘look-at-me’ service. In a way they are right, Twitter has limited value for it’s users. But the thing that I found most interesting about Twitter is the potential of activity streams and the machine-to-human aspects of it. In my previous article on how to build a Twitter service, I concluded that Twitter has severe limits when it comes to general activity streaming.

But guess what, activity is still HOT and serious innovation here is the new gold.

Activity Streams?

After sites like Plaxo, more and more websites are restructuring certain areas of their sites to facilitate ‘acitivty streams’. LinkedIn just introduced one:

Only a few weeks before 37Signals made this update to my Backpack account:

These activity streams are still kind of vaguely defined some call it Newsroom, Latest Activity or Updates. Here in Tokyo we have many different names for it: ‘notifications’ in programming code, ‘Activity’ on one page and ‘My News/マイニュース’ on the other.

Nevertheless we can extract some simple facts from this almost natural occurring phenomenon:
  • Events are plotted along a timeline and serve as news flashes.
  • They include updates about friends or followee’s.
  • They notify you about system events (new message, you have listened to 1000 songs, congratulations!)
  • They serve as call to actions: read this message, checkout this blog entry etc. This serves as a social and content creation lubricant.

Lifestreaming?

This word is flooding today’s buzztalk. Applications like friendfeed.com and tumblr.com basically allow you to aggregate stuff from other services and republish that in one big ass activity stream.

However, there are big flaws in most of these services:
  • They are not updated real-time, they poll external services and passively retrieve new updates.
  • If they have filter/categorization capabilities at all, they provide that functionality through their site and not the actual API.
  • They focus on social events and omit the upcoming wave of recommendation engine notifications.
  • Actively syndicating events through eg XMPP is still hard to find.
  • Their paradigm is Software as a Service rather than Platform as a Service

an Open Activity Platform

I think there will be a need to fire off all these notifications into some sort of standardized activity broker. Such an Activity Broker should have these core responsibilities:
  • Providing categorization and call-to-action hooks for notifications.
  • Providing authentication for external services and easy access ways.
  • Sophisticated filtering mechanisms for users.
  • Allowing real-time pushing of these incoming notifications to third party services.

I’m not really aware of current standardization drafts that accommodate these – perhaps DataPortability.org will do the job. But standards like oAuth, JSON and XMPP play in very well with the implementation of such a platform.

Interestingly – while searching for a suitable home for such a platform – I discovered the domain openactivity.org has already been taken by a certain company from Redmond:

1
2
3
4
5
Domain Name:OPENACTIVITY.ORG
Registrant Name:Sean Lyndersay
Registrant Street1:One Microsoft Way
Registrant City:Redmond
Registrant Email:seanlynd@microsoft.com

Skinning the Platform

The other side of the coin is the tools that plug into this Open Activity Broker.User added value will lay in tools that provide display and control very well. Lifestreamers and the like should be mere frontends. Secondly, tremendous value can be added by plugging in recommendation engines and integrating with existing services.

I haven’t done a thorough comparison of current lifestream-like applications out there, but I do have some ideas for such an Activity Frontend. The core value will be sophisticated filtering and categorization on incoming notifications. A filter like that should be organic eg. voting down certain sources or notification types. Right now I’m following about 50 people on Twitter and I don’t have time to give any attention to this public timeline – I need to easily and seriously filter the noise!

During one of my takout-sushi lunches I made the above mockup. The important filtering/categorization controls are missing, because building those will require serious thinking about user interaction. Techniques like Comet) can make this web application real-time (pushing notifications on the page as they happen).

Also, integration with the Desktop world is an interesting prospective. As the platform should play well with current open standards like XMPP, so should the frontend play well with open UI libraries like Growl (or Snarl for windows and Ghosd for Linux):

a Project has been Born?

Not yet, although I can probably not resist writing some prototypes. However, for something like this to really work well – there needs to be some kind of community actively backing the non-profit part, the Open Activity Broker. This will require a lot of commitment making the whole package a fulltime gig.

Any takers? Or any tips that this is just reinventing the wheel? Please share your thoughts.

Last year I discovered the website Wakoopa.com. At first I didn’t quite get the usefulness of using Wakoopa but after using it I really came to love it. Wakoopa let’s you broadcast your software activity usage by installing a little tray icon. On your Wakoopa profile you can track your software usage trends. Since I’m a proud Mac user and believe in radical transparency I am broadcasting the usage of my software to the world:

Right now on this blog you can see my Latest Tweets and Interesting Links. That data get’s updated everytime I bookmark something (using Delicious) or tweet something (using Twitter). I really like the real-time and heartbeat aspect of it.

While taking a shower a couple of weeks ago I was thinking of using the Wakoopa data to make a little widget. Most of my time is spend in front of my Macbook, so it would be nice to display what I’ve been doing the last hours on my Mac. I want to display it in a simple single sentence like “Recently I’ve been programming”. I don’t want to overload my visitors with too much data. Of course when they click on the sentence they are taken to my Wakoopa profile

I contacted the Wakoopa team a couple of weeks ago to ask whether they could provide this activity data in form of a JSON feed (essential for making a badge/widget). They replied to me within a couple of hours and implemented it! That’s agile baby! Unfortunately I wasn’t so agile on my private projects and only build my widget yesterday.

Using the just released Wakoopa JSON api I’ve written a big ugly piece of Javascript that serves as the widget:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<script type="text/javascript">
  var wakoopa_activity = {'Design': 'designing',
                          'Communication': 'mailing and chitchating',
                          'Browsers': 'surfing the web',
                          'Programming': 'coding like hell',
                          'Audio': 'slacking off',
                          'Video': 'slacking off', // jacking off? 
                          'Tools': 'doing some funky stuff'}
  var wakoopa_username = null;
  
  function wakoopa_doing_now(data) {
    var app = null;
    var activity = '';
    for(var i = 0; data.length > i; i++) {
      if (app == null || app.active_seconds <= data[i].active_seconds) {
        app = data[i];
      }
    }
    if(app.category) {
      activity = wakoopa_activity[app.category.name];
      if (!activity) {
        activity = app.category.name;
      }
      if (app.category.name == 'Tools') {
        if (app.name == 'iTerm' || app.name == 'Terminal') {
          activity = 'unix fu';
        }
      }
    }
    title = 'my software usage on wakoopa.com';
    document.getElementById('wakoopa_activity').innerHTML = '<a href="http://wakoopa.com/' + wakoopa_username + '" alt="' + title + '" title="' + title + '">Recently I\'ve been ' + activity + '.</a>';
  }
  
  function wakoopa_recent_activity_for(username) {
    var script = document.createElement( 'script' );
    wakoopa_username = username;
    script.type = 'text/javascript';
    script.src = 'http://wakoopa.com/' + username + '/recently_used.json?callback=wakoopa_doing_now';
    document.getElementsByTagName('head')[0].appendChild( script );
  }
</script>
<img style="float: left; margin-right: 6px" src="http://wakoopa.com/favicon.ico"/>
<div id="wakoopa_activity"></div>
<script type="text/javascript"> wakoopa_recent_activity_for('dominiek'); </script>

You can copy and paste this in your blog to display what you’ve been doing recently on your machine. Make sure to replace my username with yours.