The often random thoughts of an Eclectic Architect, Enterprise Technologist, Coffee Addict & Social Media Junkie

While mucking around with Twendly, it became quickly apparent that there are numerous different types of trends.  Some come around with surprising regularity, others flash and then disappear, while some just hang around and won’t go away.  For a bit of fun, I thought I’d try pick out what the common trend patterns are with an example of each from Twendly.

To name a pattern, I thought a few things would need to be true.  It needs to be observable, predictable given some knowledge of the item trending and repeatable - other trends can show this pattern. I’ve identified six common patterns — I’m sure there are more out there.  I’ve named each of them after birds in true twitter fashion.  They are:

  1. The Woodpecker
  2. The Peacock
  3. The Dodo
  4. The Albatross
  5. The Rooster
  6. and The Swallow

Each name had to match the “personality”of the trend, and I’ve tried to be globally relevant (I could of named something the Lyre Bird or the Kookaburra but I’m not sure everyone knows exactly what these are).

1. The Woodpecker

The Woodpecker

The Woodpecker

This one is obvious.  It repeats regularly and loudly although the intervals might change.

2. The peacock

The Peacock

The Peacock

The peacock is the trend of the celebrity, flashy, showy and loud it bursts on to the scene and dominates conversation then just as quickly disappears.

3. The Dodo

The Dodo

The Dodo

The dodo is extinct.  Here today, gone tomorrow, it never really flew and was more than likely just a little bit silly. Differs from the peacock in that it never dominated the trend completely.

4. The albatross

The Albatross

The Albatross

This one is a little more subtle, is it a dodo or a woodpecker with a really long interval?  It’s neither - it’s the albatross. It has a strong signal, but it’s out there circling around the globe, you know it will come back, you’re just not sure when.  Viewed over weeks (I haven’t programmed that yet which is why you the seven day view above) you’ll see it come in and out regularly.

5. The Rooster

The Rooster

The Rooster

The Rooster struts around like it owns the place, poops over everything else and is generally loud and noisy, it’s hard to be heard when this trend is crowing.

6. The swallow

The Swallow

The Swallow

This trend is always buzzing around, flitting in and out depending on the weather, product releases or any other numerous reasons.  It just won’t go away and when it does, it always comes back.

By now, some of you who follow me on Twitter will probably know that I made a Twitter Bot called Twendly that tweets the current trends on an hourly basis.  For various reasons, mostly because I thought it would be fun, I decided to do this using Googles AppEngine. AppEngine only support Python at the moment, but if you are familiar with VB, C# or any modern programming langauge, you’ll find it a breeze to pick up.  The AppEngine also has some very good (if basic) help on getting started.  This post assumes that you’ve signed up with AppEngine and have completed all of the getting started tutorials.  There are some complete Python Twitter libraries out there, but I couldn’t find one already optimised for App Engine, so I just decided to do the following with help from various web sites and the Twitter API guide.

Two small tips that will help with the tutorials:

  1. On windows, I found that AppEngine assumes you have put your application under the AppEngine directory (C:\Program Files\Google\App_Engine).  If you create it anywhere else (e.g. C:\myapp) then the correct command to start the local AppEngine is dev_appserver.py c:\myapp
  2. To make starting the server easier, just create a .bat file and put that command in it.  Then put a shortcut to the .bat file on your desktop.  I also did the same for the application upload command as well appcfg.py update c:\myapp

It’s trivial, but it will save you a lot of time remembering commands and looking for a DOS / CMD prompt in Windows.

OK, so you’ve now successfully created you first application in AppEngine and want to do something useful.  Well here’s a full Python script, incorporating Django templates on how to create a basic Twitter Bot.

from google.appengine.ext.webapp import template
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

from google.appengine.api import urlfetch

_DEBUG = True # When this is true, some things go to the screen as text and templates aren't always generated. Error message are more verbose.
_DEBUG_TWITTERBOT = True # When in debug mode I post to a private twitter account instead of my bot

## User name constants
_TWITTERBOT_USER = "mytwitterbot" # The username you use in twitter to login to http://twitter.com/mytwitterbot
_TWITTERBOTDEV_USER = "mydevtwitterbot" # # The username you use in twitter to login to your "dev" twitter account http://twitter.com/mydevtwitterbot
_TWITTERBOT_PWD = "mytwitterbotpwd" # I'm lazy, I use the same password for both accounts, you probably shouldn't do this!

## URLS used for Twitter API calls - stored as constants for easy update later.
_TWIT_UPDATE = "https://twitter.com/statuses/update.json"

