Friday, 8 October 2010

Tungle + Confluence

A few days ago IBM announced support for integrating LotusLive with the excellent service for scheduling appointments with external parties.  Not being one to let IBM have all the fun I created a User Macro to embed in Atlassian's Confluence wiki.

Register a account
Visit and follow the on-screen instructions.

Create a User Macro
  1. Login to Confluence as a user with admin privileges
  2. Select Browse -> Confluence Admin -> User Macros
  3. Create a new User Macro with the following details:
Macro name: tungle
Macro body: unchecked
Output: Macro generates HTML markup

#set ($user = ($paramuser))
#if ($user)
  <img src="${user}/busyicon" class="tungle-me" teml="${user}"/>
  <script src="" type="text/javascript"></script>
  <div class="errorBox">You must specify a <strong>user</strong> parameter.</div>

Add the Macro to a Page
Edit any Confluence page in the normal way and add the following code:


where <username> is your username, e.g.


This will give you the following on your wiki page:

and when you click "schedule a meeting" you will see:

If you don't specify a "user" parameter then you will get: has a number of synchronisation integrations with calendar services - LotusLive, Lotus Notes, Google Calendar, Outlook, Entourage, Exchange - and embedding the widget in your website is a great way of making it easy for people outside your organisation to schedule appointments.

Saturday, 2 October 2010

Google Moderator + Confluence Take 2

A while ago I posted how to integrate Google Moderator with Confluence , but it was a hard-coded solution which would only embed one Moderator series.  After (finally) getting off my backside I've now got an improved User Macro which allows you to enter the URL of any Moderator series as a parameter to the macro.

Most of the steps are the same as the previous blog post , but the template for the macro has been changed from:

<div id="moderator-embed-target"></div>
<script type="text/javascript">
var mod = new MODERATOR("[ID of your Moderator series]);
mod.hl = "en";
mod.width = 1000;
mod.height = 500;


#set ($url = ($paramurl))

#if ($url)
  <div id="moderator-embed-target"></div>
  <script type="text/javascript">
    var mod = new MODERATOR("${url}");
    mod.hl = "en";
    mod.width = 1000;
    mod.height = 500;
  <div class="errorBox">You must specify a <strong>url<strong> parameter.<div>

This small change now allows you to enter something similar to:


into the body of a Confluence page, where the URL is just copied and pasted from the home page of your Google Moderator series.  This results in:

If you forget to enter a URL parameter by just entering:


you will be presented with:

I still need to work on turning this into a "proper" plugin or Open Social gadget, but it's more flexible than the old macro.

FOOTNOTE:  I didn't use $generalUtil.urlEncode($paramurl) in the macro as when the URL is encoded the macro fails to render.

Saturday, 18 September 2010

Fat Firestarter

I'd previously blogged about the AppFire Firestater and got a comment about it being a tad bulky and its size would mean it would block devices from being able to be plugged into the neighbouring USB port.

It is bulky, it does block access to the neighbouring USB port and I was fine with swapping USB devices for a while, but I use AppFire Firestarter so often that it was becoming a pain to keep having to shut everything down on Firestarter to unplug it so I could use another device.

A quick rummage around my box of cables (all geeks have boxes of cables, right?) and I found this:

a very short USB extension cable which means I can plug in multiple USB devices and is still small enough for me to take my Firestarter everywhere.

Not the most exciting blogpost I know, but shows there are ways around Firestarter's slightly chubby form factor if you need to run multiple USB devices side by side.

I don't know where I got the cable from (would have been bundled with some other USB device I purchased), but if you don't have one then you can buy them separately for around £1.

Sunday, 12 September 2010

Firestarter - Part 1

About a week ago I received delivery of my AppFire Firestarter, which is a portable (USB) wiki appliance that runs Atlassian Confluence and allows peer to peer and remote sync with a Confluence server.

This post is about the basics, but I'll continue the series with how to get the complete Atlassian stack on Firestarter.

For those that don't know what Firestarter is, this is what one looks like:

I love the simplicity of this device, you plug it in and it just works and is a great way of giving you offline access to a Confluence wiki, or even a sandbox for development.

When you plug it in this is what you see in Finder:

then you just double-click "firestarter-start-stop.jar" and wait until you see:

You click the "localhost" link and you're up and running.

Sarah Maddox has a more detailed write up on her blog, but my post is just a starter for 10 as this series is about getting the entire stack on your Firestarter.

Saturday, 11 September 2010

The New Thing

I said I'd keep you posted over at (Time for Something New) on what I was up to and never one to break my word, here's the news.

I've signed with AppFusions, which is an Atlassian partner specializing in everything Atlassian and integrating Atlassian products such as Confluence and JIRA with 3rd party systems.

The AppFusions team are "off the chart smart" and if you are looking for collaboration solutions, project management solutions, helpdesk solutions, content management solutions (we do more, my brain just melted trying to think of everything we do) then you should contact AppFusions.

I am truly privileged to be part of this team and hope I can bring as much to the table as they do.

Monday, 30 August 2010

It's a Team Game

Walking home the other night I happened to take a detour through Pencoedtre playing fields, which was home to the Barry Wolves football (soccer) team that I played for as a kid and it got me thinking about the team's ethos and how it could apply to teams in general.

Whereas pretty much every other team in the league had strict rules about passing trials in order to be able to join them, identified their stars who would play no matter what and would leave other kids on the bench on match day, Barry Wolves were different.  Their ethos was:

  • No trials
  • You turn up for training, you play on match day
  • You don't train, you don't play on match day - no matter how good you are
  • You don't always have to be goalie if you fancy trying centre forward
  • No stars, no blame - you win as a team, you lose as a team
We weren't the best team in the league, but the inclusive nature of the team meant that everyone felt involved, there was a real team spirit and we enjoyed being part of the team.

How could this apply to teams in general?

Give People a Chance
You don't necessarily have to make someone prove themselves before letting them join a team.  If they're enthusiastic then let them prove themselves as part of that team.

You Don't Learn from Being on the Sidelines
If someone is putting the effort in to learn and practice skills in their own time or outside of an official project then give them the opportunity of working on an official project as they will learn far more on a real project and "being in the game".

It's a 2-way Street 
Everyone should be working on developing and improving their skills and if someone isn't doing that then they have no right to complain about not being given a role on a project.

Mix it Up
Just because someone has been a developer it doesn't mean they can't have a go at being a system administrator or a UI designer if they want to.  You can learn a lot from trying different roles and giving system administration a go for a while can make you a better developer.

Never Point the Finger
If a project fails it's because the team failed and not because of any one person.  Sure someone may have dropped the ball on something, but a team will help that person pick it up to keep the project on track.  If you start pointing fingers you fragment the team and increase the risk of failure on the next project.

What I'm trying to say is being involved in team sports as a kid can teach you a lot, but having experience of teams that like to do things differently teaches you even more.

Monday, 16 August 2010

Google Moderator + Confluence

I'm late to the party on discovering Google Moderator, but it looks like a very easy way to capture, vote on and then prioritise requirements, ideas and suggestions.  Which always seems to have been a problem for all the organisations I've worked for, as it was whoever shouted loudest or whoever was the "VIP" got what they wanted rather than development effort being focused on the features that would benefit the majority of users.

Posts on Google Moderator tend to be very high-level and the teams I've worked with capture more detailed requirements using Atlassian Confluence so I wanted to have a play with embedding Google Moderator into Confluence - which turned out to be really easy for a basic integration.

Here's what you need to do:

Add the Google Moderator Javascript to a Main Layout
  1. Login as the owner of a Confluence Space
  2. Navigate to Browse -> Space Admin -> Layout
  3. Select Create Custom next to Main Layout

Then add the following to the <head> section of the Main Layout:

<script src="" type"text/javascript">

Create a User Macro

You don't need to do this, but I decided to create a User Macro so people could embed Google Moderator with a simple {moderator} macro rather than needing to know the Javascript code for embedding directly.

  1. Login as a Confluence Administrator
  2. Navigate to Browse -> Confluence Admin -> User Macros -> Create a User Macro
  3. Populate with the following information:
Macro Name: moderator
Macro Body: unchecked
Output: Macro generates HTML markup
<div id="moderator-embed-target"></div>
<script type="text/javascript">
var mod = new MODERATOR("[ID of your Moderator series]);
mod.hl = "en";
mod.width = 1000;
mod.height = 500;


Use the {moderator} Macro on a Page

Just edit a page in the normal way and add the {moderator} macro to the page.

View the Results

Next Steps

The above works quite well for a basic integration, but I'd like to have more control over the look and feel of Google Moderator on a page so I'm going to see if I can create a Confluence plugin or OpenSocial gadgets using the Google Moderator API.

Monday, 24 May 2010

Time for Something New

After 7 years working for Information Services at Cardiff University and 12 years working for Cardiff University in total I've decided it's time for a change and to do something new.  There are many reasons why I've decided it's time for a change, but as I struggle to find the words to explain I keep getting drawn back to this quote from Scott Berkun:
"Pick something. Do it with all your heart. If you can’t keep your heart in it, do something else."
It's not the quote that made me decide to leave Cardiff University as I'd made the decision long before stumbling across it, but it describes my main reason for leaving in a better way than I ever could.

Over the years I've had the pleasure of working with incredible people from both within the University and externally and if you're reading this I want to say THANK YOU - I couldn't have achieved the things I have without your help and support and you're the reason this decision has taken me so long to take and the reason that meant I couldn't take this decision lightly.  

It's been a wild ride working for Cardiff University and there's only one way I can think of summing up my time at Cardiff.  From Lock, Stock & Two Smoking Barrels:
"It's been emotional"