# I use a base handler and put my Twitter post agent in here so I can call it from any classes that derive this.
class BaseRequestHandler(webapp.RequestHandler):

  def generate(self, template_name, template_values={}):

    # You'll see we are using Django
    directory = os.path.dirname(__file__)
    path = os.path.join(directory, 'templates', template_name)
    self.response.out.write(template.render(path, template_values, debug=_DEBUG))

  def TwitterPost(self, msg, username):

      password = _TWITTERBOT_PWD

      form_fields = {
        "status": msg,
        "source": "twendly"  # If you register your bot with Twitter, this is how posts know to show "from Twendly" with a link back to the Twendly site.
        }

      authheader =  "Basic %s" % base64.encodestring('%s:%s' % (username, password))

      base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
      authheader =  "Basic %s" % base64string

      payload = urllib.urlencode(form_fields)

      # Note the URL is using HTTPS which is supported by AppEngine so the call should be secured.
      url = _TWIT_UPDATE

      result = urlfetch.fetch(url=url,payload=payload,method=urlfetch.POST, headers={"Authorization": authheader})

      if int(result.status_code) != 200:
        # You could get fancy and put some error handling in here if you're inclined.
        return int(result.status_code)

      return 200

class MainPage(BaseRequestHandler):

  def get(self):

    title = 'Welcome page of your App'

    self.generate('index.html', template_values={'title': title})

class TwitterBot(BaseRequestHandler):

    def get(self):

        # Do some stuff - what ever it is you want to tweet about!
        msg = "My cool tweet"

        If _DEBUG_TWITTER_BOT == true:
            username = _TWITTERBOTDEV_USER
        else:
            username = _TWITTERBOT_USER

        response = self.TwitterPost(msg, username)

        if response != 200:
            status = "Whoops. Twitter was down or your code stuffed up"
        else:
            status = "Hooray! Tweeted: %s " % msg

        self.generate('bot.html', template_values={'status': status})

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/twitterbot', twitterbot)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

You should be able to simply copy the above code and complete the following:

  1. Create the new application ID in Google AppEngine (original in tutorials was “greeting” from memory - make a more meaningful one).
  2. Setup the twitter accounts you need (you’ll need separate mail accounts for each). I always keep my dev one locked so it’s not on public timeline.
  3. Create the basic Django templates, index.html and bot.html - they don’t need to be fancy.  They need to be in a sub-directory of your main app called templates. (e.g. C:\myapp\templates).
  4. Update your app.yaml file with the ID name and version number (probably 1).
  5. Make the bot do something useful for you - pass messages as parameters or something similar, open a URL and fetch a value (the weather?), you name it, your own Twitter bot to follow.

That should be it, you’ll be able to test it locally and then once you’re happy - push it up to AppEngine and test it out.

NB - Remember Twitter won’t let you post exactly the same message twice, so make sure that you change the message each time you test it.

In the next post I will talk about ways and means of automating the bot you’ve now created (AppEngine doesn’t have a scheduler), and a couple of pitfalls I discovered along the way.

 
February 16th, 2009
 

The book, The Wisdom of the Crowds, by James Surowiecki talks about the aggregation of information in groups and how this can make better decisions than individuals within certain bounds.

The ubiquitous nature of social software, the number of people using it and the degree to with which we become “Linked In” gives us a real time handle on the crowds and what they are doing.

Systems like Twitter target this kind of behaviour directly; a pure aggregate of a stream of consciousness, while other systems like Linked In address it tangentially through behaviour.

I posted the following on Twitter back on the 30th of Jan.

A good layoff indicator is LinkedIn, my network activity is way up - 1st action when laid off is to connect and seek recommendations.

This was just based on patterns I’d observed through my own network of both internal and external colleagues responding to the unfortunate events surrounding the economic times.

It was with interest today that I saw this article on TechCrunch which shows that LinkedIn grew 22% in January (over December) and minutes on the site doubled in the same month.  I may have contributed to some of those minutes myself.

Most of us are already well aware that we leave a footprint on any social networking site, and in some instances, may come to regret that photo we posted on facebook.  What I find more fascinating however is how these sites are generating new signals and measures that over time could be used to perhaps supplement or replace existing messages.

One person updating there resume is not newsworthy - everyone updating it sends a strong message about job security.

Good systems are those which can make visible these hidden messages and signals.  What hidden signals are you observing in other systems which provide insight (of any kind)?

One thing that our Connections users have asked it that they would like to include a reference to a specific persons profile from a blog posting.  This is possible to do, although it’s not completely straight forward.  I’ve shown two solutions to this problem.

In both cases, you’ll need the persons “profile key” which looks like this /profiles/html/profileView.do?key=91f00240-1f17-4b18-a767-9c813a2def4c&lang=en.  You’ll also find it easiest to use two browser sessions (or two browser tabs) to do this, one for your blog post, the other for searching and finding the information you need.  To find the profile key, open profiles, search for the person you want to find then right-click on their name and open the link in a new window.  The address in the browser URL bar should be the profile key.  When you need the key, you’ll copy everything after the name of the connections server (everything from /profiles to the end of the URL) and you are ready to edit

There are two types of links you can create.  The first is a simple HTML link which will take you to the persons profile. For example clicking on the name below will take you to my profile (well it would if the profile server existed!).

Tim Bull

To do this, simply copy the following and paste it in HTML mode (click on the <H> on the edit menu bar while in edit mode).  Paste the profile link / key as described in the paragraph above to replace the profile key in the example, then change the name of the person (in this case replace “Tim Bull” with who ever you are linking to).  I’ve bolded what you’ll need to change.

<a href=”/profiles/html/profileView.do?key=91f00240-1f17-4b18-a767-9c813a2def4c&amp;lang=en“>Tim Bull</a>

The second linking option is slightly more complicated.  In this case we are going to include a link that enables the person card popup as well.  This requires pasting a small amount of Java Script in to the HTML.  It will give a link as follows.  Note this doesn’t work in here (because this is wordpress), but if you’re familiar with Connections you’ll know exactly what I mean - I should include a picture but I’m a bit time pressed at the moment - in connections, howevering over the name will show a link to “Click here to view the business card”:

Tim Bull

To do this, copy the code below, as before, paste it into your blog posting in HTML mode and edit the HREF (profiles key), the text of the name and the e-mail address of the person.

<span class=”vcard”><a class=”fn person lotusPerson” href=”/profiles/html/profileView.do?key=91f00240-1f17-4b18-a767-9c813a2def4c&lang=en“>Tim Bull</a><span
class=”email” style=”display: none;”>tim.bull@fake.email.com</span></span>

One last note, this will ONLY work within Connections.  It is possible to do the same thing and link from any other web site, but there are a number of java libraries that need to be loaded to give the business card popup that I haven’t referenced as these are already loaded within the context of the Connections Blog.  The other trick is that this may not work with your Connections site if the rich embedding functionality is turned off (which it is by default to prevent x-site scripting issues).  The IBM reference with samples for doing this from other web-sites is here.

The other thing you’ll notice is my HREF examples link to the profile of the user, if you look at the links in Connections, you’ll see the pop-up is implemented in a variety of ways which you can emulate, for example, within the context of Blogs, clicking on the persons name will take you to their blog, in DogEar, to their bookmarks etc.  The principles are exactly the same, this should be all you need to get started.

 
November 10th, 2008
 

I’m working with Lotus Connections at the moment and looking at the various integration points it has to other systems.  I thought it might be useful to summarise the ones I’ve found here - if you know what to look for a quick Google search will find the links although I can add them in if people request it.

I found a lot of great posts about Connections summarising that “it now integrates with Feature / Product X”, but nothing in the one place I could refer to.

Hopefully you find this useful and of course if anyone has feedback on integration points for Lotus Connections that I’ve missed then please feel free to add them in the comments.

Person Information (Enterprise Directory, Notes Databases, Relational Databases etc.).

The Tivoli Directory Integrator (TDI) which has a limited license within Lotus Connections, is a very capable integration tool that can pull information from a number of different profile sources to consolidate information into the Profile component of Connections.  This is an essential integration to limit the amount of re-keying that users will have to do.  Challenges in designing this integration are how much information, what sources and what update support is required (ie. what flows in and potentially back out of Connections).

LDAP Sources

Lotus Connections can authenticate against a number of different LDAP sources for authentication.

SameTime

There are a couple of different integration possible with Lotus Sametime.

  1. Lotus Connections can be presence enabled and the person card enabled to initiate a chat directly using SameTime (very useful when using Profiles to locate an expert, you can then just initiate a SameTime conversation right there).
  2. You can extend Lotus Sametime to integrate with Connections so that within the Sametime client you could initiate a group chat with all people in the same group as the user based on their Report To structure in Connections.

Many of these features require SameTime 8.0 so some care is needed to work out which are practical in the environment - you’ll need the latest versions of Sametime installed in some cases.

Google Gadgets / Widgets

The iWidget standard used to display the content on the HomePage is open and new Widgets are deployable by administrators.  One documented configuration is to wrap Google Gadgets as iWidgets so these are available on the Home Page.  You can also write your own custom iWidgets to access and consolidate other content.  The challenge is to work out what makes sense in the context of a social-networking site and not trying to deploy Lotus Connections as another Portal solution.

Blackberry

There are two blackberry clients available. One for DogEar which enables BlackBerry users to access DogEar bookmarks on the go.  The second (more useful in my opinion) client is the Profiles client which will let you search for and access a persons profile card.  Calls can be initiated directly from this card.  From the documentation it appears that no specific components are required (beyond the Blackberry Client and access to the internal Connections server) so administrators don’t need to deploy any content on the Blackberry Enterprise Server to make this work.

The downside is that Activities, Communities and Blogs are only accessible via the internal Blackberry browser which is a sub-optimal experience.

Quickr

Lotus Quickr and Connections have a number of different integration points, for example feeds of content from Connections can be consumed into Quickr and the Connections Person card can replace the Quickr person card.  With Connections 2.01 there are also:

  • Quickr integration with Activities - Push-button publication from an Activity into one of your Quickr Places for permanent document storage
  • Quickr integration with Communities - Allows communities to use Quickr as their content repository and document collaboration platform.


Lotus Notes 7

There is an extension that can be loaded for Lotus Notes 7 which provides access to Activities and allows you to store e-mail as an Activity, as well as the ability to DogEar a Lotus document or database directly into DogEar.

Lotus Notes 8

Notes 8 provides much of the same, but with the standard client you can access the functionality from the Sidebar which more user friendly.

Lotus Notes 8.5

Although not released, this will extend the integrations even further — you will be able to offline an activity and integrate the activity into your calander.

Browser Support

There is a button deployable into most browser (IE6+ and FF2+) which will allow you to DogEar URLs from web-sites you are visiting.  These bookmarks can be stored in DogEar, Activities, Communities and Blogs.

Websphere Portal

There is a Lotus Connections Portlet to display the features of Connections within a Websphere Portal.

Microsoft Office and Windows Explorer

There is a plug-in for Office and Explorer which lets you bring the Activities, Blogs, and Profiles features to your office applications, such as Microsoft Word, and to add files from Windows Explorer to an activity.

Microsoft Outlook

Post mail messages to Activities and access Connections Profiles from Outlook.

Confluence Wiki

Integrate communities with a Confluence Wiki.

SocialText Wiki

Integrate communities with a SocialText Wiki.

Virus Scanner

Connections supports integration into a Virus Scanning server to ensure that files uploaded are scanned and virus free.

Some of these elements are documented and available here http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/topic/com.ibm.lotus.connections.help/c_connectors_over.html

Many of you will have seen Chrome released by Google yesterday which comes hot on the heels of Firefox 3 (FF3) coming out a couple of months ago and a week or two ago IE8 Beta 2 hit the streets.

The browser market has never been hotter and Web 2.0 is the reason why. More than ever the browser is now the delivery platform for applications rather than just static HTML. In the “old days” the browser didn’t matter - IE6 had a killer market share and most of your processing happened on the server anyway, so the browsers performance was less of an issue.

That’s changed. I actually posted on this here back in May  talking about the need for companies and individuals to actually start thinking about which browser they use and why.

Without getting to technical, one of the core elements of most web sites and what we know as a web 2.0 experience these days is JavaScript. All this means is that much of the processing on what an application does, the popups, the validation, the lookups etc. have been moved to the browser and run within the browser instead of the server. Logically then, the place to start in understanding how well a browser performs is understanding how fast it executes JavaScript.

So for those left-brained thinkers, here is some figures for comparison. They show the average speed each browser takes to execute a standard series of benchmark tests from http://webkit.org/perf/sunspider-0.9/sunspider-driver.html over 10 iterations. They’ve all been tested on the same PC (mine) so they should be relative, your own mileage may vary but the relationship between the performance should stay the same.

Browser (Speed)
IE8 Beta 2 (12,318ms)
FF3 (4,473ms)
Chrome (2,293ms).

Clearly Chrome is fastest (2X the speed of FF3) so I should just use Chrome, right?

Wrong. There is a lot more to it than that. To put some perspective on this, IE6 which is what many corporates still use benchmarks at around 60,000ms, so even IE8 Beta 2 is quite a bit faster.

The problem is that when your using a browser internally it’s probably controlled by IT, so you may not be able to change it. Even if you can, browser standards actually tend to cause lazy developers (why develop a site to support different browsers when you know that everyone uses IE6 and you can control that) which means lots of internal sites break with FF3 and Chrome.

IE6 was such a bad browser and broke so many standards that even Microsofts early official name for the IE8 backwards compatibility mode is “Quirks mode”!

So here’s where the difference comes in; all modern browsers (IE8, Chrome and FF3) now support the same standards and HTML to a much stricter degree than ever before so moving forwards, it’s highly likely that sites will work whichever browser you use, but in the internal world, you’ll undoubtably have sites that require older compatibility modes.

My solution to this is to use IE8 beta 2 for internal websites in general because of its excellent support for older style sites and its general robust compatibility. If you’re an average internet user and like low fuss options, IE8 has a lot going for it. Just be warned that you’ll likely run into internal IT support issues if you try deploy it inside the corporate firewall (for example, it wants to update Service Packs on Windows XP and some companies won’t be on SP3 yet).

For external sites I’m opting for Chrome - the raw speed and excitement, the new take on what a browser should behave and look like, and (the killer for me) the process seperation (each browser tab runs as a seperate process using seperate memory) means that bad applications in one tab won’t kill my performance. Ignoring the process bit, that’s my right-brain talking; it’s all about the look and feel and the internet looks and feels more exciting in Chrome :-)

As far as FF3 is concerned, it’s still a great browser but I’ve had shocking stability issues with it. Where FF3 wins hands down is in it’s Add-In market. If you’re a die hard browser and like lots of nifty productivity enhancements, then for now at least, FF3 is a better browser than Chrome.

Chrome adds a really interesting new dimension to the browser wars and I’m really interested to see where this goes. Hope this is of interest to you, happy browsing!

Earlier this month I posted on how I used Twitter for a real business outcome, networking with Luis Benitez who I met through a shared interest in Lotus Connections.

Recently another examples of the power of Twitter occured that I thought I’d share.

There are many uses for Twitter (surprisingly many for something that only supports 140 characters), but one of them is kind of like the office water cooler – it’s for that off-the-cuff comment that you don’t neccessarily expect anyone to reply to, but you’re happy when they do.

Recently, I tweeted “Is it just me, or is FF3 really unstable?” FireFox (FF) 3 is currently my preferred browser and I use it for anything I can, only falling back to IE when some internal sites won’t support FF but it’s been very unstable and driving me nuts!

When I got up the following morning, I had the following answer from Ricardo Sueiras (who follows me) “yup, FF3 crashes for me on a daily basis.”

Now this isn’t THAT amazing, I mean Ricardo follows me, knows me in RL (Real Life) and also uses FF. However when I re-connected I received a Tweet direct from @Firefox_Answers “Firefox crashes can be from add-ons Try Safe Mode http://is.gd/PCw If fixed, disable add-ons one by one to find the culprit”

When did you last feel that you were being listened to by a technology company (without paying huge support), and wouldn’t you love as a corporation in any industry to be able to turn the negative vibe of the water cooler into a positive experience for your brand? I’m impressed.

How do they do it? Well Twitter search (formally summize) lets you search key words across all public conversations. It’s how I keep track of Lotus Connections and what’s happening out there and have made lots of useful contacts in IBM.

Unfortunately despite following all the advice, completely de-installing and re-installing, FF3 crashes multiple times a day and remains highly unstable for me personally, although many others don’t have my experience so I wouldn’t let it stop you trying it if you haven’t yet.

 
August 18th, 2008
 

The purpose of life is to live it, to taste experience to the utmost, to reach out eagerly and without fear for newer and richer experience. Eleanor Roosevelt (1884 - 1962)

It’s been a little while since I’ve returned to this series, but with a few minutes to spare I thought I’d continue on refactoring your digital life.  To recap, the steps so far are:

Step 1: Get a better browser

Step 2: Explore your mail hosts options and consolidate your mail into fewer accounts

Step 3: Update your blog software and template

Step 4: Be consistent and be you!

Step 5: Evolve your digital life

Step 6: Interoperate and connect

What does all this mean? Well if you can’t be bothered re-reading all the posts, my steps towards digital re-factoring are essentially around updating your tools and your on-line identity.  Put yourself out there with your best foot forward and don’t be afraid to be you and use the best available tools to make your life easy.

At this point, much of what I’ve been suggesting has been internally focussed on streamlining your own identity and resources.  With this in place, you’re now ready for step 7; reach out and connect to new people.

There is no easy answer to the question “How do I build my online network?”.  Ultimately you need to figure out what works for you; still I have a few tips that you can explore.

  1. Join Twitter, then use Twitter search.  Twitter is an micr-blogging service which is a little confusing until you get the hang of it.  If you’re new to Twitter, I recommend that you set-up your account, download Twhirl (a good Twitter client that makes it a bit easier for a newbie user to get their head around Twitter) and start following people.  If you don’t know who to follow, then use the twitter search to look for things your interested in, then start joining the conversation; before you know it you’re part of a bigger community and participating in ongoing conversations.
  2. Use a service like Technorati to find other bloggers who are writing about things you’re interested in.  This can be a challenge (because you’ll be hit by a flood of content) but find a few interesting bloggers and again, join in the conversation by commenting on their blog and providing links back to your own.

Let me know how you’re steps towards re-factoring your own digitial life are going and if there is anything in here of interest.

As I’ve matured through experience in the use of social media, I’m impressed by the number of times that this can be leveraged into supporting “real work”. My most recent post (which I’ve created as a page so it stays retains relevance) on the 10 Principles for Enterprise Social Software Adoption is a great example of this.

As a Twitter user, I’ve been tracking the usage of Lotus Connections and the buzz around it as approached its version 2.0 launch using Summize, (now Twitter Search). I set up a custom filter search which I shared with the community (through Twitter again) which let me monitor various tweets.

A couple of things came together. I tweeted about the fact I was working on the principles for Social Software adoption for my employer, and @Idonotes asked if I’d share which I was happy to do.

Through monitoring Twitter I also came to “know” at @lbenitez , a passionate evangelist for Lotus Connections. He tweeted about discussing principles for Lotus Connections and I shared the post I’d made on my blog here. Luis provided some feedback and so I took this on board and then we moved our collaboration into the real world, setting up a phone call and a discussion.

Luis took on the “job” of road testing these with his clients, while I shopped them around internally and on the blog. As a result of this collaboration I think we’ve acheived a great outcome and one that demonstrates how social networking can help you produce an outcome. I believe the new principles are now more sound than anything I’d of produced individually, my employer benefits, Luis has benefited and hopefully the community also benefits.

 
July 24th, 2008
 

As some of you may know, I’ve been based in London on secondment for the last 10 1/2 months, this came to an end as at 29th July and I’ve since been relocating with my family back to Melbourne, Australia - my home town.

A combination of facts, including holidays, lots of house priorities and a lack of broadband at home for a couple of weeks has prevented me from blogging for a while.  Things are starting to settle and I think I’ll be back in business soon.

I have continued to participate in the community however and am taking a bigger interest in the Australian Web 2.0 community which is very active and has really matured in the 10 months I’ve been away. Either that, or maybe I’m just more in tune with it, I’m not sure.  In doing so I’ve engaged in some debates through comments on a couple of blogs, something which led to me being quoted on one blog as “Tim Bull from my employer“.

I’m not ashamed of my employer at all, I’m proud to work for them and if you want to check out my LinkedIn profile, they feature prominately.  However I have always had an implicit editorial policy that I never mention them, not least in part because ultimately the ideas expressed here are mine and don’t represent those of my employer.  Actually if I was found to be representing the view of my employer, that could be cause for an issue given what we do, so I’ve always kept the two things separate — my personal blog where I expound my own ideas and theories on things and participate in the community, and my professional profile which is me at work.

Consequently, I decided an implicit policy was not enough, so I’ve now written one which you can find here.

It’s nothing special, but the time has come to make explicit the distinction between my professional opinion (although it may draw on my personal experience) and my personal opinion (although it may be shaped by my professional experience).

The first draft of the Architectural Principles for Enterprise Social Software was posted here. I invited feedback and was fortunate to get some comments from Luis Benitez, an IBM architect who deals with Lotus Connections who also then commented and expanded on these further in his own blog with a post 10 architectural principles for social software. I’m going to carry the conversation one step further and refine them again now.

First, a little bit more background. When we (myself and the team I work with) define architectural principles, one of the good pieces of guidance we use in drafting them, is that each principle must be able to be expressed as a counter argument. Why? Because this is something that guidance is therefore required on, and will generate a conversation with the business and help get to the root requirement. If no conversation is required, then it’s probably not a principle (it’s more likely to be a fact). The proviso I’d put around this is that one organisations “fact” will be another organisations “principle”, so you need to consider your requirements and if these principles here apply. For example, the Principle “Configuration not Customisation” does have a counter in our business where they would consider highly customising an off-the-shelf solution and have typically done so in the past, whereas in your business, it may not ever happen.

Applying this rule, I think that we can further refine two of Luis’ principles into one, because at the moment, while they are sound, they are also (at least for our organisation) “fact”; i.e if Internationalisation was available, no-one would say “don’t do it”, and equally with the UI, no-one would say “lets design a complex UI that requires lots of training”. So with that background, here are my 9 core principles from my original (7) and then Luis post (3 combined down to 2) plus a draft of a new one to bring the total to 10!

All this needs now is a review of a few eyes and I think a re-order perhaps to reflect importance a bit better.

Principle 1: Limit Social Software Data to Basic Security (Username/Password) Only

Rationale: Social software is by it’s very nature social! While user security is important, information requiring complex, 2-Factor security solutions is generally not considered appropriate for how social software will be used. In general, open read access is preferable.

Principle 2: Social Software should use Authoritative Sources for relevant Information.

Rationale: Internally we store a lot of information about users, including their phone numbers, contact details etc., we shouldn’t require them to re-key this and it should be updated automatically.

Principle 3: Simple Ubiquitous Online Access

Rationale: Social Software should be considered an online access solution (ie. limited facility to access the information in an off-line capability), but access should be facilitated from multiple points, not just a browser.

Principle 4: Global Sharing (largest number of users)

Rationale: The value of a trusted network dynamically increases with its size http://en.wikipedia.org/wiki/Metcalfe’s_law

Principle 5: Modular, Highly Integrated Services

Rationale: Services should be designed to maximise simple re-use and allow users to mashup up modules to meet their specific requirements. Common standards support is key to enable this.

Principle 6: Configuration not Customisaton

Rationale: Social Software is rapidly evolving, we should only configure the software, not customise it t allow rapid roll-up to future versions and capabilities as these improve.

Principle 7: Build for Rapid Growth

Rationale: Social Software is difficult to control and pilot, we should be prepared for a rapid uptake and changing usage patterns. Effectively this means build with added headroom above what you might normally size for a production system.

Principle 8: By the People, For the People

Rationale: Social software is designed to be used by the people and for the people, we must be very clear on the aim and purpose of the system and remove barriers to adoption that prevent and hinder people sharing information with each other.  This includes promoting Internationalisation and Ease-Of-Use UI’s which facilitate easy use (no-one ever received training on LinkedIn).  The counter to this is that we have an Enterprise Centric Approach where the information and it’s use is driven and mandated by the Enterprise which is quite different in principle.  This is not saying Enterprise Information has no place, it does (see Principle 2), it just means that the Enterprise is not the end consumer of the information (it may be the benefactor), people are.

Principle 9: No User Content Creation Work-Flow

Rationale: Social software solutions promote the sharing of information and activities, deriving value from the flow of this information through the eco-system. Approval processes hinder the value of this conversation, reducing the incentive to participate in the system. Strong requirements for content-creation work-flow potentially suggest that either social software is the wrong solution for the business, or that the business is not yet culturally aligned with social software.

Principle 10: People not Documents

Rationale: Social Software is about people connecting to people and discovering and carrying on a conversation. It’s not a document centric publishing and storage platform (although it may potentially extend to that if documents aid the conversation).

Some of the earliest posts on this blog were about how powerful location aware services could be.  I spoke about Mobile Mashups and SOA, as well as Location Based Services (LBS) and AGPS and finally the value of Location (and how I thought it was relevant, but not quite sure what to do with it).  You’ll notice this is “so long ago” in Internet History (last year) that I refer to Touchstone, now called Particls.

So it’s with great interest that I can see some of the things I was blogging and thinking about beginning to become a reality.  I was a user of Plazes for a while, but ultimately gave it up because to some extent I just didn’t get it and I think having seen BrightKite now, it was missing the fine-grained access I needed to feel comfortable at that time (it may have it now I haven’t re-checked).

BrightKite is a very compelling and interesting service, provides reasonable privacy settings, but also links in to Twitter by default to set either your location or tweet it.  I’m going to see how it evolves, but I can see BrightKite becoming part of my tweeting in the future (especially when I get a new phone in the next couple of months).  It will potentially be my photo-log of where and what I’m doing, auto-feeding this in to Twitter as appropriate, while I’ll use Twitter directly through it’s various other clients for my 140 character tweets on the world and the community.

Another interesting feature of BrightKite is FireEagle. FireEagle sounds like it’s the DataPortability answer to Location Based Services, an open exchange for location information and the fact that a player like Yahoo is making a move in this space suggests we are at the cusp of big things to come.

Dopplr also adds to the picture of location based services, although in this case Dopplr fulfills a “Where am I going” rather than a “Where am I” feature.

I speculated early on, that LBS would potentially be of use for the Enterprise, but I couldn’t quite touch on the use.  The big area I could see is staying in touch with the people who are part of your Enterprise as they move around, with BrightKite and it’s GEORSS feeds, Dopplr and it’s “where am I going to be” and services like FireEagle, I can see that in the next 6 - 12 months, this will start to become a reality.

To paraphrase myself from over twelve months ago:

As Architects, understanding how location works and what location information is needed to tie the system together will be critical steps that can be taken now to ensure early mover advantage when it finally becomes a reality.

We are considering implementing some Social Software so have drafted a series of Architectural Principles to help govern the planning for this. I tweeted on this and was followed up by @IdoNotes
asking if I was willing to share these, so here they are. I’d really welcome any feedback, good bad or in-different, particularly if you have implemented something similar internally.

I’ve removed a lot of the background information here and just shared the key points that are generally relevant (there are a couple of principles I’ve skipped which are just too specific to our circumstances).  There are also other more general architectural principles that we would under-pin these with, for example “Buy Not Build” but these are not included here.

Similar to these, there are some related business principles we’ve proposed for consideration that are not technical in focus, I’ll share these separately.

Principle 1:  Limit Social Software Data to Basic Security (Username/Password) Only

Rationale:  Social software is by it’s very nature social! While user security is important, information requiring complex, 2-Factor security solutions is generally not considered appropriate for how social software will be used.  In general, open read access is preferable.

Principle 2: Social Software should use Authoritative Sources for relevant Information.

Rationale: Internally we store a lot of information about users, including their phone numbers, contact details etc., we shouldn’t require them to re-key this and it should be updated automatically.

Principle 3: Simple Ubiquitous Online Access

Rationale: Social Software should be considered an online access solution (ie.  limited facility to access the information in an off-line capability), but access should be facilitated from multiple points, not just a browser.

Principle 4: Global Sharing (largest number of users)

Rationale: The value of a trusted network dynamically increases with its size http://en.wikipedia.org/wiki/Metcalfe’s_law

Principle 5: Modular, Highly Integrated Services

Rationale: Services should be designed to maximise simple re-use and allow users to mashup up modules to meet their specific requirements.  Common standards support is key to enable this.

Principle 6: Configuration not Customisaton

Rationale: Social Software is rapidly evolving, we should only configure the software, not customise it t allow rapid roll-up to future versions and capabilities as these improve.

Principle 7: Build for Rapid Growth

Rationale: Social Software is difficult to control and pilot, we should be prepared for a rapid uptake and changing usage patterns. Effectively this means build with added headroom above what you might normally size for a production system.

Two ideas have converged.  Elias Bizannes wrote about the Value Chain for Information which I have been thinking about, then I saw Sacha Chua’s Web2.0 @ Work which was done with a Nintendo DS and got really excited about wanting to make something similar. The main difference is I wanted to try make mine as an actual movie, rather than a series of slides.

I give you the Value Chain for Information - The Movie!

This is my first attempt at using a Nintendo DS to create a presentation and I’ve learnt a few things on the way.  I’d do it differently next time (For example, the each stroke ends up as one frame so I’d use more strokes!  On the Nintendo there are lovely sweeping wipes of each screen, but you don’t see these as they are a single frame in the movie), I’d also probably use some more colours! But I’m content enough for a first attempt. Sacha has a great guide here that tells you how to do it, I also used Wired’s more detailed Wiki as well.

I hope you enjoy it and that it adds some value along the way to Elias idea which is growing on me as I consider it further.

Oh what a tangled web we weave… - Sir Walter Scott

Ok, so perhaps I’m not practicing to decieve (the full quote is “Oh what a tangled web we weave, when first we practice to decieve”), but still, the web is tangled regardless.

I posted on Why Enterprises are Sucker-punched by Web2.0 earlier which got me thinking about what the complexity and interaction on the web really looks like so I thought I’d further illustrate that the web is an eco-system by trying to map out my own little corner of the web.  This brings me nicely on to the next topic of my re-factor your digital life series which is to Interoperate.

But first, here is my little eco-system:

As you can see, it’s a tangled web indeed. This is really only what I consider my core on-line presence, I haven’t really included other services that I don’t use (Plaxo), are incidental in nature only (Feedjit), I still intend to get rid of (Jaiku), or are more personal in nature (for example Dopplr also links to my family blog).  I also haven’t shown the series of feeds etc. that keep me on top of what’s going on.

The coloured dots represent the direct inputs into the system, either mobile, through a PC client or via the Web.

The dotted lines show the various automated data feeds between the systems.

The solid lines show the direct links and click-throughs.

A few comments on all of this:

  • The hub of my presence is now this blog.  All relevant services feed into and can be reached from this blog.  I’ve tried to close the loop.  It’s paying off, a contact from IBM commented today he had seen the blog because he linked to it when we connected on LinkedIn.
  • Actually it’s not as complex as it looks in some respects because much of the networking below the interface layer is now self tending and it’s actually contextual in terms of time and place at the input layer.

Of course, the choice of services is not as random as it might appear.  I’ve been putting a bit of thought into the core services I want to use and why.

  • Wordpress (binaryplex.com) - Drives this blog and is very customisable to let me link in my other on-line presences in a nice, clean template.  This blog represents to some degree what I am thinking about and exploring where I can share and learn from others.
  • Twitter - I use Twitter because it keeps many of my profiles “fresh”, for example, even if I don’t post daily, the Flash badge on BinaryPlex let’s you know I’m still around.  TwitterFeed promotes my blog entries in Twitter to those contacts, while TwitterSync means that my FaceBook status is always fresh and up to date.  I’m also learning lots and making connections with Twitter (especially since I discovered Summize which lets me discover people and conversations I might be interested in).
  • Dopplr - My main purpose for blogging and my on-line presence is ultimately to connect with people around ideas.  Dopplr gives me the opportunity to take this one step further and potentially lead into the physical space as well.
  • LinkedIn - People’s mileage on LinkedIn will vary, but for me, it’s a better address book, which has the advantage that you update your contact details without me needing to keep track of you.  With many sites adding LinkedIn support it’s a nice way to get set up with new sites and quickly find friends you want to invite or who already use a service and you connect to.  Finally, it’s the other half of my on-line presence - if Binaryplex.com is what I’m thinking and doing, then LinkedIn is a more professional, consolidated record of what I’ve done.
  • Del.icio.us - I could use Ma.gnolia.com, I’m used to del.icio.us, it does what I need and others I work with use it too.  My challenge on the social bookmarking front is that with a trial of an internal bookmark service in DogEar now, I’m struggling to figure out how to manage both services — I want my bookmarks external, but I recognise the value internally for people who won’t use a service like del.icio.us.
  • Facebook - Actually I don’t really use Facebook much at all anymore, I got sick of the spam and generally speaking the people I want to connect with on a more serious level aren’t on there anyway.  With TwitterSync, my Facebook friends get a live update on me and what I’m up to, I’ve turned down all the notifications and I go on-line occasionally to connect socially with some of the people that I don’t find in other spheres.

So that’s step 6, inter-operate, plug and connect to make a more streamlined, connected on-line presence.

Step 1: Get a better browser

Step 2: Explore your mail hosts options and consolidate your mail into fewer accounts

Step 3: Update your blog software and template

Step 4: Be consistent and be you!

Step 5: Evolve your digital life

Step 6: Interoperate and connect

« Previous Entries